diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bdc74da446b..e99774e64bc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -355,7 +355,7 @@ jobs: node scripts/lint.js --setup node scripts/lint.js --actionlint node scripts/lint.js --yamllint - node --test ${{ env.HELPER_TESTS }} + node --test --test-concurrency=1 ${{ env.HELPER_TESTS }} # Avoid setup-node downloads on ECS, where nodejs.org may be unreachable # through the egress proxy; reuse the machine's Node instead. @@ -496,7 +496,7 @@ jobs: # regression tests. Linux-only (they're platform-independent). - name: 'Run .github/scripts helper tests' if: "${{ needs.classify_pr.outputs.skip_ci != 'true' && steps.ci_profile.outputs.ci_profile == 'full' }}" - run: 'node --test ${{ env.HELPER_TESTS }}' + run: 'node --test --test-concurrency=1 ${{ env.HELPER_TESTS }}' # The install-script packaging suite needs zip/unzip, and throws on a # CI host that ships neither, so a silent skip there is impossible. diff --git a/scripts/tests/ci-platform-lanes.test.js b/scripts/tests/ci-platform-lanes.test.js index 6be3996d7e6..2a1cd9c7ad1 100644 --- a/scripts/tests/ci-platform-lanes.test.js +++ b/scripts/tests/ci-platform-lanes.test.js @@ -197,6 +197,18 @@ describe('platform lanes — the retired sensitivity classifier', () => { }); }); +describe('GitHub helper tests', () => { + it('runs every invocation serially', () => { + const helperSteps = Object.values(ci.jobs) + .flatMap((job) => job.steps ?? []) + .filter((step) => String(step.run ?? '').includes('env.HELPER_TESTS')); + expect(helperSteps).not.toHaveLength(0); + for (const step of helperSteps) { + expect(String(step.run), step.name).toContain('--test-concurrency=1'); + } + }); +}); + describe('platform lanes — a failing nightly is visible', () => { it('files an issue when the scheduled CI run fails on main', () => { // A nightly nobody is told about is the same silence the merge-queue gate