004 — Drop release candidates from tp release (#25)
Status: shipped (v0.4.0)
Why
tp release carries two release-candidate mechanisms: --rc / --promote
tag a vX.Y.Z-rcN and later promote it to vX.Y.Z, and rc_site on a
pages_deploy target deploys docs to a staging site first and asks before
promoting to the main site. Both encode a deployment strategy inside the
release tool, so every project pays for the branching (rc skips checks,
changelog, README and goreleaser; the deploy step prompts mid-release) and
none of it is documented in docs/release-workflow.md. No repo has an rc
tag; one repo (gobank) has an rc_site, and it also has post_release,
which is the shape staged deployment should take. Staging, canary and
promote belong in the project's deploy tooling, run from post_release or
a Taskfile task, so tp release does one thing: cut and publish a version.
What changes
tp release: remove--rcand--promote. Unknown flags fail as they do today.task-plus.yml:rc_siteon apages_deploytarget is no longer read.tp checkreports it as obsolete (warning, not error) with the hint to delete it and stage viapost_release.- Remove
tp release:rc-setupandtp pages promote; remove--promoteand--allfromtp pages deploy(it deploys every target, as it does for targets withoutrc_site). - The release deploy step deploys each target directly, no mid-release
"Promote to main site?" prompt.
tp readmestops emitting "RC Documentation" links;tp checkstops probing rc sites. internal/version: dropParseRC,IsRC,LatestRCFromTags,BumpRC. Fork pre-release versioning (BumpPrerelease, branch-named pre-releases) stays.- Docs:
docs/release-workflow.mdgains a short "Staged deployment" paragraph pointing atpost_release; README command table loses the removed commands; CHANGELOG entry under Removed.
Acceptance
tp release:
| Invocation | Outcome |
|---|---|
tp release --rc |
flag error, exits 2, nothing gathered |
tp release --promote |
flag error, exits 2, nothing gathered |
tp release with a pages_deploy target |
deploys to the target once, no promote prompt |
tp release with tags v0.3.0, v0.4.0-rc1 present |
suggests v0.3.1; the rc tag is ignored as any pre-release is today |
task-plus.yml and tp check:
| Config | tp check |
tp pages deploy |
|---|---|---|
target with site only |
as today | deploys to site |
target with site and rc_site |
WARN pages_deploy[N].rc_site is obsolete; stage via post_release |
deploys to site only, rc_site ignored |
tp pages deploy --promote or --all |
— | flag error |
tp pages promote, tp release:rc-setup |
— | unknown command |
tp readme on a target with rc_site writes the "Documentation" link only.
Out of scope
- A replacement staging/promote command in task-plus. Each project owns
that in its deploy tooling; gobank migrates
rc_siteto apost_releasetask in its own repo. - Fork pre-release versioning (
vX.Y.Z-<branch>.N), which stays. - Retracted-version handling, which is unrelated to rc.
Decisions
- No ADR: removing a feature nobody uses is the obvious default.
- Obsolete
rc_sitewarns rather than errors: the loader is non-strict, so an unknown key already parses, and a warning gets the one affected repo migrated without blocking its releases.
Done when
- tests express the acceptance table and pass
- spec updated (
docs/release-workflow.md, README command table) - ADR written if a fork was resolved (none: no fork)
- roadmap ticked and stamped; changelog entry
- issue closed with a link to the release (v0.4.0)