From e4f8867ac7a196a339d71b3b5a69450d1e650cd0 Mon Sep 17 00:00:00 2001 From: Luke Parke <5702154+LukasParke@users.noreply.github.com> Date: Wed, 21 Oct 2026 17:57:30 +0000 Subject: [PATCH] fix(release): derive version-PR allowlist from gen:version; flag missing Slack config The release train has failed every run since 2026-09-01 with "path outside allowlist: packages/agent/src/mcp/version.ts": #104 hard-coded packages/*/src/version.ts, then #102 moved the generated file. - verify-version-pr-scope.sh now derives the allowed generated version files from each package's `gen:version` script (the writeFileSync path in the generator), read from the trusted main checkout. Fails closed if a generator can't be parsed. - Add `--self-test` (offline) and run it in CI's lint job. - release-train: warn + job summary when the Slack alert secrets are empty, and an error + summary when a run fails without alerting. - Fix stale version.ts paths in turbo.json outputs and a publish.yaml note. Co-Authored-By: Claude Opus 5.5 (1M context) --- .github/scripts/verify-version-pr-scope.sh | 198 +++++++++++++++------ .github/workflows/ci.yaml | 6 + .github/workflows/publish.yaml | 2 +- .github/workflows/release-train.yaml | 41 +++++ turbo.json | 2 +- 5 files changed, 197 insertions(+), 52 deletions(-) diff --git a/.github/scripts/verify-version-pr-scope.sh b/.github/scripts/verify-version-pr-scope.sh index 38e3882a..f7cc3ec5 100755 --- a/.github/scripts/verify-version-pr-scope.sh +++ b/.github/scripts/verify-version-pr-scope.sh @@ -4,12 +4,19 @@ # mechanical `changeset version` output before an unattended merge. # # Two layers, both fail-closed: -# 1. Path allowlist: consumed changesets (.changeset/*.md) and per-package -# package.json / CHANGELOG.md / src/version.ts. No root package.json -# (private, unversioned), no lockfile (workspace:* deps don't touch it). -# src/version.ts is the committed gen:version output (see publish.yaml's -# `pnpm run version` note) — a Version PR bumping @openrouter/mcp always -# carries it, so excluding it would fail every such train run. +# 1. Path allowlist: consumed changesets (.changeset/*.md), per-package +# package.json / CHANGELOG.md, and each package's committed gen:version +# output (see publish.yaml's `pnpm run version` note). No root +# package.json (private, unversioned), no lockfile (workspace:* deps +# don't touch it). The gen:version output paths are DERIVED, not +# hard-coded: for every packages/*/package.json with a +# `"gen:version": "node