Repository navigation
v0.7.0: PostgreSQL-only runtime and reliable deployment
EvaCal v0.7.0
This release makes PostgreSQL the sole application database and delivers the rebuilt installer and image distribution workflow from PRs #93 and #94.
Changes
- One canonical Prisma schema and migration directory. The five previously published PostgreSQL migrations retain their names and SQL checksums.
- PostgreSQL-only runtime, development, Docker and CI configuration. Invalid database URLs fail explicitly instead of falling back to a local database.
- Source-free deployment archive and paired application/migration images. The installer checks matching OCI revisions, pins image digests and uses configuration from the matching commit.
- Safer installation and upgrades: prepare before replacing live configuration, preserve project names and volumes, back up existing data and recreate nginx after application replacement.
- PostgreSQL backup/restore with transactional database restore, archive validation and local artifact persistence.
- Local HTTP sessions, HTTPS deployment and non-root application operation were validated on Linux.
- Legacy database files and journals remain excluded from both production images. Customer database vocabulary, including SQLite requirements, remains supported by GOST 34 matching.
- Jenkins publication runs on a Linux amd64 Docker agent and uses an isolated registry login for each build.
Compatibility
PostgreSQL installations retain their existing migration history and volumes; no database reset or new baseline is required. SQLite installations must migrate their data separately before upgrading. Unsupported stored database configuration is rejected before modifying the installation. S3 deployments still require a coordinated external backup of their database and objects.
Installation
Download evacal-0.7.0-deploy.tar.gz and its .sha256 file from this release, then:
sha256sum -c evacal-0.7.0-deploy.tar.gz.sha256
tar -xzf evacal-0.7.0-deploy.tar.gz
cd evacal-0.7.0-deploy
bash install.sh install --version 0.7.0Use --local for a loopback-only HTTP test installation. Linux Docker Engine and Compose v2 are required; the image-based installation needs no Node.js, Git or source checkout.
Images: ghcr.io/onixus/evacal:0.7.0 and ghcr.io/onixus/evacal-migrate:0.7.0. Both are released together for Linux amd64 and arm64.
Validation
The application changes passed Linux Jenkins validation before merge: 740 unit tests, 77 deployment checks without skips, lint, typecheck, dependency audit, GOST 34 verification, production and Docker builds, and PostgreSQL integration checks. Baseline, clean HTTP and clean HTTPS installations each passed both Playwright scenarios. Update, backup/restore, authenticated database reads, artifact persistence and source-free installation also passed.
Release publication builds both targets from the release tag, runs a native Linux container smoke test before promoting version/latest tags, and produces a checksummed deployment archive. Public image access and a clean installation of the released version are verified before publishing the GitHub release.
Release verification results
- Release commit:
bf825d938a6f56787713eea47ffc3e56a36d8b84. - Linux Jenkins publication:
evacal-release-0.7.0-linux #3— SUCCESS. Both runner and migrate built forlinux/amd64andlinux/arm64; all 77 deployment checks passed without skips. Native amd64 runtime smoke covered migration rerun, non-root execution, writable storage and nginx HTTP/TLS. - Public installation:
evacal-release-0.7.0-public-install #1— SUCCESS. Anonymous GHCR pull, both platform manifests, matching version/latest manifests and image revisions, fresh HTTPS installation, certificate-verified health and 2/2 Playwright scenarios without retries or skips. - Application manifest digest:
sha256:5b74d3948b7e1b9e84407756f01257e4a4681fd7b2e898afda4dfa052489b184. - Migration manifest digest:
sha256:fe3259101abe5411035c1c5f0477dda60fc5a0e4e4ed0e0b76e5b395aeaf2247.
The attached deployment archive was produced by the Linux publication job and its SHA-256 checksum was verified before upload.