2023-03-07 17:50:36 +00:00
|
|
|
#!/usr/bin/env bash
|
2020-11-19 21:50:59 +00:00
|
|
|
|
2020-11-20 01:44:46 +00:00
|
|
|
# exit on errors
|
|
|
|
set -e
|
|
|
|
|
2022-07-07 19:51:09 +00:00
|
|
|
# check if we're in DEBUG mode
|
|
|
|
DEBUG=$(sed <.env -ne 's/^DEBUG=//p')
|
|
|
|
|
|
|
|
# disallow certain commands when debug is false
|
|
|
|
function prod_error {
|
|
|
|
if [ "$DEBUG" != "true" ]; then
|
|
|
|
echo "This command is not safe to run in production environments"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2020-11-19 21:50:59 +00:00
|
|
|
# import our ENV variables
|
2020-11-20 01:44:46 +00:00
|
|
|
# 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
|
2020-11-19 21:50:59 +00:00
|
|
|
source .env
|
2020-11-20 01:44:46 +00:00
|
|
|
trap - EXIT
|
2020-11-19 21:50:59 +00:00
|
|
|
|
|
|
|
function clean {
|
|
|
|
docker-compose stop
|
|
|
|
docker-compose rm -f
|
|
|
|
}
|
|
|
|
|
|
|
|
function runweb {
|
|
|
|
docker-compose run --rm web "$@"
|
|
|
|
}
|
|
|
|
|
2023-03-09 07:01:05 +00:00
|
|
|
function execdb {
|
|
|
|
docker-compose exec db $@
|
2020-11-19 21:50:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function execweb {
|
|
|
|
docker-compose exec web "$@"
|
|
|
|
}
|
|
|
|
|
|
|
|
function initdb {
|
2022-01-22 23:51:42 +00:00
|
|
|
runweb python manage.py initdb "$@"
|
2020-11-19 21:50:59 +00:00
|
|
|
}
|
|
|
|
|
2022-02-17 19:50:16 +00:00
|
|
|
function migrate {
|
|
|
|
runweb python manage.py migrate "$@"
|
|
|
|
}
|
|
|
|
|
|
|
|
function admin_code {
|
|
|
|
runweb python manage.py admin_code
|
2021-03-08 03:43:36 +00:00
|
|
|
}
|
|
|
|
|
2021-06-08 16:19:52 +00:00
|
|
|
function awscommand {
|
|
|
|
# expose env vars
|
2021-06-07 19:40:37 +00:00
|
|
|
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}
|
2021-06-08 16:19:52 +00:00
|
|
|
# first arg is mountpoint, second is the whole aws command
|
|
|
|
docker run --rm -it -v $1\
|
2021-06-07 19:40:37 +00:00
|
|
|
-e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_DEFAULT_REGION\
|
2021-06-08 16:19:52 +00:00
|
|
|
amazon/aws-cli $2
|
2021-06-07 21:20:27 +00:00
|
|
|
}
|
|
|
|
|
2022-11-15 22:20:21 +00:00
|
|
|
|
|
|
|
|
2020-11-28 00:07:53 +00:00
|
|
|
CMD=$1
|
2021-07-05 20:14:35 +00:00
|
|
|
if [ -n "$CMD" ]; then
|
|
|
|
shift
|
|
|
|
fi
|
2020-11-28 01:39:15 +00:00
|
|
|
|
|
|
|
# show commands as they're executed
|
|
|
|
set -x
|
|
|
|
|
2020-11-28 00:07:53 +00:00
|
|
|
case "$CMD" in
|
2020-11-19 21:50:59 +00:00
|
|
|
up)
|
2021-01-14 07:02:56 +00:00
|
|
|
docker-compose up --build "$@"
|
2020-11-19 21:50:59 +00:00
|
|
|
;;
|
2023-04-01 09:23:27 +00:00
|
|
|
down)
|
|
|
|
docker-compose down
|
|
|
|
;;
|
2021-11-07 14:20:38 +00:00
|
|
|
service_ports_web)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2020-11-19 21:50:59 +00:00
|
|
|
docker-compose run --rm --service-ports web
|
|
|
|
;;
|
|
|
|
initdb)
|
2022-02-17 19:50:16 +00:00
|
|
|
initdb "@"
|
2020-11-19 21:50:59 +00:00
|
|
|
;;
|
|
|
|
resetdb)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2022-08-27 09:53:57 +00:00
|
|
|
docker-compose rm -svf
|
|
|
|
docker volume rm -f bookwyrm_media_volume bookwyrm_pgdata bookwyrm_redis_activity_data bookwyrm_redis_broker_data bookwyrm_static_volume
|
|
|
|
docker-compose build
|
2022-02-17 19:50:16 +00:00
|
|
|
migrate
|
2022-08-27 09:53:57 +00:00
|
|
|
migrate django_celery_beat
|
2020-11-19 21:50:59 +00:00
|
|
|
initdb
|
2022-12-19 17:35:34 +00:00
|
|
|
runweb python manage.py compile_themes
|
2022-08-27 09:53:57 +00:00
|
|
|
runweb python manage.py collectstatic --no-input
|
|
|
|
admin_code
|
2020-11-19 21:50:59 +00:00
|
|
|
;;
|
|
|
|
makemigrations)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2021-04-07 16:02:39 +00:00
|
|
|
runweb python manage.py makemigrations "$@"
|
2020-11-19 21:50:59 +00:00
|
|
|
;;
|
|
|
|
migrate)
|
2022-02-17 19:50:16 +00:00
|
|
|
migrate "$@"
|
2020-11-19 21:50:59 +00:00
|
|
|
;;
|
|
|
|
bash)
|
2021-04-07 16:02:39 +00:00
|
|
|
runweb bash
|
2020-11-19 21:50:59 +00:00
|
|
|
;;
|
|
|
|
shell)
|
2021-04-07 16:02:39 +00:00
|
|
|
runweb python manage.py shell
|
2020-11-19 21:50:59 +00:00
|
|
|
;;
|
|
|
|
dbshell)
|
2023-03-09 07:01:05 +00:00
|
|
|
execdb psql -U ${POSTGRES_USER} ${POSTGRES_DB}
|
2020-11-19 21:50:59 +00:00
|
|
|
;;
|
|
|
|
restart_celery)
|
|
|
|
docker-compose restart celery_worker
|
|
|
|
;;
|
|
|
|
pytest)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2022-02-18 16:48:44 +00:00
|
|
|
runweb pytest --no-cov-on-fail "$@"
|
2020-11-19 21:50:59 +00:00
|
|
|
;;
|
2022-07-06 16:47:33 +00:00
|
|
|
pytest_coverage_report)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2022-07-06 16:47:33 +00:00
|
|
|
runweb pytest -n 3 --cov-report term-missing "$@"
|
|
|
|
;;
|
2022-12-19 17:35:34 +00:00
|
|
|
compile_themes)
|
|
|
|
runweb python manage.py compile_themes
|
|
|
|
;;
|
2020-11-19 21:50:59 +00:00
|
|
|
collectstatic)
|
2021-04-07 16:02:39 +00:00
|
|
|
runweb python manage.py collectstatic --no-input
|
2020-11-19 21:50:59 +00:00
|
|
|
;;
|
2021-02-27 21:47:10 +00:00
|
|
|
makemessages)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2021-10-23 14:11:38 +00:00
|
|
|
runweb django-admin makemessages --no-wrap --ignore=venv -l en_US $@
|
2021-02-28 00:44:58 +00:00
|
|
|
;;
|
|
|
|
compilemessages)
|
2021-04-22 16:03:41 +00:00
|
|
|
runweb django-admin compilemessages --ignore venv $@
|
2021-02-27 21:47:10 +00:00
|
|
|
;;
|
2021-11-16 17:29:58 +00:00
|
|
|
update_locales)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2021-11-16 17:29:58 +00:00
|
|
|
git fetch origin l10n_main:l10n_main
|
2022-07-15 19:26:30 +00:00
|
|
|
git checkout l10n_main locale/ca_ES
|
2021-11-16 17:29:58 +00:00
|
|
|
git checkout l10n_main locale/de_DE
|
2023-03-28 21:10:29 +00:00
|
|
|
git checkout l10n_main locale/eo_UY
|
2021-11-16 17:29:58 +00:00
|
|
|
git checkout l10n_main locale/es_ES
|
2022-12-21 18:09:01 +00:00
|
|
|
git checkout l10n_main locale/eu_ES
|
2022-03-31 15:20:52 +00:00
|
|
|
git checkout l10n_main locale/fi_FI
|
2021-11-16 17:29:58 +00:00
|
|
|
git checkout l10n_main locale/fr_FR
|
2021-11-17 18:02:39 +00:00
|
|
|
git checkout l10n_main locale/gl_ES
|
2022-01-08 15:38:14 +00:00
|
|
|
git checkout l10n_main locale/it_IT
|
2021-11-16 17:29:58 +00:00
|
|
|
git checkout l10n_main locale/lt_LT
|
2022-01-08 15:38:14 +00:00
|
|
|
git checkout l10n_main locale/no_NO
|
2022-08-02 17:59:04 +00:00
|
|
|
git checkout l10n_main locale/pl_PL
|
2022-01-04 21:23:28 +00:00
|
|
|
git checkout l10n_main locale/pt_PT
|
2021-11-16 17:29:58 +00:00
|
|
|
git checkout l10n_main locale/pt_BR
|
2022-03-26 17:03:50 +00:00
|
|
|
git checkout l10n_main locale/ro_RO
|
2022-01-24 17:39:13 +00:00
|
|
|
git checkout l10n_main locale/sv_SE
|
2021-11-16 17:29:58 +00:00
|
|
|
git checkout l10n_main locale/zh_Hans
|
|
|
|
git checkout l10n_main locale/zh_Hant
|
2021-12-02 18:28:13 +00:00
|
|
|
runweb django-admin makemessages --no-wrap --ignore=venv -l en_US $@
|
2021-11-16 17:29:58 +00:00
|
|
|
runweb django-admin compilemessages --ignore venv
|
|
|
|
;;
|
2020-11-19 21:50:59 +00:00
|
|
|
build)
|
|
|
|
docker-compose build
|
|
|
|
;;
|
|
|
|
clean)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2020-11-19 21:50:59 +00:00
|
|
|
clean
|
|
|
|
;;
|
2021-03-08 03:43:36 +00:00
|
|
|
black)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2022-02-17 19:50:16 +00:00
|
|
|
docker-compose run --rm dev-tools black celerywyrm bookwyrm
|
2021-03-08 03:43:36 +00:00
|
|
|
;;
|
2022-06-05 21:49:21 +00:00
|
|
|
pylint)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2022-06-05 21:49:21 +00:00
|
|
|
# pylint depends on having the app dependencies in place, so we run it in the web container
|
|
|
|
runweb pylint bookwyrm/
|
|
|
|
;;
|
2021-12-16 18:43:24 +00:00
|
|
|
prettier)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2022-02-12 22:06:18 +00:00
|
|
|
docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js
|
2021-12-16 18:43:24 +00:00
|
|
|
;;
|
2022-12-11 19:33:35 +00:00
|
|
|
eslint)
|
|
|
|
prod_error
|
|
|
|
docker-compose run --rm dev-tools npx eslint bookwyrm/static --ext .js
|
|
|
|
;;
|
2022-02-12 16:50:13 +00:00
|
|
|
stylelint)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2022-02-16 21:11:04 +00:00
|
|
|
docker-compose run --rm dev-tools npx stylelint \
|
2022-02-20 00:34:17 +00:00
|
|
|
bookwyrm/static/css/bookwyrm.scss bookwyrm/static/css/bookwyrm/**/*.scss --fix \
|
2022-02-16 21:11:04 +00:00
|
|
|
--config dev-tools/.stylelintrc.js
|
2022-02-12 16:50:13 +00:00
|
|
|
;;
|
|
|
|
formatters)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2022-06-05 21:49:21 +00:00
|
|
|
runweb pylint bookwyrm/
|
2022-02-20 00:34:17 +00:00
|
|
|
docker-compose run --rm dev-tools black celerywyrm bookwyrm
|
|
|
|
docker-compose run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js
|
2022-12-11 19:33:35 +00:00
|
|
|
docker-compose run --rm dev-tools npx eslint bookwyrm/static --ext .js
|
2022-02-20 00:34:17 +00:00
|
|
|
docker-compose run --rm dev-tools npx stylelint \
|
|
|
|
bookwyrm/static/css/bookwyrm.scss bookwyrm/static/css/bookwyrm/**/*.scss --fix \
|
|
|
|
--config dev-tools/.stylelintrc.js
|
2022-02-19 23:29:47 +00:00
|
|
|
;;
|
|
|
|
collectstatic_watch)
|
2022-07-07 19:51:09 +00:00
|
|
|
prod_error
|
2022-02-19 23:29:47 +00:00
|
|
|
npm run --prefix dev-tools watch:static
|
2022-02-12 16:50:13 +00:00
|
|
|
;;
|
2022-01-13 16:52:22 +00:00
|
|
|
update)
|
|
|
|
git pull
|
|
|
|
docker-compose build
|
2022-03-17 17:25:03 +00:00
|
|
|
# ./update.sh
|
2022-01-13 16:52:22 +00:00
|
|
|
runweb python manage.py migrate
|
2022-12-19 17:35:34 +00:00
|
|
|
runweb python manage.py compile_themes
|
2022-01-13 16:52:22 +00:00
|
|
|
runweb python manage.py collectstatic --no-input
|
|
|
|
docker-compose up -d
|
2022-02-08 14:17:42 +00:00
|
|
|
docker-compose restart web
|
|
|
|
docker-compose restart celery_worker
|
2022-01-13 16:52:22 +00:00
|
|
|
;;
|
2021-04-02 18:20:56 +00:00
|
|
|
populate_streams)
|
2021-12-16 08:48:34 +00:00
|
|
|
runweb python manage.py populate_streams "$@"
|
2021-03-28 18:46:07 +00:00
|
|
|
;;
|
2021-11-16 18:41:08 +00:00
|
|
|
populate_lists_streams)
|
|
|
|
runweb python manage.py populate_lists_streams $@
|
|
|
|
;;
|
2021-05-22 23:10:11 +00:00
|
|
|
populate_suggestions)
|
|
|
|
runweb python manage.py populate_suggestions
|
|
|
|
;;
|
2021-08-02 20:40:19 +00:00
|
|
|
generate_thumbnails)
|
2021-05-24 14:14:51 +00:00
|
|
|
runweb python manage.py generateimages
|
|
|
|
;;
|
2021-05-26 11:52:10 +00:00
|
|
|
generate_preview_images)
|
2021-12-16 08:48:34 +00:00
|
|
|
runweb python manage.py generate_preview_images "$@"
|
2021-05-26 11:52:10 +00:00
|
|
|
;;
|
2022-12-17 16:34:27 +00:00
|
|
|
remove_remote_user_preview_images)
|
|
|
|
runweb python manage.py remove_remote_user_preview_images
|
|
|
|
;;
|
2021-06-07 19:40:37 +00:00
|
|
|
copy_media_to_s3)
|
2021-06-08 16:19:52 +00:00
|
|
|
awscommand "bookwyrm_media_volume:/images"\
|
|
|
|
"s3 cp /images s3://${AWS_STORAGE_BUCKET_NAME}/images\
|
|
|
|
--endpoint-url ${AWS_S3_ENDPOINT_URL}\
|
2021-12-16 08:47:03 +00:00
|
|
|
--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" "$@"
|
2021-06-07 19:40:37 +00:00
|
|
|
;;
|
2021-06-07 21:20:27 +00:00
|
|
|
set_cors_to_s3)
|
2021-12-17 07:44:47 +00:00
|
|
|
set +x
|
2021-12-16 08:48:34 +00:00
|
|
|
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
|
2021-12-17 07:44:47 +00:00
|
|
|
set -x
|
2021-06-08 16:19:52 +00:00
|
|
|
awscommand "$(pwd):/bw"\
|
|
|
|
"s3api put-bucket-cors\
|
|
|
|
--bucket ${AWS_STORAGE_BUCKET_NAME}\
|
|
|
|
--endpoint-url ${AWS_S3_ENDPOINT_URL}\
|
2021-12-16 08:48:34 +00:00
|
|
|
--cors-configuration file:///bw/$config_file" "$@"
|
2021-06-07 21:20:27 +00:00
|
|
|
;;
|
2022-02-17 18:59:28 +00:00
|
|
|
admin_code)
|
2022-02-17 19:50:16 +00:00
|
|
|
admin_code
|
|
|
|
;;
|
|
|
|
setup)
|
|
|
|
migrate
|
2022-02-26 16:44:19 +00:00
|
|
|
migrate django_celery_beat
|
2022-02-17 19:50:16 +00:00
|
|
|
initdb
|
2022-12-19 17:35:34 +00:00
|
|
|
runweb python manage.py compile_themes
|
2022-02-17 19:50:16 +00:00
|
|
|
runweb python manage.py collectstatic --no-input
|
|
|
|
admin_code
|
2022-02-17 18:59:28 +00:00
|
|
|
;;
|
2021-07-05 20:14:35 +00:00
|
|
|
runweb)
|
|
|
|
runweb "$@"
|
|
|
|
;;
|
2022-11-15 22:20:21 +00:00
|
|
|
remove_2fa)
|
|
|
|
runweb python manage.py remove_2fa "$@"
|
|
|
|
;;
|
2022-12-11 20:35:20 +00:00
|
|
|
confirm_email)
|
|
|
|
runweb python manage.py confirm_email "$@"
|
|
|
|
;;
|
2020-11-19 21:50:59 +00:00
|
|
|
*)
|
2021-07-05 20:14:35 +00:00
|
|
|
set +x # No need to echo echo
|
2021-06-19 15:18:13 +00:00
|
|
|
echo "Unrecognised command. Try:"
|
2022-03-12 12:17:11 +00:00
|
|
|
echo " setup"
|
2021-08-01 09:38:32 +00:00
|
|
|
echo " up [container]"
|
2021-11-07 14:20:38 +00:00
|
|
|
echo " service_ports_web"
|
2021-06-19 09:53:05 +00:00
|
|
|
echo " initdb"
|
|
|
|
echo " resetdb"
|
2021-08-01 09:38:32 +00:00
|
|
|
echo " makemigrations [migration]"
|
|
|
|
echo " migrate [migration]"
|
2021-06-19 09:53:05 +00:00
|
|
|
echo " bash"
|
|
|
|
echo " shell"
|
|
|
|
echo " dbshell"
|
|
|
|
echo " restart_celery"
|
2021-08-01 09:38:32 +00:00
|
|
|
echo " pytest [path]"
|
2022-12-19 17:35:34 +00:00
|
|
|
echo " compile_themes"
|
2021-08-01 09:38:32 +00:00
|
|
|
echo " collectstatic"
|
2021-10-06 23:22:30 +00:00
|
|
|
echo " makemessages"
|
2021-08-01 09:38:32 +00:00
|
|
|
echo " compilemessages [locale]"
|
2021-11-16 17:31:57 +00:00
|
|
|
echo " update_locales"
|
2021-08-01 09:38:32 +00:00
|
|
|
echo " build"
|
|
|
|
echo " clean"
|
2021-06-19 09:53:05 +00:00
|
|
|
echo " black"
|
2022-02-02 17:23:06 +00:00
|
|
|
echo " prettier"
|
2022-12-11 19:33:35 +00:00
|
|
|
echo " eslint"
|
2022-02-12 16:50:13 +00:00
|
|
|
echo " stylelint"
|
|
|
|
echo " formatters"
|
2022-02-19 23:29:47 +00:00
|
|
|
echo " collectstatic_watch"
|
2021-08-08 00:38:07 +00:00
|
|
|
echo " populate_streams [--stream=<stream name>]"
|
2022-02-17 23:53:58 +00:00
|
|
|
echo " populate_lists_streams"
|
2021-08-03 00:55:30 +00:00
|
|
|
echo " populate_suggestions"
|
2021-08-02 20:40:19 +00:00
|
|
|
echo " generate_thumbnails"
|
2021-08-03 16:10:06 +00:00
|
|
|
echo " generate_preview_images [--all]"
|
2022-12-17 16:34:27 +00:00
|
|
|
echo " remove_remote_user_preview_images"
|
2021-06-19 09:53:05 +00:00
|
|
|
echo " copy_media_to_s3"
|
2021-12-16 08:47:03 +00:00
|
|
|
echo " sync_media_to_s3"
|
2021-08-01 09:38:32 +00:00
|
|
|
echo " set_cors_to_s3 [cors file]"
|
|
|
|
echo " runweb [command]"
|
2022-11-15 22:20:21 +00:00
|
|
|
echo " remove_2fa"
|
2022-12-11 20:35:20 +00:00
|
|
|
echo " confirm_email"
|
2020-11-19 21:50:59 +00:00
|
|
|
;;
|
|
|
|
esac
|