Skip to content

ci: parallelize validation jobs behind a single required-checks gate #544

ci: parallelize validation jobs behind a single required-checks gate

ci: parallelize validation jobs behind a single required-checks gate #544

Triggered via push August 22, 2026 17:02
Status Cancelled
Total duration 47s
Artifacts 1

ci.yml

on: push
Matrix: unit-test
CI / Detect Changes
8s
CI / Detect Changes
Matrix: provider-e2e
CI / Required Checks
4s
CI / Required Checks
Release / Package
0s
Release / Package
Release / Publish
0s
Release / Publish
Fit to window
Zoom out
Zoom in

Annotations

10 errors and 1 warning
CI / Provider E2E / gitlab
Canceling since a higher priority waiting request for e2e-feat/sync-status-workflow-ui-gitlab exists
CI / Provider E2E / github
Canceling since a higher priority waiting request for e2e-feat/sync-status-workflow-ui-github exists
CI / Provider E2E / gitea
Canceling since a higher priority waiting request for e2e-feat/sync-status-workflow-ui-gitea exists
CI / Unit Test (Node 22)
Process completed with exit code 1.
tests/ci-workflow.test.ts > CI workflow contracts > does not fail or continue downstream CI when a provider run is replaced: tests/ci-workflow.test.ts#L14
AssertionError: expected 'name: CI/CD\n\npermissions:\n conten…' to contain 'if [ "$result" = "cancelled" ]; then' - Expected + Received - if [ "$result" = "cancelled" ]; then + name: CI/CD + + permissions: + contents: write + issues: write + pull-requests: write + attestations: write + id-token: write + + on: + push: + branches: [main, master, '**'] + pull_request: + types: [opened, synchronize, reopened] + workflow_dispatch: + inputs: + provider: + description: 'Provider(s) to run (github, gitlab, gitea, or all)' + default: 'all' + keep_branch: + description: 'Keep the E2E branch/container after the run for debugging' + type: boolean + default: false + schedule: + # Weekly API-drift check: same real-provider suites, no code change required to trigger them. + - cron: '0 6 * * 1' + + # ───────────────────────────────────────────────────────────────────────────── + # CI DAG overview + # + # changes ──► provider-e2e ──┐ + # │ + # lint ──────────────────────┤ + # unit-test ─────────────────┤──► required-checks ──► package + # build ─────────────────────┤ └────► publish (main only) + # + # All four validation jobs (lint, unit-test, build, provider-e2e) start in + # parallel right after the push; only `provider-e2e` waits on `changes` for its + # path gate. No validation waits on E2E any more -- a lint/unit/build error now + # surfaces in <1-2 min instead of after the real-provider matrix. The single + # `required-checks` job is the only status branch protection needs to watch. + # Release (package/publish) runs only after that gate passes, so a real + # provider regression still blocks the release instead of shipping and being + # caught after the fact. + # ───────────────────────────────────────────────────────────────────────────── + + jobs: + # `on.push.paths`/`on.pull_request.paths` would gate this *whole* workflow + # file by path -- including the always-must-run validation/release jobs + # below. This job instead computes a per-job boolean so only `provider-e2e` + # skips on irrelevant changes, while `lint`/`unit-test`/`build`/release are + # unaffected (they run on every push/PR regardless of path). + changes: + name: CI / Detect Changes + runs-on: ubuntu-latest + outputs: + e2e-relevant: ${{ steps.filter.outputs.e2e-relevant }} + steps: + - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 + - uses: dorny/paths-filter@15192bc058cc28a13dbf6cde61f19e18988b7af6 # v3 + id: filter + with: + filters: | + e2e-relevant: + - 'src/services/**' + - 'src/logic/sync-manager.ts' + - 'src/utils/git-blob-sha.ts' + - 'src/utils/path.ts' + - 'src/utils/symlink.ts' + - 'e2e/**' + - 'scripts/e2e-harness.sh' + - 'scripts/e2e-namespace.sh' + - 'scripts/e2e-namespace-cleanup.sh' + - 'scripts/run-e2e.sh' + - 'package.json' + - 'package-lock.json' + - '.github/workflows/ci.yml' + + # ── Fast checks (parallel, no E2E dependency) ────────────────────────────── + + lint: + name: CI / Lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 + - uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v
CI / Unit Test (Node 24)
Process completed with exit code 1.
tests/ci-workflow.test.ts > CI workflow contracts > does not fail or continue downstream CI when a provider run is replaced: tests/ci-workflow.test.ts#L14
AssertionError: expected 'name: CI/CD\n\npermissions:\n conten…' to contain 'if [ "$result" = "cancelled" ]; then' - Expected + Received - if [ "$result" = "cancelled" ]; then + name: CI/CD + + permissions: + contents: write + issues: write + pull-requests: write + attestations: write + id-token: write + + on: + push: + branches: [main, master, '**'] + pull_request: + types: [opened, synchronize, reopened] + workflow_dispatch: + inputs: + provider: + description: 'Provider(s) to run (github, gitlab, gitea, or all)' + default: 'all' + keep_branch: + description: 'Keep the E2E branch/container after the run for debugging' + type: boolean + default: false + schedule: + # Weekly API-drift check: same real-provider suites, no code change required to trigger them. + - cron: '0 6 * * 1' + + # ───────────────────────────────────────────────────────────────────────────── + # CI DAG overview + # + # changes ──► provider-e2e ──┐ + # │ + # lint ──────────────────────┤ + # unit-test ─────────────────┤──► required-checks ──► package + # build ─────────────────────┤ └────► publish (main only) + # + # All four validation jobs (lint, unit-test, build, provider-e2e) start in + # parallel right after the push; only `provider-e2e` waits on `changes` for its + # path gate. No validation waits on E2E any more -- a lint/unit/build error now + # surfaces in <1-2 min instead of after the real-provider matrix. The single + # `required-checks` job is the only status branch protection needs to watch. + # Release (package/publish) runs only after that gate passes, so a real + # provider regression still blocks the release instead of shipping and being + # caught after the fact. + # ───────────────────────────────────────────────────────────────────────────── + + jobs: + # `on.push.paths`/`on.pull_request.paths` would gate this *whole* workflow + # file by path -- including the always-must-run validation/release jobs + # below. This job instead computes a per-job boolean so only `provider-e2e` + # skips on irrelevant changes, while `lint`/`unit-test`/`build`/release are + # unaffected (they run on every push/PR regardless of path). + changes: + name: CI / Detect Changes + runs-on: ubuntu-latest + outputs: + e2e-relevant: ${{ steps.filter.outputs.e2e-relevant }} + steps: + - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 + - uses: dorny/paths-filter@15192bc058cc28a13dbf6cde61f19e18988b7af6 # v3 + id: filter + with: + filters: | + e2e-relevant: + - 'src/services/**' + - 'src/logic/sync-manager.ts' + - 'src/utils/git-blob-sha.ts' + - 'src/utils/path.ts' + - 'src/utils/symlink.ts' + - 'e2e/**' + - 'scripts/e2e-harness.sh' + - 'scripts/e2e-namespace.sh' + - 'scripts/e2e-namespace-cleanup.sh' + - 'scripts/run-e2e.sh' + - 'package.json' + - 'package-lock.json' + - '.github/workflows/ci.yml' + + # ── Fast checks (parallel, no E2E dependency) ────────────────────────────── + + lint: + name: CI / Lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 + - uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v
CI / Required Checks
Process completed with exit code 1.
CI / Required Checks
validation job reported 'cancelled' -- blocking merge/release.
CI / Required Checks
validation job reported 'failure' -- blocking merge/release.
CI / Detect Changes
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: dorny/paths-filter@15192bc058cc28a13dbf6cde61f19e18988b7af6. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

Artifacts

Produced during runtime
Name Size Digest
plugin-feat-sync-status-workflow-ui-395b87e
55.6 KB
sha256:70f889af9de5a0ac5fc618be64b13786576c3507ffd7e7d87a0b47f6e0695502