bookwyrm/bw-dev
2022-02-16 13:13:11 -08:00

236 lines
6.6 KiB
Bash
Executable file

#!/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 {
runweb python manage.py migrate
runweb python manage.py initdb "$@"
}
function makeitblack {
docker-compose run --rm dev-tools 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)
runweb 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/it_IT
git checkout l10n_main locale/lt_LT
git checkout l10n_main locale/no_NO
git checkout l10n_main locale/pt_PT
git checkout l10n_main locale/pt_BR
git checkout l10n_main locale/sv_SE
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)
docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js
;;
stylelint)
docker-compose run --rm dev-tools npx stylelint \
bookwyrm/static/css/*.css --fix \
--config dev-tools/.stylelintrc.js
;;
formatters)
docker-compose run --rm dev-tools black celerywyrm bookwyrm && \
npx prettier --write bookwyrm/static/js/*.js && \
npx stylelint bookwyrm/static/**/*.css --fix
;;
update)
git pull
docker-compose build
runweb python manage.py migrate
runweb python manage.py collectstatic --no-input
docker-compose up -d
docker-compose restart web
docker-compose restart celery_worker
;;
populate_streams)
runweb python manage.py populate_streams "$@"
;;
populate_lists_streams)
runweb python manage.py populate_lists_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 " prettier"
echo " stylelint"
echo " formatters"
echo " populate_streams [--stream=<stream name>]"
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