- GitHub release support: internal/ghclient (no SDK, minimal HTTP client);
GITHUB_TOKEN env var; github.token/github.repo config; GitHub takes
precedence over GitLab when both are configured; publisher interface
(releasePublisher) in cmd/main.go makes providers interchangeable
- SSH agent push: gitutil.Push() now tries gitssh.NewSSHAgentAuth for
git@/ssh:// remotes before falling back to the system git binary
- --release-env-file flag: override dotenv artifact path; pass "" to disable
- git.releasable_types config: filter which commit types trigger a bump
(defaults to fix, feat, breaking); useful for maintenance branches
- commits.Group(), ExtractSubject(), ReleasableSet() exported helpers:
notes.go and changelog.go now delegate to these instead of duplicating
- CHANGELOG deduplication guard: changelog.Update() is idempotent — skips
write if ## [version] section already exists
- Always load config sources: LoadWithSources() called unconditionally;
removes the dual config path that previously only tracked sources in
--verbose mode
- .releaser.gitlab-ci.yml: adds artifacts: reports: dotenv: release.env
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
- --verbose flag: config source table, per-commit type analysis, version
decision explanation; output always to stderr
- Colored structured output: logStep/logDone/logWarn symbols, ▸ verbose
section headers, TTY-aware ANSI colors (NO_COLOR / TERM=dumb respected)
- Name + version header printed at the start of every invocation
- Default tag_prefix changed from "v" to "" (bare 1.2.3 tags by default)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Prints a configuration table on startup showing each key, its value,
and the source (default / config file / env: VARNAME / flag: --name)
- Lists every commit since the last tag with its parsed type and
the version-bump decision (feat/fix/breaking → patch bump, or ignored)
- Explains the final version choice: highest commit type → next tag
- All verbose output goes to stderr so it never pollutes stdout captures
- Sources tracking wired through config.LoadWithSources and
ApplyEnvWithSources; LoadWithSources uses a two-pass approach to
detect which YAML fields were explicitly set vs defaulted
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 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>