Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
155 changes: 88 additions & 67 deletions HISTORY.asc
Original file line number Diff line number Diff line change
@@ -1,32 +1,81 @@
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
`releasing-with-pgxntool.md` is a recommended release checklist. 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
Expand All @@ -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.
Expand All @@ -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

Expand Down
Loading