Files
releaser/ROADMAP.md
T
k3nny f0723e706a
ci / vet, staticcheck, test, build (push) Failing after 3m26s
release / Build and publish release (push) Successful in 4m28s
feat(releaser): initial release v0.4.0
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>
2026-07-07 00:07:53 +02:00

77 lines
4.0 KiB
Markdown

# Roadmap
## v0.1 — Core logic (MVP) ✅
- [x] Branch name parser (`release/X.Y` → major, minor)
- [x] Git tag discovery (latest `vX.Y.*` tag reachable from HEAD — ancestor check, not global latest)
- [x] Conventional Commits parser (non-strict mode: case-insensitive, optional scope, flexible whitespace)
- [x] Commit range walker (last tag → HEAD, or full history on first release)
- [x] Version bump calculator — returns plain `X.Y.Z` (prefix kept separate)
- [x] `--dry-run` flag: print next version and exit
- [x] `--branch` flag: override branch detection (detached HEAD in CI)
- [x] Exit code 2 when no releasable commits
## v0.2 — Config + Maven + local git ops ✅
- [x] `.releaser.yml` config file (loaded from repo root, merged over defaults, missing file is not an error)
- [x] Configurable tag prefix (`tag_prefix: "v"` or `tag_prefix: ""` for no prefix)
- [x] Configurable commit message template (`{version}` placeholder)
- [x] Configurable `pom_path` (default `pom.xml`)
- [x] `--pom` CLI flag: override pom path
- [x] `--tag-prefix` CLI flag: override tag prefix
- [x] `pom.xml` version reader (ignores `<parent>` and dependency versions)
- [x] `pom.xml` version writer (in-place, handles `-SNAPSHOT` → release)
- [x] Git commit of `pom.xml` changes (author resolved from git config, overridable in `.releaser.yml`)
- [x] Git tag creation (lightweight, on the release commit)
## v0.3 — GitLab integration ✅
- [x] GitLab release creation via API (minimal HTTP client, no external dependency)
- [x] Release notes body auto-generated from commit log (grouped by Breaking Changes / Features / Bug Fixes)
- [x] `GITLAB_TOKEN` env var support
- [x] `CI_SERVER_URL` / `CI_PROJECT_ID` / `CI_PROJECT_PATH` env var support (GitLab CI native)
- [x] `--no-push` flag: commit+tag locally without pushing or creating GitLab release
- [x] Git push via HTTPS token auth (`oauth2` + `GITLAB_TOKEN`)
- [x] GitLab section in `.releaser.yml`:
```yaml
gitlab:
url: "https://gitlab.example.com"
token: "" # prefer env GITLAB_TOKEN
project: "" # prefer env CI_PROJECT_ID
```
## v0.4 — Hardening & CI template ✅
- [x] Configurable branch pattern (`git.branch_pattern` in `.releaser.yml`, default `release/X.Y`, supports regex e.g. `(?:release|hotfix)/X.Y`)
- [x] `--branch-pattern` CLI flag to override
- [x] Dirty working tree check — aborts if tracked files are modified or staged (untracked files ignored)
- [x] `--no-commit` flag: update pom.xml then stop — commit manually and re-run with `--tag-only`
- [x] `--tag-only` flag: skip pom.xml update, tag HEAD and push
- [x] `Dockerfile` — multi-stage build, alpine final image with `ca-certificates`
- [x] `.releaser.gitlab-ci.yml` — reusable CI job template with `GIT_DEPTH: 0` and HTTPS push setup
- [x] `.releaser.yml` template — annotated example of every config option with defaults
- [x] Taskfile — `build`, `run`, `test`, `cov`, `cov:text`, `lint`, `fmt`, `tidy`, `fuzz`, `fuzz:all`, `ci`, `clean`, `docker:build`, `docker:run`
- [x] Gitea CI workflow (vet, staticcheck, test, build)
- [x] Gitea release workflow (5-platform cross-compilation, release asset upload)
- [x] 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)
- [ ] `--changelog-file` flag
## v1.0 — Production ready
- [x] ~~Integration tests against a real Git repo (with fixture commits and tags)~~ — ✓ shipped v0.4.0 (96% coverage, real in-memory repos)
- [x] ~~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)