Skip to content

fix(release): set explicit empty component so the CLI release PR matches#226

Merged
theagenticguy merged 1 commit into
mainfrom
fix/release-please-empty-component
Jun 11, 2026
Merged

fix(release): set explicit empty component so the CLI release PR matches#226
theagenticguy merged 1 commit into
mainfrom
fix/release-please-empty-component

Conversation

@theagenticguy

Copy link
Copy Markdown
Owner

The actual root cause (npm stuck at 0.7.4)

After collapsing to one published component (#222, package-name: "@opencodehub/cli", no component), release-please infers the component from the package-name scope as cli. But the release PR (branch release-please--branches--main, title chore: release main) carries no component. In buildRelease's standalone-component check this mismatches:

⚠ PR component: undefined does not match configured component: cli

So release-please builds zero candidate releases for the merged release PR → tags nothing → release_created=false → the workflow_call to release.yml never fires → npm never publishes. The "untagged, merged release PRs outstanding - aborting" message is only the downstream symptom in createPullRequests (it refuses to open a new PR while a merged autorelease: pending PR exists).

Found by reading the failing run's Building releases trace (line 50). #225's branch/title are identical to PRs that released fine — so it wasn't a branch-name issue; it's the inferred-vs-empty component mismatch.

Fix

One line: "component": "" on the . package, so the configured component is empty and matches the PR's empty parsed component.

Expected sequence on merge

  1. createReleases finds the outstanding autorelease: pending chore: release main #225, now component-matches → builds + tags v0.7.6, flips chore: release main #225autorelease: tagged, sets release_created=true.
  2. release-please.yml release job fires → workflow_callrelease.ymlnpm publish 0.7.6 (entry workflow = release-please.yml → matches the trusted publisher → OIDC succeeds).
  3. createPullRequests then opens a fresh 0.7.7 PR for this config-fix commit.

This finally unsticks the published CLI via the automated (trusted-publisher-matching) path — no npm-account change needed.

The single-component collapse (#222) set package-name "@opencodehub/cli" with
no `component`. release-please then INFERS the component from the package
name's scope as "cli", but the release PR (branch release-please--branches--main,
title "chore: release main") carries NO component. In buildRelease's
standalone-component check this mismatches:

  ⚠ PR component: undefined does not match configured component: cli

so release-please builds ZERO candidate releases for the merged release PR,
tags nothing, and returns release_created=false — the workflow_call to
release.yml never fires and npm never publishes. (This is the real cause behind
the "untagged, merged release PRs outstanding" abort, which is only a downstream
symptom in createPullRequests.)

Fix: set `"component": ""` explicitly so the configured component is empty and
matches the PR's empty parsed component. With this, createReleases builds and
tags v0.7.6 for the outstanding #225, flips it to autorelease:tagged, sets
release_created=true, and the automated release-please.yml → workflow_call →
release.yml chain publishes via the matching trusted-publisher OIDC path.
@theagenticguy theagenticguy merged commit 4188b52 into main Jun 11, 2026
42 checks passed
@theagenticguy theagenticguy deleted the fix/release-please-empty-component branch June 11, 2026 16:29
theagenticguy added a commit that referenced this pull request Jun 11, 2026
…LI starvation (#227)

## Why the single-component approach failed (proven from source)

The collapse to one root package (#222, #226) **structurally cannot
create a release** in release-please v17.6.0:
- `this.component = options.component ||
normalizeComponent(packageName)` — the `||` falsy-coerces `component:
""`, so it derives `cli` from `@opencodehub/cli`.
- `buildRelease`'s standalone-component check (single release entry)
then compares the release PR's component (`undefined` — branch
`release-please--branches--main`) against `cli` → mismatch → **zero
releases built**, `release_created=false`, npm never publishes.
- Observed live: `⚠ PR component: undefined does not match configured
component: cli`. `component: ""` provably can't fix it.

## Why two components is the correct shape

With **2 components** the aggregate release PR has 2 release entries
(`length === 2`), so that broken standalone-component check is **skipped
entirely** — which is exactly why this scheme released reliably for 20+
versions. Reverting is the proven path, not a regression.

## The original bug, fixed properly

The starvation bug you hit (private root absorbs every commit → ran to
0.8.5, while the published cli only saw `packages/cli/**` → starved at
0.7.4) is now fixed with the purpose-built **`linked-versions`** plugin:
```json
"plugins": [{ "type": "linked-versions", "groupName": "opencodehub", "components": ["root", "cli"] }]
```
linked-versions keeps root + cli in lockstep — any commit that bumps
root bumps cli to the same version. **The published CLI now advances on
every release**, which is the actual fix you asked for.

## State reconciliation
- Manifest reseeded to the last component-format tags: `root 0.8.5`,
`cli 0.7.4` (both tags exist → clean boundary detection, no
giant-changelog risk).
- `package.json` versions aligned (root 0.8.5, cli 0.7.4 = npm latest).
- Cleared the stuck `autorelease: pending` label on the abandoned
single-component PR #225.
- The bare `v0.7.4`/`v0.7.5` bootstrap tags from the abandoned attempt
are inert under this config (no component → don't match).

## Expected on merge
release-please opens a release PR bumping **both** components to
**0.8.6** (linked, highest+patch). Merging it → `release_created=true` →
tags `root-v0.8.6` + `cli-v0.8.6` → automated `release-please.yml →
release.yml` chain → **npm publishes `@opencodehub/cli@0.8.6`** via the
matching trusted-publisher OIDC path. (npm jumps 0.7.4 → 0.8.6; forward
+ valid. cli now tracks the unified line.)

Co-authored-by: T <t@example.com>
@github-actions github-actions Bot mentioned this pull request Jun 11, 2026
theagenticguy pushed a commit that referenced this pull request Jun 11, 2026
🤖 Automated release via release-please
---


<details><summary>root: 0.8.6</summary>

##
[0.8.6](root-v0.8.5...root-v0.8.6)
(2026-06-11)


### Bug Fixes

* **release:** collapse release-please to one published @opencodehub/cli
component
([#222](#222))
([ab749bd](ab749bd))
* **release:** make npm publish idempotent on stuck-release re-runs
([#224](#224))
([12e1c66](12e1c66))
* **release:** restore two-component config + linked-versions to fix CLI
starvation
([#227](#227))
([f849f24](f849f24))
* **release:** set explicit empty component so the CLI release PR
matches
([#226](#226))
([4188b52](4188b52))
</details>

<details><summary>cli: 0.8.6</summary>

##
[0.8.6](cli-v0.7.4...cli-v0.8.6)
(2026-06-11)


### Bug Fixes

* **release:** restore two-component config + linked-versions to fix CLI
starvation
([#227](#227))
([f849f24](f849f24))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+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