CI #801
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | |
push: | |
pull_request: | |
workflow_dispatch: | |
# Run automatically every monday | |
schedule: | |
- cron: 1 12 * * 1 | |
name: CI | |
jobs: | |
clippy: | |
name: Clippy | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: libgtk-4-dev build-essential | |
version: 2 | |
- name: Install toolchain | |
run: | | |
rustup toolchain install stable | |
rustup default stable | |
- uses: Swatinem/rust-cache@v2 | |
- name: Run clippy | |
run: cargo clippy -- --deny warnings | |
build_and_test: | |
name: Build and test | |
strategy: | |
fail-fast: false | |
matrix: | |
os: ['macos-latest', 'ubuntu-latest', 'windows-latest'] | |
rust: ['stable', '1.75'] | |
runs-on: ${{ matrix.os }} | |
env: | |
VCPKG_COMMIT: 01f602195983451bc83e72f4214af2cbc495aa94 # 2024.05.24 release | |
VCPKG_INSTALLED_DIR: ${{ github.workspace }}/vcpkg/installed | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install toolchain | |
run: | | |
rustup toolchain install ${{ matrix.rust }} | |
rustup default ${{ matrix.rust }} | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
env-vars: VCPKG_COMMIT | |
if: runner.os == 'Windows' | |
- uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: libgtk-4-dev build-essential | |
version: 2 | |
if: startsWith(matrix.os, 'ubuntu-') | |
- name: Install dependencies (macOS) | |
run: brew install gtk4 | |
if: matrix.os == 'macos-latest' | |
- name: Install cargo-all-features | |
run: cargo install cargo-all-features | |
- name: Install cargo-wix (Windows) | |
uses: taiki-e/cache-cargo-install-action@v2 | |
with: | |
tool: cargo-wix | |
if: matrix.os == 'windows-latest' | |
- name: Install cargo-license (Windows) | |
uses: taiki-e/cache-cargo-install-action@v2 | |
with: | |
tool: cargo-license | |
if: matrix.os == 'windows-latest' | |
- name: Install dependencies (Windows) | |
uses: lukka/run-vcpkg@v11 | |
with: | |
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }} | |
runVcpkgInstall: true | |
doNotCache: false | |
if: matrix.os == 'windows-latest' | |
- name: Set PKG_CONFIG (Windows) | |
run: echo "PKG_CONFIG=$env:VCPKG_INSTALLED_DIR/x64-windows/tools/pkgconf/pkgconf.exe" | Out-File -FilePath $env:GITHUB_ENV -Append | |
if: matrix.os == 'windows-latest' | |
- name: Set PKG_CONFIG_PATH (Windows) | |
run: echo "PKG_CONFIG_PATH=$env:VCPKG_INSTALLED_DIR/x64-windows/lib/pkgconfig" | Out-File -FilePath $env:GITHUB_ENV -Append | |
if: matrix.os == 'windows-latest' | |
- name: Set PATH (Windows) | |
run: echo "$env:VCPKG_INSTALLED_DIR/x64-windows/bin" | Out-File -FilePath $env:GITHUB_PATH -Append | |
if: matrix.os == 'windows-latest' | |
- name: Build | |
run: cargo build --release | |
- name: Test | |
run: cargo test | |
if: runner.os != 'Linux' | |
- name: Test under XVFB (Linux) | |
run: xvfb-run cargo test | |
if: runner.os == 'Linux' | |
- name: Check all feature combinations are buildable | |
run: cargo check-all-features | |
- name: Compile glib schemas (Windows) | |
run: | | |
& "$env:VCPKG_INSTALLED_DIR/x64-windows/tools/glib/glib-compile-schemas.exe" "$env:VCPKG_INSTALLED_DIR/x64-windows/share/glib-2.0/schemas" | |
if: matrix.os == 'windows-latest' | |
- name: Gather licenses (Windows) | |
# If the default shell is used, one command failing does not fail the action. | |
shell: bash | |
run: | | |
pip install license-expression | |
python -X utf8 wix/rust_licenses.py > wix/LICENSE-static-libraries.txt | |
python -X utf8 wix/vcpkg_licenses.py > wix/LICENSE-dynamic-libraries.txt | |
if: matrix.os == 'windows-latest' | |
- name: Generate components (Windows) | |
run: | | |
python wix/generate_components.py | |
if: matrix.os == 'windows-latest' | |
- name: Build installer (Windows) | |
run: cargo wix --no-build --nocapture -v | |
if: matrix.os == 'windows-latest' | |
- name: Upload binary | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Binaries for ${{ matrix.os }} | |
path: | | |
target/release/packetry | |
target/release/packetry.exe | |
target/release/packetry-cli | |
target/release/packetry-cli.exe | |
if-no-files-found: error | |
if: matrix.rust == 'stable' | |
- name: Upload installer (Windows) | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Windows installer | |
path: | | |
target/wix/*.msi | |
if-no-files-found: error | |
if: runner.os == 'Windows' && matrix.rust == 'stable' |