feat(release): release versioning & changelog automation — research and options #25
No reviewers
Labels
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Blocks
#22 chore(version): align repository component versions to 1.13.0
PCivil/inventory-system
Reference
PCivil/inventory-system!25
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/release-versioning"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary — research & decision PR (no implementation yet)
This PR establishes the release-versioning + changelog automation track, replacing the GitHub-bound
release-pleasethat no longer runs on Forgejo.Why this is needed
git.gaboggamer.online).release-please(googleapis/release-please-action) is a GitHub Actions action — it does not run on Forgejo's native runner, and Forgejo has no built-in equivalent..github/workflows/release.ymlstill references release-please but is dead weight here (see PR #24 for the split-brain between.github/and.forgejo/).1.13.0vs desktop0.1.0), and we want them kept as separate version tracks going forward (backend Java/Maven vs desktop Tauri/Cargo/npm) — not a single unified bump.Requirement: separate version tracks
The goal is explicit: backend (Java/Maven) and desktop (Tauri) maintain independent versions, each bumped by its own changelog/commits. A single-tool release-please replacement that forces one monorepo version is not what we want.
Options to evaluate (no decision yet)
A.
git-cliff(recommended to investigate first)git-cliff.org/docs/integration/gitea/..forgejo/workflows/; two separate configs can produce two changelogs (one per track).conventional-recommended-bump.B.
semantic-release+semantic-release-gitea@saithodev/semantic-release-giteaexists specifically to publish a Gitea release; likely Forgejo-compatible via the API.C.
release-plz(Rust crates)D. Minimal in-house script (extend
scripts/release.sh)What needs researching before coding
semantic-release-gitea/forgejo-releaseaction coverage..forgejo/workflows/with adockerrunner (what actually runs today), notubuntu-latest/windows-latest(see PR #24).backend-v*/desktop-v*?).CHANGELOG.mdis release-please-flavored with full URLs).Out of scope for this PR (for now)
Decision requested
Please weigh in on A–D (or propose another) in a comment. Once the approach is agreed, I'll scope a follow-up implementation branch that keeps the backend and desktop tracks independent.
Merge ordering (blocking dependency)
This PR owns the version-bump policy, so it should merge before the version/release PRs that depend on it. Recommended sequence:
extra-fileswiring must match the #25 decision).#22 and #24 are marked as blocked by this PR via Forgejo's native issue dependencies.
Architectural Decision: Option A (
git-cliff) with Dual-Track AutomationFollowing thorough research across all 4 options, Option A (
git-cliff) is accepted for release versioning and changelog automation on Forgejo.Research Findings & Answers to Open Questions
Forgejo API & Automation Capabilities:
/api/v1/repos/{owner}/{repo}/releases) supports full release lifecycle management and asset uploads viahttps://code.forgejo.org/actions/forgejo-release@v2.Execution Environment:
.forgejo/workflows/usingruns-on: dockercontainer images (maven:3.9-eclipse-temurin-21,node:22,rust:latest, andorhunp/git-cliff:latest).Independent Version Tracks:
backend-v<semver>(or canonicalv<semver>), driven bycliff-backend.tomlscoped tobackend/**.desktop-v<semver>, driven bycliff-desktop.tomlscoped todesktop/**.Changelog Format:
https://git.gaboggamer.online/PCivil/inventory-system/commit/${COMMIT_HASH}).Alignment with PR #22 and PR #24:
release-pleaseconfiguration.scripts/release.shto support track arguments:bash scripts/release.sh [backend|desktop|all] [major|minor|patch].ADR 0001 has been updated to Accepted status in commit
e72150c.Findings — direction is confirmed: git-cliff, not the in-house script
Confirmed with the maintainer: the release-versioning approach is Option A —
git-cliffwith dual-track configs (as recorded in ADR 0001). The in-housescripts/release.shfull-bump approach is not the target — at most, git-cliff needs a thin orchestrator to handle its one real drawback (it doesn't rewrite version files itself).This PR is currently not aligned with that decision, and it's blocking #22 and #24. Here's the specific disconnect:
What ADR 0001 (this PR) decides
git-cliffcliff-backend.toml+cliff-desktop.tomlbackend-v*/desktop-v*release-please-config.jsonand.release-please-manifest.jsonare decommissioned"What the implementation PRs actually do right now
release-pleasein.github/workflows/release.yml(googleapis/release-please-action@v4,release-please-config.json,gh release upload) and has nogit-cliffintegration (nocliff-*.toml, no--bumped-version).release-please-config.jsonextra-files— the exact file this ADR says to remove.So the decision and the code currently point in opposite directions. This ADR is the correct north star; the other two need to follow it, not the reverse.
No change needed here
This PR is just the accepted ADR — it can merge as-is. But it should stay unmerged-and-blocking (it already blocks #22/#24 via the dependency link) until #22 and #24 are brought in line with it, so we don't merge a decision and then immediately merge code that contradicts it.
For #22 and #24 (to resolve the conflict)
cliff-backend.toml/cliff-desktop.toml, trigger the Forgejo workflow per-track (backend-v*→ backend build,desktop-v*→ desktop build), and render changelogs via git-cliff. Keepscripts/release.shonly as a thin version-file orchestrator (bumppom.xml/Cargo.toml/package.json), not as the changelog engine.release-please-config.jsonextra-fileschange (and the.release-please-manifest.jsonif it's only there to serve release-please). Keep just the version alignment + Cargo.lock sync.