From 9f635ffefd594914236aa6ea77a790b542b94ad7 Mon Sep 17 00:00:00 2001 From: jnasbyupgrade Date: Wed, 7 Oct 2026 18:19:57 -0500 Subject: [PATCH] Stamp 2.4.0 Co-Authored-By: Claude Opus 5.5 --- HISTORY.asc | 155 +++++++++++++++++++++++++++++----------------------- 1 file changed, 88 insertions(+), 67 deletions(-) diff --git a/HISTORY.asc b/HISTORY.asc index d2dbd83..3d588c0 100644 --- a/HISTORY.asc +++ b/HISTORY.asc @@ -1,12 +1,73 @@ -STABLE ------- -== Fix `make test` failing when `test/sql/` doesn't exist -`installcheck` needs `test/sql/` to exist, but the rule that creates it was -spelled `test/sql` (no trailing slash), which Make treats as a different -target. A project without that directory got `No rule to make target -'test/sql/'`; it now gets created like `test/expected/` and `results/`. +2.4.0 +----- +== Breaking changes -== Add `make post-tag-version-bump` and `releasing-with-pgxntool.md` +=== `test/install` now requires `ON_ERROR_STOP` +`test/install/*.sql` files never get a real diff -- their actual output is +written to the same file as their expected output, so a content difference +can never fail the build. Without `ON_ERROR_STOP`, a hard SQL error was +silently swallowed too, making the file "pass" regardless of what happened. +`make test` now fails if a `test/install/*.sql` file doesn't set +`ON_ERROR_STOP`: it must either include `test/pgxntool/psql.sql` (which +sets it) or have its own `\set ON_ERROR_STOP` or `\unset ON_ERROR_STOP` +command, to any value; `\include` and `\include_relative` count as including `psql.sql`, the same as +`\i` and `\ir`; see +`PGXNTOOL_ENABLE_TEST_INSTALL_ERROR_STOP_CHECK` to disable. Since +`test/install/*.out` was never really compared against anything, and is +rewritten by every run, it's now gitignored -- stop committing it. + +=== `test-build` now actually runs before the main suite +`make test` was meant to run `test-build` first and stop if it failed, but +with `check-stale-expected` enabled (the default) the main suite ran first. +`test-build` now always runs before `installcheck`, including a direct +`make installcheck`, so a broken build -- or a stale +`test/build/expected/*.out` -- stops the run before the main suite starts. +Use `make results-build` to refresh stale test-build output. + +=== `PGXNTOOL_PGTLE_VERSION` must be an exact pg_tle range name +`make pgtle PGXNTOOL_PGTLE_VERSION=...` (and `pgtle.sh --pgtle-version`) now +errors unless the value is exactly `1.0.0-1.4.0`, `1.4.0-1.5.0` or `1.5.0+`. +A plain pg_tle version such as `1.5.0` used to be accepted silently, +generating a bogus `pg_tle/1.5.0/` directory; the error now names the range +it belongs to (`did you mean 1.5.0+?`). + +=== Reject invalid `PGXNTOOL_VERIFY_RESULTS_MODE` values +Any value other than exactly `pgtap` silently selected `diffs` mode, so a +typo like `pgTap` quietly weakened the `make results` safeguard. The value +is now case-insensitive, and anything other than `pgtap` or `diffs` is a +hard `make` error. + +=== `PGXNTOOL_ENABLE_TEST_INSTALL=yes` errors when `test/install/` is empty +Explicitly setting `PGXNTOOL_ENABLE_TEST_INSTALL=yes` now fails when +`test/install/` has no SQL files, as documented and matching +`PGXNTOOL_ENABLE_TEST_BUILD`; it used to silently run nothing. + +=== Rename internal-only variables to the `_PGXNTOOL_` shape +Several variables that are pure internal plumbing -- never designed as user +override points -- were named with a bare `PGXNTOOL_` prefix, which reads +like a supported override point by name alone. Renamed to signal "internal, +not part of the user-facing surface", matching the existing +`_CHECK_STALE_EXPECTED_SCRIPT` precedent (itself renamed here too, for the +same `_PGXNTOOL_` consistency): `PGXNTOOL_BASE_MK_INCLUDED` -> +`_PGXNTOOL_BASE_MK_INCLUDED`, `PGXNTOOL_CONTROL_FILES` -> +`_PGXNTOOL_CONTROL_FILES`, `PGXNTOOL_EXTENSIONS` -> `_PGXNTOOL_EXTENSIONS`, +`PGXNTOOL_INSTALL_SCHEDULE` -> `_PGXNTOOL_INSTALL_SCHEDULE`, and +`_CHECK_STALE_EXPECTED_SCRIPT` -> `_PGXNTOOL_CHECK_STALE_EXPECTED_SCRIPT`. +None of these are documented anywhere as override points, but if you happened +to reference one directly (unsupported, but possible), update to the new +name. The internal `check-stale-expected` target is likewise renamed to +`_check-stale-expected`; `make test` runs it as before. + +== Behavior changes + +=== Guarantee `test/install/*.sql` ordering +Install files now always run in byte-value (ASCII) filename order, +regardless of filesystem or locale. If one install file depends on another, +encode that in the filenames (e.g. a numeric prefix); see README. + +== New features + +=== Add `make post-tag-version-bump` and `releasing-with-pgxntool.md` New target `post-tag-version-bump` sets each extension's `default_version` to a placeholder (`stable` by default) after a release, so later `make` runs don't overwrite the released versioned SQL file; see README. New @@ -14,19 +75,7 @@ runs don't overwrite the released versioned SQL file; see README. New `tree-is-clean` target fails on uncommitted or untracked changes; `tag` and `post-tag-version-bump` depend on it. -== Fix `make results` refusing to create a new test's first expected output -`make verify-results` used to block `make results` anytime -`regression.diffs` existed, which would be the case when there were no -`test/expected/` files at all. Switch to actually examining -`regression.diffs` to determine if tests are broken. Note this is only in -effect when `PGXNTOOL_VERIFY_RESULTS_MODE=pgtap`. - -== Warn when two `DOCS` entries install to the same filename -The new `check-duplicate-docs` target warns about `DOCS` entries that share a -basename, which would otherwise fail `make install` with `will not overwrite -just-created`. `all` depends on it, so a plain `make` reports it too. - -== Add `PGXNTOOL_ENABLE_FS_INSTALL` and `PGXNTOOL_ENABLE_PGXN_INSTALL` +=== Add `PGXNTOOL_ENABLE_FS_INSTALL` and `PGXNTOOL_ENABLE_PGXN_INSTALL` `test`/`verify-results` unconditionally filesystem-installed the extension (via PGXS's `install`), and `installcheck` unconditionally auto-installed the pgtap dependency via `pgxn install pgtap --sudo` when it wasn't already @@ -42,7 +91,7 @@ on `install`. `PGXNTOOL_ENABLE_PGXN_INSTALL` (default: follows `PGXNTOOL_ENABLE_FS_INSTALL`, but can be set independently) gates the pgtap auto-install. Set either to `no` to disable. -== Add `print-pgtle` target for combined multi-extension pg_tle files +=== Add `print-pgtle` target for combined multi-extension pg_tle files `make print-pgtle` prints the generated pg_tle registration SQL for each extension to stdout, selecting the version directory from the new `PGXNTOOL_PGTLE_TARGET_VERSION` variable (an actual pg_tle version, e.g. @@ -54,60 +103,32 @@ applies. When invoking it recursively for stdout capture, pass `--no-print-directory` -- otherwise GNU Make's own `Entering directory`/`Leaving directory` announcements pollute the captured output. -== Rename internal-only variables to the `_PGXNTOOL_` shape -Several variables that are pure internal plumbing -- never designed as user -override points -- were named with a bare `PGXNTOOL_` prefix, which reads -like a supported override point by name alone. Renamed to signal "internal, -not part of the user-facing surface", matching the existing -`_CHECK_STALE_EXPECTED_SCRIPT` precedent (itself renamed here too, for the -same `_PGXNTOOL_` consistency): `PGXNTOOL_BASE_MK_INCLUDED` -> -`_PGXNTOOL_BASE_MK_INCLUDED`, `PGXNTOOL_CONTROL_FILES` -> -`_PGXNTOOL_CONTROL_FILES`, `PGXNTOOL_EXTENSIONS` -> `_PGXNTOOL_EXTENSIONS`, -`PGXNTOOL_INSTALL_SCHEDULE` -> `_PGXNTOOL_INSTALL_SCHEDULE`, and -`_CHECK_STALE_EXPECTED_SCRIPT` -> `_PGXNTOOL_CHECK_STALE_EXPECTED_SCRIPT`. -None of these are documented anywhere as override points, but if you happened -to reference one directly (unsupported, but possible), update to the new -name. The internal `check-stale-expected` target is likewise renamed to -`_check-stale-expected`; `make test` runs it as before. - -== Add `make results-build` +=== Add `make results-build` Refreshes `test/build/expected/*.out` from the last `test-build` run's actual output, mirroring `make results` for the main suite. Refuses to bless any file whose actual output contains an `ERROR:` line, since that would defeat the point of test-build; skip such a file and bless it by hand if the error is intentional. -== `test/install` now requires `ON_ERROR_STOP` -`test/install/*.sql` files never get a real diff -- their actual output is -written to the same file as their expected output, so a content difference -can never fail the build. Without `ON_ERROR_STOP`, a hard SQL error was -silently swallowed too, making the file "pass" regardless of what happened. -`make test` now fails if a `test/install/*.sql` file doesn't set -`ON_ERROR_STOP`: it must either include `test/pgxntool/psql.sql` (which -sets it) or have its own `\set ON_ERROR_STOP` or `\unset ON_ERROR_STOP` -command, to any value; `\include` and `\include_relative` count as including `psql.sql`, the same as -`\i` and `\ir`; see -`PGXNTOOL_ENABLE_TEST_INSTALL_ERROR_STOP_CHECK` to disable. Since -`test/install/*.out` was never really compared against anything, and is -rewritten by every run, it's now gitignored -- stop committing it. +=== Warn when two `DOCS` entries install to the same filename +The new `check-duplicate-docs` target warns about `DOCS` entries that share a +basename, which would otherwise fail `make install` with `will not overwrite +just-created`. `all` depends on it, so a plain `make` reports it too. -== Reject invalid `PGXNTOOL_VERIFY_RESULTS_MODE` values -Any value other than exactly `pgtap` silently selected `diffs` mode, so a -typo like `pgTap` quietly weakened the `make results` safeguard. The value -is now case-insensitive, and anything other than `pgtap` or `diffs` is a -hard `make` error. +== Bug fixes -== Guarantee `test/install/*.sql` ordering -Install files now always run in byte-value (ASCII) filename order, -regardless of filesystem or locale. If one install file depends on another, -encode that in the filenames (e.g. a numeric prefix); see README. +=== Fix `make results` refusing to create a new test's first expected output +`make verify-results` used to block `make results` anytime +`regression.diffs` existed, which would be the case when there were no +`test/expected/` files at all. Switch to actually examining +`regression.diffs` to determine if tests are broken. Note this is only in +effect when `PGXNTOOL_VERIFY_RESULTS_MODE=pgtap`. -== `PGXNTOOL_PGTLE_VERSION` must be an exact pg_tle range name -`make pgtle PGXNTOOL_PGTLE_VERSION=...` (and `pgtle.sh --pgtle-version`) now -errors unless the value is exactly `1.0.0-1.4.0`, `1.4.0-1.5.0` or `1.5.0+`. -A plain pg_tle version such as `1.5.0` used to be accepted silently, -generating a bogus `pg_tle/1.5.0/` directory; the error now names the range -it belongs to (`did you mean 1.5.0+?`). +=== Fix `make test` failing when `test/sql/` doesn't exist +`installcheck` needs `test/sql/` to exist, but the rule that creates it was +spelled `test/sql` (no trailing slash), which Make treats as a different +target. A project without that directory got `No rule to make target +'test/sql/'`; it now gets created like `test/expected/` and `results/`. Issues fixed in this release: #20, #21, #55, #87, #90, #97, #108, #111, #115, #119