From d52a8ad9108d4aeb9288327b10198b1ef1a01b1d Mon Sep 17 00:00:00 2001 From: Cassowary Date: Tue, 10 Oct 2023 14:18:47 -0700 Subject: [PATCH] Major Improvements to abra.sh --- abra.sh | 143 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 87 insertions(+), 56 deletions(-) diff --git a/abra.sh b/abra.sh index 1f5abb8..73f914d 100755 --- a/abra.sh +++ b/abra.sh @@ -2,69 +2,100 @@ export ENTRYPOINT_CONF_VERSION=v7 -assets() { - set -a OTP_SECRET $(cat /run/secrets/otp_secret) - set -a SECRET_KEY_BASE $(cat /run/secrets/secret_key_base) - set -a DB_PASS $(cat /run/secrets/db_password) - RAILS_ENV=production bundle exec rails assets:precompile +file_env() { + local var="$1" + local fileVar="${var}_FILE" + local def="${2:-}" + + if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then + echo >&2 "error: both $var and $fileVar are set (but are exclusive)" + exit 1 + fi + + local val="$def" + if [ "${!var:-}" ]; then + val="${!var}" + elif [ "${!fileVar:-}" ]; then + val="$(< "${!fileVar}")" + fi + + declare -x -g "$var"="$val" + unset "$fileVar" } -setup() { - set -a OTP_SECRET $(cat /run/secrets/otp_secret) - set -a SECRET_KEY_BASE $(cat /run/secrets/secret_key_base) - set -a DB_PASS $(cat /run/secrets/db_password) +environment() { + # for sidekiq service bundle exec env var threading + file_env "OTP_SECRET" + file_env "SECRET_KEY_BASE" + file_env "DB_PASS" + file_env "SMTP_PASSWORD" + file_env "VAPID_PRIVATE_KEY" - RAILS_ENV=production bundle exec rake db:setup + declare -x RAILS_ENV=production } -admin() { - set -a OTP_SECRET $(cat /run/secrets/otp_secret) - set -a SECRET_KEY_BASE $(cat /run/secrets/secret_key_base) - set -a DB_PASS $(cat /run/secrets/db_password) - RAILS_ENV=production bin/tootctl accounts create "$1" --email "$2" --confirmed --role admin +setup_assets() { + environment + bundle exec rails assets:precompile } -secrets() { - docker context use default > /dev/null 2>&1 - - echo "Generating secrets for new Hometown deployment..." - echo "" - - SECRET_KEY_BASE=$(docker run --rm tootsuite/mastodon:v3.4.0 bundle exec rake secret) - abra app secret insert "$APP_NAME" secret_key_base v1 "$SECRET_KEY_BASE" - echo "SECRET_KEY_BASE = $SECRET_KEY_BASE" - echo "" - - OTP_SECRET=$(docker run --rm tootsuite/mastodon:v3.4.0 bundle exec rake secret) - abra app secret insert "$APP_NAME" otp_secret v1 "$OTP_SECRET" - echo "OTP_SECRET = $OTP_SECRET" - echo "" - - docker run \ - -e SECRET_KEY_BASE="$SECRET_KEY_BASE" \ - -e OTP_SECRET="$OTP_SECRET" \ - --rm tootsuite/mastodon:v3.4.0 \ - bundle exec rake mastodon:webpush:generate_vapid_key \ - > /tmp/key.txt - - VAPID_PRIVATE_KEY=$(grep -oP "VAPID_PRIVATE_KEY=\K.+" "/tmp/key.txt") - VAPID_PUBLIC_KEY=$(grep -oP "VAPID_PUBLIC_KEY=\K.+" "/tmp/key.txt") - rm -rf /tmp/key.txt - - echo "VAPID_PUBLIC_KEY = $VAPID_PUBLIC_KEY" - echo "!IMPORTANT! you MUST insert this VAPID_PUBLIC_KEY into your app .env config !IMPORTANT!" - echo "" - - abra app secret insert "$APP_NAME" vapid_private_key v1 "$VAPID_PRIVATE_KEY" - echo "VAPID_PRIVATE_KEY = $VAPID_PRIVATE_KEY" - echo "" - - abra app secret generate "$APP_NAME" db_password v1 - echo "" - - echo "don't forget to insert your smtp_password! your deployment won't work without it" - echo "run \"abra app secret insert $APP_NAME smtp_password v1 YOURSMTPPASSWORD\"" - echo "" +setup_db() { + environment + bundle exec rake db:setup +} + +setup_admin() { + environment + accounts create "$1" --email "$2" --confirmed --role admin +} + +shell() { + environment + bash $@ +} + +generate_secrets() { + ## Run this 'local' to generate secrets + docker context use default > /dev/null 2>&1 + + echo "Generating secrets for new Hometown deployment..." + echo "" + + SECRET_KEY_BASE=$(docker run --rm tootsuite/mastodon:v3.4.0 bundle exec rake secret) + abra app secret insert "$APP_NAME" secret_key_base v1 "$SECRET_KEY_BASE" + echo "SECRET_KEY_BASE = $SECRET_KEY_BASE" + echo "" + + OTP_SECRET=$(docker run --rm tootsuite/mastodon:v3.4.0 bundle exec rake secret) + abra app secret insert "$APP_NAME" otp_secret v1 "$OTP_SECRET" + echo "OTP_SECRET = $OTP_SECRET" + echo "" + + docker run \ + -e SECRET_KEY_BASE="$SECRET_KEY_BASE" \ + -e OTP_SECRET="$OTP_SECRET" \ + --rm tootsuite/mastodon:v3.4.0 \ + bundle exec rake mastodon:webpush:generate_vapid_key \ + > /tmp/key.txt + + VAPID_PRIVATE_KEY=$(grep -oP "VAPID_PRIVATE_KEY=\K.+" "/tmp/key.txt") + VAPID_PUBLIC_KEY=$(grep -oP "VAPID_PUBLIC_KEY=\K.+" "/tmp/key.txt") + rm -rf /tmp/key.txt + + echo "VAPID_PUBLIC_KEY = $VAPID_PUBLIC_KEY" + echo "!IMPORTANT! you MUST insert this VAPID_PUBLIC_KEY into your app .env config !IMPORTANT!" + echo "" + + abra app secret insert "$APP_NAME" vapid_private_key v1 "$VAPID_PRIVATE_KEY" + echo "VAPID_PRIVATE_KEY = $VAPID_PRIVATE_KEY" + echo "" + + abra app secret generate "$APP_NAME" db_password v1 + echo "" + + echo "don't forget to insert your smtp_password! your deployment won't work without it" + echo "run \"abra app secret insert $APP_NAME smtp_password v1 YOURSMTPPASSWORD\"" + echo "" }