Use a release
Downloadvitalog-images.json from a published GitHub release. It records immutable API and web image digests. Keep both services on the same release version; select linux/amd64 or linux/arm64 to match the host. Do not use mutable latest tags.
ghcr.io/avgeek-oss/vitalog-api and ghcr.io/avgeek-oss/vitalog-web. Use the exact image references recorded in the selected release rather than changing registry paths manually.
Set the required credentials and origins in the runtime environment. See Installation and Configuration. Back up PostgreSQL and private attachment storage before upgrading. Preserve AUTH_KEY and other saved credentials unless deliberately rotating them.
Publish a release
Update the API and web package versions together and merge after CI passes. Then run Cut release onmain from the Actions tab: it checks that the versions, changelog entry and CI result for the head commit agree, creates the vX.Y.Z tag there, and dispatches Publish release images with that tag. Creating the tag and dispatching by hand still works.
The workflow builds both architectures, verifies public pulls and source metadata, and tests the exact images against disposable PostgreSQL installations before publication. The release remains draft until the checks pass. A published release cannot be overwritten.
Verify containers locally
npm run test:container checks the Compose installation. npm run test:runtime applies compose.runtime.yaml to verify constrained CPU/memory settings, private database networking, and authenticated readiness through database failure and recovery. CI also checks the production builders within their memory budgets.