Skip to content

Add per-client CHANGELOG.md, maintained by googly.release#6

Merged
mhsdef merged 1 commit into
mainfrom
feature/per-client-changelog
Jul 2, 2026
Merged

Add per-client CHANGELOG.md, maintained by googly.release#6
mhsdef merged 1 commit into
mainfrom
feature/per-client-changelog

Conversation

@mhsdef

@mhsdef mhsdef commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

What

Adds a per-client CHANGELOG.md to each generated client, surfaced where Hex/Elixir users actually look, and maintained automatically by mix googly.release.

  • docs: [extras: […, "CHANGELOG.md"]] → hexdocs shows a CHANGELOG tab at the point of install.
  • package: [files: […, "CHANGELOG.md"]] → the changelog ships inside the published tarball, reproducible with the version.
  • Googly.Changelog (new module) is the single source of truth for the changelog format.

How it fits the generator's invariants

The changelog is accumulated history, so it's treated like each client's @version: it lives in the committed client dir and is preserved across regenerationmix googly.generate never clobbers it, it only lays down a baseline for a brand-new client (Changelog.ensure/3). mix googly.release prepends a dated entry on each bump (Changelog.add_release/4). It carries no "auto generated" banner, precisely because a human may refine an entry before publishing.

Backfill

All three existing clients get:

  • ## 0.1.0 — initial release
  • ## 0.1.1 — RFC 6570 {+name} fix, deterministic optional-param ordering, "Google"-prefixed description

Changed files

  • lib/googly/changelog.ex — new module (baseline / prepend / format)
  • lib/googly/generator.exwrite_package_files ensures a baseline changelog
  • lib/googly/generator/renderer.exversion/1 made public for reuse
  • lib/mix/tasks/googly.release.ex — bump prepends a dated changelog entry
  • templates/client/mix.exs.eex — CHANGELOG in extras + files
  • test/googly/generator_test.exs — asserts CHANGELOG.md is scaffolded
  • clients/*/{CHANGELOG.md,mix.exs,README.md} — regenerated output + backfill

Not included (by design)

  • GitHub Releases — for an N-independently-versioned monorepo they'd need per-package tags in one namespace and duplicate what hexdocs already shows.
  • Discovery-surface diffingspecifications/gdd/*.json is gitignored, so there's no committed prior surface to diff against. Release entries use a generic default note you edit before committing. Adding a per-client surface manifest to diff against is a possible follow-up.

Testing

  • mix test → 60 passed
  • mix compile --force --warnings-as-errors (CloudStorage) clean
  • mix format clean
  • Regeneration diff is isolated (mix.exs extras/files + README ~> 0.1.00.1.1)
  • Ran a real mix googly.release CloudStorage: bumped 0.1.1 → 0.1.2 and prepended ## 0.1.2 above preserved history, then restored the files

Each client now ships a CHANGELOG.md, wired into `docs: [extras:]` (so hexdocs
shows a CHANGELOG tab) and `package: [files:]` (so it ships in the tarball).

The changelog is preserved across regeneration like each client's @Version — it
is not clobbered by `mix googly.generate`, which only lays down a baseline for a
brand-new client. `mix googly.release` prepends a dated entry on each version
bump. Format lives in one place, the new `Googly.Changelog` module.

Backfills 0.1.0 (initial release) and 0.1.1 (RFC 6570 {+name} fix, deterministic
optional-param ordering, "Google"-prefixed description) for the three existing
clients. Regeneration also reconciles the README install line (0.1.0 -> 0.1.1).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@mhsdef mhsdef merged commit 7abad47 into main Jul 2, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant