You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.5 KiB
65 lines
1.5 KiB
#!/usr/bin/env bash |
|
|
|
shopt -s nullglob extglob |
|
set -e |
|
|
|
usage() { |
|
echo "Usage: $0 <migration_name>" |
|
} |
|
|
|
SCRIPT=$(realpath "$0") |
|
SCRIPTPATH=$(dirname "$SCRIPT") |
|
|
|
PROJECT_ROOT=$(realpath --relative-to="$PWD" "$SCRIPTPATH/..") |
|
|
|
MIGRATION_NAME="$1" |
|
if [[ -z "$MIGRATION_NAME" ]]; then |
|
usage |
|
exit 1 |
|
fi |
|
|
|
MIGRATIONS_DIR="$PROJECT_ROOT/sprinklers_database/src/migrations" |
|
|
|
# echo "MIGRATIONS_DIR: $MIGRATIONS_DIR" |
|
|
|
pushd "$MIGRATIONS_DIR" >/dev/null |
|
SQL_FILES=(+([0-9])*.sql) |
|
popd >/dev/null |
|
|
|
# echo "SQL_FILES: " |
|
# echo "${SQL_FILES[@]}" |
|
|
|
# Remove anything after first numbers |
|
MIGRATION_NUMBERS=("${SQL_FILES[@]%%-*.sql}") |
|
|
|
# echo "MIGRATION_NUMBERS: " |
|
# echo "${MIGRATION_NUMBERS[@]}" |
|
|
|
MIGRATION_MAX=0 |
|
for num in "${MIGRATION_NUMBERS[@]}"; do |
|
if (( num > MIGRATION_MAX )) |
|
then |
|
MIGRATION_MAX=$num |
|
fi |
|
done |
|
|
|
# echo "MIGRATION_MAX: $MIGRATION_MAX" |
|
|
|
NEXT_MIGRATION=$(( MIGRATION_MAX + 1 )) |
|
NEXT_MIGRATION_PREFIX=$( printf "%04d" "$NEXT_MIGRATION" ) |
|
|
|
# echo "NEXT_MIGRATION: $NEXT_MIGRATION" |
|
# echo "NEXT_MIGRATION_PREFIX: $NEXT_MIGRATION_PREFIX" |
|
|
|
for SUFFIX in "up" "down"; do |
|
migration_file="$MIGRATIONS_DIR/$NEXT_MIGRATION_PREFIX-$MIGRATION_NAME-$SUFFIX.sql" |
|
echo "Creating migration file $migration_file" |
|
touch "$migration_file" |
|
done |
|
|
|
LINE_TO_INSERT="\ \ \ \ migs.add(include_file_migration!($NEXT_MIGRATION, \"$NEXT_MIGRATION_PREFIX-$MIGRATION_NAME\"));" |
|
|
|
MIGRATIONS_RS="$PROJECT_ROOT/sprinklers_database/src/migrations/mod.rs" |
|
echo "Inserting line in $MIGRATIONS_RS" |
|
sed -i "/INSERT MIGRATION ABOVE/i \ |
|
$LINE_TO_INSERT" "$MIGRATIONS_RS"
|
|
|