- Add Hugo + Geekdoc documentation site (docs/): installation, CLI
reference, configuration, CI integration, and changelog pages; explicit
menu bundle nav so all pages appear in the sidebar on every page
- Add Gitea CI workflow (.gitea/workflows/docs.yml): builds on push to
main when docs/** changes, deploys minified site to gh-pages branch
- Add docs:setup / docs:serve / docs:build Taskfile tasks; theme bundle
downloaded at build time (not committed)
- Add FuzzUpdate to internal/changelog and FuzzWriteVersion to
internal/node to complete fuzz coverage for all file-rewriting packages
- Add fuzzing completeness guidelines to CLAUDE.md: authoritative table,
exempt-package rationale, seed corpus rules
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add internal/node package: reads/writes package.json version (single or
multi-path via node.package_json / node.package_jsons)
- Add maven.pom_paths support: update multiple pom.xml files in one release
commit; pom_paths overrides pom_path; --pom flag clears pom_paths
- Add git.bump_rules config: per-type control of which version component bumps
(breaking/feat/fix accept "patch" or "minor"); wired through version.Next()
as a new sixth parameter
- Extract injectable function vars (absPath, gitAllCommits, gitCommitsSince,
gitCommitFiles) to enable error-path testing without interfaces
- Achieve 100% per-package statement coverage across all 12 packages
Co-Authored-By: Claude Sonnet 4.6 <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>
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>
Tags are now bare version numbers by default (e.g. 1.2.3).
Set tag_prefix: "v" in .releaser.yml or pass --tag-prefix v to opt in
to the v-prefixed convention.
Updated all affected tests, the .releaser.yml template comment, and
the README configuration reference.
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>
If pom.xml (or the configured maven.pom_path) is absent, releaser now
logs a notice and proceeds to tag and push without failing. This makes
the tool usable in non-Maven projects. An os.Stat error that is not
ErrNotExist (e.g. permission denied) still surfaces as an error.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
go build ./cmd/... tried to write a binary named "cmd" which conflicts
with the source directory of the same name; pass -o /dev/null so the
build step only verifies compilation without writing output.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>