chore: switch release-please to single-package mode (one tag for all)#33
Conversation
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
ogpeek | 65e98bf | Commit Preview URL Branch Preview URL |
May 06 2026, 09:35 AM |
194623e to
700b992
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 700b9922d3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
700b992 to
15af5fd
Compare
There was a problem hiding this comment.
Pull request overview
This PR reconfigures the repository’s release-please setup to cut one coordinated monorepo release per cycle (single vX.Y.Z tag + single GitHub Release + single root CHANGELOG.md), and updates the release workflow so all publish steps key off that single release event.
Changes:
- Switch
release-please-config.jsonfrom per-package entries to a single root (".") package withextra-filesto bump all workspace package versions in lockstep. - Collapse
.release-please-manifest.jsonto a single"."version entry. - Simplify
.github/workflows/release-please.ymloutputs to onerelease_created/tag_namepair and add a job to build + upload the Chrome extension zip to the GitHub Release.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| release-please-config.json | Moves to single root package mode and uses extra-files to bump all workspace package versions together. |
| .release-please-manifest.json | Collapses manifest to a single "." version entry for the whole repo release. |
| .github/workflows/release-please.yml | Gates all publish steps on the single root release output and adds extension zip upload to the GitHub Release. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Restructure the release-please pipeline so the entire monorepo cuts a single coordinated release per cycle — one git tag, one GitHub Release, one CHANGELOG — instead of producing per-package tags and Releases. Why --- The earlier setup tracked each workspace package independently: - packages/ogpeek as bare-tagged "vX.Y.Z" on npm - packages/ogpeek-react as "ogpeek-react-vX.Y.Z" on npm - packages/ogpeek-extension (added in #28/#30) as "ogpeek-extension-vX.Y.Z" on GitHub Releases That's the standard release-please monorepo shape, but it produces asymmetric tag namespaces (one bare, two prefixed) and forces every "do they release together?" question through linked-versions plugin configuration, which we already started running into on #32. In practice all three packages are co-developed and ship together — @ogpeek/react and ogpeek-extension are both wrappers around the engine and aren't useful at versions out of sync with it. Treating them as one product matches reality and removes a class of release-tooling edge cases (phantom bumps, plugin behavior on mismatched starting versions, asymmetric tag formats, missing path anchors for Release-As footers). Changes ------- - release-please-config.json: - Replace the per-package map with a single root entry ("." path). package-name is "ogpeek" (the project name; matches the existing "vX.Y.Z" tag namespace, so v0.5.0 stays a meaningful boundary). - include-component-in-tag stays false → tags are "vX.Y.Z" with no prefix, continuing the existing convention. - extra-files lists every package.json that release-please should bump in lockstep with the root version: ogpeek, @ogpeek/react, ogpeek-extension. release-please's built-in node updater handles each "version" field automatically. - Drop the linked-versions plugin and separate-pull-requests flag — both unnecessary in single-package mode (there's only one component to coordinate). - .release-please-manifest.json: collapse the two per-package entries into a single "." entry at "0.5.0" — matching ogpeek + @ogpeek/react on npm and the existing v0.5.0 tag. - .github/workflows/release-please.yml: - Replace the four per-package outputs with a single release_created + tag_name pair, both keyed against the "." path. - Gate publish-ogpeek and publish-ogpeek-react on the same single output so they always fire together with the new umbrella release. - Add publish-ogpeek-extension that runs alongside the other two: builds the workspace libs explicitly (no reliance on the website-anchored libs:build script), runs build:chrome + the zip script directly to avoid double-building libs through package:chrome, and uploads dist/ogpeek-chrome.zip to the GitHub Release with --clobber for re-run idempotency. This job uses GITHUB_TOKEN only (contents: write) — no npm credentials, no OIDC. Trade-offs ---------- - All three packages always share a version going forward. A fix in one package bumps all three (phantom bump for the others on npm / on a new GitHub Release). Acceptable because the three move together anyway. - Per-package CHANGELOG.md files (packages/ogpeek/CHANGELOG.md, packages/ogpeek-react/CHANGELOG.md) keep their historical entries but won't get new ones — the next release writes only to the root CHANGELOG.md. That's intentional: the umbrella release notes are the new source of truth, scoped per-package via Conventional Commit scopes (feat(ogpeek-extension), fix(ogpeek-react), etc.) inside each entry. - Existing per-component tags (ogpeek-react-v0.5.0) become orphaned but harmless — git keeps them; GitHub keeps the matching Release. Verification after merge ------------------------ This commit is a chore (no Conventional Commit type that triggers a bump), so the release-please run on push will not propose a release. The next feat/fix that lands on main will produce the first single-package-mode release PR — expected: - One "chore: release main" PR with version bumped to 0.5.1 / 0.6.0 / 1.0.0 (per the bump rules) on the root CHANGELOG. - All three package.jsons updated to the new version via extra-files. - Merging cuts a single "vX.Y.Z" tag + a single GitHub Release. - Three publish jobs fire from the one release_created event: publish-ogpeek (npm), publish-ogpeek-react (npm), publish-ogpeek-extension (GitHub Release zip upload). Supersedes #32, which approached the extension-tracking problem within the existing per-package monorepo structure. https://claude.ai/code/session_0162rG86ukDFiBZfqgEADYfp
15af5fd to
65e98bf
Compare
Summary
Restructure the release-please pipeline so the entire monorepo cuts a single coordinated release per cycle — one
vX.Y.Zgit tag, one GitHub Release, one rootCHANGELOG.md— instead of producing per-package tags and Releases. Supersedes #32, which kept the per-package monorepo structure but ran into asymmetric tag namespaces andlinked-versionsplugin edge cases.In practice all three workspace packages —
ogpeek(engine, npm),@ogpeek/react(drop-in components, npm),ogpeek-extension(Chrome MV3 wrapper, GitHub Release zip) — are co-developed and ship together.@ogpeek/reactand the extension are both wrappers around the engine and aren't useful out of sync with it. Treating them as one product matches reality and removes a class of release-tooling edge cases (phantom bumps, mismatched starting versions, asymmetric tag formats, missing path anchors forRelease-Asfooters).Changes
release-please-config.json"."path).package-name: "ogpeek"(the project name; matches the existingvX.Y.Ztag namespace, sov0.5.0stays a meaningful boundary).include-component-in-tag: false→ tags arevX.Y.Zwith no prefix, continuing the existing convention.extra-fileslists everypackage.jsonthat release-please should bump in lockstep with the root version:ogpeek,@ogpeek/react,ogpeek-extension. release-please's built-innodeupdater handles eachversionfield automatically.linked-versionsplugin andseparate-pull-requestsflag — both unnecessary in single-package mode..release-please-manifest.json"."entry at"0.5.0"— matchingogpeek+@ogpeek/reacton npm and the existingv0.5.0tag..github/workflows/release-please.ymlrelease_created+tag_namepair, both keyed against the"."path.publish-ogpeekandpublish-ogpeek-reacton the same single output so they always fire together with the new umbrella release.publish-ogpeek-extensionthat runs alongside the other two: builds the workspace libs explicitly (no reliance on the website-anchoredlibs:buildscript), runsbuild:chrome+ the zip script directly to avoid double-building libs throughpackage:chrome, and uploadsdist/ogpeek-chrome.zipto the GitHub Release with--clobberfor re-run idempotency. UsesGITHUB_TOKENonly — no npm credentials, no OIDC.Trade-offs
packages/ogpeek/CHANGELOG.mdandpackages/ogpeek-react/CHANGELOG.mdkeep their historical entries but won't get new ones — the next release writes only to the rootCHANGELOG.md. The umbrella release notes are the new source of truth, scoped per-package via Conventional Commit scopes (feat(ogpeek-extension):,fix(ogpeek-react):, etc.) inside each entry.ogpeek-react-v0.5.0(created in chore: release main #31) stays in git/on GitHub but won't get successors. Harmless.Test plan (after merge)
This commit is a
chore:, so the release-please run on push will not propose a release immediately. The nextfeat:/fix:that lands onmainwill produce the first single-package-mode release PR. Expected:chore: release mainPR with the new version bumped on a single rootCHANGELOG.md.package.jsonfiles (packages/ogpeek/,packages/ogpeek-react/,packages/ogpeek-extension/) updated to the new version viaextra-files.vX.Y.Ztag + a single GitHub Release.release_createdevent:publish-ogpeek(npm),publish-ogpeek-react(npm),publish-ogpeek-extension(GitHub Release zip upload).If a smoke test is preferred without waiting for a real change, force one with a
Release-As: 0.5.1footer on a follow-up commit on this branch before merge.Korean
요약
release-please를 모노레포 모드 → 단일 패키지 모드로 전환. 한 번의 릴리즈 사이클에 git 태그 1개 (
vX.Y.Z), GitHub Release 1개, CHANGELOG 1개 (루트) — 패키지별로 따로 찍지 않음. #32을 대체.세 패키지(
ogpeek엔진 /@ogpeek/react컴포넌트 /ogpeek-extension확장)가 사실상 함께 진화하고 함께 발표되는 한 제품이라는 결정에 따라 설정을 그 모양으로 맞춤. 이전 모노레포 모드에서 발생하던 비대칭 태그, linked-versions 플러그인 가장자리 케이스, Release-As path-anchor 문제 등이 일괄 사라짐.핵심 변경
release-please-config.json: 단일 루트 entry (".") +extra-files로 세 패키지의package.json#version을 한꺼번에 bump. linked-versions / separate-pull-requests 플래그 제거..release-please-manifest.json:{".": "0.5.0"}한 줄.트레이드오프
feat(ogpeek-extension):같은 Conventional Commit scope로 어느 패키지 변경인지 구분.ogpeek-react-v0.5.0같은 component-prefixed 태그는 orphan으로 남지만 무해.검증 (머지 후)
이 커밋은 chore라서 즉시 릴리즈 PR이 열리지는 않음. 다음 feat/fix가 main에 들어오면 그때 첫 single-mode 릴리즈 PR 생성 → 머지 →
vX.Y.Z태그 1개 + 세 publish job 동시 작동.스모크 테스트를 즉시 보고 싶으면 머지 전에 이 브랜치에
Release-As: 0.5.1footer 박은 커밋 추가하면 됩니다.https://claude.ai/code/session_0162rG86ukDFiBZfqgEADYfp
Generated by Claude Code