ci: parallelize validation jobs behind a single required-checks gate #544
ci.yml
on: push
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
|
|