feat(release): adopt standard create-release recipe + workflow (VA-32) #28

Merged
David merged 2 commits from feat/create-release-va-32 into main 2026-05-21 22:06:24 +02:00
Owner

Summary

Adopt the standard release flow already used by vervain-server:

  • justfile: new create-release <major|minor|hotfix> recipe under [group('release')] that bumps workspace.package.version in Cargo.toml, opens a release/v<X.Y.Z> branch with a single Release v<X.Y.Z> commit, pushes, and prints the PR URL.
  • .forgejo/workflows/create-release.yml: on a merged release/v* PR, creates the matching v<X.Y.Z> Forgejo release + tag via the API, with a changelog generated from git log <prev-tag>..HEAD.

The existing build-package.yml already triggers on tags: ["v*"], so the binary generic-package upload fires automatically when the release workflow creates the tag. publish-crates.yml uses per-crate tags (vervain-agent-mcp-v*, vervain-agent-kvm-v*) and is orthogonal; unchanged here.

Supersedes the deliberate skip in df443c4 (DEV-331). That commit's rationale was a presumed tag-pattern mismatch; on review the tag pattern matches (v*) and the standard recipe applies as-is.

Closes VA-32.

Test plan

  • just --list shows create-release under [release]
  • just --show create-release parses cleanly
  • Reviewer: on a clean tree, just create-release hotfix produces release/v0.0.2 branch + Release v0.0.2 commit bumping workspace.package.version
  • Reviewer: merging the release PR triggers create-release.yml, which creates the v0.0.2 Forgejo release with auto-changelog
  • Reviewer: build-package.yml then fires on the new tag and uploads the generic package at version 0.0.2

Follow-up (not in this PR)

Workspace v<X.Y.Z> releases do NOT republish the inner crates (vervain-agent-mcp, vervain-agent-kvm) - those still need their own per-crate tags. File a follow-up if you want a workspace release to also cargo-publish them.

## Summary Adopt the standard release flow already used by `vervain-server`: - `justfile`: new `create-release <major|minor|hotfix>` recipe under `[group('release')]` that bumps `workspace.package.version` in `Cargo.toml`, opens a `release/v<X.Y.Z>` branch with a single `Release v<X.Y.Z>` commit, pushes, and prints the PR URL. - `.forgejo/workflows/create-release.yml`: on a merged `release/v*` PR, creates the matching `v<X.Y.Z>` Forgejo release + tag via the API, with a changelog generated from `git log <prev-tag>..HEAD`. The existing `build-package.yml` already triggers on `tags: ["v*"]`, so the binary generic-package upload fires automatically when the release workflow creates the tag. `publish-crates.yml` uses per-crate tags (`vervain-agent-mcp-v*`, `vervain-agent-kvm-v*`) and is orthogonal; unchanged here. Supersedes the deliberate skip in `df443c4` (DEV-331). That commit's rationale was a presumed tag-pattern mismatch; on review the tag pattern matches (`v*`) and the standard recipe applies as-is. Closes VA-32. ## Test plan - [x] `just --list` shows `create-release` under `[release]` - [x] `just --show create-release` parses cleanly - [ ] Reviewer: on a clean tree, `just create-release hotfix` produces `release/v0.0.2` branch + `Release v0.0.2` commit bumping `workspace.package.version` - [ ] Reviewer: merging the release PR triggers `create-release.yml`, which creates the `v0.0.2` Forgejo release with auto-changelog - [ ] Reviewer: `build-package.yml` then fires on the new tag and uploads the generic package at version `0.0.2` ## Follow-up (not in this PR) Workspace `v<X.Y.Z>` releases do NOT republish the inner crates (`vervain-agent-mcp`, `vervain-agent-kvm`) - those still need their own per-crate tags. File a follow-up if you want a workspace release to also cargo-publish them.
feat(release): adopt standard create-release recipe + workflow (VA-32)
All checks were successful
Check / clippy + fmt + tests (pull_request) Successful in 1m50s
b6c270a400
Mirror the release pattern from vervain-server: `just create-release <major|minor|hotfix>` bumps `workspace.package.version`, opens a `release/v<X.Y.Z>` branch, and on merge `.forgejo/workflows/create-release.yml` creates the matching Forgejo release + tag with an auto-changelog. The existing `build-package.yml` already triggers on `tags: ["v*"]` so the binary upload chains automatically; `publish-crates.yml` uses per-crate tags and is orthogonal (unchanged).

Supersedes the deliberate skip in `df443c4` (DEV-331): on review the tag pattern matches (`v*`), so the standard recipe applies as-is.

#VA-32 State Done
Merge branch 'main' into feat/create-release-va-32
All checks were successful
Create release / Create release from merged PR (pull_request) Has been skipped
Check / clippy + fmt + tests (pull_request) Successful in 1m58s
79e61970f7
David merged commit 7e9de037ff into main 2026-05-21 22:06:24 +02:00
David deleted branch feat/create-release-va-32 2026-05-21 22:06:24 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/vervain-agent!28
No description provided.