Skip to content

Prepares uxid 1.0.0 - #10

Merged
johnnyt merged 2 commits into
mainfrom
uxpg-e74-release-1-0-0
Oct 25, 2026
Merged

johnnyt merged 2 commits into
mainfrom
uxpg-e74-release-1-0-0

Conversation

@johnnyt

@johnnyt johnnyt commented Oct 25, 2026

Copy link
Copy Markdown
Member

The release prep for uxid 1.0.0, the first release of the extension, as a GitHub release. Two commits: the tarball's contents first, then the changelog promotion.

Bead: uxpg-e74 (with uxpg-fot folded in as the first commit).

The release tarball's contents

The release workflow makes uxid-pg-<version>.tar.gz with git archive of the tag, and .gitattributes carried no export-ignore line, so the tarball would have shipped the repository's own tooling. It now marks these paths export-ignore:

  • .beads/ (the tracker), .claude/ (the agent manifest and settings), AGENTS.md and CLAUDE.md (the agent instructions)
  • .github/ (the CI and release workflows)
  • mise.toml (the gate's tool pins), .sqlfluff (the lint settings) and docker/ (the gate's image and scripts): no install path in the README uses them; the README's development section runs them from a checkout
  • changelog.d/ (the fragments, and its README, which only a contributor reads)
  • .gitattributes and .gitignore

It keeps the extension (uxid.control, uxid--1.0.0.sql), its build file (Makefile), the tests (test/, so a user can run make installcheck), the corpus and its check (conformance/, scripts/), docs/, LICENSE, README.md and CHANGELOG.md.

Checked on this branch's head:

  • git archive HEAD | tar -t lists exactly the kept paths above and none of the left-out ones.
  • The archive, extracted into an empty directory in the gate's server image (PostgreSQL 18.6), runs make install and make installcheck: all 17 regression tests pass, the corpus runner included. sh scripts/corpus-check.sh passes in the extracted directory too.
  • export-ignore changes only what git archive writes. CI and the release workflow's verify job work on a checkout, which still holds every file, so the gate, docker/extension-version.sh and the CHANGELOG read are unchanged.

The release commit

  • The version needs no bump: default_version in uxid.control, the value uxid_version() returns and the script's file name uxid--1.0.0.sql read 1.0.0, as does every version in the README's install commands (uxid-pg-1.0.0.tar.gz, v1.0.0, -v version=1.0.0). That 1.0.0 is set from the scaffold, before any release, was decided by the conductor under a standing consent, 2026-10-24.
  • CHANGELOG.md gains ## 1.0.0 - 2026-10-25, the heading form changelog.d/README.md gives, replacing the Unreleased note. It opens with a paragraph on what the release covers (the functions, the uxid domain over text COLLATE "C", the monotonic generator's session state, the SQL and PL/pgSQL build with no dependency, PostgreSQL 14 and later with CI on 14 to 18, the three install paths, the random source, the SQLSTATEs 22023 and 22P02 with the corpus's refusal names and invalid_argument, and the corpus tag v2.10.0), then ### Added with every fragment's bullets in file-name order. Every function name and signature in the section is one the surface test (test/expected/surface.out) reads from the catalog.
  • The fragments are deleted in the same commit.
  • The release workflow's notes step (the awk in release.yml, "Make the tarball, its SHA-256 and the release notes") was run over the new CHANGELOG.md for 1.0.0: it takes the whole section, from the paragraph to the last bullet.

Gate

mise run gate is green on the staged tree of the release commit: 17 of 17 regression tests on PostgreSQL 18.6, the sqlfluff lint, and the corpus check (v2.10.0, 96 cases). The commit's tree is byte-identical to the tree that run checked, with the gate lock and a machine slot held across both.

After the merge

Nothing here tags or releases. Once this is on main and its CI is green there, the v1.0.0 tag is pushed at the merge commit and the release workflow creates the release.

The release tarball is a git archive of the tag, and with no
export-ignore line it would ship the tracker files, the agent
instructions and settings, the CI and release workflows, the gate's
tool pins, Docker image and lint settings, and the changelog fragments
beside the extension. None of them is needed to install the extension
or to run its tests.

The tarball now holds the control file, the extension script, the
Makefile, test/ (so make installcheck runs from it), the corpus and its
check, docs/, LICENSE, README.md and CHANGELOG.md. export-ignore changes
only what git archive writes; a checkout, and so CI and the release
workflow's verify job, still has every file.

Refs: uxpg-fot
Promotes the changelog fragments into a 1.0.0 section of CHANGELOG.md
and deletes them. The section opens with what the first release covers:
the functions, the uxid domain, the SQL and PL/pgSQL build with no
dependency, PostgreSQL 14 and later with CI on 14 to 18, the three
install paths, the random source, the refusal SQLSTATEs and the corpus
tag. Every function name in it is one the surface test reads from the
catalog. The release workflow takes this section as the release notes.

The version needs no bump: uxid.control, uxid_version() and the script's
file name read 1.0.0 since the scaffold, and no version was released
before.

Refs: uxpg-e74
@johnnyt
johnnyt merged commit 126d8ab into main Oct 25, 2026
10 checks passed
@johnnyt
johnnyt deleted the uxpg-e74-release-1-0-0 branch October 25, 2026 17:25
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