Skip to content

fix(ci): port the release-green ESLint gate fix to main (base-red #12363) - #12618

Merged
diegosouzapw merged 1 commit into
mainfrom
fix/main-basereds
Sep 3, 2026
Merged

fix(ci): port the release-green ESLint gate fix to main (base-red #12363)#12618
diegosouzapw merged 1 commit into
mainfrom
fix/main-basereds

Conversation

@diegosouzapw

Copy link
Copy Markdown
Owner

⚠️ base-red inherited: #12363

What this fixes

main's base-red (#12363) lists ESLint: could not parse eslint json as a hard failure. That message is misleading: main is still running the pre-#11890 ESLint gate, which has a 30-minute ceiling, no --cache, and a call site that collapses every non-JSON outcome into that one string.

A cold runner crosses 30 minutes on this repository now, so the gate is killed by its own ceiling — and then reported as a parser problem, which sends whoever triages it after parseEslintJson instead of the ceiling. The release branch fixed this and main never received it: exactly the "gate/infra fix that landed only on the release branch" case that _shared/merge-gates.md §8 prescribes a companion PR for, and that #12363's own body describes.

The port

Release-side change carried over verbatim (the two files differ between the branches only in these hunks):

  • ESLINT_TIMEOUT_MS = 60min replaces the inline 30-minute ceiling.
  • --cache --cache-location .eslintcache on the gate's ESLint invocation.
  • evaluateEslintRun() reports a ceiling kill as a ceiling kill, and only calls the report invalid when ESLint exited 0 without producing one.

Validation (TDD)

The test is ported first and fails on main's current script:

✖ evaluateEslintRun preserves an ESLint timeout instead of misreporting invalid JSON
  TypeError: evaluateEslintRun is not a function

With the port applied: tests/unit/validate-release-green.test.ts 31/31 pass. Both other consumers of the script stay green — release-green-docs-drift-7253 3/3, sync-next-cycle 11/11. Prettier clean on both files.

Scope note on the rest of #12363

This PR deliberately fixes only the ESLint gate. Triage of the other five hard failures in that report:

  • Unit + integration ceiling kills — the same defect release/v3.8.51 currently carries (🔴 Release branch not green: release/v3.8.51 #12581), whose fix is in an open PR on the release side. Not main-specific; it reaches main through the cycle.
  • Package artifact ceiling kill + boot-smoke skip — boot-smoke is a consequence of the former. Main does not carry the missing-frontmatter defect that broke the release build (docs/reference/REMOVED_PROVIDERS.md does not exist on main), so it is not that cause.
  • Vitest provider-family-combos — the two failures are 20s timeouts, not assertion failures. Running the full vitest suite locally on both branches reproduces them on release/v3.8.51 more severely (4 failures, 81s) than on main (2 failures) — and CI calls that release suite green. It is load-sensitive, not a main defect.

The report is also from a run created 2026-09-01T18:34Z; main has advanced 5 commits since. Validate main branch only runs on the scheduled sweeps, so the next one re-verdicts the current tip.

)

`main` still runs the pre-#11890 ESLint gate: a 30-minute ceiling, no
`--cache`, and a call site that funnels every non-JSON outcome into the
single detail string "could not parse eslint json".

A cold runner now crosses 30 minutes on this repository, so the gate is
killed, and main's code then reports the timeout as a parser problem —
which is why base-red #12363 lists `ESLint: could not parse eslint json`
with nothing to act on. The release branch fixed exactly this and main
never received it, the case merge-gates §8 prescribes a companion PR for.

Ports the release-side change verbatim:
- `ESLINT_TIMEOUT_MS` (60min) replaces the inline 30-minute ceiling.
- `--cache --cache-location .eslintcache` on the gate's ESLint run.
- `evaluateEslintRun()` keeps a ceiling kill reported as a ceiling kill,
  and only calls the report invalid when ESLint actually exited 0 without
  producing one.

Validated TDD: the ported test fails on main's current script with
`TypeError: evaluateEslintRun is not a function`, and passes (31/31)
with the port. Sibling suites `release-green-docs-drift-7253` (3/3) and
`sync-next-cycle` (11/11) stay green.

@ggiak ggiak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

CI Coverage Report

  • Coverage job: success
  • PR test policy: success

Coverage artifact was not available for this run.

@diegosouzapw
diegosouzapw merged commit c0b2253 into main Sep 3, 2026
36 of 48 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants