#! /bin/bash set -xe source ./scripts/env.sh ./.env.schema base="$1" head_arg="$2" head=$(git show --format=format:%h -q | xargs) if [[ -n "$head_arg" ]]; then head="$head_arg" fi; migration="./migrations/${base}_to_${head}.sql" db() { echo -n "postgresql+pg8000:///dnim?port=$1&user=$POSTGRES_USER&password=$POSTGRES_PASSWORD" } if [[ -z "$base" ]] || [[ -z "$head" ]]; then echo "revisions to diff are required ex. ./scripts/diff.sh abc bcd" 1>&2; exit 1; fi set +e schema_changed=$(git diff --quiet "$base" "$head" -- ./schema) schema_changed_exit=$? set -e if [[ "$schema_changed_exit" = "0" ]]; then echo "" exit 0; fi; if [[ ! -f "$migration" ]]; then ./scripts/build.sh base "$base" 1>&2 || (echo "base failed to build" && exit 1) ./scripts/build.sh head "$head" 1>&2 || (echo "head failed to build" && exit 1) until pg_isready --quiet -p 5432 && pg_isready --quiet -p 5433; do true; done; migra --unsafe "$(db 5432)" "$(db 5433)" || echo "migra exited with code $?. this is /probably/ fine" 1>&2 else cat "$migration" fi