Files
releaser/ROADMAP.md
T
k3nny 5d0489dd71
ci / vet, staticcheck, test, build (push) Successful in 3m30s
release / Build and publish release (push) Successful in 4m39s
feat(releaser): CHANGELOG auto-update, --init, and --changelog-file flags
- Automatically write/update CHANGELOG.md on every release, grouped by
  Breaking Changes / Added / Fixed; file is created if missing and the
  new section is committed alongside pom.xml in the release commit
- Add --init flag: scaffolds a default .releaser.yml in the repo root
- Add --changelog-file flag: override the default CHANGELOG.md path
- Add CommitFiles() to gitutil so pom.xml and CHANGELOG.md are staged
  in a single commit
- Fix HTTPS push when no token is set: delegate to the git CLI so that
  system credential helpers, SSH agents, and netrc are honoured

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-07 11:18:27 +02:00

4.2 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-run flag: print next version and exit
  • --branch flag: override branch detection (detached HEAD in CI)
  • Exit code 2 when no releasable commits

v0.2 — Config + Maven + local git ops

  • .releaser.yml config file (loaded from repo root, merged over defaults, missing file is not an error)
  • Configurable tag prefix (tag_prefix: "v" or tag_prefix: "" for no prefix)
  • Configurable commit message template ({version} placeholder)
  • Configurable pom_path (default pom.xml)
  • --pom CLI flag: override pom path
  • --tag-prefix CLI flag: override tag prefix
  • pom.xml version reader (ignores <parent> and dependency versions)
  • pom.xml version writer (in-place, handles -SNAPSHOT → release)
  • Git commit of pom.xml changes (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_TOKEN env var support
  • CI_SERVER_URL / CI_PROJECT_ID / CI_PROJECT_PATH env var support (GitLab CI native)
  • --no-push flag: 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_pattern in .releaser.yml, default release/X.Y, supports regex e.g. (?:release|hotfix)/X.Y)
  • --branch-pattern CLI flag to override
  • Dirty working tree check — aborts if tracked files are modified or staged (untracked files ignored)
  • --no-commit flag: update pom.xml then stop — commit manually and re-run with --tag-only
  • --tag-only flag: skip pom.xml update, tag HEAD and push
  • Dockerfile — multi-stage build, alpine final image with ca-certificates
  • .releaser.gitlab-ci.yml — reusable CI job template with GIT_DEPTH: 0 and HTTPS push setup
  • .releaser.yml template — 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.md generation / append (grouped by commit type: Breaking Changes / Added / Fixed)
  • --changelog-file flag to use a custom filename
  • --init flag to scaffold a default .releaser.yml
  • Push falls back to system git CLI 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)
  • Documentation site

Future / backlog

  • GitHub release support (parity with GitLab)
  • Multi-module Maven support (multiple pom.xml paths)
  • Gradle support (build.gradle / build.gradle.kts)
  • package.json version bump support (Node.js projects)
  • Slack / Teams notification on release
  • Configurable bump rules (e.g. treat feat: as minor on main branch)