safe-migrate 0.8.0

Check PostgreSQL migrations against a synchronized database baseline
Documentation
#!/bin/sh
set -eu

verbosity=0
rule_filter=""
fixture_filter=""

usage() {
    printf '%s\n' "Usage: scripts/live-differential [-v|-vv|-vvv] [--rule RULE_DIRECTORY] [--fixture RULE_DIRECTORY/FILE.sql[,RULE_DIRECTORY/FILE.sql...]]"
    printf '%s\n' "Requires DATABASE_URL for a disposable PostgreSQL database (defaults to database safe_migrate)."
    printf '%s\n' "Set SAFE_MIGRATE_DIFF_DATABASE when using a different local database name."
}

while [ "$#" -gt 0 ]; do
    case "$1" in
        -v)
            verbosity=$((verbosity + 1))
            ;;
        -vv)
            verbosity=$((verbosity + 2))
            ;;
        -vvv)
            verbosity=$((verbosity + 3))
            ;;
        --rule)
            shift
            if [ "$#" -eq 0 ]; then
                usage >&2
                exit 2
            fi
            rule_filter=$1
            ;;
        --fixture)
            shift
            if [ "$#" -eq 0 ]; then
                usage >&2
                exit 2
            fi
            fixture_filter=$1
            ;;
        -h|--help)
            usage
            exit 0
            ;;
        *)
            usage >&2
            exit 2
            ;;
    esac
    shift
done

if [ -z "${DATABASE_URL:-}" ]; then
    printf '%s\n' "DATABASE_URL is required for the live differential harness." >&2
    exit 2
fi

export SAFE_MIGRATE_DIFF_VERBOSITY=$verbosity
export SAFE_MIGRATE_REQUIRE_LIVE=1
if [ -n "$rule_filter" ]; then
    export SAFE_MIGRATE_DIFF_RULE="$rule_filter"
else
    unset SAFE_MIGRATE_DIFF_RULE
fi
if [ -n "$fixture_filter" ]; then
    export SAFE_MIGRATE_DIFF_FIXTURE="$fixture_filter"
else
    unset SAFE_MIGRATE_DIFF_FIXTURE
fi

cargo test --locked --test live_differential_harness \
    live_postgres_differential_harness -- --ignored --nocapture