dec2d190ce
scripts/apply-db-init.sh implements the boot-time runner that walks db-init/*.sql in numeric-prefix order, applies each via psql, and records successful applications in a migrations_applied guard table so re-runs are no-ops. All 7 acceptance criteria pass live against the dev compose stack: empty dir, missing env var, apply, idempotent re-run, checksum mismatch, filename collision, broken SQL. Two retroactive Dockerfile corrections folded in (exposed by the first live-test attempt of 1.2's script): 1. apk add bash. The directus/directus:11.17.4 base is Alpine and ships ash via BusyBox, not bash. The script uses bash-specific features (associative arrays, [[ ]], mapfile, BASH_REMATCH) and fails at line 69 in sh. 2. .gitattributes added at repo root forcing LF on *.sh, *.sql, *.yaml, *.yml. Without it, Windows checkouts with core.autocrlf=true (the Git-for-Windows default) silently inject CRLF, causing "bad interpreter: /usr/bin/env bash^M" inside the Linux container. This failure mode only manifests in the container. Both corrections are documented in 01-project-scaffold.md's Done section; 02-db-init-runner.md's Done section captures the live-test results, the corrected docker compose run --entrypoint commands, and the gotcha about compose env defaults masking missing-env-var tests. ROADMAP marks 1.2 done; 1.3 next.
25 lines
962 B
Bash
Executable File
25 lines
962 B
Bash
Executable File
#!/bin/sh
|
|
# TRM directus — image entrypoint (placeholder).
|
|
#
|
|
# Real flow (db-init runner → directus schema apply --yes → directus start)
|
|
# lands in Phase 1 task 1.7. Until then, this script replicates the upstream
|
|
# Directus image CMD so the container boots normally during tasks 1.4 and 1.5
|
|
# (admin UI schema work).
|
|
#
|
|
# Upstream CMD (from directus/directus:11.17.4 Dockerfile):
|
|
# node cli.js bootstrap && pm2-runtime start ecosystem.config.cjs
|
|
#
|
|
# bootstrap: idempotent — initialises the DB schema on first run, reads
|
|
# ADMIN_EMAIL / ADMIN_PASSWORD to create the initial admin user.
|
|
# pm2-runtime: starts the Directus process under PM2 so the container stays
|
|
# alive and restarts on crash without an outer supervisor.
|
|
#
|
|
# Exit codes are propagated: any non-zero exit causes the container to exit
|
|
# with that code, which compose reports as an error.
|
|
|
|
set -e
|
|
|
|
node /directus/cli.js bootstrap
|
|
|
|
exec pm2-runtime start /directus/ecosystem.config.cjs
|