Files
releaser/ROADMAP.md
T
k3nny d790a9edfe
ci / vet, staticcheck, test, build (push) Successful in 4m10s
docs / Build and deploy docs (push) Failing after 10s
release / Build and publish release (push) Successful in 5m9s
feat(notify): release v1.8.0 — Slack/Teams/Google Chat/Telegram/webhook notifications
- Add internal/notify package: best-effort release notifications to Slack, Microsoft Teams, Google Chat, Telegram, and a generic JSON webhook; every target is independently opt-in and a failed notification never fails the release
- Add notify config section (slack_webhook_url, teams_webhook_url, google_chat_webhook_url, telegram_bot_token/telegram_chat_id, webhook_url) with matching env var fallbacks; 100% coverage plus FuzzMessagePayloads
- Wire notification sending into run() — fires after tag+push (including --no-release), skipped on --no-push/--no-commit since nothing was published yet
- Document the notify section in README, Hugo docs, and .releaser.yml template; update CLAUDE.md architecture/fuzzing tables
- Also commit the Apache License 2.0 docs-site footer link (docs/hugo.toml geekdocContentLicense), left uncommitted from a prior change

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

6.1 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)
  • GitHub release support — ✓ shipped v1.4.0 (internal/ghclient, GITHUB_TOKEN env, github.token/github.repo config; GitHub takes precedence over GitLab)
  • SSH agent push — ✓ shipped v1.4.0 (go-git gitssh.NewSSHAgentAuth for git@/ssh:// remotes)
  • Configurable bump rules — ✓ shipped v1.4.0 (git.releasable_types config; filter which commit types trigger a release)
  • Documentation site — ✓ shipped v1.5.1 (Hugo + Geekdoc; installation, CLI reference, configuration, CI integration pages; deployed via Gitea CI to gh-pages)

v1.5 — Multi-module, Node.js, configurable bump rules

  • Multi-module Maven support (maven.pom_paths: [...] updates multiple pom.xml files in one release)
  • package.json version 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) — ✓ shipped v1.6.0 (internal/gradle; Groovy + Kotlin DSL; multi-module via gradle.build_files; --gradle flag)
  • Python pyproject.toml version bump ([project].version and [tool.poetry].version; single and multi-path like Maven's pom_paths) — ✓ shipped v1.7.0 (internal/pyproject; PEP 621 + Poetry; python.pyproject_tomls; --pyproject flag)
  • Slack / Teams notification on release — ✓ shipped v1.8.0 (internal/notify; Slack, Microsoft Teams, Google Chat, Telegram, and generic webhook; each opt-in via notify.* config or env var; best-effort — never fails the release)