f07220b0c6
- Add internal/node package: reads/writes package.json version (single or multi-path via node.package_json / node.package_jsons) - Add maven.pom_paths support: update multiple pom.xml files in one release commit; pom_paths overrides pom_path; --pom flag clears pom_paths - Add git.bump_rules config: per-type control of which version component bumps (breaking/feat/fix accept "patch" or "minor"); wired through version.Next() as a new sixth parameter - Extract injectable function vars (absPath, gitAllCommits, gitCommitsSince, gitCommitFiles) to enable error-path testing without interfaces - Achieve 100% per-package statement coverage across all 12 packages Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5.4 KiB
5.4 KiB
Roadmap
v0.1 — Core logic (MVP) ✅
- Branch name parser (
release/X.Y→ major, minor) - Git tag discovery (latest
vX.Y.*tag reachable from HEAD — ancestor check, not global latest) - Conventional Commits parser (non-strict mode: case-insensitive, optional scope, flexible whitespace)
- Commit range walker (last tag → HEAD, or full history on first release)
- Version bump calculator — returns plain
X.Y.Z(prefix kept separate) --dry-runflag: print next version and exit--branchflag: override branch detection (detached HEAD in CI)- Exit code 2 when no releasable commits
v0.2 — Config + Maven + local git ops ✅
.releaser.ymlconfig file (loaded from repo root, merged over defaults, missing file is not an error)- Configurable tag prefix (
tag_prefix: "v"ortag_prefix: ""for no prefix) - Configurable commit message template (
{version}placeholder) - Configurable
pom_path(defaultpom.xml) --pomCLI flag: override pom path--tag-prefixCLI flag: override tag prefixpom.xmlversion reader (ignores<parent>and dependency versions)pom.xmlversion writer (in-place, handles-SNAPSHOT→ release)- Git commit of
pom.xmlchanges (author resolved from git config, overridable in.releaser.yml) - Git tag creation (lightweight, on the release commit)
v0.3 — GitLab integration ✅
- GitLab release creation via API (minimal HTTP client, no external dependency)
- Release notes body auto-generated from commit log (grouped by Breaking Changes / Features / Bug Fixes)
GITLAB_TOKENenv var supportCI_SERVER_URL/CI_PROJECT_ID/CI_PROJECT_PATHenv var support (GitLab CI native)--no-pushflag: commit+tag locally without pushing or creating GitLab release- Git push via HTTPS token auth (
oauth2+GITLAB_TOKEN) - GitLab section in
.releaser.yml:gitlab: url: "https://gitlab.example.com" token: "" # prefer env GITLAB_TOKEN project: "" # prefer env CI_PROJECT_ID
v0.4 — Hardening & CI template ✅
- Configurable branch pattern (
git.branch_patternin.releaser.yml, defaultrelease/X.Y, supports regex e.g.(?:release|hotfix)/X.Y) --branch-patternCLI flag to override- Dirty working tree check — aborts if tracked files are modified or staged (untracked files ignored)
--no-commitflag: update pom.xml then stop — commit manually and re-run with--tag-only--tag-onlyflag: skip pom.xml update, tag HEAD and pushDockerfile— multi-stage build, alpine final image withca-certificates.releaser.gitlab-ci.yml— reusable CI job template withGIT_DEPTH: 0and HTTPS push setup.releaser.ymltemplate — annotated example of every config option with defaults- Taskfile —
build,run,test,cov,cov:text,lint,fmt,tidy,fuzz,fuzz:all,ci,clean,docker:build,docker:run - Gitea CI workflow (vet, staticcheck, test, build)
- Gitea release workflow (5-platform cross-compilation, release asset upload)
- 96% test coverage with real in-memory git repos and fuzz tests for all parsers
v0.5 — Changelog ✅
CHANGELOG.mdgeneration / append (grouped by commit type: Breaking Changes / Added / Fixed)--changelog-fileflag to use a custom filename--initflag to scaffold a default.releaser.yml- Push falls back to system
gitCLI when no token is set (uses credential helpers, SSH, netrc)
v1.0 — Production ready
Integration tests against a real Git repo (with fixture commits and tags)— ✓ shipped v0.4.0 (96% coverage, real in-memory repos)Cross-compilation in CI (linux/amd64, linux/arm64, darwin/amd64)— ✓ shipped v0.4.0 (Gitea release workflow, + darwin/arm64 + windows/amd64)— ✓ shipped v1.2.0 (shows config sources, commit analysis, version decision)--verboseflagColored, structured CLI output— ✓ shipped v1.2.0 (·/✓/!symbols,▸section headers in verbose, TTY-aware ANSI colors)Name and version header on every run— ✓ shipped v1.2.0Default tag prefix changed to empty— ✓ shipped v1.2.0 (bare1.2.3tags by default; opt in tovprefix via config)— ✓ shipped v1.3.0 (release.envdotenv artifactNEXT_VERSION=<tag>written on every release for GitLab CI downstream jobs)GitHub release support— ✓ shipped v1.4.0 (internal/ghclient,GITHUB_TOKENenv,github.token/github.repoconfig; GitHub takes precedence over GitLab)SSH agent push— ✓ shipped v1.4.0 (go-gitgitssh.NewSSHAgentAuthforgit@/ssh://remotes)Configurable bump rules— ✓ shipped v1.4.0 (git.releasable_typesconfig; filter which commit types trigger a release)- Documentation site
v1.5 — Multi-module, Node.js, configurable bump rules ✅
- Multi-module Maven support (
maven.pom_paths: [...]updates multiplepom.xmlfiles in one release) package.jsonversion bump for Node.js projects (node.package_json/node.package_jsons)- Configurable bump rules per commit type (
git.bump_rules.breaking/feat/fix: "minor" | "patch") - 100% per-package statement coverage across all 12 packages
Future / backlog
- Gradle support (
build.gradle/build.gradle.kts) - Slack / Teams notification on release
- Documentation site