chore(release): add release-please plumbing + curated 0.1.0 baseline (#1137) - #1332
Conversation
…1137) Install the product release-line machinery (Axis 1 of ADR-029) without cutting a tag. release-please (root/single-package, node type) opens/maintains a Release PR from Conventional Commits; nothing releases until a maintainer merges that PR. - release-please-config.json: node type, pre-1.0 bump rules (feat->minor, fix->patch, breaking->0.x minor), bootstrap-sha at current main, vX.Y.Z tags. - .release-please-manifest.json: 0.1.0 baseline so release-please manages 0.2.0+ and never rewrites the curated 0.1.0 section. - .github/workflows/release-please.yml: runs on push to main, default GITHUB_TOKEN, contents+pull-requests write only. - CHANGELOG.md: hand-curated 0.1.0 baseline (all integrations + main features). - ci.yml: drop the stale `develop` branch ref (ADR-029 cleanup). - RELEASING.md: status + the one-time `git tag v0.1.0` baseline procedure. The v0.1.0 tag stays a deliberate one-time manual step; every release after is release-please-automated. cd.yml deploy wiring + the PAT-for-CD-trigger remain deferred (need deploy targets). This commit type is `chore(release):` on purpose: it is non-releasable, so merging does not open a Release PR until real feat/fix work lands. Part of #1137 (the first v0.1.0 tag is the remaining, deliberately-deferred AC). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Piotr Swierzy <piotr.swierzy@blockydevs.com>
piotrswierzy
left a comment
There was a problem hiding this comment.
PR Review: #1332 — release-please plumbing + curated 0.1.0 baseline
(Review submitted as COMMENT — GitHub doesn't allow approving one's own PR.)
Summary
Solid, well-documented implementation of ADR-029 Axis 1. The config is schema-referenced and the pre-1.0 bump semantics (bump-minor-pre-major: true + bump-patch-for-minor-pre-major: false) match what RELEASING.md promises. The workflow's permissions are minimal (contents + pull-requests: write), concurrency-guarded, and the GitHub-hosted-runner choice is justified in-file. Verified independently that every adapter key named in the curated CHANGELOG (allegro.publicapi.v1, erli.shopapi.v1, infakt.accounting.v1, inpost.shipx.v1, prestashop.webservice.v1, subiekt.invoicing.v1, woocommerce.restapi.v3, ksef.publicapi.v2) matches a real manifest in the repo. The RELEASING.md "cutting the first tag" section and the first-Release-PR sanity-check note are exactly the operational detail a future maintainer needs.
🟡 IMPORTANT — bootstrap-sha is stale; the "stays dormant" claim no longer holds
release-please-config.json pins bootstrap-sha: 333a39b1 (#1319), but main has since advanced by three releasable commits:
b40902e9feat(ksef): emit FA(3) Platnosc …(#1317)a41a96e4fix(infakt): stop hardcoding payment_method …(#1309)678041c0feat(invoicing): persist issuance-time line snapshot …(#1329)
Two consequences on first run after merge:
- release-please will immediately open a
0.2.0Release PR containing those three commits — contradicting the PR's "keeps it dormant until real feature work lands" design (thechore(release):commit-type care is bypassed by the pre-existing feats). - Those commits' content is arguably already covered by the curated
0.1.0baseline (it's a snapshot "as of now" describing KSeF issuance/clearance and the inFakt integration), so #1317/#1309/#1329 would be double-attributed — once implicitly in 0.1.0, again explicitly in the generated 0.2.0 notes.
Fix: immediately before merging, bump bootstrap-sha to the then-current main tip (today 678041c0). Since main keeps moving, treat this as a merge-time checklist item rather than a one-off edit — worth a sentence in the PR body/RELEASING.md so whoever merges knows to refresh it.
🟢 Optional
- The
ci.ymldevelopcleanup is correct for a trunk-based repo and safely scoped. googleapis/release-please-action@v4is tag-pinned, matching the repo's existing convention (actions/checkout@v4) — fine; SHA-pinning is the stricter option if supply-chain hardening ever becomes a goal.
Verdict
🔄 Ready after one fix — refresh bootstrap-sha to main's tip at merge time; everything else is mergeable as-is.
piotrswierzy
left a comment
There was a problem hiding this comment.
/pr-review — systematic review (self-authored PR, so posting as comment; cannot self-approve)
Verdict: 🔄 would-approve with changes — machinery is installed cleanly; three IMPORTANT fixes needed, all sharing one root: the time-sensitivity of the bootstrap-sha anchor.
🟡 IMPORTANT
-
release-please-config.json:6—bootstrap-shais already stale, defeating the dormancy claim.333a39b1is a valid ancestor oforigin/main, but three releasable commits now sit after it (b40902e9feat #1317,a41a96e4fix #1309,678041c0feat #1329) — and this PR is behind main. On first post-merge run, release-please will immediately open a0.2.0Release PR crediting those KSeF/inFakt commits, which the curated0.1.0section already describes as baseline → double-crediting. Not catastrophic (nothing tags without a maintainer merge), but it falsifies the PR body's "only the squash commit sits after bootstrap-sha" claim. Fix: bumpbootstrap-shato the then-currentmaintip in the same push that updates the branch for merge — must be done at merge time, not earlier. -
CHANGELOG.md:7-8— the header's bump-semantics statement contradicts the shipped config. It says pre-1.0 "minor carries breaking changes, patch carries additive ones", butbump-patch-for-minor-pre-major: falsemeansfeat:bumps minor — so minor carries breaking and additive; onlyfix:lands on patch. RELEASING.md § Versioning policy carries the same internal contradiction (line ~36 vs ~39) — this PR copies the wrong half into a brand-new file. Fix: reword both to "minor carries features and breaking changes, patch carries fixes" (matches the config and the PR body's own stated mapping), or flip the config flag if minor-is-breaking-only was the real intent. -
RELEASING.md:~76-81— the manualv0.1.0tag recipe tags whatevermainis at tag time, silently shrinking the next release's commit window.bootstrap-shais only release-please's fallback; once av0.1.0tag + Release exist, it parses from that tag's commit instead.git checkout main && git pull && git tag -a v0.1.0tags the current tip — anyfeat:/fix:merged between bootstrap-sha and tag day drops out of the generated0.2.0changelog without appearing in the curated 0.1.0 notes. Fix: tag the bootstrap-sha commit explicitly (git tag -a v0.1.0 <bootstrap-sha>), or warn that tagging later moves the parse boundary and requires re-checking the pending Release PR.
🟢 SUGGESTIONS
.github/workflows/release-please.yml:37— pingoogleapis/release-please-actionby commit SHA (@<full-sha> # v4.x.y); the workflow holdscontents: write+pull-requests: write, and mutable tags on third-party actions are the classic supply-chain seam.CHANGELOG.md:121— the[0.1.0]reference link 404s until the manual tag lands (deliberate, self-healing); consider a note or omitting until then.
✅ Verified positives
- Workflow hygiene exactly right:
pushonmainonly; documented-minimum permissions;concurrencyqueues rather than kills mid-flight runs; GITHUB_TOKEN-won't-retrigger-CD caveat accurately documented in both places. - All config keys are real, schema-valid release-please fields and semantically coherent;
include-component-in-tag: falsecorrectly yieldsv0.1.0. - Manifest ↔ root
package.json(openlinker@0.1.0) consistent, keeping/v1/healthtruthful. - CHANGELOG accuracy is excellent — all nine adapter keys spot-checked against the local manifests match exactly, as do the role names, OL Dynamic Carrier, and
ShippingProviderManagerPortclaims. ci.ymlcleanup is complete and safe: exactly threedeveloprefs existed, all removed, nothing else references it.
|
The three pre-merge fixes from the review (stale |
… tag recipe (#1339) Pre-merge fixes for the 0.1.0 release-please baseline, from the PR #1332 review: - release-please-config.json: bump bootstrap-sha to the current main tip (e629837) so the first post-merge run stays dormant instead of opening a 0.2.0 Release PR that double-credits work the curated 0.1.0 section already describes (#1309/#1317/#1329/#1320/#1331). - CHANGELOG.md + RELEASING.md § Versioning policy: reword the pre-1.0 bump semantics to match the shipped config (minor = features + breaking, patch = fixes; bump-patch-for-minor-pre-major is false, so feat: bumps minor). RELEASING.md now cites the config keys so the two can't silently drift apart again. PUBLIC_API.md's "patch = additive" convention is intentionally untouched — that is the separate npm package axis (Changesets, deferred), not the product line. - RELEASING.md v0.1.0 recipe: tag the bootstrap-sha commit explicitly instead of the main tip at tag time — once a v0.1.0 tag + Release exist, release-please parses from that tag's commit, so tagging later silently drops commits from the generated 0.2.0 changelog. - release-please.yml: pin googleapis/release-please-action by commit SHA (v4.4.1) — the workflow holds contents+pull-requests write. Also merges origin/main (e629837) to bring the branch current. Refs #1332 Closes #1339 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Piotr Swierzy <piotr.swierzy@blockydevs.com>
|
#1339 implemented and pushed as
|
- CHANGELOG.md: annotate the intentionally-dead [0.1.0] release link (goes live with the one-time manual tag). - RELEASING.md: disambiguate the product vs npm-package pre-1.0 bump conventions (the two axes deliberately differ). - implementation plan: dated post-review amendment note recording the #1339 bootstrap-sha re-bump, the dropped redundant package-name config key, and the extras shipped beyond the plan. Refs #1332, #1339 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Piotr Swierzy <piotr.swierzy@blockydevs.com>
…1137) (#1332) Installs ADR-029 Axis-1 release machinery without cutting a tag: release-please workflow (SHA-pinned action, minimal permissions), schema-verified config with bootstrap-sha at the pre-merge main tip, {".": "0.1.0"} manifest, hand-curated 0.1.0 CHANGELOG baseline, RELEASING.md operational guide, and ci.yml develop-ref cleanup. Non-releasable on purpose (chore) — release-please stays dormant until the next feat/fix merges. The one-time manual v0.1.0 tag targets the bootstrap-sha commit per RELEASING.md. Refs #1137 Closes #1339 Signed-off-by: Piotr Swierzy <piotr.swierzy@blockydevs.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
What & why
Installs the product release-line machinery — Axis 1 of ADR-029 (#1137) — without cutting a tag. release-please (root/single-package,
nodetype) opens and maintains achore: release X.Y.ZPR from the Conventional Commits the repo already writes. Nothing releases until a maintainer merges that Release PR.Part of #1137— the issue's remaining acceptance criterion (the actual firstv0.1.0git tag) is a deliberately deferred one-time manual step, so this PR does not auto-close it.The 0.1.0 model (curated baseline, no tag now)
Per maintainer decision: a hand-curated first changelog + no tag yet. Because release-please auto-generates notes for whatever version it cuts,
0.1.0is established as a baseline instead:CHANGELOG.md— hand-curated## [0.1.0]listing every integration (PrestaShop, WooCommerce, Allegro, Erli, InPost, DPD Polska, Subiekt, KSeF, inFakt, AI router) with real adapter keys, plus the platform //v1API / core-workflow / frontend feature set — sourced from the repo's own README + architecture docs..release-please-manifest.json={".": "0.1.0"}— declares 0.1.0 as already-released, so release-please manages0.2.0+and never rewrites the curated section.bootstrap-sha(currentmain) for the next release.How releasing works afterward
v0.1.0— a one-time manual tag of the bootstrap-sha commit + GitHub Release whenever you're ready (exact commands inRELEASING.md). No rush; nothing depends on it now.0.2.0+— fully automated: merge feat/fix PRs → release-please opens a0.2.0Release PR (prepended above the curated 0.1.0) → merging it tagsv0.2.0+ creates the Release. No hand-tagging again.Config (every field schema-verified)
release-type: node·bump-minor-pre-major: true+bump-patch-for-minor-pre-major: false(→feat→minor,fix→patch, breaking→0.xminor, matching RELEASING.md) ·include-component-in-tag: false(→v0.1.0, notopenlinker-v0.1.0).Review fixes (#1339)
The
/pr-reviewpass found three baseline-calibration issues, fixed in10dff4f8:bootstrap-sharefreshed to the currentmaintip (e6298374) — the original value (333a39b1) had gone stale as fix(infakt): stop hardcoding payment_method, make it a per-connection setting #1309/feat(ksef): emit FA(3) Platnosc from connection payment config #1317/feat(invoicing): persist issuance-time line snapshot for safe KSeF corrections (#1297) #1329/fix(connections): widen CoreCapability with Invoicing, fix capability panel copy #1320/fix(shared): export ./worker subpath so worker + api health boot #1331 merged, which would have made the first post-merge run open a0.2.0Release PR double-crediting work the curated 0.1.0 already describes.mainadvances again before this PR merges, re-bumpbootstrap-shain the same push that updates the branch.CHANGELOG.md+RELEASING.md § Versioning policy(pre-1.0: minor = features + breaking, patch = fixes); RELEASING.md now cites the config keys so they can't drift apart silently.PUBLIC_API.md's "patch = additive" convention is intentionally untouched — that's the separate npm-package axis (Changesets, deferred).v0.1.0tag recipe fixed to tag thebootstrap-shacommit explicitly (not themaintip at tag time), with a warning that a v0.1.0 Release moves release-please's parse boundary.release-please-actionpinned by commit SHA (v4.4.1) — the workflow holdscontents+pull-requestswrite.Also
ci.yml— drops the staledevelopbranch ref (ADR-029 cleanup; the repo is trunk-based).ubuntu-latestwith the defaultGITHUB_TOKEN(contents+pull-requests: writeonly).Why the commit type is
chore(release):Non-releasable on purpose. The squash-merge commit is the only thing on
mainafterbootstrap-shaon first run — afeat:/fix:here would make release-please open a0.2.0PR immediately.chorekeeps it dormant until real feature work lands.Caveats (documented, not fixable from the repo)
cd.ymldeploy wiring + the PAT/App-token for the tag→CD trigger stay deferred (need deploy targets — ADR-029 sequences CD after the tag).Verification
pnpm lint+check:invariants✅ (incl.check-repo-urls) ·pnpm type-check✅ · no source changed → unit tests unaffected · config JSON + workflow YAML validated.pnpm lint(full) +check:invariantsre-run green at10dff4f8.Refs #1137
Closes #1339
🤖 Generated with Claude Code