The server for Open Course World
at tangled-test 120 lines 2.3 kB view raw
1#!/usr/bin/env bash 2 3stderr() { 4 echo "$@" >&2 5} 6 7fail() { 8 stderr "$@" 9 exit 1 10} 11 12execd() { 13 case "$@" in 14 *SECRET*) ;; 15 *) stderr "$@" 16 esac 17 18 "$@" 19} 20 21putd() { 22 local __var="$1"; shift 23 stderr "$__var=[${!__var}]" 24} 25 26check-exe() { 27 local exe="$1"; shift 28 local msg="$1"; shift 29 30 type "$exe" >&2 || fail "$msg" 31} 32 33db-migrate() { 34 check-exe migrate "install golang-migrate first:\nhttps://github.com/golang-migrate/migrate/tree/master/cmd/migrate" 35 local crdb_url="${DYNA_URL/postgres:/cockroachdb:}" 36 execd migrate -path=db/migrations -database="$crdb_url" "$@" 37} 38 39check-pwd() { 40 # in docker, we have to be in /app 41 if [[ -n "$IS_DOCKER" ]]; then 42 [[ "$PWD" = /app ]] 43 44 # outside of docker, we have to have a defaults.sh 45 else 46 [[ -s ./scripts/defaults.sh ]] 47 fi 48} 49 50check-pwd || fail "please run scripts from the project root, with ./scripts/thing.sh" 51 52# load the dotenv files in export mode 53# loading defaults.sh later because it won't override previously-set variables, 54# and needs overrides set for derived vars. 55set -a 56[[ -s .env ]] && source ./.env 57[[ -s ./scripts/defaults.sh ]] && source ./scripts/defaults.sh 58set +a 59 60dbconsole() { 61 init-dbconsole 62 63 dbconsole "$@" 64} 65 66sql() { 67 init-dbconsole 68 69 sql "$@" 70} 71 72init-dbconsole() { 73 [[ "$DB_CONSOLE_TYPE" = auto ]] && type cockroach >&2 && { 74 export DB_CONSOLE_TYPE=cockroach 75 cockroach-sql() { cockroach sql "$@" ;} 76 } 77 78 [[ "$DB_CONSOLE_TYPE" = auto ]] && type cockroach-sql >&2 && export DB_CONSOLE_TYPE=cockroach 79 80 [[ "$DB_CONSOLE_TYPE" = auto ]] && type psql >&2 && export DB_CONSOLE_TYPE=psql 81 82 case "$DB_CONSOLE_TYPE" in 83 cockroach) 84 dbconsole() { 85 execd cockroach sql --url="${DYNA_URL}" "$@" 86 } 87 88 sql() { 89 dbconsole --execute "$@" 90 } 91 ;; 92 cockroach-sql) 93 dbconsole() { 94 execd cockroach-sql --url="${DYNA_URL}" "$@" 95 } 96 97 sql() { 98 dbconsole --execute "$@" 99 } 100 ;; 101 psql) 102 dbconsole() { 103 PGCLIENTENCODING='utf-8' execd psql "$DYNA_URL" 104 } 105 106 sql() { 107 dbconsole --command "$@;" 108 } 109 ;; 110 *) 111 dbconsole() { 112 fail 'you must install either cockroachdb or psql to use db scripts.' 113 } 114 115 sql() { 116 dbconsole 117 } 118 ;; 119 esac 120}