aboutsummaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/ci-check-only.yml79
-rw-r--r--.github/workflows/ci.yml75
2 files changed, 136 insertions, 18 deletions
diff --git a/.github/workflows/ci-check-only.yml b/.github/workflows/ci-check-only.yml
index 0519310..548026d 100644
--- a/.github/workflows/ci-check-only.yml
+++ b/.github/workflows/ci-check-only.yml
@@ -16,7 +16,6 @@ jobs:
build,
clippy,
test,
- arg-picker,
markdown-code,
examples,
docs-refresh,
@@ -27,15 +26,77 @@ jobs:
- uses: actions/checkout@v7
- uses: actions-rust-lang/setup-rust-toolchain@v1
- - run: cargo ci --check-${{ matrix.item }}
+ - name: Configure git identity
+ run: |
+ git config --global user.email "foo@bar.sqz"
+ git config --global user.name "foo"
- - name: Check translated docs structure consistency
- if: matrix.item == 'markdown-code'
- run: cargo ci --check-docs-structure
+ # 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: Upload docs test result on failure
- if: failure() && matrix.item == 'markdown-code'
+ - 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: docs-test-result-${{ matrix.os }}.md
- path: .temp/DOCS-TEST-RESULT.md
+ 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"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a8e1281..56667d4 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -18,7 +18,6 @@ jobs:
build,
clippy,
test,
- arg-picker,
markdown-code,
examples,
docs-refresh,
@@ -29,18 +28,52 @@ jobs:
- uses: actions/checkout@v7
- uses: actions-rust-lang/setup-rust-toolchain@v1
- - run: cargo ci --check-${{ matrix.item }}
+ - 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: Check translated docs structure consistency
- if: matrix.item == 'markdown-code'
- run: cargo ci --check-docs-structure
+ - name: Run check
+ id: check
+ shell: bash
+ run: |
+ case "${{ matrix.item }}" in
+ build) cargo ci build-check ;;
+ clippy) cargo ci clippy-check ;;
+ 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: Upload docs test result on failure
- if: failure() && matrix.item == 'markdown-code'
+ - 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
+
+ - name: Upload collect reports
+ if: always()
uses: actions/upload-artifact@v4
with:
- name: docs-test-result-${{ matrix.os }}.md
- path: .temp/DOCS-TEST-RESULT.md
+ name: ci-collect-${{ matrix.os }}-${{ matrix.item }}
+ path: .temp/reports/collect/
+ if-no-files-found: ignore
# Build the distributable packages in parallel with the checks, so that the
# `unreleased` tag and the Pages deployment always publish fresh artifacts.
@@ -105,6 +138,30 @@ jobs:
git tag -f unreleased
git push origin unreleased --force
+ # 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"
+
Deploy-Github-Pages:
needs: [Move-Unreleased-Tag]
permissions: