The server for Open Course World
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}