Files
directus/entrypoint.sh
T
julian dec2d190ce Task 1.2 — db-init runner script
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.
2026-05-01 22:35:17 +02:00

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