Skip to content

AX-1837: Add tag/release mechanism - #3

Merged
YoniMelki merged 7 commits into
mainfrom
ax-1837-release-mechanism
Aug 10, 2026
Merged

AX-1837: Add tag/release mechanism#3
YoniMelki merged 7 commits into
mainfrom
ax-1837-release-mechanism

Conversation

@YoniMelki

@YoniMelki YoniMelki commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator

Summary

Adds a tag/release mechanism. The version lives in exactly one place: .version in .devin-plugin/plugin.json, the manifest Devin already reads.

  • release.yml — on push to main, if the commit subject carries [major], [minor] or [patch], reads the version from the manifest, tags vX.Y.Z, and publishes a GitHub Release with a repo zip attached.
  • No VERSION file, and so no validate-version check either. A duplicate copy of the version is the only thing such a check would have policed.
  • CONTRIBUTING.md gains a Releasing section.

Notes for reviewers

The version comes from the manifest, not from the marker. The marker only decides whether to release; it does not compute a bump. The version change stays reviewable in the PR that makes it, and no bot ever pushes to main.

The marker is matched on the subject line only. These repos squash-merge, and GitHub pre-fills the squash body from the branch's commit messages or the PR description, either of which can quote a marker while merely documenting the flow. Subject-only keeps the trigger deliberate.

Merging a marker without bumping the manifest fails the release rather than re-tagging a version that already shipped — which matters here, since v0.1.0 is already tagged and the manifest currently reads 0.1.1.

The commit message is read through env, not interpolated into the script, so a crafted commit subject cannot inject shell.

Test plan

  • validate passes on this PR
  • After merge, release.yml shows up in Actions and no release fires — the squash subject defaults to this PR's title, which carries no marker
  • Merging with [patch] in the subject while the manifest still reads an already-tagged version fails with a clear error
  • A follow-up PR bumping the manifest, merged with [patch] in the subject, produces the matching tag and GitHub Release

Closes AX-1837 / part of AX-1733

YoniMelki and others added 2 commits July 15, 2026 13:47
…on check

- Seed VERSION at 0.1.1 (current .devin-plugin/plugin.json version)
- release.yml: on push to main with [major/minor/patch], reads VERSION,
  creates vX.Y.Z git tag, publishes GitHub Release with repo zip
- validate-version.yml: PR check — fails if VERSION != plugin.json version
- CONTRIBUTING.md: add Releasing section documenting the new flow

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tep comments

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@YoniMelki
YoniMelki requested a review from yanivt-jfrog July 23, 2026 07:29
…ION file

.devin-plugin/plugin.json already carries the version Devin reads, so a VERSION
file was a second copy that validate-version.yml then had to police against it.
Both are gone; release.yml reads the manifest directly.

Also refuses to re-tag a version that already shipped (the one mistake a
marker-triggered release allows) and reads the commit message from env rather
than interpolating it into the script.
@YoniMelki
YoniMelki requested a review from a team as a code owner August 2, 2026 14:29
@YoniMelki YoniMelki changed the title feat(AX-1837): add VERSION file, release workflow, and drift-prevention check AX-1837: Add tag/release mechanism Aug 2, 2026
YoniMelki and others added 3 commits August 3, 2026 09:58
These repos squash-merge, and GitHub pre-fills the squash message body from the
branch's commit messages (or the PR description). Both of those quote
[major]/[minor]/[patch] while only documenting the flow, so matching the whole
message meant merging this very PR would have cut a release nobody asked for.

Matching the subject line alone keeps the trigger deliberate: a release happens
when someone writes the marker in the subject they are merging, not when a marker
happens to appear in generated body text.
… release

Three fixes from review, all in release.yml.

An orphan tag was possible: the tag was pushed in its own step before
`gh release create`, so a failure in between left a tag with no release behind
it. The re-run then hit the "already exists" check with nothing actually wrong
but the tag, and it needed deleting by hand. The tag is now created by
`gh release create --target "$GITHUB_SHA"` in the same API call as the release,
so there is no window between the two. Nothing pushes over git anymore, so the
write token is gone from the checkout step.

Releases were not gated on validation. The validate workflow triggers on the same
push, but as a separate workflow with no relationship to this one, so it could
still be red while a release went out. The same check now runs here, before the
release is created.

`zip -r release.zip .` packed the working tree, so anything an earlier step left
on the runner would ship inside the artifact. Replaced with `git archive`, which
exports tracked files at HEAD, still excluding .github.
…TRIBUTING

Review feedback: the per-step comments in release.yml had grown into several
paragraphs of rationale, which is documentation rather than a code comment.

Each step now carries at most two lines - what it does, or the one constraint a
reader could otherwise undo by "simplifying" it: subject-line matching, env
rather than interpolation, git archive rather than the working tree, --target
creating the tag. A pointer at the top of the file sends readers to
CONTRIBUTING.md for the full flow.

CONTRIBUTING.md gains the parts the comments had that it did not already say:
what the workflow does in order, what ends up in the release zip, why validation
runs inside the release job instead of relying on the separate validate
workflow, and why the tag is created by the release rather than pushed before it.

No behaviour change - the release.yml diff is comments only.
@YoniMelki
YoniMelki merged commit a615392 into main Aug 10, 2026
2 checks passed
@YoniMelki
YoniMelki deleted the ax-1837-release-mechanism branch August 10, 2026 11:28
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.

2 participants