- refuse to release when the clone is shallow and no previous release tag
is found: tags beyond the fetch depth would silently restart versioning
at X.Y.0; --allow-shallow bypasses the guard for a true first release
- new --check preflight validates the release environment without
releasing: branch resolution + pattern, working tree, tag discovery,
shallow clone, remote origin URL parse (same parse the push performs),
push auth method, version files, release target — all problems reported
at once, non-zero exit on failure
- .releaser.gitlab-ci.yml gains an optional .releaser:check MR-pipeline
job; CI examples now set GIT_DEPTH: 0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- CurrentBranch falls back to CI_COMMIT_BRANCH, CI_COMMIT_REF_NAME, then
GITHUB_REF_NAME when HEAD is detached, so --branch is no longer required
in GitLab CI / GitHub Actions jobs
- go-git push paths (token and SSH agent) now push HEAD's commit hash to
the branch instead of refs/heads/<branch>, which never exists in a
detached CI checkout — go-git silently skipped the branch update and
pushed only the tag
- .releaser.gitlab-ci.yml template drops the redundant --branch flag
- docs: README, usage, ci-integration, changelog, ROADMAP updated
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- 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>