2021-10-13 19:30:03 +02:00
|
|
|
#!/bin/bash
|
|
|
|
|
2021-10-15 16:29:17 +02:00
|
|
|
# There seems to be [a bug with docker-compose](https://github.com/docker/compose/issues/4076#issuecomment-324932294)
|
|
|
|
# where it takes ~40ms to connect to the terminal output of the container, so stuff logged to the terminal in this time is lost.
|
|
|
|
# The best workaround seems to be adding tiny delay like so:
|
|
|
|
sleep 0.1;
|
|
|
|
|
2021-10-13 19:30:03 +02:00
|
|
|
MIGRATE_DIRECTORY="/mnt/migrator/DbScripts"
|
|
|
|
LAST_MIGRATION_FILE="/mnt/data/last_migration"
|
2021-11-24 19:08:36 +01:00
|
|
|
SERVER='mssql'
|
2021-10-13 19:30:03 +02:00
|
|
|
DATABASE="vault_dev"
|
|
|
|
USER="SA"
|
2021-11-24 19:08:36 +01:00
|
|
|
PASSWD=$MSSQL_PASSWORD
|
2021-10-13 19:30:03 +02:00
|
|
|
|
|
|
|
if [ ! -f "$LAST_MIGRATION_FILE" ]; then
|
|
|
|
echo "$LAST_MIGRATION_FILE not found!"
|
|
|
|
echo "This will run all migrations which might cause unexpected behaviour if the database is not empty."
|
|
|
|
echo
|
|
|
|
read -p "Run all Migrations? (y/N) " -n 1 -r
|
|
|
|
echo
|
|
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]
|
|
|
|
then
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
LAST_MIGRATION=""
|
|
|
|
else
|
|
|
|
LAST_MIGRATION=$(cat $LAST_MIGRATION_FILE)
|
|
|
|
fi
|
|
|
|
|
|
|
|
[ -z "$LAST_MIGRATION" ]
|
|
|
|
PERFORM_MIGRATION=$?
|
|
|
|
|
|
|
|
while getopts "r" arg; do
|
|
|
|
case $arg in
|
|
|
|
r)
|
|
|
|
RERUN=1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ -n "$RERUN" ]; then
|
|
|
|
echo "Rerunning the last migration"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Create database if it does not already exist
|
2021-11-24 19:08:36 +01:00
|
|
|
QUERY="IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = '$DATABASE')
|
2021-10-13 19:30:03 +02:00
|
|
|
BEGIN
|
2021-11-24 19:08:36 +01:00
|
|
|
CREATE DATABASE $DATABASE;
|
2021-10-13 19:30:03 +02:00
|
|
|
END;"
|
|
|
|
|
|
|
|
/opt/mssql-tools/bin/sqlcmd -S $SERVER -d master -U $USER -P $PASSWD -I -Q "$QUERY"
|
|
|
|
|
|
|
|
migrate () {
|
|
|
|
local file=$1
|
|
|
|
echo "Performing $file"
|
|
|
|
/opt/mssql-tools/bin/sqlcmd -S $SERVER -d $DATABASE -U $USER -P $PASSWD -I -i $file
|
|
|
|
echo $file > $LAST_MIGRATION_FILE
|
|
|
|
}
|
|
|
|
|
|
|
|
for f in `ls -v $MIGRATE_DIRECTORY/*.sql`; do
|
|
|
|
if (( PERFORM_MIGRATION == 0 )); then
|
|
|
|
migrate $f
|
|
|
|
else
|
|
|
|
echo "Skipping $f"
|
|
|
|
if [ "$LAST_MIGRATION" == "$f" ]; then
|
|
|
|
PERFORM_MIGRATION=0
|
|
|
|
|
|
|
|
# Rerun last migration
|
|
|
|
if [ -n "$RERUN" ]; then
|
|
|
|
migrate $f
|
|
|
|
unset RERUN
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
done;
|