Skip to content

ci(publish): release only when every check of the commit passed - #292

Merged
pviti merged 1 commit into
fix/publish-release-toolingfrom
ci/publish-after-checks
Oct 15, 2026
Merged

pviti merged 1 commit into
fix/publish-release-toolingfrom
ci/publish-after-checks

Conversation

@pviti

@pviti pviti commented Oct 15, 2026

Copy link
Copy Markdown
Member

Release only when every check of the commit passed

Stacked on #291 (base fix/publish-release-tooling). When #291 is merged and its branch deleted, GitHub moves the base of this PR to main.

On the push to main, publish.yml used to start alongside Verify, Integration and CodeQL, without waiting for them. The merge of #290 shows it: Publish ended at 10:04, Verify at 10:07. A release could therefore reach npm from a commit whose lint, tests on the minimum Node version or integration suites were failing.

Change

A new first job, Checks of the commit, waits for every other workflow run of the commit, Publish excluded.

  • It accepts only success, skipped or neutral. Otherwise it stops the release with an error that names the failed workflows.
  • The plan, the publication and the Slack messages run only after it.
  • On a manual run (workflow_dispatch, to resume a release) it checks the same commit and ignores earlier failed Publish runs.
  • Timeout: 60 minutes.

Verification

I tested the wait and filter logic on the merge commit of #290 (7d73576):

  • Integration, Verify and CodeQL succeeded;
  • nothing is pending, nothing failed;
  • the failed Publish run is excluded.

🤖 Generated with Claude Code

The publish workflow ran alongside Verify, Integration and CodeQL on the push
to main, so a release could reach npm from a commit whose lint, tests on the
minimum Node or integration suites were failing. A first job now waits for
the other workflow runs of the commit and stops the release unless all of
them succeeded.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@pviti
pviti merged commit 6b3699d into fix/publish-release-tooling Oct 15, 2026
7 checks passed
pviti added a commit that referenced this pull request Oct 15, 2026
## Fix the publish job after #290

The first run of the new `publish.yml` (merge of #290, [run
38717349030](https://github.com/commercelayer/commercelayer-cli/actions/runs/38717349030))
failed with `Unknown command 'ship'`. It stopped before publishing
anything: no tags, nothing on npm, no releases.

### Cause

The publish job checks out the commit that set the versions (`cf7fd277`,
the release commit of #288) and ran the `cl-release` of that commit,
which predates `ship`.

### Fix

`cl-release` now comes from the workflow's own commit, checked out in
`.release-tooling`, and is used by the manifest check and by `ship`. The
packages are still built, tested and published from the release commit.
The tooling must match the workflow that calls it anyway: in the future
the release commit could also have older or newer tooling.

### Release only when every check passed (#292, merged into this branch)

A first job, **Checks of the commit**, waits for every other workflow
run of the commit (Verify, Integration, CodeQL, …). The release stops
unless all of them succeeded. Before, Publish ran alongside them without
waiting: on the merge of #290 it ended at 10:04, Verify at 10:07.

### Verification

Locally I reproduced the job: checkout of `cf7fd277` with this branch's
tooling nested in `.release-tooling`, then `cl-release manifest` and
`cl-release ship --dry-run`. Result: the 11 pending packages.

### ⚠️ On merge

Merging this PR triggers `publish.yml` on main. Once the checks of the
merge commit are green, it publishes the 11 pending majors: cleanups
4.0.0, metrics, microstore, orders, provisioning, resources, seeder,
tags, token, triggers and webhooks.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.

1 participant