canape/dev.sh

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