Skip to content

fix(ci): stop comment runs from evicting the release push run - #585

Merged
rhuanbarreto merged 2 commits into
mainfrom
claude/release-workflow-concurrency
Aug 22, 2026
Merged

rhuanbarreto merged 2 commits into
mainfrom
claude/release-workflow-concurrency

Conversation

@rhuanbarreto

Copy link
Copy Markdown
Contributor

What happened

Merging #581 did not update the release branch. CI was green, the merge was clean, and the release workflow reported success — but release stayed on the prior commit.

The merge fired two release runs in the same second:

12:50:14Z  cc8d93c  event=push           CANCELLED — zero jobs ran
12:50:16Z  cc8d93c  event=issue_comment  success   — both jobs skipped

Both resolve github.ref_name to the default branch, so the workflow-level group held both:

concurrency:
  group: release-${{ github.ref_name }}
  cancel-in-progress: false

cancel-in-progress: false only protects a run already in progress. A pending run is evicted when a newer one joins the group, so the issue_comment run displaced the push run before it started a single job.

That matters because only the push run releases. Across the last 8 runs, every issue_comment run skipped both mutating jobs; the run that cut 0.55.0 was event=push:

10:43:40Z 1bd7306 event=push  ->  Pull request=SUCCESS   (cut 0.55.0)
12:50:14Z cc8d93c event=push  ->  CANCELLED, no jobs

It fails silently — no red check anywhere, just a missing release.

Why it recurs

Not a one-off. A bot comments on essentially every merged PR, so any comment landing within seconds of a push to main evicts the release run.

The fix

The group moves from the workflow to the two jobs that actually push the release branch, pull-request and release. Both keep one shared group, so they stay mutually exclusive with each other. A job gated off by check never joins the group, so a no-op comment run has nothing to displace.

Two-push ordering is unaffected: if a later merge evicts an earlier pending pull-request job, the surviving run is based on a newer main and covers both commits.

Already remediated separately

The lost run for cc8d93c was re-run manually, so the release branch is caught up — a452945 chore(release): 0.55.0 now sits on top of cc8d93c, 0 behind main, and #575 carries the changelog entry. This PR prevents the next occurrence.

Testing

Workflow parses; concurrency is absent at workflow level and present on both mutating jobs with the shared group. actionlint and zizmor run on this path in CI.

A merge to main fires two release runs at once: the push, and an
issue_comment from whichever bot comments on the PR. Both resolve
`github.ref_name` to the default branch, so the workflow-level concurrency
group held both. `cancel-in-progress: false` only protects a run already in
progress — a pending run is evicted when a newer one joins the group, so the
comment run displaced the push run before it started a single job.

Only the push run releases; every comment run has `check` gate both mutating
jobs off. Merging #581 hit this: the push run was cancelled with zero jobs,
CI stayed green, and the release branch silently kept the prior commit.

The group moves to `pull-request` and `release`, which are what actually push
the release branch. They share one group so they stay mutually exclusive, and
a job gated off by `check` never joins it, so a no-op comment run has nothing
to displace.

Signed-off-by: Rhuan Barreto <rhuan@barreto.work>
@coderabbitai

coderabbitai Bot commented Aug 22, 2026 •

Copy link
Copy Markdown

Important

Approval pending

CodeRabbit has no unresolved comments, but it could not review the latest commit because the review limit was reached. Follow the review guidance in this comment to continue.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 22, 2026 •

Copy link
Copy Markdown

Deploying archgate-cli with  Cloudflare Pages  Cloudflare Pages

Latest commit: 1a93314
Status: ✅  Deploy successful!
Preview URL: https://6ee680bf.archgate-cli.pages.dev
Branch Preview URL: https://claude-release-workflow-conc.archgate-cli.pages.dev

View logs

Comment thread .github/workflows/release.yml Resolved
@github-actions

github-actions Bot commented Aug 22, 2026 •

Copy link
Copy Markdown
Contributor

Code Coverage

Metric Value
Lines 99.9% (10624 / 10635)
Threshold 99.9% minimum — met
Platforms Linux + Windows

Full HTML report available in workflow artifacts.

Per-directory breakdown
Directory Coverage Lines
src/commands/ 100.0% 2194 / 2194
src/engine/ 100.0% 2618 / 2619
src/formats/ 100.0% 151 / 151
src/helpers/ 99.8% 5661 / 5671

GEN-004 keeps comments to current behaviour and leaves the why to commits
and PRs, which already carry it. The per-job notes on the shared group stay:
they describe what the group does, not how it got there.

Signed-off-by: Rhuan Barreto <rhuan@barreto.work>
@rhuanbarreto

Copy link
Copy Markdown
Contributor Author

@coderabbitai approve

@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown
✅ Action performed

Comments resolved and changes approved.

@rhuanbarreto
rhuanbarreto enabled auto-merge (squash) August 22, 2026 13:41
@rhuanbarreto
rhuanbarreto merged commit 9a3c881 into main Aug 22, 2026
24 checks passed
@rhuanbarreto
rhuanbarreto deleted the claude/release-workflow-concurrency branch August 22, 2026 13:41
@archgatebot archgatebot Bot mentioned this pull request Aug 22, 2026
rhuanbarreto pushed a commit that referenced this pull request Aug 22, 2026
# archgate

## [0.55.0](v0.54.0...v0.55.0)
(2026-08-22)

### Features

* **bun:** adopt Bun 1.4 archive, test parallelism, and terminal APIs
([#576](#576))
([22715ee](22715ee))

### Bug Fixes

* **ci:** stop comment runs from evicting the release push run
([#585](#585))
([9a3c881](9a3c881)),
references [#581](#581)
[#575](#575)
* **fs:** survive Bun 1.4's rejecting-read regression, and upgrade to
1.4.0 ([#574](#574))
([51f7ffc](51f7ffc))
* **session-context:** report a read failure instead of throwing it
([#577](#577))
([94ffdcd](94ffdcd)),
references [#576](#576)
[#574](#574)
[#576](#576)
* **session-context:** truncate previews on grapheme boundaries
([#581](#581))
([cc8d93c](cc8d93c))

---
This PR was generated with
[simple-release](https://github.com/TrigenSoftware/simple-release).

<details>
<summary>📄 Cheatsheet</summary>
<br>



You can configure the bot's behavior through a pull request comment
using the `!simple-release/set-options` command.

### Command Format

````md
!simple-release/set-options

```json
{
  "bump": {},
  "publish": {}
}
```
````

### Useful Parameters

#### Bump

| Parameter | Type | Description |
|-----------|------|-------------|
| `version` | `string` | Force set specific version |
| `as` | `'major' \| 'minor' \| 'patch' \| 'prerelease'` | Release type
|
| `prerelease` | `string` | Pre-release identifier (e.g., "alpha",
"beta") |
| `firstRelease` | `boolean` | Whether this is the first release |
| `skip` | `boolean` | Skip version bump |
| `byProject` | `Record<string, object>` | Per-project bump options for
monorepos |

#### Publish

| Parameter | Type | Description |
|-----------|------|-------------|
| `skip` | `boolean` | Skip publishing |
| `access` | `'public' \| 'restricted'` | Package access level |
| `tag` | `string` | Tag for npm publication |

### Usage Examples

#### Force specific version

````md
!simple-release/set-options

```json
{
  "bump": {
    "version": "2.0.0"
  }
}
```
````

#### Force major bump

````md
!simple-release/set-options

```json
{
  "bump": {
    "as": "major"
  }
}
```
````

#### Create alpha pre-release

````md
!simple-release/set-options

```json
{
  "bump": {
    "prerelease": "alpha"
  }
}
```
````

#### Publish with specific access and tag

````md
!simple-release/set-options

```json
{
  "bump": {
    "prerelease": "beta"
  },
  "publish": {
    "access": "public",
    "tag": "beta"
  }
}
```
````

### Custom Changelog Preamble

You can add custom markdown to the top of the changelog (right after the
version header) using the `!simple-release/set-preamble` command. The
markdown after the command line becomes the preamble.

```md
!simple-release/set-preamble

## What's new?

- The website was completely redesigned
- The new API gives you awesome possibilities
```

In a monorepo, pass the full package name after the command to target a
single package's changelog. Wrap the name in backticks so GitHub keeps
it as text instead of a mention:

```md
!simple-release/set-preamble `@your-org/core`

## Core changes

- New plugin system
```

Use one comment per package, plus one without a name for the whole
release.

### Access Restrictions

The commands can only be used by users with permissions:
- repository owner
- organization member
- collaborator

### Notes

- The last comment with `!simple-release/set-options` command takes
priority
- The last `!simple-release/set-preamble` comment per package takes
priority
- JSON must be valid, otherwise the `set-options` command will be
ignored
- Parameters apply only to the current release execution
- The commands can be updated by editing the comment or adding a new one


</details>

<!--
  Please do not edit this comment.
  simple-release-pull-request: true
  simple-release-branch-from: release
  simple-release-branch-to: main
-->

Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
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