#!/bin/bash # exit on errors set -e # import our ENV variables # catch exits and give a friendly error message function showerr { echo "Failed to load configuration! You may need to update your .env and quote values with special characters in them." } trap showerr EXIT source .env trap - EXIT function clean { docker-compose stop docker-compose rm -f } function runweb { docker-compose run --rm web "$@" } function execdb { docker-compose exec db $@ } function execweb { docker-compose exec web "$@" } function initdb { execweb python manage.py migrate execweb python manage.py initdb } function makeitblack { docker-compose run --rm web black celerywyrm bookwyrm } function copytos3 { export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} export AWS_DEFAULT_REGION=${AWS_S3_REGION_NAME} docker run --rm -it -v bookwyrm_media_volume:/images\ -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_DEFAULT_REGION\ amazon/aws-cli s3 cp /images s3://${AWS_STORAGE_BUCKET_NAME}/images\ --recursive --endpoint-url ${AWS_S3_ENDPOINT_URL} --acl public-read } CMD=$1 shift # show commands as they're executed set -x case "$CMD" in up) docker-compose up --build "$@" ;; run) docker-compose run --rm --service-ports web ;; initdb) initdb ;; resetdb) clean docker-compose up --build -d execdb dropdb -U ${POSTGRES_USER} ${POSTGRES_DB} execdb createdb -U ${POSTGRES_USER} ${POSTGRES_DB} initdb clean ;; makemigrations) runweb python manage.py makemigrations "$@" ;; migrate) runweb python manage.py migrate "$@" ;; bash) runweb bash ;; shell) runweb python manage.py shell ;; dbshell) execdb psql -U ${POSTGRES_USER} ${POSTGRES_DB} ;; restart_celery) docker-compose restart celery_worker ;; test) runweb coverage run --source='.' --omit="*/test*,celerywyrm*,bookwyrm/migrations/*" manage.py test "$@" ;; pytest) runweb pytest --no-cov-on-fail "$@" ;; collectstatic) runweb python manage.py collectstatic --no-input ;; makemessages) runweb django-admin makemessages --no-wrap --ignore=venv --all $@ ;; compilemessages) runweb django-admin compilemessages --ignore venv $@ ;; build) docker-compose build ;; clean) clean ;; black) makeitblack ;; populate_streams) runweb python manage.py populate_streams ;; copy_media_to_s3) copytos3 ;; *) echo "Unrecognised command. Try: build, clean, up, initdb, resetdb, makemigrations, migrate, bash, shell, dbshell, restart_celery, test, pytest, test_report, black, populate_feeds, copy_media_to_s3" ;; esac