162 lines
3.7 KiB
Bash
Executable File
162 lines
3.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -e
|
|
|
|
DB_USER=${DB_USER:-"test"}
|
|
DB_PASS=${DB_PASS:-"test"}
|
|
DB_DATABASE=${DB_DATABASE:-"dev"}
|
|
DB_HOST=${DB_HOST:-"127.0.0.1"}
|
|
DB_PORT=${DB_PORT:-"5432"}
|
|
DB_DSN_DEV=${DB_DSN_DEV:-"postgres://$DB_USER:$DB_PASS@$DB_HOST:$DB_PORT/$DB_DATABASE?sslmode=disable"}
|
|
|
|
CANAPE_USERNAME=${CANAPE_USERNAME:-"admin"}
|
|
CANAPE_PASS=${CANAPE_PASS:-"admin"}
|
|
TOKEN=${CANAPE_TOKEN}
|
|
|
|
CONFIG_FILE=config.yml
|
|
MIGRATION_SCHEMA=./migrations
|
|
DOCKER_COMPOSE_FILE=./docker/docker-compose.yml
|
|
|
|
_usage() {
|
|
prog=$(basename "$0")
|
|
echo "Usage:"
|
|
echo " $prog back"
|
|
echo " Apply the migrations, build and run the backend"
|
|
echo ""
|
|
echo " $prog front"
|
|
echo " Install the JS packages and run the frontend"
|
|
echo ""
|
|
echo " $prog migrate [args]"
|
|
echo " Runs the migrate command with the given parameters"
|
|
echo ""
|
|
echo " $prog db-shell"
|
|
echo " Get a psql shell on the database"
|
|
echo ""
|
|
echo " $prog db-init"
|
|
echo " Refresh the informations (imdb / movies / shows) needed"
|
|
echo " before the first run"
|
|
echo ""
|
|
echo " $prog docker-db [up|up -d|down|other docker-compose options...]"
|
|
echo " Setup the database in a docker"
|
|
exit 1
|
|
}
|
|
|
|
_log_info() {
|
|
printf "$(tput setaf 5)-->$(tput setaf 2) %s$(tput sgr0)\n" "$@"
|
|
}
|
|
|
|
_log_error() {
|
|
printf "$(tput setaf 6)-->$(tput setaf 9) %s$(tput sgr0)\n" "$@"
|
|
}
|
|
|
|
_check_command() {
|
|
command -v "$1" >/dev/null 2>/dev/null
|
|
}
|
|
|
|
_ensure_command() {
|
|
_check_command "$1" && return 0
|
|
_log_error "Please install $1 first"
|
|
exit 1
|
|
}
|
|
|
|
_migrate() {
|
|
migrate -database "$DB_DSN_DEV" "$@"
|
|
}
|
|
|
|
_ensure_command jq
|
|
_ensure_command go
|
|
_ensure_command npm
|
|
|
|
_check_command migrate || {
|
|
_log_info "Installing migrate"
|
|
go install \
|
|
-tags 'postgres' \
|
|
github.com/golang-migrate/migrate/v4/cmd/migrate@latest
|
|
}
|
|
|
|
_check_command fresh || {
|
|
_log_info "Installing fresh"
|
|
GO111MODULE=off \
|
|
go get -u -v github.com/pilu/fresh
|
|
}
|
|
|
|
[ -f "$CONFIG_FILE" ] || {
|
|
_log_error "Please setup the canape configuration in $CONFIG_FILE"
|
|
exit 1
|
|
}
|
|
|
|
canape_call() {
|
|
method=$1
|
|
resource=$2
|
|
_log_info "Calling: $method $resource ..."
|
|
response=$(curl --silent --show-error \
|
|
-X "$method" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: $TOKEN" \
|
|
"http://localhost:3000/$resource")
|
|
[ -n "$response" ] && echo "$response"
|
|
_log_info "Done"
|
|
}
|
|
|
|
canape_login() {
|
|
# Skip if the user defined its own token
|
|
[ -n "$CANAPE_TOKEN" ] && return
|
|
_log_info "Logging in ..."
|
|
json_data=$(jq -n -c --arg username "$CANAPE_USERNAME" \
|
|
--arg password "$CANAPE_PASS" \
|
|
'{username: $username,password: $password}')
|
|
TOKEN=$(curl --silent --show-error -X POST \
|
|
-d "$json_data" \
|
|
http://localhost:3000/users/login | jq -r .data.token )
|
|
_log_info "Logged in"
|
|
}
|
|
|
|
canape_logout() {
|
|
# Skip if the user defined its own token
|
|
[ -n "$CANAPE_TOKEN" ] && return
|
|
_log_info "Disconnecting ..."
|
|
canape_call DELETE "users/tokens/$TOKEN"
|
|
_log_info "Disconnected"
|
|
}
|
|
|
|
case $1 in
|
|
migrate)
|
|
shift
|
|
_migrate -path "$MIGRATION_SCHEMA" "$@"
|
|
;;
|
|
db-shell)
|
|
docker run -it --rm \
|
|
-e PGPASSWORD="$DB_PASS" \
|
|
--link canape_postgresql_dev:postgres \
|
|
postgres:13.1 \
|
|
psql -h postgres -U "$DB_USER" -d "$DB_DATABASE"
|
|
;;
|
|
back)
|
|
# Apply the migrations
|
|
_migrate -path "$MIGRATION_SCHEMA" up
|
|
|
|
(cd backend && CONFIG_FILE="../config.yml" go run ./*.go)
|
|
;;
|
|
docker-db)
|
|
_ensure_command docker
|
|
_ensure_command docker-compose
|
|
shift
|
|
docker-compose -f "$DOCKER_COMPOSE_FILE" "$@"
|
|
;;
|
|
front)
|
|
(cd frontend && npm install && npm run-script start)
|
|
;;
|
|
db-init)
|
|
_ensure_command jq
|
|
canape_login
|
|
canape_call POST ratings/refresh
|
|
canape_call POST movies/refresh
|
|
canape_call POST shows/refresh
|
|
canape_logout
|
|
;;
|
|
*)
|
|
_log_error "Unknown command $1"
|
|
_usage
|
|
;;
|
|
esac
|