#!/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 awscommand { # expose env vars 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} # first arg is mountpoint, second is the whole aws command docker run --rm -it -v $1\ -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_DEFAULT_REGION\ amazon/aws-cli $2 } CMD=$1 if [ -n "$CMD" ]; then shift fi # show commands as they're executed set -x case "$CMD" in up) docker-compose up --build "$@" ;; service_ports_web) docker-compose run --rm --service-ports web ;; initdb) initdb ;; resetdb) clean # Start just the DB so no one else is using it docker-compose up --build -d db execdb dropdb -U ${POSTGRES_USER} ${POSTGRES_DB} execdb createdb -U ${POSTGRES_USER} ${POSTGRES_DB} # Now start up web so we can run the migrations docker-compose up --build -d web 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 ;; pytest) execweb pytest --no-cov-on-fail "$@" ;; collectstatic) runweb python manage.py collectstatic --no-input ;; makemessages) runweb django-admin makemessages --no-wrap --ignore=venv -l en_US $@ ;; compilemessages) runweb django-admin compilemessages --ignore venv $@ ;; update_locales) git fetch origin l10n_main:l10n_main git checkout l10n_main locale/de_DE git checkout l10n_main locale/es_ES git checkout l10n_main locale/fr_FR git checkout l10n_main locale/gl_ES git checkout l10n_main locale/lt_LT git checkout l10n_main locale/pt_PT git checkout l10n_main locale/pt_BR git checkout l10n_main locale/zh_Hans git checkout l10n_main locale/zh_Hant runweb django-admin makemessages --no-wrap --ignore=venv -l en_US $@ runweb django-admin compilemessages --ignore venv ;; build) docker-compose build ;; clean) clean ;; black) makeitblack ;; prettier) npx prettier --write bookwyrm/static/js/*.js ;; populate_streams) runweb python manage.py populate_streams "$@" ;; populate_suggestions) runweb python manage.py populate_suggestions ;; generate_thumbnails) runweb python manage.py generateimages ;; generate_preview_images) runweb python manage.py generate_preview_images "$@" ;; copy_media_to_s3) awscommand "bookwyrm_media_volume:/images"\ "s3 cp /images s3://${AWS_STORAGE_BUCKET_NAME}/images\ --endpoint-url ${AWS_S3_ENDPOINT_URL}\ --recursive --acl public-read" "$@" ;; sync_media_to_s3) awscommand "bookwyrm_media_volume:/images"\ "s3 sync /images s3://${AWS_STORAGE_BUCKET_NAME}/images\ --endpoint-url ${AWS_S3_ENDPOINT_URL}\ --acl public-read" "$@" ;; set_cors_to_s3) set +x config_file=$1 if [ -z "$config_file" ]; then echo "This command requires a JSON file containing a CORS configuration as an argument" exit 1 fi set -x awscommand "$(pwd):/bw"\ "s3api put-bucket-cors\ --bucket ${AWS_STORAGE_BUCKET_NAME}\ --endpoint-url ${AWS_S3_ENDPOINT_URL}\ --cors-configuration file:///bw/$config_file" "$@" ;; runweb) runweb "$@" ;; *) set +x # No need to echo echo echo "Unrecognised command. Try:" echo " up [container]" echo " service_ports_web" echo " initdb" echo " resetdb" echo " makemigrations [migration]" echo " migrate [migration]" echo " bash" echo " shell" echo " dbshell" echo " restart_celery" echo " pytest [path]" echo " collectstatic" echo " makemessages" echo " compilemessages [locale]" echo " update_locales" echo " build" echo " clean" echo " black" echo " populate_streams [--stream=]" echo " populate_suggestions" echo " generate_thumbnails" echo " generate_preview_images [--all]" echo " copy_media_to_s3" echo " sync_media_to_s3" echo " set_cors_to_s3 [cors file]" echo " runweb [command]" ;; esac