mirror of
https://github.com/aliasvault/aliasvault.git
synced 2026-01-01 10:41:16 -05:00
62 lines
1.6 KiB
Bash
Executable File
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" |