Skip to content

chore(ci): dont cancel releases job to prevent skipped publishes#1780

Merged
matthv merged 1 commit into
mainfrom
chore/serialize-release-concurrency
Jul 24, 2026
Merged

chore(ci): dont cancel releases job to prevent skipped publishes#1780
matthv merged 1 commit into
mainfrom
chore/serialize-release-concurrency

Conversation

@matthv

@matthv matthv commented Jul 24, 2026

Copy link
Copy Markdown
Member

Problem

build.yml has no concurrency key, so Release packages jobs from successive merges can overlap, and multi-semantic-release skips any run whose checkout is no longer the branch tip (The local branch main is behind the remote one, therefore a new version won't be published).

Verified forensics of today's incident (2026-07-24)

Net: npm has ai-proxy@1.12.1 and workflow-executor@1.21.1; git has a ghost tag ai-proxy@1.12.2; main is green.

Fix (this PR)

Per-branch concurrency group on the release job, cancel-in-progress: false — release runs serialize instead of overlapping, and a release is never interrupted mid-publish.

What this deliberately does NOT do

  • No ref: tip checkout / no git reset: the dist cache is keyed by github.sha (fail-on-cache-miss: true); releasing from another ref would publish stale artifacts.
  • Does not fix the re-run trap (structural): a re-run of a partially-released job can never publish — its checkout sha is frozen while its own attempt-1 pushes moved the tip. After a failed release, do not re-run: push a new commit (or merge the next PR) instead.
  • Does not fix the ghost release: @forestadmin/ai-proxy@1.12.2 is tagged in git but absent from npm; semantic-release now considers it released and will never publish it. Needs a manual decision (publish from the tag manually, drop the tag so it re-releases, or fold it into the next ai-proxy release).

Effect on the current backlog

Merging this PR is a push to main: its release run (serialized, at tip) will publish the pending @forestadmin/workflow-executor@1.22.0 (verified: no 1.22.0 tag exists, feat is pending) and dispatch the Docker image build. It will NOT resurrect ai-proxy@1.12.2 (see ghost release above).

🤖 Generated with Claude Code

Concurrent merges to main trigger overlapping release jobs. When two run
in parallel, multi-semantic-release sees the branch as "behind the remote
one" and silently skips publishing — a merged feat/fix never reaches npm
(e.g. @forestadmin/workflow-executor stuck at 1.21.1 despite a merged feat).

Add a per-branch concurrency group to the release job so runs serialize.
cancel-in-progress stays false: a release must never be interrupted
mid-publish. The tip run then drains the whole pending backlog.

Deliberately not changing the checkout to the branch tip: the dist cache
is keyed by github.sha, so releasing from a different ref would publish
stale build artifacts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@qltysh

qltysh Bot commented Jul 24, 2026

Copy link
Copy Markdown

Qlty


Coverage Impact

This PR will not change total coverage.

🚦 See full report on Qlty Cloud »

🛟 Help
  • Diff Coverage: Coverage for added or modified lines of code (excludes deleted files). Learn more.

  • Total Coverage: Coverage for the whole repository, calculated as the sum of all File Coverage. Learn more.

  • File Coverage: Covered Lines divided by Covered Lines plus Missed Lines. (Excludes non-executable lines including blank lines and comments.)

    • Indirect Changes: Changes to File Coverage for files that were not modified in this PR. Learn more.

@arnaud-moncel arnaud-moncel changed the title chore(ci): serialize package releases to prevent skipped publishes chore(ci): don't cancel releases job to prevent skipped publishes Jul 24, 2026
@arnaud-moncel arnaud-moncel changed the title chore(ci): don't cancel releases job to prevent skipped publishes chore(ci): dont cancel releases job to prevent skipped publishes Jul 24, 2026
@matthv
matthv merged commit e4e1af9 into main Jul 24, 2026
32 checks passed
@matthv
matthv deleted the chore/serialize-release-concurrency branch July 24, 2026 09:49
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