Skip to content

CI

CI #801

Workflow file for this run

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'