Skip to content

Build and Test

Build and Test #318

Workflow file for this run

name: Build and Test
on:
push:
pull_request:
branches: [ "main" ]
workflow_dispatch:
release:
types:
- created
schedule: # Every day at the 2 P.M. (UTC) we run a scheduled nightly build
- cron: "0 14 * * *"
env:
CARGO_TERM_COLOR: always
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build:
name: build (${{ matrix.config.arch }})
strategy:
matrix:
config:
- os: windows-latest
arch: win-x64
- os: windows-latest
arch: win-x86
- os: ubuntu-latest
arch: linux-x64
- os: macos-latest
arch: macos-arm64
- os: macos-13
arch: macos-x64
runs-on: ${{ matrix.config.os }}
steps:
- uses: actions/checkout@v4
- name: Install libudev for Linux
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y libudev-dev
- name: Set target
run: |
if [[ "${{ matrix.config.arch }}" == "win-x86" ]]; then
echo TARGET="--target i686-pc-windows-msvc" >> $GITHUB_ENV
else
echo TARGET="" >> $GITHUB_ENV
fi
shell: bash
- name: Build
run: cargo build --release ${{ env.TARGET }}
- name: Run tests
run: cargo test --release ${{ env.TARGET }} --verbose
- name: Run help
run: cargo run --release ${{ env.TARGET }} -- --help
- name: Prepare artifacts
run: |
if [[ "${{ matrix.config.arch }}" == "win-x64" ]]; then
WLINK_EXE="target/release/wlink.exe"
elif [[ "${{ matrix.config.arch }}" == "win-x86" ]]; then
WLINK_EXE="target/i686-pc-windows-msvc/release/wlink.exe"
else
WLINK_EXE="target/release/wlink"
fi
mkdir wlink-${{ matrix.config.arch }}
cp $WLINK_EXE wlink-${{ matrix.config.arch }}
cp README.md wlink-${{ matrix.config.arch }}
shell: bash
- uses: actions/upload-artifact@v4
with:
name: wlink-${{ matrix.config.arch }}
path: wlink-${{ matrix.config.arch }}
- name: Prepare Release Asset
if: github.event_name == 'release'
run: |
if [[ "${{ runner.os }}" == "Windows" ]]; then
7z a -tzip wlink-${{ github.event.release.tag_name }}-${{ matrix.config.arch }}.zip wlink-${{ matrix.config.arch }}
else
tar -czvf wlink-${{ github.event.release.tag_name }}-${{ matrix.config.arch }}.tar.gz wlink-${{ matrix.config.arch }}
fi
shell: bash
- name: Upload Release Asset
uses: softprops/action-gh-release@v2
if: github.event_name == 'release'
with:
fail_on_unmatched_files: false
files: |
wlink-*.tar.gz
wlink-*.zip
nightly-release:
needs: build
runs-on: ubuntu-latest
if: github.event_name == 'schedule'
steps:
- name: Download Artifacts
uses: actions/download-artifact@v4
with:
path: ./
- name: Prepare Nightly Asset
run: |
ls -R ./
for f in wlink-*; do
echo "Compressing $f"
if [[ $f == wlink-win* ]]; then
zip -r $f.zip $f
else
tar -czvf $f.tar.gz $f
fi
done
ls ./
- name: Update Nightly Release
uses: andelf/nightly-release@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: nightly
name: "wlink nightly release $$"
draft: false
prerelease: true
body: |
This is a nightly binary release of the wlink command line tool.
For Windows users, please use the x86 version since it has the Windows driver support.
files: |
wlink-*.tar.gz
wlink-*.zip