ci(f5): bootstrap historical admin prerequisite in clean migration rehearsal

This commit is contained in:
2026-09-08 22:44:30 -03:00
parent 8e2ed6e38a
commit 3cfd3090aa
+59 -1
View File
@@ -79,7 +79,65 @@ jobs:
cleanup
docker compose --env-file .env.example up -d db
docker compose --env-file .env.example --profile tools run --build --rm migrate
# One historical production-reset migration intentionally requires the
# functional admin account to exist before it runs. On a brand-new CI
# database, prove the chain stops at that exact guard, seed only that
# historical prerequisite, then continue. The historical migration is
# deliberately left untouched.
bootstrap_log="$(mktemp)"
set +e
docker compose --env-file .env.example --profile tools run --build --rm migrate 2>&1 | tee "$bootstrap_log"
bootstrap_status=${PIPESTATUS[0]}
set -e
if [ "$bootstrap_status" -eq 0 ]; then
echo "ERROR: clean migration rehearsal unexpectedly passed without the historical admin prerequisite." >&2
exit 1
fi
grep -Fq 'Production reset aborted: expected exactly one username admin, found 0' "$bootstrap_log" || {
echo "ERROR: migration rehearsal failed before the expected historical admin guard." >&2
exit 1
}
rm -f "$bootstrap_log"
docker compose --env-file .env.example exec -T db \
psql -v ON_ERROR_STOP=1 -U dhv2_owner -d dhv2 <<'SQL'
DO $$
DECLARE
admin_user_id uuid;
admin_role_id uuid;
BEGIN
SELECT id INTO admin_role_id
FROM roles
WHERE code = 'admin';
IF admin_role_id IS NULL THEN
RAISE EXCEPTION 'CI bootstrap failed: admin role is missing before production reset';
END IF;
INSERT INTO users (
username,
password_hash,
first_name,
last_name,
status,
must_change_password
) VALUES (
'admin',
'CI_BOOTSTRAP_ONLY_NOT_A_REAL_PASSWORD_HASH',
'CI',
'Bootstrap',
'ACTIVE',
true
)
RETURNING id INTO admin_user_id;
INSERT INTO user_roles (user_id, role_id)
VALUES (admin_user_id, admin_role_id);
END $$;
SQL
docker compose --env-file .env.example --profile tools run --rm migrate
docker compose --env-file .env.example exec -T db \
psql -v ON_ERROR_STOP=1 -U dhv2_owner -d dhv2 <<'SQL'