Skip to content

Add RELEASE.md and HISTORY.md, switch from release branches to tags - #12

Merged
jnasbyupgrade merged 6 commits into
masterfrom
add-release-doc
Jul 24, 2026
Merged

Add RELEASE.md and HISTORY.md, switch from release branches to tags#12
jnasbyupgrade merged 6 commits into
masterfrom
add-release-doc

Conversation

@jnasbyupgrade

@jnasbyupgrade jnasbyupgrade commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Add a written release process for count_nulls, adding RELEASE.md and HISTORY.md and switching the project from release branches to real git tags to match.

RELEASE.md started as a verbatim copy of cat_tools's own release doc (Postgres-Extensions/cat_tools), then got adapted once a few of its assumptions turned out not to hold. cat_tools' doc describes a stable-pseudo-version scheme (master's default_version normally sitting at the literal string stable so ordinary source edits never touch a frozen, already-released version's install file) as though it's implemented via a sql.mk it ships - checking cat_tools' actual cat_tools.control history shows default_version has always been a real literal version, never stable; the scheme is aspirational documentation for something that was never actually built there. count_nulls' own build already decouples the PGXN distribution version (META.in.json) from the extension's own version (count_nulls.control's default_version) by design, so implementing stable for real here is straightforward - I built and verified it (install at a real version, ALTER EXTENSION UPDATE reaches stable, functions still work) on a separate branch, but landing it is step 7 of this same doc, done right after the next real release ships rather than ahead of time.

The doc also adds a safety-check step: before trusting the stable dance to protect committed version files going forward, verify each one's last-touching commit predates its own release. That surfaced that PGXN.org (not this repo's own git history) is the only authoritative record of what's actually shipped: count_nulls has never had a single git tag, and its 9 real releases (0.1.0 through 0.9.7) were instead tracked as git branches, a leftover pre-tag convention. Also worth knowing: 0.9.7 on PGXN was a distribution-version-only bump (packaging/CI fixes, no SQL changes) - the extension's own version stayed at 0.9.6, which is exactly the kind of divergence stable is meant to make routine instead of a one-off.

To actually make tags authoritative rather than just document the intent, this backfills annotated tags for all 9 real releases at the same commits their release branches pointed to (verified linear, each a clean ancestor of the next, dates matching PGXN's listing) and deletes those now-redundant branches, so make tag is the one real release mechanism from here on.

HISTORY.md is new - count_nulls didn't have a changelog file before. Seeded with an empty top stable section per RELEASE.md's changelog step, and a pointer to PGXN.org for the pre-existing releases it predates.

cat_tools (Postgres-Extensions/cat_tools) already has a written release
process; copy it here as-is before adapting it to count_nulls's own
conventions in a follow-up commit, so the diff between "what cat_tools does"
and "what count_nulls actually needs" stays easy to review.
count_nulls doesn't share several pieces of cat_tools's release machinery: there's no
.sql.in generation (install scripts are committed directly, so there's no
generated-script-omission choice to make), no HISTORY.asc changelog file, and no
`stable` pseudo-version scheme (cat_tools's sql.mk feature) to leave and return to
around a release, so the whole warning box and the "return master to stable" step drop
out. It also has no prior release yet, so the tag-naming example uses count_nulls's own
version instead of referencing cat_tools's existing 0.2.2 tag, and the removed
0.2.3-specific catalog-view caveat goes with it. Added a `make test-update` check in
the verify steps, since that's how count_nulls actually exercises the update path
end to end.
@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 555a235f-4116-4540-9f90-cc17e2f41d10

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch add-release-doc

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

The previous commit dropped the stable-pseudo-version dance and the changelog
step entirely, on the wrong assumption that neither applied to count_nulls -
checking cat_tools' actual control-file history showed that scheme was never
really built there either (its own RELEASE.md describes a feature that doesn't
exist), and count_nulls didn't have a HISTORY file to reference. Both are worth
having for real here, so this adds them properly instead: default_version now
distinguishes from the PGXN distribution version (count_nulls has already shipped
one release, 0.9.7, where only the distribution version moved), a new safety-check
step verifies committed version files haven't been touched after their own release
before trusting the stable dance to prevent that going forward, and HISTORY.md
gives the changelog step somewhere to write to. Sized the "commit every version
file" guidance to count_nulls' own scale (~90-line source, half a dozen versions)
rather than copying cat_tools' size-driven trade-off wholesale.

Also switched count_nulls itself from release branches to tags to match: 0.1.0
through 0.9.7 were previously tracked as branches (a leftover pre-tag convention),
now backfilled as annotated tags at the same commits and the branches deleted, so
`make tag` is the one real release mechanism referenced in this doc.
@jnasbyupgrade jnasbyupgrade changed the title Add RELEASE.md, adapted from cat_tools Add RELEASE.md and HISTORY.md, switch from release branches to tags Jul 24, 2026
Reconstructed one entry per real release (0.1.0 through 0.9.7) from each
tag's actual diff, at pgxntool/HISTORY.asc's level of detail - a paragraph or
== per-change section, not just a version bump line. Also credits the one
real fix since 0.9.7 (dropping a redundant, unconditional client_min_messages
override in the install script) under the pending "stable" section.
@jnasbyupgrade
jnasbyupgrade marked this pull request as ready for review July 24, 2026 21:42
Replaced count_nulls-specific naming throughout RELEASE.md with an
<extension> placeholder so other repos can adopt this doc with minimal
find-and-replace, keeping only the intro paragraph's 0.9.7 anecdote as a
concrete, repo-specific illustration of the distribution-vs-extension-version
split. Also generalized the version-file-drift safety check, the
size-based "commit every version file" guidance, and the tag-migration note
in step 6, replacing count_nulls' own specific historical details with the
general pattern they illustrate.

HISTORY.md's pending section is now headed 1.0.0 instead of stable, since
count_nulls.control is already stamped at 1.0.0 - an intentional exception
for this first release while adopting the full process; every release after
this one goes through the real stable dance.
…xtension>

The previous pass over-mechanically substituted <extension> for every mention
of count_nulls, including in plain-English prose where no placeholder was
needed at all, and split the L7 paragraph awkwardly between generic
placeholder text and a specific count_nulls anecdote mid-paragraph. Reworded
throughout: the title and opening sentence no longer need the extension name
at all ("This extension makes use of pgxntool" rather than claiming to build
on/extend it), and every other prose reference became plain English ("the
extension's .control file", "the extension's own entry under provides")
instead of a placeholder. Kept <extension> only where it's a literal,
copy-pasteable file-naming pattern (shown once each, not repeated per bullet).
Reverted the L7 paragraph to name count_nulls throughout, not just its second
half - the whole paragraph is a real, specific illustration of the
distribution-vs-extension-version split, not generic instructional text.
@jnasbyupgrade
jnasbyupgrade merged commit 1cd4c48 into master Jul 24, 2026
18 checks passed
jnasbyupgrade added a commit that referenced this pull request Jul 29, 2026
… fork

The gate checked github.event.pull_request.head.repo.owner.login == 'jnasbyupgrade',
written back when PRs came from that personal fork. Now that the convention is to
push branches directly to this repo instead (never the fork), every PR's head repo
owner is Postgres-Extensions, not jnasbyupgrade - so the condition never matched and
claude-review silently skipped on every single PR this session (#12, #13, #14 all
show it as skipped). Replaced with head.repo.full_name == github.repository, which
is actually a tighter trust boundary than the old check: it only allows PRs whose
head branch lives in this exact repo, requiring push access here, rather than
naming one specific external fork as trusted.
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