docs(plan): record grouped broker validation trigger #211
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Quality Gates | |
| on: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| permissions: | |
| contents: read | |
| env: | |
| CARGO_TERM_COLOR: always | |
| PUMAS_LIBRARY_REF: 66c0c11a57b8bfe8fb70d827efced0fbc442b156 | |
| jobs: | |
| lint-no-new: | |
| name: Critical lint and traceability | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install Node toolchain | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: .node-version | |
| cache: npm | |
| - name: Install npm dependencies | |
| run: npm ci --include=optional | |
| - name: Run no-new-debt lint gate | |
| run: npm run lint:no-new | |
| typecheck: | |
| name: TypeScript typecheck | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install Node toolchain | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: .node-version | |
| cache: npm | |
| - name: Install npm dependencies | |
| run: npm ci --include=optional | |
| - name: Run TypeScript typecheck | |
| run: npm run typecheck | |
| frontend-tests: | |
| name: Frontend tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install Node toolchain | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: .node-version | |
| cache: npm | |
| - name: Install npm dependencies | |
| run: npm ci --include=optional | |
| - name: Run frontend tests | |
| run: npm run test:frontend | |
| dependency-audit: | |
| name: Dependency audit | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install Node toolchain | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: .node-version | |
| cache: npm | |
| - name: Install npm dependencies | |
| run: npm ci --include=optional | |
| - name: Block high severity production vulnerabilities | |
| run: npm audit --omit=dev --audit-level=high | |
| rust-check: | |
| name: Rust workspace check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install Ubuntu native desktop dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| build-essential \ | |
| libayatana-appindicator3-dev \ | |
| libglib2.0-dev \ | |
| libgtk-3-dev \ | |
| libjavascriptcoregtk-4.1-dev \ | |
| librsvg2-dev \ | |
| libsoup-3.0-dev \ | |
| libssl-dev \ | |
| libwebkit2gtk-4.1-dev \ | |
| libxdo-dev \ | |
| pkg-config | |
| - name: Checkout Pumas-Library | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: MrScripty/Pumas-Library | |
| ref: ${{ env.PUMAS_LIBRARY_REF }} | |
| path: pumas-library-src | |
| - name: Link sibling Pumas-Library checkout | |
| run: | | |
| rm -rf "$GITHUB_WORKSPACE/../Pumas-Library" | |
| ln -s "$GITHUB_WORKSPACE/pumas-library-src" "$GITHUB_WORKSPACE/../Pumas-Library" | |
| test -f "$GITHUB_WORKSPACE/../Pumas-Library/rust/crates/pumas-core/Cargo.toml" | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@1.92.0 | |
| - name: Cache Cargo | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Check workspace without default features | |
| run: cargo check --workspace --no-default-features | |
| - name: Check workspace with all features | |
| run: cargo check --workspace --all-features | |
| rust-tests: | |
| name: Rust focused tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Checkout Pumas-Library | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: MrScripty/Pumas-Library | |
| ref: ${{ env.PUMAS_LIBRARY_REF }} | |
| path: pumas-library-src | |
| - name: Link sibling Pumas-Library checkout | |
| run: | | |
| rm -rf "$GITHUB_WORKSPACE/../Pumas-Library" | |
| ln -s "$GITHUB_WORKSPACE/pumas-library-src" "$GITHUB_WORKSPACE/../Pumas-Library" | |
| test -f "$GITHUB_WORKSPACE/../Pumas-Library/rust/crates/pumas-core/Cargo.toml" | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@1.92.0 | |
| - name: Cache Cargo | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Run node-engine tests | |
| run: cargo test -p node-engine --lib | |
| - name: Run workflow-nodes tests | |
| run: cargo test -p workflow-nodes --lib | |
| - name: Run workflow-service contract tests | |
| run: cargo test -p pantograph-workflow-service --test contract | |
| rust-doc-tests: | |
| name: Rust doc tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Checkout Pumas-Library | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: MrScripty/Pumas-Library | |
| ref: ${{ env.PUMAS_LIBRARY_REF }} | |
| path: pumas-library-src | |
| - name: Link sibling Pumas-Library checkout | |
| run: | | |
| rm -rf "$GITHUB_WORKSPACE/../Pumas-Library" | |
| ln -s "$GITHUB_WORKSPACE/pumas-library-src" "$GITHUB_WORKSPACE/../Pumas-Library" | |
| test -f "$GITHUB_WORKSPACE/../Pumas-Library/rust/crates/pumas-core/Cargo.toml" | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@1.92.0 | |
| - name: Cache Cargo | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Run workspace doc tests | |
| run: cargo test --workspace --doc --no-default-features | |
| rustler-beam-smoke: | |
| name: Rustler BEAM smoke | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Checkout Pumas-Library | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: MrScripty/Pumas-Library | |
| ref: ${{ env.PUMAS_LIBRARY_REF }} | |
| path: pumas-library-src | |
| - name: Link sibling Pumas-Library checkout | |
| run: | | |
| rm -rf "$GITHUB_WORKSPACE/../Pumas-Library" | |
| ln -s "$GITHUB_WORKSPACE/pumas-library-src" "$GITHUB_WORKSPACE/../Pumas-Library" | |
| test -f "$GITHUB_WORKSPACE/../Pumas-Library/rust/crates/pumas-core/Cargo.toml" | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@1.92.0 | |
| - name: Install BEAM toolchain | |
| uses: erlef/setup-beam@v1 | |
| with: | |
| otp-version: '27.0' | |
| elixir-version: '1.16.3' | |
| - name: Cache Cargo | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Run Rustler BEAM smoke harness | |
| run: ./scripts/check-rustler-beam-smoke.sh | |
| rust-format-audit: | |
| name: Rust format audit | |
| runs-on: ubuntu-latest | |
| continue-on-error: true | |
| outputs: | |
| audit-result: ${{ steps.report-format-audit.outputs.result }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Checkout Pumas-Library | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: MrScripty/Pumas-Library | |
| ref: ${{ env.PUMAS_LIBRARY_REF }} | |
| path: pumas-library-src | |
| - name: Link sibling Pumas-Library checkout | |
| run: | | |
| rm -rf "$GITHUB_WORKSPACE/../Pumas-Library" | |
| ln -s "$GITHUB_WORKSPACE/pumas-library-src" "$GITHUB_WORKSPACE/../Pumas-Library" | |
| test -f "$GITHUB_WORKSPACE/../Pumas-Library/rust/crates/pumas-core/Cargo.toml" | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@1.92.0 | |
| - name: Run format audit | |
| id: run-format-audit | |
| continue-on-error: true | |
| run: cargo fmt --all -- --check | |
| - name: Record format audit result | |
| id: report-format-audit | |
| if: always() | |
| run: | | |
| result="${{ steps.run-format-audit.outcome }}" | |
| if [ -z "$result" ]; then | |
| result="${{ job.status }}" | |
| fi | |
| echo "result=$result" >> "$GITHUB_OUTPUT" | |
| - name: Mark format audit as failed | |
| if: steps.run-format-audit.outcome == 'failure' | |
| run: exit 1 | |
| rust-clippy-audit: | |
| name: Rust clippy warning audit | |
| runs-on: ubuntu-latest | |
| continue-on-error: true | |
| outputs: | |
| audit-result: ${{ steps.report-clippy-audit.outputs.result }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install Ubuntu native desktop dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| build-essential \ | |
| libayatana-appindicator3-dev \ | |
| libglib2.0-dev \ | |
| libgtk-3-dev \ | |
| libjavascriptcoregtk-4.1-dev \ | |
| librsvg2-dev \ | |
| libsoup-3.0-dev \ | |
| libssl-dev \ | |
| libwebkit2gtk-4.1-dev \ | |
| libxdo-dev \ | |
| pkg-config | |
| - name: Checkout Pumas-Library | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: MrScripty/Pumas-Library | |
| ref: ${{ env.PUMAS_LIBRARY_REF }} | |
| path: pumas-library-src | |
| - name: Link sibling Pumas-Library checkout | |
| run: | | |
| rm -rf "$GITHUB_WORKSPACE/../Pumas-Library" | |
| ln -s "$GITHUB_WORKSPACE/pumas-library-src" "$GITHUB_WORKSPACE/../Pumas-Library" | |
| test -f "$GITHUB_WORKSPACE/../Pumas-Library/rust/crates/pumas-core/Cargo.toml" | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@1.92.0 | |
| - name: Cache Cargo | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Run warning-deny clippy audit | |
| id: run-clippy-audit | |
| continue-on-error: true | |
| run: cargo clippy --workspace --all-targets --all-features -- -D warnings | |
| - name: Record clippy audit result | |
| id: report-clippy-audit | |
| if: always() | |
| run: | | |
| result="${{ steps.run-clippy-audit.outcome }}" | |
| if [ -z "$result" ]; then | |
| result="${{ job.status }}" | |
| fi | |
| echo "result=$result" >> "$GITHUB_OUTPUT" | |
| - name: Mark clippy audit as failed | |
| if: steps.run-clippy-audit.outcome == 'failure' | |
| run: exit 1 | |
| lint-full: | |
| name: Full lint | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install Node toolchain | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: .node-version | |
| cache: npm | |
| - name: Install npm dependencies | |
| run: npm ci --include=optional | |
| - name: Run full lint | |
| run: npm run lint:full | |
| quality-summary: | |
| name: Quality summary | |
| runs-on: ubuntu-latest | |
| if: always() | |
| needs: | |
| - lint-no-new | |
| - typecheck | |
| - frontend-tests | |
| - dependency-audit | |
| - rust-check | |
| - rust-tests | |
| - rust-doc-tests | |
| - rustler-beam-smoke | |
| - rust-format-audit | |
| - rust-clippy-audit | |
| - lint-full | |
| steps: | |
| - name: Summarize required gates | |
| run: | | |
| failed=0 | |
| for result in \ | |
| "lint-no-new:${{ needs.lint-no-new.result }}" \ | |
| "typecheck:${{ needs.typecheck.result }}" \ | |
| "lint-full:${{ needs.lint-full.result }}" \ | |
| "frontend-tests:${{ needs.frontend-tests.result }}" \ | |
| "dependency-audit:${{ needs.dependency-audit.result }}" \ | |
| "rust-check:${{ needs.rust-check.result }}" \ | |
| "rust-tests:${{ needs.rust-tests.result }}" \ | |
| "rust-doc-tests:${{ needs.rust-doc-tests.result }}" \ | |
| "rustler-beam-smoke:${{ needs.rustler-beam-smoke.result }}" | |
| do | |
| name="${result%%:*}" | |
| status="${result#*:}" | |
| echo "$name: $status" | |
| if [ "$status" != "success" ]; then | |
| failed=1 | |
| fi | |
| done | |
| echo "rust-format-audit: ${{ needs.rust-format-audit.outputs.audit-result }}" | |
| echo "rust-clippy-audit: ${{ needs.rust-clippy-audit.outputs.audit-result }}" | |
| exit "$failed" |