Skip to content

v0.20.1 — Deployment Discipline

Choose a tag to compare

@Alajmah Alajmah released this 21 Jun 00:49
· 166 commits to master since this release

v0.20.1 hardens GitWire deployment after the CT 115 production reconciliation.

Highlights

  • Fail-closed migration entrypoint — the app container now runs node scripts/migrate.js before startup and exits non-zero on migration failure, preventing workers from running against an uncertain schema.
  • Durable Redis memory ceiling — maxmemory 256mb + noeviction are now baked into the Docker Compose command:, surviving container recreation (previously CONFIG SET was process-memory only and reset to 0 on any recreate).
  • /health deployment visibility — now reports version, git_sha, db_migrations_applied, db_migrations_available, and db_migration_status (derived from applied-vs-available, not a hardcoded target). status degrades to "degraded" when migrations are behind or unknown.
  • CI Docker build + smoke gate — every PR now builds and boots both the app and dashboard production images against ephemeral service containers, catching the "merged but never rebuilt" failure class.
  • Fresh-DB migration 019 fix — the new CI smoke gate caught a latent schema gap: migration 019 indexed managed_actions(repo_full_name) but no migration ever added that column. Invisible on CT 115 (warm DB) but fatal on a fresh DB.
  • Deployment runbook updated — canonical migration runner, Redis persistence behavior (CONFIG SET ephemerality, compose durability), CRLF normalization for emergency scp hotfixes, fail-closed entrypoint behavior, and drift verification via /health.

Production verification

  • CT 115 rebuilt from master successfully.
  • /health reports status=ok and db_migration_status=current (36/36).
  • Redis maxmemory persists across rebuild at 268435456 with noeviction and appendonly=yes.
  • All containers healthy and logs clean.

What this prevents

The drift class discovered during the CT 115 reconciliation: future rebuilds can no longer silently run stale code, stale schema, or unbounded Redis. Deployment state is now externally observable via /health, and unbuildable code is caught at PR time rather than during an emergency deploy.

Deferred

Version centralization (single build-info source of truth, GITWIRE_COMMIT_SHA wiring, dashboard footer) remains planned for v0.20.2. The git_sha field in /health is currently null until that wiring lands.