Files
releaser/ROADMAP.md
T
k3nny 62a702fb89
ci / vet, staticcheck, test, build (push) Successful in 2m48s
release / Build and publish release (push) Successful in 4m35s
feat(releaser): release v1.3.0 — release.env dotenv artifact
Documents the release.env feature: a NEXT_VERSION=<tag> file written
to the repo root on every real release, intended as a GitLab CI dotenv
artifact for passing the version to downstream pipeline jobs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-07 13:57:06 +02:00

4.8 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)
  • --verbose flag — ✓ shipped v1.2.0 (shows config sources, commit analysis, version decision)
  • Colored, 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.0
  • Default tag prefix changed to empty — ✓ shipped v1.2.0 (bare 1.2.3 tags by default; opt in to v prefix via config)
  • release.env dotenv artifact — ✓ shipped v1.3.0 (NEXT_VERSION=<tag> written on every release for GitLab CI downstream jobs)
  • 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)