diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 01b3983..8c5af2e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,7 +36,7 @@ jobs: # ── fmt: cargo fmt --check ────────────────────────────────────────────────── fmt: name: Format - runs-on: [self-hosted, ci-pool-rust] + runs-on: ci-pool-rust timeout-minutes: 20 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 @@ -53,7 +53,7 @@ jobs: # ── clippy: zero warnings ──────────────────────────────────────────────────── clippy: name: Clippy - runs-on: [self-hosted, ci-pool-rust] + runs-on: ci-pool-rust timeout-minutes: 20 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 @@ -70,7 +70,7 @@ jobs: # ── test: cargo nextest run --profile ci ───────────────────────────────────── test: name: Test - runs-on: [self-hosted, ci-pool-rust] + runs-on: ci-pool-rust timeout-minutes: 30 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 @@ -88,7 +88,7 @@ jobs: coverage: name: Coverage (65% lines) - runs-on: [self-hosted, ci-pool-rust] + runs-on: ci-pool-rust timeout-minutes: 30 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 @@ -111,7 +111,7 @@ jobs: live-integration: name: Live JSON-RPC + SSH - runs-on: [self-hosted, ci-pool-system] + runs-on: ci-pool-system timeout-minutes: 30 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 @@ -202,7 +202,7 @@ jobs: # ── web: pnpm install, lint, audit, static build ───────────────────────────── web: name: Web - runs-on: [self-hosted, ci-pool-typescript] + runs-on: ci-pool-typescript timeout-minutes: 20 defaults: run: @@ -239,7 +239,7 @@ jobs: # ── toml: taplo check ───────────────────────────────────────────────────────── toml: name: TOML Format - runs-on: [self-hosted, ci-pool-ops] + runs-on: ci-pool-ops timeout-minutes: 20 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 @@ -261,7 +261,7 @@ jobs: # ── template: generated docs, plugin layout, coupled files ─────────────────── template: name: Template Contracts - runs-on: [self-hosted, ci-pool-ops] + runs-on: ci-pool-ops timeout-minutes: 20 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 @@ -312,7 +312,7 @@ jobs: # ── deny: dependency advisories, licenses, bans, sources ───────────────────── audit: name: Cargo Deny - runs-on: [self-hosted, ci-pool-rust] + runs-on: ci-pool-rust timeout-minutes: 20 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 @@ -338,7 +338,7 @@ jobs: npm: name: npm launcher - runs-on: [self-hosted, ci-pool-typescript] + runs-on: ci-pool-typescript steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6 @@ -353,7 +353,7 @@ jobs: container: name: Container smoke - runs-on: [self-hosted, ci-pool-system] + runs-on: ci-pool-system timeout-minutes: 30 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 0a550cd..3466f6f 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -10,7 +10,7 @@ on: jobs: analyze: name: Analyze (${{ matrix.language }}) - runs-on: [self-hosted, ci-pool-ops] + runs-on: ci-pool-ops timeout-minutes: 20 permissions: security-events: write diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml index 4ab05f6..2d38af8 100644 --- a/.github/workflows/dependabot-auto-merge.yml +++ b/.github/workflows/dependabot-auto-merge.yml @@ -11,7 +11,7 @@ permissions: jobs: auto-merge: name: Auto-merge patch/minor updates - runs-on: [self-hosted, ci-pool-ops] + runs-on: ci-pool-ops if: github.actor == 'dependabot[bot]' steps: - name: Fetch Dependabot metadata diff --git a/.github/workflows/msrv.yml b/.github/workflows/msrv.yml index dcd8981..3c9a340 100644 --- a/.github/workflows/msrv.yml +++ b/.github/workflows/msrv.yml @@ -17,7 +17,7 @@ env: jobs: msrv: name: Minimum Supported Rust Version - runs-on: [self-hosted, ci-pool-rust] + runs-on: ci-pool-rust timeout-minutes: 20 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 diff --git a/.github/workflows/repository-contract.yml b/.github/workflows/repository-contract.yml new file mode 100644 index 0000000..8eeb3dd --- /dev/null +++ b/.github/workflows/repository-contract.yml @@ -0,0 +1,40 @@ +name: Repository contract + +on: + pull_request: + push: + branches: [main] + workflow_dispatch: + +concurrency: + group: repository-contract-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +permissions: {} + +jobs: + contract: + permissions: + contents: read + uses: dinglebear-ai/workflows/.github/workflows/fleet-contract.yml@d1a41a7af9c41189e0f1062234364f5814bda99d # fleet-2026-07-31 + with: + profile: rust + implementation-ref: d1a41a7af9c41189e0f1062234364f5814bda99d + secrets: inherit + + repository-contract: + name: Repository Contract + if: always() + needs: [contract] + runs-on: ci-pool-ops + timeout-minutes: 5 + permissions: {} + steps: + - name: Require repository contract + env: + RESULT: ${{ needs.contract.result }} + run: | + if [[ "$RESULT" != "success" ]]; then + echo "repository contract concluded $RESULT" >&2 + exit 1 + fi