Releases: capydatabase/pgsquash-engine
Releases · capydatabase/pgsquash-engine
Release list
v0.11.0
Fixed
- The development stack could not start PostgreSQL at all.
postgres:18
images place the cluster in a major-version subdirectory below a single mount
at/var/lib/postgresql; the compose files still mounted the data volume at
/var/lib/postgresql/data(the pre-18 convention), so the entrypoint aborted
and the container restart-looped. The primary database and the dev-environment
stack now mount at/var/lib/postgresql. The 15/16/17 services in
compose.testing.yamlcorrectly keep the old path. - The
pgsquashservice is a one-shot CLI - it runs a command and exits - but
carriedrestart: unless-stoppedand a healthcheck, which crash-looped it
underdocker compose up. It is nowrestart: "no"with no healthcheck, and
the files documentdocker compose run --rm pgsquash <command>as the way to
drive it. - Build arguments defaulted to
${BUILD_DATE:-$(date -u ...)}and
${GIT_COMMIT:-$(git rev-parse ...)}. Compose does not run subshells, so
those command substitutions were baked into the image as literal strings.
They are static defaults (unknown) now; CI passes real values. docker/postgres/Dockerfilereferenced${PG_VERSION}in itsLABEL
without re-declaring the argument inside the stage, so
org.pgsquash.postgres.versionwas always empty.- pgAdmin could never start.
PGADMIN_EMAILdefaulted to
admin@pgsquash.localhost(andadmin@pgsquash.localin the dev-environment
stack); pgAdmin rejects reserved domains outright - "the part after the
@-sign is a special-use or reserved name" - and exits, so the container
restart-looped forever. The default is nowadmin@pgsquash.dev, in the
compose files and in.env.example. - pgAdmin also published the wrong port: it cannot bind the privileged port 80
underno-new-privilegesand silently falls back to 8080, so the published
mapping pointed at a port nothing was listening on.PGADMIN_LISTEN_PORTis
now pinned to 8080 and the mapping matches. - Removed the
./docker/pgadmin/servers.jsonbind mount. That file has never
existed in the repository, so Docker created an empty directory at the
source path and mounted it over pgAdmin's config file. - Docker-based validation could never reach the Docker daemon. The socket is
root:rootmode 0660 and the image runs as uid 10001, so
docker/validation/with-validation.yml- whose entire purpose is
Docker-driven validation - got "permission denied". That service now runs as
user: "0:0". Mounting the socket already confers host-root, so this gives
away nothing the mount had not;no-new-privilegesandcap_drop: [ALL]
stay on. The core and dev-environment stacks keep their non-root uid (they
mount~/.sshinto/home/pgsquash) and now say so where the socket is
mounted.
Changed
- Every Dockerfile and Compose file was rebuilt on current Docker conventions
(Engine 29 / Compose 5 / BuildKit 0.33). The mainDockerfileis now a
proper multi-stage build (base→deps→build→runtime) behind a
# syntax=docker/dockerfile:1frontend, which the file previously lacked
entirely. It uses a read-only bind mount of the source
instead ofCOPY . .and BuildKit cache mounts for the module and build
caches, and it takes its Go toolchain fromgolang:1.27.1-trixierather than
installing an out-of-date Go tarball into Ubuntu withwget. Everything that
ships is staged into/outby the build stage. CGO stays enabled and the
image is deliberately not cross-compiled, becausepg_query_golinks
libpg_query. The runtime user is now a numeric uid/gid (10001). docker-compose.yml,docker-compose.testing.ymland
docker-compose.tools.ymlare nowcompose.yaml,compose.testing.yamland
compose.tools.yaml- the canonical filenames, so the core stack needs no
-fflag. Obsoleteversion:keys, hard-codedcontainer_names and the
fixed172.20.0.0/16subnet are gone; services gainedno-new-privileges,
cap_drop: [ALL]where the workload allows it, rotatinglocallog drivers,
memory limits,init: true, and healthchecks withstart_intervalso a
database is marked healthy as soon as it is ready. Published ports are bound
to127.0.0.1instead of every interface, and pgAdmin and Filebrowser now sit
behind atoolsprofile so they do not start by default.- The overlays under
docker/(dev-environment/full-stack.yml,
engine/quick-start.yml,validation/with-validation.yml) got the same
treatment. Their filenames are unchanged, since they are always invoked with
-fand are referenced by name from the READMEs.
Known issues
docker/api-server/(itsDockerfileanddocker-compose.yml) builds
./cmd/api-server, which no longer exists in this repository. It has been
left untouched rather than modernized or deleted - it is dead as it stands.
v0.10.0
Added
pgsquash validate-externalfor applying a migration path to a caller-owned
empty PostgreSQL database, capturing a portable catalog snapshot, and
comparing a second build against it. The command refuses non-empty databases,
supports DSNs through an environment variable, and emits the stable
pgsquash.external-validation.v1JSON contract.- Public catalog snapshot types and comparison helpers in
pkg/validation. - Catalog signatures for sequences, custom types and domains, relation and
function ownership, row-security flags, policy roles, grants, and comments.
Changed
- Migration execution now honors context cancellation for compatibility SQL and
every migration statement. - CLI diagnostics use stderr so JSON output on stdout remains machine-readable.
- Release automation now publishes only native GitHub archives and checksums;
obsolete Homebrew and container-registry publication paths were removed. - Project documentation now describes the engine as a standalone OSS component
and documents CapyDB-managed validation.
Removed
- The unused GitHub App/webhook package and its authentication dependencies.
- The managed subscription feature catalog and
featuresCLI command; these
described the retired hosted product rather than an OSS engine capability. - Archived CapySquash platform manifests, Docker publishing, and self-analysis
workflows from the engine repository.