#!/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 yarn _check_command migrate || { _log_info "Installing migrate" GO111MODULE=off \ go get -tags 'postgres' \ -u -v github.com/golang-migrate/migrate/cmd/migrate } _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:9.5 \ psql -h postgres -U "$DB_USER" -d "$DB_DATABASE" ;; back) # Apply the migrations _migrate -path "$MIGRATION_SCHEMA" up CONFIG_FILE="./config.yml" fresh -c fresh.conf ;; docker-db) _ensure_command docker _ensure_command docker-compose shift docker-compose -f "$DOCKER_COMPOSE_FILE" "$@" ;; front) yarn install yarn 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