Before

…lines 1–21 unchanged (21 lines)
22 ci: ${{ fromJSON(steps.ci-filter.outputs.results).ci == true }}
23 unit: ${{ fromJSON(steps.ci-filter.outputs.results).unit == true }}
24 e2e: ${{ fromJSON(steps.ci-filter.outputs.results).e2e == true }}
25 workflows: ${{ fromJSON(steps.ci-filter.outputs.results).workflows == true }}
26 db: ${{ fromJSON(steps.ci-filter.outputs.results).db == true }}
27 design_system: ${{ fromJSON(steps.ci-filter.outputs.results)['design-system'] == true }}
28 commit_sha: ${{ steps.commit-sha.outputs.sha }}
29 steps:
30 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
31 with:
32 # Use merge_group SHA when in merge queue, otherwise PR merge ref
33 ref: ${{ github.event_name == 'merge_group' && github.event.merge_group.head_sha || format('refs/pull/{0}/merge', github.event.pull_request.number) }}
34
35 - name: Capture commit SHA for cache consistency
36 id: commit-sha
37 run: echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
38
39 - name: Check for relevant changes
40 uses: ./.github/actions/ci-filter
41 id: ci-filter
42 with:
43 mode: filter
44 filters: |
45 ci:
46 **
47 !packages/@n8n/task-runner-python/**
48 !.github/**
49 unit:
50 **
…lines 51–133 unchanged (83 lines)
134 name: DB Tests
135 needs: install-and-build
136 if: needs.install-and-build.outputs.db == 'true'
137 uses: ./.github/workflows/test-db-reusable.yml
138 with:
139 ref: ${{ needs.install-and-build.outputs.commit_sha }}
140
141 security-checks:
142 name: Security Checks
143 needs: install-and-build
144 if: needs.install-and-build.outputs.workflows == 'true'
145 uses: ./.github/workflows/sec-ci-reusable.yml
146 with:
…lines 147–156 unchanged (10 lines)
157 secrets: inherit
158
159 # This job is required by GitHub branch protection rules.
160 # PRs cannot be merged unless this job passes.
161 required-checks:
162 name: Required Checks
163 needs: [install-and-build, unit-test, typecheck, lint, e2e-tests, db-tests, security-checks, chromatic]
164 if: always()
165 runs-on: ubuntu-slim
166 steps:
167 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
168 with:
169 sparse-checkout: .github/actions/ci-filter
…lines 170–176 unchanged (7 lines)

After

…lines 1–21 unchanged (21 lines)
22 ci: ${{ fromJSON(steps.ci-filter.outputs.results).ci == true }}
23 unit: ${{ fromJSON(steps.ci-filter.outputs.results).unit == true }}
24 e2e: ${{ fromJSON(steps.ci-filter.outputs.results).e2e == true }}
25 workflows: ${{ fromJSON(steps.ci-filter.outputs.results).workflows == true }}
26 db: ${{ fromJSON(steps.ci-filter.outputs.results).db == true }}
27 design_system: ${{ fromJSON(steps.ci-filter.outputs.results)['design-system'] == true }}
28 performance: ${{ fromJSON(steps.ci-filter.outputs.results).performance == true }}
29 commit_sha: ${{ steps.commit-sha.outputs.sha }}
30 steps:
31 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
32 with:
33 # Use merge_group SHA when in merge queue, otherwise PR merge ref
34 ref: ${{ github.event_name == 'merge_group' && github.event.merge_group.head_sha || format('refs/pull/{0}/merge', github.event.pull_request.number) }}
…lines 35–59 unchanged (25 lines)
60 workflows: .github/**
61 design-system:
62 packages/frontend/@n8n/design-system/**
63 packages/frontend/@n8n/chat/**
64 packages/frontend/@n8n/storybook/**
65 .github/workflows/test-visual-chromatic.yml
66 performance:
67 packages/testing/performance/**
68 packages/workflow/src/**
69 .github/workflows/test-bench-reusable.yml
70 db:
71 packages/cli/src/databases/**
72 packages/cli/src/modules/*/database/**
73 packages/cli/src/modules/**/*.entity.ts
74 packages/cli/src/modules/**/*.repository.ts
75 packages/cli/test/integration/**
76 packages/cli/test/migration/**
…lines 77–139 unchanged (63 lines)
140 needs: install-and-build
141 if: needs.install-and-build.outputs.db == 'true'
142 uses: ./.github/workflows/test-db-reusable.yml
143 with:
144 ref: ${{ needs.install-and-build.outputs.commit_sha }}
145
146 performance:
147 name: Performance
148 needs: install-and-build
149 if: needs.install-and-build.outputs.performance == 'true' && github.event_name != 'merge_group'
150 uses: ./.github/workflows/test-bench-reusable.yml
151 with:
152 ref: ${{ needs.install-and-build.outputs.commit_sha }}
153
154 security-checks:
155 name: Security Checks
156 needs: install-and-build
157 if: needs.install-and-build.outputs.workflows == 'true'
158 uses: ./.github/workflows/sec-ci-reusable.yml
…lines 159–169 unchanged (11 lines)
170 secrets: inherit
171
172 # This job is required by GitHub branch protection rules.
173 # PRs cannot be merged unless this job passes.
174 required-checks:
175 name: Required Checks
176 needs: [install-and-build, unit-test, typecheck, lint, e2e-tests, db-tests, performance, security-checks, chromatic]
177 if: always()
178 runs-on: ubuntu-slim
179 steps:
180 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
181 with:
182 sparse-checkout: .github/actions/ci-filter
…lines 183–189 unchanged (7 lines)

Before

stream
document
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "name"
: ":"
flow_node
single_quote_scalar
' "'"
' "'"
block_mapping_pair
flow_node
plain_scalar
string_scalar "on"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "pull_request"
: ":"
block_mapping_pair
flow_node
plain_scalar
string_scalar "merge_group"
: ":"
block_mapping_pair (+23 nodes collapsed)
block_mapping_pair
flow_node
plain_scalar
string_scalar "jobs"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "install-and-build"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "name"
: ":"
flow_node
plain_scalar
string_scalar "Install & Build"
block_mapping_pair
flow_node
plain_scalar
string_scalar "runs-on"
: ":"
flow_node
plain_scalar
string_scalar "${{ vars.RUNNER_PROVIDER == 'github' && 'ubuntu-latest' || '"...
block_mapping_pair (+48 nodes collapsed)
block_mapping_pair
flow_node
plain_scalar
string_scalar "outputs"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "ci"
: ":"
flow_node
plain_scalar
string_scalar "${{ fromJSON(steps.ci-filter.outputs.results).ci == true }}"
block_mapping_pair
flow_node
plain_scalar
string_scalar "unit"
: ":"
flow_node
plain_scalar
string_scalar "${{ fromJSON(steps.ci-filter.outputs.results).unit == true }"...
block_mapping_pair
flow_node
plain_scalar
string_scalar "e2e"
: ":"
flow_node
plain_scalar
string_scalar "${{ fromJSON(steps.ci-filter.outputs.results).e2e == true }}"
block_mapping_pair
flow_node
plain_scalar
string_scalar "workflows"
: ":"
flow_node
plain_scalar
string_scalar "${{ fromJSON(steps.ci-filter.outputs.results).workflows == t"...
block_mapping_pair
flow_node
plain_scalar
string_scalar "db"
: ":"
flow_node
plain_scalar
string_scalar "${{ fromJSON(steps.ci-filter.outputs.results).db == true }}"
block_mapping_pair
flow_node
plain_scalar
string_scalar "design_system"
: ":"
flow_node
plain_scalar
string_scalar "${{ fromJSON(steps.ci-filter.outputs.results)['design-system"...
block_mapping_pair
flow_node
plain_scalar
string_scalar "commit_sha"
: ":"
flow_node
plain_scalar
string_scalar "${{ steps.commit-sha.outputs.sha }}"
block_mapping_pair
flow_node
plain_scalar
string_scalar "steps"
: ":"
block_node
block_sequence
block_sequence_item (+29 nodes collapsed)
block_sequence_item (+28 nodes collapsed)
block_sequence_item
- "-"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "name"
: ":"
flow_node
plain_scalar
string_scalar "Check for relevant changes"
block_mapping_pair
flow_node
plain_scalar
string_scalar "uses"
: ":"
flow_node
plain_scalar
string_scalar "./.github/actions/ci-filter"
block_mapping_pair
flow_node
plain_scalar
string_scalar "id"
: ":"
flow_node
plain_scalar
string_scalar "ci-filter"
block_mapping_pair
flow_node
plain_scalar
string_scalar "with"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "mode"
: ":"
flow_node
plain_scalar
string_scalar "filter"
block_mapping_pair
flow_node
plain_scalar
string_scalar "filters"
: ":"
block_node
block_scalar
| "|"
block_sequence_item (+28 nodes collapsed)
block_sequence_item (+28 nodes collapsed)
block_mapping_pair (+101 nodes collapsed)
block_mapping_pair (+109 nodes collapsed)
block_mapping_pair (+54 nodes collapsed)
block_mapping_pair (+70 nodes collapsed)
block_mapping_pair (+54 nodes collapsed)
block_mapping_pair (+62 nodes collapsed)
block_mapping_pair (+64 nodes collapsed)
block_mapping_pair
flow_node
plain_scalar
string_scalar "required-checks"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "name"
: ":"
flow_node
plain_scalar
string_scalar "Required Checks"
block_mapping_pair
flow_node
plain_scalar
string_scalar "needs"
: ":"
flow_node
flow_sequence
[ "["
flow_node
plain_scalar
string_scalar "install-and-build"
, ","
flow_node
plain_scalar
string_scalar "unit-test"
, ","
flow_node
plain_scalar
string_scalar "typecheck"
, ","
flow_node
plain_scalar
string_scalar "lint"
, ","
flow_node
plain_scalar
string_scalar "e2e-tests"
, ","
flow_node
plain_scalar
string_scalar "db-tests"
, ","
flow_node
plain_scalar
string_scalar "security-checks"
, ","
flow_node
plain_scalar
string_scalar "chromatic"
] "]"
block_mapping_pair
flow_node
plain_scalar
string_scalar "if"
: ":"
flow_node
plain_scalar
string_scalar "always()"
block_mapping_pair
flow_node
plain_scalar
string_scalar "runs-on"
: ":"
flow_node
plain_scalar
string_scalar "ubuntu-slim"
block_mapping_pair (+86 nodes collapsed)

After

stream
document
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "name"
: ":"
flow_node
single_quote_scalar
' "'"
' "'"
block_mapping_pair
flow_node
plain_scalar
string_scalar "on"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "pull_request"
: ":"
block_mapping_pair
flow_node
plain_scalar
string_scalar "merge_group"
: ":"
block_mapping_pair (+23 nodes collapsed)
block_mapping_pair
flow_node
plain_scalar
string_scalar "jobs"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "install-and-build"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "name"
: ":"
flow_node
plain_scalar
string_scalar "Install & Build"
block_mapping_pair
flow_node
plain_scalar
string_scalar "runs-on"
: ":"
flow_node
plain_scalar
string_scalar "${{ vars.RUNNER_PROVIDER == 'github' && 'ubuntu-latest' || '"...
block_mapping_pair (+48 nodes collapsed)
block_mapping_pair
flow_node
plain_scalar
string_scalar "outputs"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "ci"
: ":"
flow_node
plain_scalar
string_scalar "${{ fromJSON(steps.ci-filter.outputs.results).ci == true }}"
block_mapping_pair
flow_node
plain_scalar
string_scalar "unit"
: ":"
flow_node
plain_scalar
string_scalar "${{ fromJSON(steps.ci-filter.outputs.results).unit == true }"...
block_mapping_pair
flow_node
plain_scalar
string_scalar "e2e"
: ":"
flow_node
plain_scalar
string_scalar "${{ fromJSON(steps.ci-filter.outputs.results).e2e == true }}"
block_mapping_pair
flow_node
plain_scalar
string_scalar "workflows"
: ":"
flow_node
plain_scalar
string_scalar "${{ fromJSON(steps.ci-filter.outputs.results).workflows == t"...
block_mapping_pair
flow_node
plain_scalar
string_scalar "db"
: ":"
flow_node
plain_scalar
string_scalar "${{ fromJSON(steps.ci-filter.outputs.results).db == true }}"
block_mapping_pair
flow_node
plain_scalar
string_scalar "design_system"
: ":"
flow_node
plain_scalar
string_scalar "${{ fromJSON(steps.ci-filter.outputs.results)['design-system"...
block_mapping_pair
flow_node
plain_scalar
string_scalar "performance"
: ":"
flow_node
plain_scalar
string_scalar "${{ fromJSON(steps.ci-filter.outputs.results).performance =="...
block_mapping_pair
flow_node
plain_scalar
string_scalar "commit_sha"
: ":"
flow_node
plain_scalar
string_scalar "${{ steps.commit-sha.outputs.sha }}"
block_mapping_pair
flow_node
plain_scalar
string_scalar "steps"
: ":"
block_node
block_sequence
block_sequence_item (+29 nodes collapsed)
block_sequence_item (+28 nodes collapsed)
block_sequence_item
- "-"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "name"
: ":"
flow_node
plain_scalar
string_scalar "Check for relevant changes"
block_mapping_pair
flow_node
plain_scalar
string_scalar "uses"
: ":"
flow_node
plain_scalar
string_scalar "./.github/actions/ci-filter"
block_mapping_pair
flow_node
plain_scalar
string_scalar "id"
: ":"
flow_node
plain_scalar
string_scalar "ci-filter"
block_mapping_pair
flow_node
plain_scalar
string_scalar "with"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "mode"
: ":"
flow_node
plain_scalar
string_scalar "filter"
block_mapping_pair
flow_node
plain_scalar
string_scalar "filters"
: ":"
block_node
block_scalar
| "|"
block_sequence_item (+28 nodes collapsed)
block_sequence_item (+28 nodes collapsed)
block_mapping_pair (+101 nodes collapsed)
block_mapping_pair (+109 nodes collapsed)
block_mapping_pair (+54 nodes collapsed)
block_mapping_pair (+70 nodes collapsed)
block_mapping_pair (+54 nodes collapsed)
block_mapping_pair
flow_node
plain_scalar
string_scalar "performance"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "name"
: ":"
flow_node
plain_scalar
string_scalar "Performance"
block_mapping_pair
flow_node
plain_scalar
string_scalar "needs"
: ":"
flow_node
plain_scalar
string_scalar "install-and-build"
block_mapping_pair
flow_node
plain_scalar
string_scalar "if"
: ":"
flow_node
plain_scalar
string_scalar "needs.install-and-build.outputs.performance == 'true' && git"...
block_mapping_pair
flow_node
plain_scalar
string_scalar "uses"
: ":"
flow_node
plain_scalar
string_scalar "./.github/workflows/test-bench-reusable.yml"
block_mapping_pair
flow_node
plain_scalar
string_scalar "with"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "ref"
: ":"
flow_node
plain_scalar
string_scalar "${{ needs.install-and-build.outputs.commit_sha }}"
block_mapping_pair (+62 nodes collapsed)
block_mapping_pair (+64 nodes collapsed)
block_mapping_pair
flow_node
plain_scalar
string_scalar "required-checks"
: ":"
block_node
block_mapping
block_mapping_pair
flow_node
plain_scalar
string_scalar "name"
: ":"
flow_node
plain_scalar
string_scalar "Required Checks"
block_mapping_pair
flow_node
plain_scalar
string_scalar "needs"
: ":"
flow_node
flow_sequence
[ "["
flow_node
plain_scalar
string_scalar "install-and-build"
, ","
flow_node
plain_scalar
string_scalar "unit-test"
, ","
flow_node
plain_scalar
string_scalar "typecheck"
, ","
flow_node
plain_scalar
string_scalar "lint"
, ","
flow_node
plain_scalar
string_scalar "e2e-tests"
, ","
flow_node
plain_scalar
string_scalar "db-tests"
, ","
flow_node
plain_scalar
string_scalar "performance"
, ","
flow_node
plain_scalar
string_scalar "security-checks"
, ","
flow_node
plain_scalar
string_scalar "chromatic"
] "]"
block_mapping_pair
flow_node
plain_scalar
string_scalar "if"
: ":"
flow_node
plain_scalar
string_scalar "always()"
block_mapping_pair
flow_node
plain_scalar
string_scalar "runs-on"
: ":"
flow_node
plain_scalar
string_scalar "ubuntu-slim"
block_mapping_pair (+86 nodes collapsed)