diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index c74a4b7..13f4c48 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -10,149 +10,87 @@ env: CARGO_TERM_COLOR: always jobs: - build-linux: - + fmt: + name: Formatting runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: install dependencies - run: | - sudo apt-get update - sudo apt-get install libx11-dev libxtst-dev - sudo apt-get install libadwaita-1-dev libgtk-4-dev - - name: Build - run: cargo build --verbose - - name: Run tests - run: cargo test --verbose - - name: Check Formatting - run: cargo fmt --check - - name: Clippy - run: cargo clippy --all-features --all-targets -- --deny warnings - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: lan-mouse - path: target/debug/lan-mouse - - build-windows: - - runs-on: windows-latest + - uses: actions/checkout@v4 + - name: cargo fmt + run: cargo fmt --check + ci: + name: ${{ matrix.job }} ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + - windows-latest + - macos-latest + - macos-15-intel + job: + - build + - check + - clippy + - test steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.11' - # needed for cache restore - - name: create gtk dir - run: mkdir C:\gtk-build\gtk\x64\release - - uses: actions/cache@v3 - id: cache - with: - path: c:/gtk-build/gtk/x64/release/** - key: gtk-windows-build - restore-keys: gtk-windows-build - - name: Update path - run: | - echo "PKG_CONFIG=C:\gtk-build\gtk\x64\release\bin\pkgconf.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - echo "C:\pkg-config-lite-0.28-1\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - echo "C:\gtk-build\gtk\x64\release\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - echo $env:GITHUB_PATH - echo $env:PATH - - name: Install dependencies - if: steps.cache.outputs.cache-hit != 'true' - run: | - # choco install msys2 - # choco install visualstudio2022-workload-vctools - # choco install pkgconfiglite - py -m venv .venv - .venv\Scripts\activate.ps1 - py -m pip install gvsbuild - # see https://github.com/wingtk/gvsbuild/pull/1004 - Move-Item "C:\Program Files\Git\usr\bin" "C:\Program Files\Git\usr\notbin" - Move-Item "C:\Program Files\Git\bin" "C:\Program Files\Git\notbin" - gvsbuild build --msys-dir=C:\msys64 gtk4 libadwaita librsvg - Move-Item "C:\Program Files\Git\usr\notbin" "C:\Program Files\Git\usr\bin" - Move-Item "C:\Program Files\Git\notbin" "C:\Program Files\Git\bin" - - name: Build - run: cargo build --verbose - - name: Run tests - run: cargo test --verbose - - name: Check Formatting - run: cargo fmt --check - - name: Clippy - run: cargo clippy --all-features --all-targets -- --deny warnings - - name: Copy Gtk Dlls - run: Get-Childitem -Path "C:\\gtk-build\\gtk\\x64\\release\\bin\\*.dll" -File -Recurse | Copy-Item -Destination "target\\debug" - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: lan-mouse-windows - path: | - target/debug/lan-mouse.exe - target/debug/*.dll + - uses: actions/checkout@v4 + - uses: Swatinem/rust-cache@v2 + - name: Install Linux deps + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install libx11-dev libxtst-dev libadwaita-1-dev libgtk-4-dev + - name: Install macOS dependencies + if: runner.os == 'macOS' + run: brew install gtk4 libadwaita imagemagick + - name: Install Windows Dependencies - create gtk dir + if: runner.os == 'Windows' + run: mkdir C:\gtk-build\gtk\x64\release + - name: Install Windows Dependencies - install gtk from cache + uses: actions/cache@v3 + if: runner.os == 'Windows' + id: cache + with: + path: c:/gtk-build/gtk/x64/release/** + key: gtk-windows-build + restore-keys: gtk-windows-build + - name: Install Windows Dependencies - update PATH + if: runner.os == 'Windows' + run: | + echo "PKG_CONFIG=C:\gtk-build\gtk\x64\release\bin\pkgconf.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + echo "C:\pkg-config-lite-0.28-1\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + echo "C:\gtk-build\gtk\x64\release\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + echo $env:GITHUB_PATH + echo $env:PATH + - name: Install Windows dependencies - build gtk + if: runner.os == 'Windows' && steps.cache.outputs.cache-hit != 'true' + run: | + # choco install msys2 + # choco install visualstudio2022-workload-vctools + # choco install pkgconfiglite + py -m venv .venv + .venv\Scripts\activate.ps1 + py -m pip install gvsbuild + gvsbuild build --msys-dir=C:\msys64 gtk4 libadwaita librsvg + - name: cargo build + if: matrix.job == 'build' + run: cargo check --workspace --all-targets --all-features - build-macos: - runs-on: macos-15-intel - steps: - - uses: actions/checkout@v4 - - name: install dependencies - run: brew install gtk4 libadwaita imagemagick - - name: Build - run: cargo build --verbose - - name: Run tests - run: cargo test --verbose - - name: Check Formatting - run: cargo fmt --check - - name: Clippy - run: cargo clippy --all-features --all-targets -- --deny warnings - - name: Make icns - run: scripts/makeicns.sh - - name: Install cargo bundle - run: cargo install cargo-bundle - - name: Bundle - run: | - cargo bundle - scripts/copy-macos-dylib.sh - - name: Zip bundle - run: | - cd target/debug/bundle/osx - zip -r "Lan Mouse macOS (Intel).zip" "Lan Mouse.app" - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: Lan Mouse macOS (Intel) - path: target/debug/bundle/osx/Lan Mouse macOS (Intel).zip + - name: cargo check + if: matrix.job == 'check' + run: cargo check --workspace --all-targets --all-features - build-macos-aarch64: - runs-on: macos-14 - steps: - - uses: actions/checkout@v4 - - name: install dependencies - run: brew install gtk4 libadwaita imagemagick - - name: Build - run: cargo build --verbose - - name: Run tests - run: cargo test --verbose - - name: Check Formatting - run: cargo fmt --check - - name: Clippy - run: cargo clippy --all-features --all-targets -- --deny warnings - - name: Make icns - run: scripts/makeicns.sh - - name: Install cargo bundle - run: cargo install cargo-bundle - - name: Bundle - run: | - cargo bundle - scripts/copy-macos-dylib.sh - - name: Zip bundle - run: | - cd target/debug/bundle/osx - zip -r "Lan Mouse macOS (ARM).zip" "Lan Mouse.app" - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: Lan Mouse macOS (ARM) - path: target/debug/bundle/osx/Lan Mouse macOS (ARM).zip + - name: cargo test + if: matrix.job == 'test' + run: cargo test --workspace --all-features + + - name: cargo clippy + if: matrix.job == 'clippy' + run: cargo clippy --workspace --all-targets --all-features -- -D warnings + + - uses: clechasseur/rs-clippy-check@v4 + if: matrix.job == 'clippy' + with: + args: --workspace --all-targets --all-features