bookwyrm/bw-dev

340 lines
9.5 KiB
Text
Raw Permalink Normal View History

#!/usr/bin/env bash
# exit on errors
set -e
# 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
}
# 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
if docker compose &> /dev/null ; then
DOCKER_COMPOSE="docker compose"
else
DOCKER_COMPOSE="docker-compose"
fi
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 {
2022-01-22 23:51:42 +00:00
runweb python manage.py initdb "$@"
}
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
}
CMD=$1
if [ -n "$CMD" ]; then
shift
fi
# show commands as they're executed
set -x
case "$CMD" in
up)
$DOCKER_COMPOSE up --build "$@"
;;
down)
$DOCKER_COMPOSE down
;;
service_ports_web)
prod_error
$DOCKER_COMPOSE run --rm --service-ports web
;;
initdb)
2022-02-17 19:50:16 +00:00
initdb "@"
;;
resetdb)
prod_error
$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
migrate django_celery_beat
initdb
2022-12-19 17:35:34 +00:00
runweb python manage.py compile_themes
runweb python manage.py collectstatic --no-input
admin_code
;;
makemigrations)
prod_error
runweb python manage.py makemigrations "$@"
;;
migrate)
2022-02-17 19:50:16 +00:00
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)
prod_error
2022-02-18 16:48:44 +00:00
runweb pytest --no-cov-on-fail "$@"
;;
2022-07-06 16:47:33 +00:00
pytest_coverage_report)
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
;;
collectstatic)
runweb python manage.py collectstatic --no-input
;;
makemessages)
prod_error
2021-10-23 14:11:38 +00:00
runweb django-admin makemessages --no-wrap --ignore=venv -l en_US $@
;;
compilemessages)
runweb django-admin compilemessages --ignore venv $@
;;
2021-11-16 17:29:58 +00:00
update_locales)
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
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
2023-07-23 19:27:42 +00:00
git checkout l10n_main locale/nl_NL
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
;;
build)
$DOCKER_COMPOSE build
;;
clean)
prod_error
clean
;;
2021-03-08 03:43:36 +00:00
black)
prod_error
$DOCKER_COMPOSE run --rm dev-tools black celerywyrm bookwyrm
2021-03-08 03:43:36 +00:00
;;
pylint)
prod_error
# 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)
prod_error
$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-12-11 19:33:35 +00:00
;;
stylelint)
prod_error
$DOCKER_COMPOSE run --rm dev-tools npx stylelint \
bookwyrm/static/css/bookwyrm.scss bookwyrm/static/css/bookwyrm/**/*.scss --fix \
2022-02-16 21:11:04 +00:00
--config dev-tools/.stylelintrc.js
;;
formatters)
prod_error
runweb pylint bookwyrm/
$DOCKER_COMPOSE run --rm dev-tools black celerywyrm bookwyrm
$DOCKER_COMPOSE run --rm dev-tools npx prettier --write bookwyrm/static/js/*.js
$DOCKER_COMPOSE run --rm dev-tools npx eslint bookwyrm/static --ext .js
$DOCKER_COMPOSE run --rm dev-tools npx stylelint \
bookwyrm/static/css/bookwyrm.scss bookwyrm/static/css/bookwyrm/**/*.scss --fix \
--config dev-tools/.stylelintrc.js
;;
mypy)
prod_error
runweb mypy celerywyrm bookwyrm
;;
collectstatic_watch)
prod_error
npm run --prefix dev-tools watch:static
;;
2022-01-13 16:52:22 +00:00
update)
git pull
$DOCKER_COMPOSE build
# ./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
$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)
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 $@
;;
populate_suggestions)
runweb python manage.py populate_suggestions
;;
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)
runweb python manage.py generate_preview_images "$@"
2021-05-26 11:52:10 +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}\
--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
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}\
--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
;;
runweb)
runweb "$@"
;;
remove_2fa)
runweb python manage.py remove_2fa "$@"
;;
confirm_email)
runweb python manage.py confirm_email "$@"
;;
*)
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"
echo " up [container]"
2023-04-06 09:57:21 +00:00
echo " down"
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]"
2022-12-19 17:35:34 +00:00
echo " compile_themes"
echo " collectstatic"
2021-10-06 23:22:30 +00:00
echo " makemessages"
echo " compilemessages [locale]"
2021-11-16 17:31:57 +00:00
echo " update_locales"
echo " build"
echo " clean"
echo " black"
2022-02-02 17:23:06 +00:00
echo " prettier"
2022-12-11 19:33:35 +00:00
echo " eslint"
echo " stylelint"
echo " formatters"
echo " mypy"
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"
echo " generate_thumbnails"
2021-08-03 16:10:06 +00:00
echo " generate_preview_images [--all]"
echo " remove_remote_user_preview_images"
echo " copy_media_to_s3"
echo " sync_media_to_s3"
echo " set_cors_to_s3 [cors file]"
echo " runweb [command]"
echo " remove_2fa"
echo " confirm_email"
;;
esac