| 1 | name: CI |
| 2 | |
| 3 | on: |
| 4 | push: |
| 5 | branches: [master] |
| 6 | pull_request: |
| 7 | |
| 8 | # A newer push to the same branch or PR supersedes the running check. |
| 9 | concurrency: |
| 10 | group: ci-${{ github.ref }} |
| 11 | cancel-in-progress: true |
| 12 | |
| 13 | env: |
| 14 | CARGO_TERM_COLOR: always |
| 15 | |
| 16 | jobs: |
| 17 | build: |
| 18 | name: ${{ matrix.os }} |
| 19 | strategy: |
| 20 | fail-fast: false |
| 21 | matrix: |
| 22 | os: [ubuntu-latest, windows-latest, macos-latest] |
| 23 | runs-on: ${{ matrix.os }} |
| 24 | steps: |
| 25 | - uses: actions/checkout@v7 |
| 26 | - uses: dtolnay/rust-toolchain@stable |
| 27 | with: |
| 28 | components: clippy |
| 29 | - name: Install Linux GUI dependencies |
| 30 | if: runner.os == 'Linux' |
| 31 | run: | |
| 32 | sudo apt-get update |
| 33 | sudo apt-get install -y libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev |
| 34 | - uses: Swatinem/rust-cache@v2 |
| 35 | - run: cargo build --workspace --release --locked |
| 36 | - run: cargo test --workspace --locked |
| 37 | - run: cargo clippy --workspace --all-targets --locked -- -D warnings |
| 38 | |
| 39 | scripts: |
| 40 | name: install scripts |
| 41 | runs-on: ubuntu-latest |
| 42 | steps: |
| 43 | - uses: actions/checkout@v7 |
| 44 | - name: shellcheck install.sh |
| 45 | run: shellcheck install.sh |
| 46 | - name: PSScriptAnalyzer install.ps1 |
| 47 | shell: pwsh |
| 48 | run: | |
| 49 | # Write-Host is the right tool for an installer piped into iex. |
| 50 | $issues = Invoke-ScriptAnalyzer -Path install.ps1 -Severity Warning,Error -ExcludeRule PSAvoidUsingWriteHost |
| 51 | $issues | Format-Table -AutoSize |
| 52 | if ($issues) { exit 1 } |