Files
git.stella-ops.org/devops/docker/schema-versions/docker-entrypoint-initdb.d/00-init-schema.sh
StellaOps Bot 37e11918e0 save progress
2026-01-06 09:42:20 +02:00

71 lines
2.5 KiB
Bash

#!/bin/bash
# 00-init-schema.sh
# Initialize PostgreSQL with module schema for testing
# Sprint: SPRINT_20260105_002_005_TEST_cross_cutting
# Task: CCUT-008
set -e
echo "Initializing schema for module: ${STELLAOPS_MODULE}"
echo "Schema version: ${STELLAOPS_SCHEMA_VERSION}"
# Create extensions
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
CREATE EXTENSION IF NOT EXISTS "btree_gist";
EOSQL
# Apply base schema if exists
BASE_SCHEMA="/schemas/${STELLAOPS_MODULE}/base.sql"
if [ -f "$BASE_SCHEMA" ]; then
echo "Applying base schema: $BASE_SCHEMA"
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -f "$BASE_SCHEMA"
fi
# Apply versioned schema if exists
VERSION_SCHEMA="/schemas/${STELLAOPS_MODULE}/${STELLAOPS_SCHEMA_VERSION}.sql"
if [ -f "$VERSION_SCHEMA" ]; then
echo "Applying version schema: $VERSION_SCHEMA"
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -f "$VERSION_SCHEMA"
fi
# Apply all migrations up to version
MIGRATIONS_DIR="/schemas/${STELLAOPS_MODULE}/migrations"
if [ -d "$MIGRATIONS_DIR" ]; then
echo "Applying migrations from: $MIGRATIONS_DIR"
# Get version number for comparison
VERSION_NUM=$(echo "$STELLAOPS_SCHEMA_VERSION" | sed 's/v//' | sed 's/\.//g')
for migration in $(ls -1 "$MIGRATIONS_DIR"/*.sql 2>/dev/null | sort -V); do
MIGRATION_VERSION=$(basename "$migration" .sql | sed 's/[^0-9]//g')
if [ -n "$VERSION_NUM" ] && [ "$MIGRATION_VERSION" -gt "$VERSION_NUM" ]; then
echo "Skipping migration $migration (version $MIGRATION_VERSION > $VERSION_NUM)"
continue
fi
echo "Applying migration: $migration"
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -f "$migration"
done
fi
# Record schema version in metadata table
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE TABLE IF NOT EXISTS _schema_metadata (
key TEXT PRIMARY KEY,
value TEXT NOT NULL,
updated_at TIMESTAMPTZ DEFAULT NOW()
);
INSERT INTO _schema_metadata (key, value)
VALUES
('module', '${STELLAOPS_MODULE}'),
('schema_version', '${STELLAOPS_SCHEMA_VERSION}'),
('initialized_at', NOW()::TEXT)
ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value, updated_at = NOW();
EOSQL
echo "Schema initialization complete for ${STELLAOPS_MODULE} version ${STELLAOPS_SCHEMA_VERSION}"