f0723e706a
Complete GitFlow release automation tool for Conventional Commits workflows: - Core pipeline: branch parsing, tag discovery, commit analysis, version bump - Maven pom.xml read/write, git commit/tag, HTTPS push with token auth - GitLab release creation via API with auto-generated release notes - Configurable via .releaser.yml (tag_prefix, branch_pattern, commit_message, pom_path, gitlab) - CLI flags: --dry-run, --no-push, --no-commit, --tag-only, --branch, --pom, --tag-prefix, --branch-pattern - Dockerfile (multi-stage Alpine), .releaser.gitlab-ci.yml reusable template - Gitea CI (vet + staticcheck + test + build) and release (5-platform cross-compilation) workflows - Taskfile with build/test/cov/lint/fuzz/ci/docker tasks - 96% test coverage with real in-memory git repos and fuzz tests for all parsers Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.4 KiB
3.4 KiB
Changelog
All notable changes to this project will be documented in this file. Format: Keep a Changelog.
[0.4.0] - 2026-07-07
Added
- Branch parser — extracts
major.minorfromrelease/X.Ybranch names using a configurable regex pattern - Git tag discovery — finds the latest
vX.Y.*tag that is a reachable ancestor of HEAD (ignores tags on other version lines or unrelated branches) - Conventional Commits parser — non-strict mode: case-insensitive type, optional scope, flexible whitespace; unrecognised messages are silently skipped
- Commit range walker — scans from last matching tag to HEAD; falls back to full history on first release in a branch
- Version calculator — increments patch; returns nothing when there are no releasable commits (exit code 2 so CI can distinguish "nothing to do" from errors)
--dry-runflag — prints next version without making any changes--branchflag — overrides automatic branch detection for detached-HEAD CI environments--no-pushflag — commits and tags locally without pushing or creating a GitLab release--no-commitflag — updatespom.xmland stops; re-run with--tag-onlyafter manual review--tag-onlyflag — tags HEAD without touchingpom.xml(pair with--no-commitflow)- Dirty working-tree check — aborts before any changes if tracked files are modified or staged
.releaser.ymlconfig — optional YAML loaded from repo root; missing file is not an error; all fields have sensible defaults- Configurable tag prefix —
git.tag_prefixin config or--tag-prefixflag (default:v) - Configurable branch pattern —
git.branch_patternin config or--branch-patternflag (default:^(?:.*/)?release/(\d+)\.(\d+)$) - Configurable commit message —
git.commit_messagewith{version}placeholder (default:chore(release): {version} [skip ci]) - Configurable commit author —
git.author_name/git.author_email; falls back to repo git config - Configurable
pom_path—maven.pom_pathin config or--pomflag (default:pom.xml) pom.xmlreader / writer — in-place version update; correctly ignores<parent>and dependency version elements- GitLab release creation — minimal HTTP client (no SDK); auto-generates release notes grouped by Breaking Changes / Features / Bug Fixes
- HTTPS push with token auth —
oauth2+GITLAB_TOKEN GITLAB_TOKEN,CI_SERVER_URL,CI_PROJECT_ID,CI_PROJECT_PATHenv var support for GitLab CI environmentsDockerfile— multi-stage build, Alpine final image withca-certificates.releaser.gitlab-ci.yml— reusable GitLab CI job template (extends: .releaser:release) withGIT_DEPTH: 0and HTTPS push pre-wired.releaser.ymltemplate — annotated example of every config option with its default value- Gitea CI workflow — runs
vet,staticcheck,test,buildon every push - Gitea release workflow — cross-compiles five platform binaries (linux/amd64+arm64, darwin/amd64+arm64, windows/amd64) and publishes them as release assets on tag push
- Taskfile —
build,run,test,cov,cov:text,lint,fmt,tidy,fuzz,fuzz:all,ci,clean,docker:build,docker:run - 96% test coverage — integration tests use real in-memory git repositories; fuzz tests cover all parser entry-points