Repository navigation
Added
- Pull-based production deploys: pin
NUKELAB_VERSIONorNUKELAB_IMAGE_TAG
to switchnukelabctl up/updatefrom source builds to pulling tagged
ghcr.io/nukehub-dev/nukelab-backendand-frontendimages. The three
backend services share one backend image;update --buildforces a source
rebuild even in pull mode. Unpinned deploys keep today's source-build
behavior. - Release versioning: git tags (
vX.Y.Z) are the single source of truth.
scripts/bump-version.shsyncs the version acrossVERSION,
backend/app/version.py,frontend/package.json, and this changelog. - Dynamic version injection: CI image builds pass the resolved tag as the
APP_VERSIONbuild arg (backend/Dockerfile), so running containers
report the exact image tag (2.1.0,main,pr-42). The API root,
/health/status, and the OpenTelemetry service version resolve via
settings.app_version; empty or unsetAPP_VERSIONfalls back to the
static literal inapp/version.py. - Compose builds bake the platform version into locally built backend images:
nukelabctlexportsNUKELAB_VERSION(from theVERSIONfile / git tag,
overridable via the env file) andcompose.ymlpasses it as the
APP_VERSIONbuild arg to the backend and celery images, so stacks
deployed withnukelabctlreport the checkout version instead of
0.0.0-dev. - Automatic pre-migration backups:
./nukelabctl db-migratenow takes a
pg_dumpsnapshot before runningalembic upgrade head. The snapshot name
isbackups/pre-migrate-<NUKELAB_VERSION>-<current-revision>-<timestamp>.dump.
If the backup fails, the migration aborts; if the migration then fails, the
exact./nukelabctl restore <file>command is printed. Use--no-backupto
skip the snapshot. - Startup schema-compatibility guard (
app/db/schema_guard.py) refuses to boot
an old backend image against a newer database schema. Controlled by the
DB_SCHEMA_GUARDsetting (autorefuse in production/warn elsewhere,
enforcealways refuse,offdisabled). If the database is unreachable the
guard logs a warning and does not block startup. - Environment-file drift detection and repair:
./nukelabctl check-envcompares
.env/.env.developmentagainst.env.exampleand reports missing or
stale keys (optionally value differences with--changed, all files with
--all)../nukelabctl sync-envnon-destructively appends missing keys from
.env.examplewhile preserving existing local values and secrets; stale keys
are reported but left for manual removal. Both commands are read-only by
default unlesssync-envis invoked with--yesor confirmed interactively. - Production version guard: when
APP_ENV=production,nukelabctlrefuses to
boot if the resolved version is0.0.0-dev. Production requires a real
release viaVERSION, a git tag, or an explicitNUKELAB_VERSION/
NUKELAB_IMAGE_TAG(the latter is useful when pulling pre-built GHCR
images).
Changed
- Backend version string is no longer hardcoded:
app/main.py,
app/api/health.py, and the OpenTelemetry service version in
app/config.pyall resolve throughsettings.app_version(env-first,
static fallback inapp/version.py). - The static fallback in
app/version.pyis now the fixed sentinel
0.0.0-devinstead of a release-looking literal — a version that can
never be mistaken for a release, and whichbump-version.shno longer
touches (onlyVERSION,frontend/package.json+ lockfile, and this
changelog are bumped at release time). frontend/package.jsonversion set from0.0.0placeholder to the
platform version.
Fixed
- CI/CD workflow now triggers on
v*.*.*tags and builds/pushes release
images when a tag is pushed, including platform environment images
(nukelab-environment-base,nukelab-environment-conda-base,nukelab-environment-workspace,nukelab-environment-dev).
Thebuild-imagesjob and per-matrixBuild and pushstep both run for tag
pushes regardless of path-filter results, and the path-filteranyrule is
updated so version-only changes trigger builds. A newReleaseworkflow
creates a draft GitHub Release from the matchingCHANGELOG.mdsection and
appends the published container image references.
Container images
| Image | Tag |
|---|---|
ghcr.io/nukehub-dev/nukelab-backend |
2.1.0 |
ghcr.io/nukehub-dev/nukelab-frontend |
2.1.0 |
ghcr.io/nukehub-dev/nukelab-auth-sidecar |
2.1.0 |
ghcr.io/nukehub-dev/nukelab-environment-base |
2.1.0 |
ghcr.io/nukehub-dev/nukelab-environment-conda-base |
2.1.0 |
ghcr.io/nukehub-dev/nukelab-environment-workspace |
2.1.0 |
ghcr.io/nukehub-dev/nukelab-environment-dev |
2.1.0 |
All images are also tagged as latest.
Pull all images
docker pull ghcr.io/nukehub-dev/nukelab-backend:2.1.0
docker pull ghcr.io/nukehub-dev/nukelab-frontend:2.1.0
docker pull ghcr.io/nukehub-dev/nukelab-auth-sidecar:2.1.0
docker pull ghcr.io/nukehub-dev/nukelab-environment-base:2.1.0
docker pull ghcr.io/nukehub-dev/nukelab-environment-conda-base:2.1.0
docker pull ghcr.io/nukehub-dev/nukelab-environment-workspace:2.1.0
docker pull ghcr.io/nukehub-dev/nukelab-environment-dev:2.1.0