Repository navigation
feat(release): the dev build is one pre-release on a moving tag; triage knows current versions - #10
Conversation
…ge knows current versions plugin-release-wp.yml publishes the development build of every push to main as the one GitHub pre-release "Development build <next>-dev.<N>" on the moving tag `dev-tag` (default `dev`, empty publishes none): the tag moves to the commit, the release is created or updated with notes that say the version, the commit and the changelog that is coming, and the asset <slug>.zip is replaced, so its URL never changes. The run's artifact goes. There is no history of development builds; the commit in the notes and in the Build header rebuilds any of them. The moving tag is outside the X.Y.Z rulesets and the job needs contents: write and nothing else; "Latest" stays the last X.Y.Z. This is the nightly pattern WooCommerce and others use, chosen over one tag per build because it multiplies neither permanent tags nor releases and needs no publishing key. issue-triage.yml gets a dev-tag input and puts the current versions in the brief (the readme's Stable tag; the pre-release's version): a report made on a plugin version older than the released one, or a development build older than the current one, is needs-info, and the reply asks to update, or to install the current development build, and to say whether the problem is still there. README, the release template and the organisation contributing guide describe both. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude review · risk high · complexity medium · type featThe new commits fix the major finding and three minor ones. Two minor points are still open. If The PR as a whole adds behaviour: a public moving pre-release and version-aware triage. The description now matches the diff.
Policy floor: high (touches high-risk paths: .github/workflows/issue-triage.yml, .github/workflows/plugin-release-wp.yml, CONTRIBUTING.md, README.md, docs/plans/release-automation.md …). Reviewed 8493872 (since c3bb920; review 2 of 5 automatic). Author trusted for auto-merge: true. 🤖 AI review · claude-opus-5-5 (Anthropic) · $0.14, 4 turns |
…es last and only from the head The development build honours dry-run: in a rehearsal it is built and its notes go to the summary, but no tag moves and no pre-release is published, as the documented contract says. The job runs only from the default branch, publishes only when its commit is still the head of that branch (a re-run of an old run does not move the tag back), uploads the zip before it changes the notes and the title, and moves the tag last, so a failed upload leaves the previous build whole. The dev output's description, the header's claim about rulesets (the repository's tag rulesets must leave the moving tag free; the adoption guide's cover X.Y.Z only) and the plan's mention of the artifact are brought in line. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
📝 What changes
plugin-release-wp.yml, jobDevelopment build: instead of an artifact, publishes the build as one GitHub pre-release namedDevelopment build <next>-dev.<N>on the moving tagdev-tag(new input, defaultdev; empty publishes none). Each push to the default branch (only there): zips the stamped tree under the slug; if the commit is still the head of the branch, creates the pre-release when missing, uploads<slug>.zipwith--clobber, edits title and notes (the version, a link to the commit, install steps and the changelog underUnreleased.), and moves the tag to the commit last, so a failed upload leaves the previous build whole and a re-run of an old run never moves the tag back.…/releases/download/dev/<slug>.zipis a fixed URL. In a rehearsal (dry-run: true) the build is made and its notes go to the summary, but nothing is published: no tag, no release. The job needscontents: writeand aconcurrencygroup.upload-artifactgoes; thedevoutput's description follows.issue-triage.yml: new inputdev-tag(defaultdev). The brief gains "Current versions" (the readme'sStable tag; the pre-release's version when one exists). Theneeds_infocategory now also covers a report made on a plugin version older than the released one or a development build older than the current one; the reply asks to update, or to install the current development build (link), and to say whether the problem is still there. Header comment updated.X.Y.Zonly sodevstays free),workflow-templates/release-wp.ymlheader,CONTRIBUTING.md("How a change becomes a version": the pre-release, no history),docs/plans/release-automation.md(the artifact is gone).💡 Why
The maintainer wants development builds where people look for downloads, in Releases, the way WooCommerce publishes its nightly: one pre-release that is always the latest, with a link that never changes and no login to download, while
X.Y.Zreleases and their history stay exactly as they are. One tag per build was rejected: it multiplies permanent tags, needs the publishing App's key on every push and leaves a trail nobody asked for. With no history of development builds, a bug reported on an old one must be checked against the current one; the triage now knows which versions are current and asks for that, which also catches the common report from a site that never updated.🧪 How I tested it
awk) against Offload's realreadme.txt: the bullets underUnreleased., without that line and without a leading blank line.mainafter adopting this version must create the pre-releaseDevelopment build 2.0.0-dev.Non tagdevwithdiluxone-offload.zip, and a later push must replace it (same URL, tag moved).🤖 AI-generated · Claude Fable 5.1 (Anthropic)