#!/bin/bash # Points to the folder that contains all pertinent database tables # Each table directory contains: # dir/ # up.sql # down.sql # First some parameter checks if [ ! $1 ];then echo Failure: Insufficient arguments provided echo ./build-db.sh /migrations/folder/path exit 1 fi if [ ! $2 ];then echo Failure: Insufficient arguments provided echo ./build-db.sh /migrations/folder/path /path/to/.env file exit 1 fi migration_loc=$1 env_path=$2 source $env_path # This is kinda dumb but we have to check and make sure the sample default user # configuration is all there if [ ! $DATABASE_NAME ];then echo No DATABASE_NAME set exit 1 fi if [ ! $DATABASE_PASS ];then echo No DATABASE_PASS set exit 1 fi if [ ! $DATABASE_USER ];then echo No DATABASE_USER set exit 1 fi if [ ! $DATABASE_HOST ];then echo No DATABASE_HOST set exit 1 fi if [ ! $DATABASE_PORT ];then echo No DATABASE_PORT set exit 1 fi # Next we setup the database user mysql -e "CREATE USER '$DATABASE_USER'@'$DATABASE_HOST' IDENTIFIED BY '$DATABASE_PASS';" # Yet another reason to not use this in prod to setup you're database mysql -e "GRANT ALL PRIVILEGES ON *.* TO '$DATABASE_USER'@'$DATABASE_HOST';" # First we'll setup the databse that we want to use for dir in $(ls $migration_loc);do # Port field is ignored in this script as its straight up not used in Docker tests echo Migrating $dir mysql -u $DATABASE_USER -p $DATABASE_PASS \ -h $DATABASE_HOST -D $DATABASE_NAME \ < $dir/up.sql done