Files
aliasvault/apps/server/Databases/AliasClientDb/Scripts/generate-sql-files.sh

62 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# Make sure to install the dotnet ef tool first before running this script:
# dotnet tool install --global dotnet-ef
# Configurable settings
PROJECT="../AliasClientDb.csproj"
STARTUP_PROJECT="../AliasClientDb.csproj" # Adjust if different from main project
CONTEXT="AliasClientDbContext"
OUTPUT_DIR="MigrationSql"
FULL_FILE="$OUTPUT_DIR/000_FullSchema.sql"
# Create output directory
mkdir -p "$OUTPUT_DIR"
# Use 'set --' to build a list of pending migrations into $1 $2 ...
set -- $(dotnet ef migrations list \
--project "$PROJECT" \
--startup-project "$STARTUP_PROJECT" \
--context "$CONTEXT" 2>/dev/null \
| grep '(Pending)' \
| sed 's/ (Pending)//')
TOTAL=$#
# Generate full script from scratch if any pending migrations exist
if [ "$TOTAL" -gt 0 ]; then
echo "Generating full schema script..."
dotnet ef migrations script \
--project "$PROJECT" \
--startup-project "$STARTUP_PROJECT" \
--context "$CONTEXT" \
--output "$FULL_FILE"
else
echo "No pending migrations found. Skipping full script."
fi
# Also generate per-migration scripts if enough exist
if [ "$TOTAL" -lt 2 ]; then
echo "Not enough pending migrations to generate step-by-step scripts."
exit 0
fi
# Loop over migration pairs
i=1
while [ "$i" -le "$TOTAL" ]; do
j=$((i + 1))
FROM=$(eval echo \${$i})
TO=$(eval echo \${$j})
FILE="$OUTPUT_DIR/$(printf "%03d" "$i")_${FROM}_to_${TO}.sql"
echo "Generating script: $FROM -> $TO"
dotnet ef migrations script "$FROM" "$TO" \
--project "$PROJECT" \
--startup-project "$STARTUP_PROJECT" \
--context "$CONTEXT" \
--output "$FILE"
i=$((i + 1))
done
echo "Done. Scripts written to $OUTPUT_DIR"