name: CI (Check only) on: push: branches-ignore: [main] pull_request: jobs: Check: strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] item: [ build, clippy, test, markdown-code, examples, docs-refresh, api-docs, ] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v7 - uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Configure git identity run: | git config --global user.email "foo@bar.sqz" git config --global user.name "foo" # Every check runs inside a git-lock / git-unlock pair: the final unlock # doubles as the idempotency check, failing the job when the check left # the working tree dirty (e.g. generated docs are out of date). - name: Lock workspace for CI run: cargo ci git-lock - name: Run check id: check shell: bash run: | case "${{ matrix.item }}" in build) cargo ci build-check ;; clippy) cargo ci clippy-check ;; # arg-picker tests are covered by test-all through its # mingling-ci.toml override. test) cargo ci test-all ;; # markdown-code also verifies the translated docs structure. markdown-code) cargo ci markdown-check-all && cargo ci markdown-compare-all ;; examples) cargo ci example-check ;; docs-refresh) cargo ci example-refresh cargo ci docsify-refresh cargo ci features-refresh ;; api-docs) cargo ci docs-check ;; esac continue-on-error: true - name: Unlock workspace (idempotency check) if: always() run: cargo ci git-unlock --show-diff - name: Fail when the check failed if: steps.check.outcome == 'failure' run: exit 1 # Collected reports are uploaded even on failure, so the Report job can # render the failures. - name: Upload collect reports if: always() uses: actions/upload-artifact@v4 with: name: ci-collect-${{ matrix.os }}-${{ matrix.item }} path: .temp/reports/collect/ if-no-files-found: ignore # Collects every matrix run's reports and renders the consolidated result.md # into the job summary. Runs even when some checks failed, so the failures # are still reported. Report: needs: [Check] if: always() runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Download collect reports uses: actions/download-artifact@v4 with: path: .temp/reports/collect pattern: ci-collect-* merge-multiple: true - name: Generate report run: cargo ci report-collect - name: Publish report to step summary run: cat .temp/reports/result.md >> "$GITHUB_STEP_SUMMARY"