Skip to content

release: add Docker release gate and normalize config upgrade - #188

Closed
NikolayS wants to merge 4 commits into
mainfrom
agent/wave1-env
Closed

release: add Docker release gate and normalize config upgrade#188
NikolayS wants to merge 4 commits into
mainfrom
agent/wave1-env

Conversation

@NikolayS

Copy link
Copy Markdown
Owner

Summary

Relates to #160.

ash.config red/green

The new ordinal-aware upgrade assertion was red before the migration fix on PostgreSQL 14 (and the same divergence affected every supported major):

ash.config column order differs: {singleton,current_slot,sample_interval,rotation_period,include_bg_workers,encoding_version,rotated_at,installed_at,version,debug_logging,num_partitions,sampling_enabled,skipped_samples,missed_samples,rollup_1m_retention_days,rollup_1h_retention_days,rollup_min_backend_seconds,last_rollup_1m_ts,last_rollup_1h_ts,insert_errors,register_wait_cap_hits}

No allowlist was added. The final migration takes an ACCESS EXCLUSIVE lock, validates the exact expected columns/types/nullability and supported catalog properties, snapshots the singleton row plus defaults, constraints, indexes, owner, effective table/column ACLs, and comments, then performs an atomic rename/create/copy/DROP RESTRICT/replay. Unsupported dependencies or properties abort and roll back. A canonical table is a no-op on reapplication and retains its OID.

The regression seeds non-default data, custom defaults/ACL state, a check constraint, a partial index, and a standalone-UNIQUE/self-FK pair. It verifies preservation and applies the migration twice.

Release-gate matrix

Command used on rebased HEAD:

PG_MAJORS="14 15 16 17 18 19beta2" \
RELEASE_GATE_JOBS=2 \
RELEASE_GATE_PULL=0 \
RELEASE_GATE_OUTPUT_DIR=/tmp/pg_ash-release-gate-postrebase-final3-20260727 \
devel/scripts/release_gate.sh all
Surface PG14 PG15 PG16 PG17 PG18 PG19beta2
fresh-install PASS PASS PASS PASS PASS PASS
upgrade-chain PASS PASS PASS PASS PASS PASS
degraded-no-cron PASS PASS PASS PASS PASS PASS
degraded-no-pgss PASS PASS PASS PASS PASS PASS
degraded-neither PASS PASS PASS PASS PASS PASS
cron-path PASS PASS PASS PASS PASS PASS

Result: 36/36 PASS. The cron surface confirmed actual pg_cron job firing on every major, including postgres:19beta2 (there is no postgres:19 image yet).

Additional validation

  • actionlint 1.7.7: PASS
  • shellcheck 0.10.0: PASS
  • hadolint 2.12.0: PASS
  • workflow YAML and six-major matrix parse: PASS
  • release-gate helper unit tests: 7/7 PASS
  • bash -n devel/scripts/release_gate.sh: PASS
  • git diff --check: PASS
  • disposable release-gate containers after run: 0
  • unrelated finance-control-* containers remained running and untouched: 5

This PR is intentionally left as a draft.

Keep the Docker tag independent from the numeric package major so the same image definition supports PostgreSQL 14 through 19beta2.

Relates to #160
Source cron, degraded-mode, and schema snapshots from shared SQL while preserving all 594 workflow assertions. Include attnum in schema snapshots so column-order divergence is visible.

Relates to #160
Run every gate surface across bounded parallel PostgreSQL workers, reuse exact CI step bodies, emit validated TSV and human summaries, and guarantee ID-scoped container and volume teardown.

Relates to #160
Rebuild the v1.5 upgrade table in canonical fresh-install order while preserving the singleton row, defaults, constraints, indexes, ownership, ACLs, and comments. Reject unsupported custom dependencies and catalog properties transactionally instead of dropping them.

Add an upgrade regression that seeds non-default values and custom catalog objects, verifies preservation, and proves migration reapplication keeps the replacement table OID.
@NikolayS

Copy link
Copy Markdown
Owner Author

Superseded by and fully absorbed into #192, now merged as bfde011. Credit to #188 for the release-gate foundation: all 42 original #188-owned shared assertion sites were retained and executed on passing canonical paths; the same owned files contain 44 sites on final main after two later additions. #192 also preserved the pg_cron images/runner, schema snapshot ordering, and ash.config ordinal normalization.

@NikolayS NikolayS closed this Jul 28, 2026
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.

2 participants