diff --git a/.github/workflows/execution-report-heartbeat.yml b/.github/workflows/execution-report-heartbeat.yml index 66edeb3..0f995a8 100644 --- a/.github/workflows/execution-report-heartbeat.yml +++ b/.github/workflows/execution-report-heartbeat.yml @@ -44,10 +44,7 @@ jobs: CLOUD_RUN_SERVICES: ${{ vars.CLOUD_RUN_SERVICES }} CLOUD_RUN_SERVICE_TARGETS_JSON: ${{ vars.CLOUD_RUN_SERVICE_TARGETS_JSON }} GLOBAL_TELEGRAM_CHAT_ID: ${{ vars.GLOBAL_TELEGRAM_CHAT_ID }} - CRISIS_ALERT_TELEGRAM_CHAT_IDS: ${{ vars.CRISIS_ALERT_TELEGRAM_CHAT_IDS }} - CRISIS_ALERT_TELEGRAM_API_BASE_URL: ${{ vars.CRISIS_ALERT_TELEGRAM_API_BASE_URL }} TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }} - CRISIS_ALERT_TELEGRAM_BOT_TOKEN: ${{ secrets.CRISIS_ALERT_TELEGRAM_BOT_TOKEN }} steps: - name: Checkout repository uses: actions/checkout@v6 diff --git a/.github/workflows/runtime-guard.yml b/.github/workflows/runtime-guard.yml index 8b6345d..6c03323 100644 --- a/.github/workflows/runtime-guard.yml +++ b/.github/workflows/runtime-guard.yml @@ -50,10 +50,7 @@ jobs: CLOUD_RUN_SERVICES: ${{ vars.CLOUD_RUN_SERVICES }} CLOUD_RUN_SERVICE_TARGETS_JSON: ${{ vars.CLOUD_RUN_SERVICE_TARGETS_JSON }} GLOBAL_TELEGRAM_CHAT_ID: ${{ vars.GLOBAL_TELEGRAM_CHAT_ID }} - CRISIS_ALERT_TELEGRAM_CHAT_IDS: ${{ vars.CRISIS_ALERT_TELEGRAM_CHAT_IDS }} - CRISIS_ALERT_TELEGRAM_API_BASE_URL: ${{ vars.CRISIS_ALERT_TELEGRAM_API_BASE_URL }} TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }} - CRISIS_ALERT_TELEGRAM_BOT_TOKEN: ${{ secrets.CRISIS_ALERT_TELEGRAM_BOT_TOKEN }} steps: - name: Checkout repository uses: actions/checkout@v6 diff --git a/.github/workflows/sync-cloud-run-env.yml b/.github/workflows/sync-cloud-run-env.yml index 1b3c2ce..98d20cc 100644 --- a/.github/workflows/sync-cloud-run-env.yml +++ b/.github/workflows/sync-cloud-run-env.yml @@ -93,36 +93,36 @@ jobs: IBKR_MIN_RESERVED_CASH_USD: ${{ vars.IBKR_MIN_RESERVED_CASH_USD }} IBKR_RESERVED_CASH_RATIO: ${{ vars.IBKR_RESERVED_CASH_RATIO }} IBKR_SAFE_HAVEN_CASH_SUBSTITUTE_THRESHOLD_USD: ${{ vars.IBKR_SAFE_HAVEN_CASH_SUBSTITUTE_THRESHOLD_USD }} - CRISIS_ALERT_CHANNELS: ${{ vars.CRISIS_ALERT_CHANNELS }} - CRISIS_ALERT_EMAIL_RECIPIENTS: ${{ vars.CRISIS_ALERT_EMAIL_RECIPIENTS }} - CRISIS_ALERT_EMAIL_SENDER_EMAIL: ${{ vars.CRISIS_ALERT_EMAIL_SENDER_EMAIL }} - CRISIS_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME: ${{ vars.CRISIS_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME }} - CRISIS_ALERT_EMAIL_SMTP_HOST: ${{ vars.CRISIS_ALERT_EMAIL_SMTP_HOST }} - CRISIS_ALERT_EMAIL_SMTP_PORT: ${{ vars.CRISIS_ALERT_EMAIL_SMTP_PORT }} - CRISIS_ALERT_EMAIL_SMTP_SECURITY: ${{ vars.CRISIS_ALERT_EMAIL_SMTP_SECURITY }} - CRISIS_ALERT_SMS_RECIPIENTS: ${{ vars.CRISIS_ALERT_SMS_RECIPIENTS }} - CRISIS_ALERT_SMS_PROVIDER: ${{ vars.CRISIS_ALERT_SMS_PROVIDER }} - CRISIS_ALERT_SMS_ACCOUNT_ID: ${{ vars.CRISIS_ALERT_SMS_ACCOUNT_ID }} - CRISIS_ALERT_SMS_AUTH_TOKEN_SECRET_NAME: ${{ vars.CRISIS_ALERT_SMS_AUTH_TOKEN_SECRET_NAME }} - CRISIS_ALERT_SMS_SENDER: ${{ vars.CRISIS_ALERT_SMS_SENDER }} - CRISIS_ALERT_SMS_MESSAGING_SERVICE_ID: ${{ vars.CRISIS_ALERT_SMS_MESSAGING_SERVICE_ID }} - CRISIS_ALERT_SMS_API_BASE_URL: ${{ vars.CRISIS_ALERT_SMS_API_BASE_URL }} - CRISIS_ALERT_SMS_BODY_MAX_CHARS: ${{ vars.CRISIS_ALERT_SMS_BODY_MAX_CHARS }} - CRISIS_ALERT_PUSH_RECIPIENTS: ${{ vars.CRISIS_ALERT_PUSH_RECIPIENTS }} - CRISIS_ALERT_PUSH_PROVIDER: ${{ vars.CRISIS_ALERT_PUSH_PROVIDER }} - CRISIS_ALERT_PUSH_APP_TOKEN_SECRET_NAME: ${{ vars.CRISIS_ALERT_PUSH_APP_TOKEN_SECRET_NAME }} - CRISIS_ALERT_PUSH_ACCESS_TOKEN_SECRET_NAME: ${{ vars.CRISIS_ALERT_PUSH_ACCESS_TOKEN_SECRET_NAME }} - CRISIS_ALERT_PUSH_API_BASE_URL: ${{ vars.CRISIS_ALERT_PUSH_API_BASE_URL }} - CRISIS_ALERT_PUSH_DEVICE: ${{ vars.CRISIS_ALERT_PUSH_DEVICE }} - CRISIS_ALERT_PUSH_PRIORITY: ${{ vars.CRISIS_ALERT_PUSH_PRIORITY }} - CRISIS_ALERT_PUSH_TAGS: ${{ vars.CRISIS_ALERT_PUSH_TAGS }} - CRISIS_ALERT_PUSH_BODY_MAX_CHARS: ${{ vars.CRISIS_ALERT_PUSH_BODY_MAX_CHARS }} - CRISIS_ALERT_TELEGRAM_CHAT_IDS: ${{ vars.CRISIS_ALERT_TELEGRAM_CHAT_IDS }} - CRISIS_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME: ${{ vars.CRISIS_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME }} - CRISIS_ALERT_TELEGRAM_API_BASE_URL: ${{ vars.CRISIS_ALERT_TELEGRAM_API_BASE_URL }} - CRISIS_ALERT_TELEGRAM_PARSE_MODE: ${{ vars.CRISIS_ALERT_TELEGRAM_PARSE_MODE }} - CRISIS_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW: ${{ vars.CRISIS_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW }} - CRISIS_ALERT_TELEGRAM_BODY_MAX_CHARS: ${{ vars.CRISIS_ALERT_TELEGRAM_BODY_MAX_CHARS }} + STRATEGY_PLUGIN_ALERT_CHANNELS: ${{ vars.STRATEGY_PLUGIN_ALERT_CHANNELS }} + STRATEGY_PLUGIN_ALERT_EMAIL_RECIPIENTS: ${{ vars.STRATEGY_PLUGIN_ALERT_EMAIL_RECIPIENTS }} + STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_EMAIL: ${{ vars.STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_EMAIL }} + STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME: ${{ vars.STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME }} + STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_HOST: ${{ vars.STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_HOST }} + STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_PORT: ${{ vars.STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_PORT }} + STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_SECURITY: ${{ vars.STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_SECURITY }} + STRATEGY_PLUGIN_ALERT_SMS_RECIPIENTS: ${{ vars.STRATEGY_PLUGIN_ALERT_SMS_RECIPIENTS }} + STRATEGY_PLUGIN_ALERT_SMS_PROVIDER: ${{ vars.STRATEGY_PLUGIN_ALERT_SMS_PROVIDER }} + STRATEGY_PLUGIN_ALERT_SMS_ACCOUNT_ID: ${{ vars.STRATEGY_PLUGIN_ALERT_SMS_ACCOUNT_ID }} + STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN_SECRET_NAME: ${{ vars.STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN_SECRET_NAME }} + STRATEGY_PLUGIN_ALERT_SMS_SENDER: ${{ vars.STRATEGY_PLUGIN_ALERT_SMS_SENDER }} + STRATEGY_PLUGIN_ALERT_SMS_MESSAGING_SERVICE_ID: ${{ vars.STRATEGY_PLUGIN_ALERT_SMS_MESSAGING_SERVICE_ID }} + STRATEGY_PLUGIN_ALERT_SMS_API_BASE_URL: ${{ vars.STRATEGY_PLUGIN_ALERT_SMS_API_BASE_URL }} + STRATEGY_PLUGIN_ALERT_SMS_BODY_MAX_CHARS: ${{ vars.STRATEGY_PLUGIN_ALERT_SMS_BODY_MAX_CHARS }} + STRATEGY_PLUGIN_ALERT_PUSH_RECIPIENTS: ${{ vars.STRATEGY_PLUGIN_ALERT_PUSH_RECIPIENTS }} + STRATEGY_PLUGIN_ALERT_PUSH_PROVIDER: ${{ vars.STRATEGY_PLUGIN_ALERT_PUSH_PROVIDER }} + STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN_SECRET_NAME: ${{ vars.STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN_SECRET_NAME }} + STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN_SECRET_NAME: ${{ vars.STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN_SECRET_NAME }} + STRATEGY_PLUGIN_ALERT_PUSH_API_BASE_URL: ${{ vars.STRATEGY_PLUGIN_ALERT_PUSH_API_BASE_URL }} + STRATEGY_PLUGIN_ALERT_PUSH_DEVICE: ${{ vars.STRATEGY_PLUGIN_ALERT_PUSH_DEVICE }} + STRATEGY_PLUGIN_ALERT_PUSH_PRIORITY: ${{ vars.STRATEGY_PLUGIN_ALERT_PUSH_PRIORITY }} + STRATEGY_PLUGIN_ALERT_PUSH_TAGS: ${{ vars.STRATEGY_PLUGIN_ALERT_PUSH_TAGS }} + STRATEGY_PLUGIN_ALERT_PUSH_BODY_MAX_CHARS: ${{ vars.STRATEGY_PLUGIN_ALERT_PUSH_BODY_MAX_CHARS }} + STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS: ${{ vars.STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS }} + STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME: ${{ vars.STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME }} + STRATEGY_PLUGIN_ALERT_TELEGRAM_API_BASE_URL: ${{ vars.STRATEGY_PLUGIN_ALERT_TELEGRAM_API_BASE_URL }} + STRATEGY_PLUGIN_ALERT_TELEGRAM_PARSE_MODE: ${{ vars.STRATEGY_PLUGIN_ALERT_TELEGRAM_PARSE_MODE }} + STRATEGY_PLUGIN_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW: ${{ vars.STRATEGY_PLUGIN_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW }} + STRATEGY_PLUGIN_ALERT_TELEGRAM_BODY_MAX_CHARS: ${{ vars.STRATEGY_PLUGIN_ALERT_TELEGRAM_BODY_MAX_CHARS }} # Strategy-owned defaults continue to come from UsEquityStrategies; this workflow only syncs platform/runtime inputs. EXECUTION_REPORT_GCS_URI: ${{ vars.EXECUTION_REPORT_GCS_URI }} IB_GATEWAY_ZONE: ${{ vars.IB_GATEWAY_ZONE }} @@ -130,11 +130,11 @@ jobs: GLOBAL_TELEGRAM_CHAT_ID: ${{ vars.GLOBAL_TELEGRAM_CHAT_ID }} NOTIFY_LANG: ${{ vars.NOTIFY_LANG }} TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }} - CRISIS_ALERT_EMAIL_SENDER_PASSWORD: ${{ secrets.CRISIS_ALERT_EMAIL_SENDER_PASSWORD }} - CRISIS_ALERT_SMS_AUTH_TOKEN: ${{ secrets.CRISIS_ALERT_SMS_AUTH_TOKEN }} - CRISIS_ALERT_PUSH_APP_TOKEN: ${{ secrets.CRISIS_ALERT_PUSH_APP_TOKEN }} - CRISIS_ALERT_PUSH_ACCESS_TOKEN: ${{ secrets.CRISIS_ALERT_PUSH_ACCESS_TOKEN }} - CRISIS_ALERT_TELEGRAM_BOT_TOKEN: ${{ secrets.CRISIS_ALERT_TELEGRAM_BOT_TOKEN }} + STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD: ${{ secrets.STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD }} + STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN: ${{ secrets.STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN }} + STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN: ${{ secrets.STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN }} + STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN: ${{ secrets.STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN }} + STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN: ${{ secrets.STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN }} steps: - name: Check whether Cloud Run automation is enabled id: config @@ -569,11 +569,46 @@ jobs: "CRISIS_ALERT_SMTP_PASSWORD" "CRISIS_ALERT_SMTP_STARTTLS" "CRISIS_ALERT_SMTP_SSL" + "CRISIS_ALERT_CHANNELS" + "CRISIS_ALERT_EMAIL_RECIPIENTS" + "CRISIS_ALERT_EMAIL_SENDER_EMAIL" + "CRISIS_ALERT_EMAIL_SENDER_PASSWORD" + "CRISIS_ALERT_EMAIL_SMTP_HOST" + "CRISIS_ALERT_EMAIL_SMTP_PORT" + "CRISIS_ALERT_EMAIL_SMTP_SECURITY" + "CRISIS_ALERT_SMS_RECIPIENTS" + "CRISIS_ALERT_SMS_PROVIDER" + "CRISIS_ALERT_SMS_ACCOUNT_ID" + "CRISIS_ALERT_SMS_AUTH_TOKEN" + "CRISIS_ALERT_SMS_SENDER" + "CRISIS_ALERT_SMS_MESSAGING_SERVICE_ID" + "CRISIS_ALERT_SMS_API_BASE_URL" + "CRISIS_ALERT_SMS_BODY_MAX_CHARS" + "CRISIS_ALERT_PUSH_RECIPIENTS" + "CRISIS_ALERT_PUSH_PROVIDER" + "CRISIS_ALERT_PUSH_APP_TOKEN" + "CRISIS_ALERT_PUSH_ACCESS_TOKEN" + "CRISIS_ALERT_PUSH_API_BASE_URL" + "CRISIS_ALERT_PUSH_DEVICE" + "CRISIS_ALERT_PUSH_PRIORITY" + "CRISIS_ALERT_PUSH_TAGS" + "CRISIS_ALERT_PUSH_BODY_MAX_CHARS" + "CRISIS_ALERT_TELEGRAM_CHAT_IDS" + "CRISIS_ALERT_TELEGRAM_BOT_TOKEN" + "CRISIS_ALERT_TELEGRAM_API_BASE_URL" + "CRISIS_ALERT_TELEGRAM_PARSE_MODE" + "CRISIS_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW" + "CRISIS_ALERT_TELEGRAM_BODY_MAX_CHARS" ) shared_remove_secret_vars=( "CRISIS_ALERT_SMTP_PASSWORD" "CRISIS_ALERT_GOOGLE_VOICE_GMAIL_APP_PASSWORD" "CRISIS_ALERT_GOOGLE_VOICE_SENDER_PASSWORD" + "CRISIS_ALERT_EMAIL_SENDER_PASSWORD" + "CRISIS_ALERT_SMS_AUTH_TOKEN" + "CRISIS_ALERT_PUSH_APP_TOKEN" + "CRISIS_ALERT_PUSH_ACCESS_TOKEN" + "CRISIS_ALERT_TELEGRAM_BOT_TOKEN" ) if [ -n "${TELEGRAM_TOKEN_SECRET_NAME:-}" ]; then @@ -583,209 +618,209 @@ jobs: shared_remove_secret_vars+=("TELEGRAM_TOKEN") fi - if [ -n "${CRISIS_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME:-}" ]; then - shared_secret_pairs+=("CRISIS_ALERT_EMAIL_SENDER_PASSWORD=${CRISIS_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME}:latest") - shared_remove_env_vars+=("CRISIS_ALERT_EMAIL_SENDER_PASSWORD") - elif [ -n "${CRISIS_ALERT_EMAIL_SENDER_PASSWORD:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_EMAIL_SENDER_PASSWORD=${CRISIS_ALERT_EMAIL_SENDER_PASSWORD}") - shared_remove_secret_vars+=("CRISIS_ALERT_EMAIL_SENDER_PASSWORD") + if [ -n "${STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME:-}" ]; then + shared_secret_pairs+=("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD=${STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME}:latest") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD") + elif [ -n "${STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD=${STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD}") + shared_remove_secret_vars+=("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD") else - shared_remove_env_vars+=("CRISIS_ALERT_EMAIL_SENDER_PASSWORD") - shared_remove_secret_vars+=("CRISIS_ALERT_EMAIL_SENDER_PASSWORD") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD") + shared_remove_secret_vars+=("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD") fi - if [ -n "${CRISIS_ALERT_SMS_AUTH_TOKEN_SECRET_NAME:-}" ]; then - shared_secret_pairs+=("CRISIS_ALERT_SMS_AUTH_TOKEN=${CRISIS_ALERT_SMS_AUTH_TOKEN_SECRET_NAME}:latest") - shared_remove_env_vars+=("CRISIS_ALERT_SMS_AUTH_TOKEN") - elif [ -n "${CRISIS_ALERT_SMS_AUTH_TOKEN:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_SMS_AUTH_TOKEN=${CRISIS_ALERT_SMS_AUTH_TOKEN}") - shared_remove_secret_vars+=("CRISIS_ALERT_SMS_AUTH_TOKEN") + if [ -n "${STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN_SECRET_NAME:-}" ]; then + shared_secret_pairs+=("STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN=${STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN_SECRET_NAME}:latest") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN") + elif [ -n "${STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN=${STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN}") + shared_remove_secret_vars+=("STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN") else - shared_remove_env_vars+=("CRISIS_ALERT_SMS_AUTH_TOKEN") - shared_remove_secret_vars+=("CRISIS_ALERT_SMS_AUTH_TOKEN") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN") + shared_remove_secret_vars+=("STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN") fi - if [ -n "${CRISIS_ALERT_PUSH_APP_TOKEN_SECRET_NAME:-}" ]; then - shared_secret_pairs+=("CRISIS_ALERT_PUSH_APP_TOKEN=${CRISIS_ALERT_PUSH_APP_TOKEN_SECRET_NAME}:latest") - shared_remove_env_vars+=("CRISIS_ALERT_PUSH_APP_TOKEN") - elif [ -n "${CRISIS_ALERT_PUSH_APP_TOKEN:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_PUSH_APP_TOKEN=${CRISIS_ALERT_PUSH_APP_TOKEN}") - shared_remove_secret_vars+=("CRISIS_ALERT_PUSH_APP_TOKEN") + if [ -n "${STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN_SECRET_NAME:-}" ]; then + shared_secret_pairs+=("STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN=${STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN_SECRET_NAME}:latest") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN") + elif [ -n "${STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN=${STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN}") + shared_remove_secret_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN") else - shared_remove_env_vars+=("CRISIS_ALERT_PUSH_APP_TOKEN") - shared_remove_secret_vars+=("CRISIS_ALERT_PUSH_APP_TOKEN") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN") + shared_remove_secret_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN") fi - if [ -n "${CRISIS_ALERT_PUSH_ACCESS_TOKEN_SECRET_NAME:-}" ]; then - shared_secret_pairs+=("CRISIS_ALERT_PUSH_ACCESS_TOKEN=${CRISIS_ALERT_PUSH_ACCESS_TOKEN_SECRET_NAME}:latest") - shared_remove_env_vars+=("CRISIS_ALERT_PUSH_ACCESS_TOKEN") - elif [ -n "${CRISIS_ALERT_PUSH_ACCESS_TOKEN:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_PUSH_ACCESS_TOKEN=${CRISIS_ALERT_PUSH_ACCESS_TOKEN}") - shared_remove_secret_vars+=("CRISIS_ALERT_PUSH_ACCESS_TOKEN") + if [ -n "${STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN_SECRET_NAME:-}" ]; then + shared_secret_pairs+=("STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN=${STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN_SECRET_NAME}:latest") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN") + elif [ -n "${STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN=${STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN}") + shared_remove_secret_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN") else - shared_remove_env_vars+=("CRISIS_ALERT_PUSH_ACCESS_TOKEN") - shared_remove_secret_vars+=("CRISIS_ALERT_PUSH_ACCESS_TOKEN") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN") + shared_remove_secret_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN") fi - if [ -n "${CRISIS_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME:-}" ]; then - shared_secret_pairs+=("CRISIS_ALERT_TELEGRAM_BOT_TOKEN=${CRISIS_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME}:latest") - shared_remove_env_vars+=("CRISIS_ALERT_TELEGRAM_BOT_TOKEN") - elif [ -n "${CRISIS_ALERT_TELEGRAM_BOT_TOKEN:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_TELEGRAM_BOT_TOKEN=${CRISIS_ALERT_TELEGRAM_BOT_TOKEN}") - shared_remove_secret_vars+=("CRISIS_ALERT_TELEGRAM_BOT_TOKEN") + if [ -n "${STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME:-}" ]; then + shared_secret_pairs+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN=${STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME}:latest") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN") + elif [ -n "${STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN=${STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN}") + shared_remove_secret_vars+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN") else - shared_remove_env_vars+=("CRISIS_ALERT_TELEGRAM_BOT_TOKEN") - shared_remove_secret_vars+=("CRISIS_ALERT_TELEGRAM_BOT_TOKEN") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN") + shared_remove_secret_vars+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN") fi - if [ -n "${CRISIS_ALERT_CHANNELS:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_CHANNELS=${CRISIS_ALERT_CHANNELS}") + if [ -n "${STRATEGY_PLUGIN_ALERT_CHANNELS:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_CHANNELS=${STRATEGY_PLUGIN_ALERT_CHANNELS}") else - shared_remove_env_vars+=("CRISIS_ALERT_CHANNELS") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_CHANNELS") fi - if [ -n "${CRISIS_ALERT_EMAIL_RECIPIENTS:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_EMAIL_RECIPIENTS=${CRISIS_ALERT_EMAIL_RECIPIENTS}") + if [ -n "${STRATEGY_PLUGIN_ALERT_EMAIL_RECIPIENTS:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_EMAIL_RECIPIENTS=${STRATEGY_PLUGIN_ALERT_EMAIL_RECIPIENTS}") else - shared_remove_env_vars+=("CRISIS_ALERT_EMAIL_RECIPIENTS") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_EMAIL_RECIPIENTS") fi - if [ -n "${CRISIS_ALERT_EMAIL_SENDER_EMAIL:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_EMAIL_SENDER_EMAIL=${CRISIS_ALERT_EMAIL_SENDER_EMAIL}") + if [ -n "${STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_EMAIL:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_EMAIL=${STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_EMAIL}") else - shared_remove_env_vars+=("CRISIS_ALERT_EMAIL_SENDER_EMAIL") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_EMAIL") fi - if [ -n "${CRISIS_ALERT_EMAIL_SMTP_HOST:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_EMAIL_SMTP_HOST=${CRISIS_ALERT_EMAIL_SMTP_HOST}") + if [ -n "${STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_HOST:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_HOST=${STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_HOST}") else - shared_remove_env_vars+=("CRISIS_ALERT_EMAIL_SMTP_HOST") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_HOST") fi - if [ -n "${CRISIS_ALERT_EMAIL_SMTP_PORT:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_EMAIL_SMTP_PORT=${CRISIS_ALERT_EMAIL_SMTP_PORT}") + if [ -n "${STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_PORT:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_PORT=${STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_PORT}") else - shared_remove_env_vars+=("CRISIS_ALERT_EMAIL_SMTP_PORT") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_PORT") fi - if [ -n "${CRISIS_ALERT_EMAIL_SMTP_SECURITY:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_EMAIL_SMTP_SECURITY=${CRISIS_ALERT_EMAIL_SMTP_SECURITY}") + if [ -n "${STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_SECURITY:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_SECURITY=${STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_SECURITY}") else - shared_remove_env_vars+=("CRISIS_ALERT_EMAIL_SMTP_SECURITY") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_SECURITY") fi - if [ -n "${CRISIS_ALERT_SMS_RECIPIENTS:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_SMS_RECIPIENTS=${CRISIS_ALERT_SMS_RECIPIENTS}") + if [ -n "${STRATEGY_PLUGIN_ALERT_SMS_RECIPIENTS:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_SMS_RECIPIENTS=${STRATEGY_PLUGIN_ALERT_SMS_RECIPIENTS}") else - shared_remove_env_vars+=("CRISIS_ALERT_SMS_RECIPIENTS") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_SMS_RECIPIENTS") fi - if [ -n "${CRISIS_ALERT_SMS_PROVIDER:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_SMS_PROVIDER=${CRISIS_ALERT_SMS_PROVIDER}") + if [ -n "${STRATEGY_PLUGIN_ALERT_SMS_PROVIDER:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_SMS_PROVIDER=${STRATEGY_PLUGIN_ALERT_SMS_PROVIDER}") else - shared_remove_env_vars+=("CRISIS_ALERT_SMS_PROVIDER") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_SMS_PROVIDER") fi - if [ -n "${CRISIS_ALERT_SMS_ACCOUNT_ID:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_SMS_ACCOUNT_ID=${CRISIS_ALERT_SMS_ACCOUNT_ID}") + if [ -n "${STRATEGY_PLUGIN_ALERT_SMS_ACCOUNT_ID:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_SMS_ACCOUNT_ID=${STRATEGY_PLUGIN_ALERT_SMS_ACCOUNT_ID}") else - shared_remove_env_vars+=("CRISIS_ALERT_SMS_ACCOUNT_ID") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_SMS_ACCOUNT_ID") fi - if [ -n "${CRISIS_ALERT_SMS_SENDER:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_SMS_SENDER=${CRISIS_ALERT_SMS_SENDER}") + if [ -n "${STRATEGY_PLUGIN_ALERT_SMS_SENDER:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_SMS_SENDER=${STRATEGY_PLUGIN_ALERT_SMS_SENDER}") else - shared_remove_env_vars+=("CRISIS_ALERT_SMS_SENDER") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_SMS_SENDER") fi - if [ -n "${CRISIS_ALERT_SMS_MESSAGING_SERVICE_ID:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_SMS_MESSAGING_SERVICE_ID=${CRISIS_ALERT_SMS_MESSAGING_SERVICE_ID}") + if [ -n "${STRATEGY_PLUGIN_ALERT_SMS_MESSAGING_SERVICE_ID:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_SMS_MESSAGING_SERVICE_ID=${STRATEGY_PLUGIN_ALERT_SMS_MESSAGING_SERVICE_ID}") else - shared_remove_env_vars+=("CRISIS_ALERT_SMS_MESSAGING_SERVICE_ID") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_SMS_MESSAGING_SERVICE_ID") fi - if [ -n "${CRISIS_ALERT_SMS_API_BASE_URL:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_SMS_API_BASE_URL=${CRISIS_ALERT_SMS_API_BASE_URL}") + if [ -n "${STRATEGY_PLUGIN_ALERT_SMS_API_BASE_URL:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_SMS_API_BASE_URL=${STRATEGY_PLUGIN_ALERT_SMS_API_BASE_URL}") else - shared_remove_env_vars+=("CRISIS_ALERT_SMS_API_BASE_URL") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_SMS_API_BASE_URL") fi - if [ -n "${CRISIS_ALERT_SMS_BODY_MAX_CHARS:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_SMS_BODY_MAX_CHARS=${CRISIS_ALERT_SMS_BODY_MAX_CHARS}") + if [ -n "${STRATEGY_PLUGIN_ALERT_SMS_BODY_MAX_CHARS:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_SMS_BODY_MAX_CHARS=${STRATEGY_PLUGIN_ALERT_SMS_BODY_MAX_CHARS}") else - shared_remove_env_vars+=("CRISIS_ALERT_SMS_BODY_MAX_CHARS") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_SMS_BODY_MAX_CHARS") fi - if [ -n "${CRISIS_ALERT_PUSH_RECIPIENTS:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_PUSH_RECIPIENTS=${CRISIS_ALERT_PUSH_RECIPIENTS}") + if [ -n "${STRATEGY_PLUGIN_ALERT_PUSH_RECIPIENTS:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_PUSH_RECIPIENTS=${STRATEGY_PLUGIN_ALERT_PUSH_RECIPIENTS}") else - shared_remove_env_vars+=("CRISIS_ALERT_PUSH_RECIPIENTS") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_RECIPIENTS") fi - if [ -n "${CRISIS_ALERT_PUSH_PROVIDER:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_PUSH_PROVIDER=${CRISIS_ALERT_PUSH_PROVIDER}") + if [ -n "${STRATEGY_PLUGIN_ALERT_PUSH_PROVIDER:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_PUSH_PROVIDER=${STRATEGY_PLUGIN_ALERT_PUSH_PROVIDER}") else - shared_remove_env_vars+=("CRISIS_ALERT_PUSH_PROVIDER") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_PROVIDER") fi - if [ -n "${CRISIS_ALERT_PUSH_API_BASE_URL:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_PUSH_API_BASE_URL=${CRISIS_ALERT_PUSH_API_BASE_URL}") + if [ -n "${STRATEGY_PLUGIN_ALERT_PUSH_API_BASE_URL:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_PUSH_API_BASE_URL=${STRATEGY_PLUGIN_ALERT_PUSH_API_BASE_URL}") else - shared_remove_env_vars+=("CRISIS_ALERT_PUSH_API_BASE_URL") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_API_BASE_URL") fi - if [ -n "${CRISIS_ALERT_PUSH_DEVICE:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_PUSH_DEVICE=${CRISIS_ALERT_PUSH_DEVICE}") + if [ -n "${STRATEGY_PLUGIN_ALERT_PUSH_DEVICE:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_PUSH_DEVICE=${STRATEGY_PLUGIN_ALERT_PUSH_DEVICE}") else - shared_remove_env_vars+=("CRISIS_ALERT_PUSH_DEVICE") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_DEVICE") fi - if [ -n "${CRISIS_ALERT_PUSH_PRIORITY:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_PUSH_PRIORITY=${CRISIS_ALERT_PUSH_PRIORITY}") + if [ -n "${STRATEGY_PLUGIN_ALERT_PUSH_PRIORITY:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_PUSH_PRIORITY=${STRATEGY_PLUGIN_ALERT_PUSH_PRIORITY}") else - shared_remove_env_vars+=("CRISIS_ALERT_PUSH_PRIORITY") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_PRIORITY") fi - if [ -n "${CRISIS_ALERT_PUSH_TAGS:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_PUSH_TAGS=${CRISIS_ALERT_PUSH_TAGS}") + if [ -n "${STRATEGY_PLUGIN_ALERT_PUSH_TAGS:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_PUSH_TAGS=${STRATEGY_PLUGIN_ALERT_PUSH_TAGS}") else - shared_remove_env_vars+=("CRISIS_ALERT_PUSH_TAGS") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_TAGS") fi - if [ -n "${CRISIS_ALERT_PUSH_BODY_MAX_CHARS:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_PUSH_BODY_MAX_CHARS=${CRISIS_ALERT_PUSH_BODY_MAX_CHARS}") + if [ -n "${STRATEGY_PLUGIN_ALERT_PUSH_BODY_MAX_CHARS:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_PUSH_BODY_MAX_CHARS=${STRATEGY_PLUGIN_ALERT_PUSH_BODY_MAX_CHARS}") else - shared_remove_env_vars+=("CRISIS_ALERT_PUSH_BODY_MAX_CHARS") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_PUSH_BODY_MAX_CHARS") fi - if [ -n "${CRISIS_ALERT_TELEGRAM_CHAT_IDS:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_TELEGRAM_CHAT_IDS=${CRISIS_ALERT_TELEGRAM_CHAT_IDS}") + if [ -n "${STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS=${STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS}") else - shared_remove_env_vars+=("CRISIS_ALERT_TELEGRAM_CHAT_IDS") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS") fi - if [ -n "${CRISIS_ALERT_TELEGRAM_API_BASE_URL:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_TELEGRAM_API_BASE_URL=${CRISIS_ALERT_TELEGRAM_API_BASE_URL}") + if [ -n "${STRATEGY_PLUGIN_ALERT_TELEGRAM_API_BASE_URL:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_API_BASE_URL=${STRATEGY_PLUGIN_ALERT_TELEGRAM_API_BASE_URL}") else - shared_remove_env_vars+=("CRISIS_ALERT_TELEGRAM_API_BASE_URL") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_API_BASE_URL") fi - if [ -n "${CRISIS_ALERT_TELEGRAM_PARSE_MODE:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_TELEGRAM_PARSE_MODE=${CRISIS_ALERT_TELEGRAM_PARSE_MODE}") + if [ -n "${STRATEGY_PLUGIN_ALERT_TELEGRAM_PARSE_MODE:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_PARSE_MODE=${STRATEGY_PLUGIN_ALERT_TELEGRAM_PARSE_MODE}") else - shared_remove_env_vars+=("CRISIS_ALERT_TELEGRAM_PARSE_MODE") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_PARSE_MODE") fi - if [ -n "${CRISIS_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW=${CRISIS_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW}") + if [ -n "${STRATEGY_PLUGIN_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW=${STRATEGY_PLUGIN_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW}") else - shared_remove_env_vars+=("CRISIS_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW") fi - if [ -n "${CRISIS_ALERT_TELEGRAM_BODY_MAX_CHARS:-}" ]; then - shared_env_pairs+=("CRISIS_ALERT_TELEGRAM_BODY_MAX_CHARS=${CRISIS_ALERT_TELEGRAM_BODY_MAX_CHARS}") + if [ -n "${STRATEGY_PLUGIN_ALERT_TELEGRAM_BODY_MAX_CHARS:-}" ]; then + shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_BODY_MAX_CHARS=${STRATEGY_PLUGIN_ALERT_TELEGRAM_BODY_MAX_CHARS}") else - shared_remove_env_vars+=("CRISIS_ALERT_TELEGRAM_BODY_MAX_CHARS") + shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_BODY_MAX_CHARS") fi for target_index in "${!target_services[@]}"; do diff --git a/main.py b/main.py index 49cdf1e..44a4e98 100644 --- a/main.py +++ b/main.py @@ -535,10 +535,6 @@ def _runtime_error_notification_targets() -> tuple[tuple[str, str], ...]: targets: list[tuple[str, str]] = [] if TG_TOKEN and TG_CHAT_ID: targets.append((TG_TOKEN, TG_CHAT_ID)) - crisis_token = os.getenv("CRISIS_ALERT_TELEGRAM_BOT_TOKEN") - for chat_id in _split_env_list(os.getenv("CRISIS_ALERT_TELEGRAM_CHAT_IDS")): - if crisis_token and chat_id: - targets.append((crisis_token, chat_id)) seen: set[tuple[str, str]] = set() unique_targets: list[tuple[str, str]] = [] diff --git a/requirements.txt b/requirements.txt index 390cd83..834e995 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ flask gunicorn -quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@v0.7.37 +quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@3b6a0a9bedde72773e188041e0dc48516b38aadc us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@v0.7.52 hk-equity-strategies @ git+https://github.com/QuantStrategyLab/HkEquityStrategies.git@v0.4.3 pandas diff --git a/runtime_config_support.py b/runtime_config_support.py index 1fa99c7..c7fdb8c 100644 --- a/runtime_config_support.py +++ b/runtime_config_support.py @@ -152,36 +152,36 @@ class PlatformRuntimeSettings: quantconnect_version_id: str | None = None quantconnect_credentials_secret_name: str | None = None quantconnect_brokerage_secret_name: str | None = None - crisis_alert_channels: tuple[str, ...] = () - crisis_alert_email_recipients: tuple[str, ...] = () - crisis_alert_email_sender_email: str | None = None - crisis_alert_email_sender_password: str | None = None - crisis_alert_email_smtp_host: str | None = None - crisis_alert_email_smtp_port: str | None = None - crisis_alert_email_smtp_security: str | None = None - crisis_alert_sms_recipients: tuple[str, ...] = () - crisis_alert_sms_provider: str | None = None - crisis_alert_sms_account_id: str | None = None - crisis_alert_sms_auth_token: str | None = None - crisis_alert_sms_sender: str | None = None - crisis_alert_sms_messaging_service_id: str | None = None - crisis_alert_sms_api_base_url: str | None = None - crisis_alert_sms_body_max_chars: str | None = None - crisis_alert_push_recipients: tuple[str, ...] = () - crisis_alert_push_provider: str | None = None - crisis_alert_push_app_token: str | None = None - crisis_alert_push_access_token: str | None = None - crisis_alert_push_api_base_url: str | None = None - crisis_alert_push_device: str | None = None - crisis_alert_push_priority: str | None = None - crisis_alert_push_tags: str | None = None - crisis_alert_push_body_max_chars: str | None = None - crisis_alert_telegram_chat_ids: tuple[str, ...] = () - crisis_alert_telegram_bot_token: str | None = None - crisis_alert_telegram_api_base_url: str | None = None - crisis_alert_telegram_parse_mode: str | None = None - crisis_alert_telegram_disable_web_page_preview: str | None = None - crisis_alert_telegram_body_max_chars: str | None = None + strategy_plugin_alert_channels: tuple[str, ...] = () + strategy_plugin_alert_email_recipients: tuple[str, ...] = () + strategy_plugin_alert_email_sender_email: str | None = None + strategy_plugin_alert_email_sender_password: str | None = None + strategy_plugin_alert_email_smtp_host: str | None = None + strategy_plugin_alert_email_smtp_port: str | None = None + strategy_plugin_alert_email_smtp_security: str | None = None + strategy_plugin_alert_sms_recipients: tuple[str, ...] = () + strategy_plugin_alert_sms_provider: str | None = None + strategy_plugin_alert_sms_account_id: str | None = None + strategy_plugin_alert_sms_auth_token: str | None = None + strategy_plugin_alert_sms_sender: str | None = None + strategy_plugin_alert_sms_messaging_service_id: str | None = None + strategy_plugin_alert_sms_api_base_url: str | None = None + strategy_plugin_alert_sms_body_max_chars: str | None = None + strategy_plugin_alert_push_recipients: tuple[str, ...] = () + strategy_plugin_alert_push_provider: str | None = None + strategy_plugin_alert_push_app_token: str | None = None + strategy_plugin_alert_push_access_token: str | None = None + strategy_plugin_alert_push_api_base_url: str | None = None + strategy_plugin_alert_push_device: str | None = None + strategy_plugin_alert_push_priority: str | None = None + strategy_plugin_alert_push_tags: str | None = None + strategy_plugin_alert_push_body_max_chars: str | None = None + strategy_plugin_alert_telegram_chat_ids: tuple[str, ...] = () + strategy_plugin_alert_telegram_bot_token: str | None = None + strategy_plugin_alert_telegram_api_base_url: str | None = None + strategy_plugin_alert_telegram_parse_mode: str | None = None + strategy_plugin_alert_telegram_disable_web_page_preview: str | None = None + strategy_plugin_alert_telegram_body_max_chars: str | None = None runtime_target: RuntimeTarget | None = None execution_backend: str = EXECUTION_BACKEND_GATEWAY @@ -353,93 +353,93 @@ def load_platform_runtime_settings( quantconnect_version_id=group_config.quantconnect_version_id, quantconnect_credentials_secret_name=group_config.quantconnect_credentials_secret_name, quantconnect_brokerage_secret_name=group_config.quantconnect_brokerage_secret_name, - crisis_alert_channels=split_env_list(os.getenv("CRISIS_ALERT_CHANNELS")), - crisis_alert_email_recipients=split_env_list( - os.getenv("CRISIS_ALERT_EMAIL_RECIPIENTS") + strategy_plugin_alert_channels=split_env_list(os.getenv("STRATEGY_PLUGIN_ALERT_CHANNELS")), + strategy_plugin_alert_email_recipients=split_env_list( + os.getenv("STRATEGY_PLUGIN_ALERT_EMAIL_RECIPIENTS") ), - crisis_alert_email_sender_email=first_non_empty( - os.getenv("CRISIS_ALERT_EMAIL_SENDER_EMAIL") + strategy_plugin_alert_email_sender_email=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_EMAIL") ), - crisis_alert_email_sender_password=first_non_empty( - os.getenv("CRISIS_ALERT_EMAIL_SENDER_PASSWORD") + strategy_plugin_alert_email_sender_password=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD") ), - crisis_alert_email_smtp_host=first_non_empty( - os.getenv("CRISIS_ALERT_EMAIL_SMTP_HOST") + strategy_plugin_alert_email_smtp_host=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_HOST") ), - crisis_alert_email_smtp_port=first_non_empty( - os.getenv("CRISIS_ALERT_EMAIL_SMTP_PORT") + strategy_plugin_alert_email_smtp_port=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_PORT") ), - crisis_alert_email_smtp_security=first_non_empty( - os.getenv("CRISIS_ALERT_EMAIL_SMTP_SECURITY") + strategy_plugin_alert_email_smtp_security=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_SECURITY") ), - crisis_alert_sms_recipients=split_env_list( - os.getenv("CRISIS_ALERT_SMS_RECIPIENTS") + strategy_plugin_alert_sms_recipients=split_env_list( + os.getenv("STRATEGY_PLUGIN_ALERT_SMS_RECIPIENTS") ), - crisis_alert_sms_provider=first_non_empty( - os.getenv("CRISIS_ALERT_SMS_PROVIDER") + strategy_plugin_alert_sms_provider=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_SMS_PROVIDER") ), - crisis_alert_sms_account_id=first_non_empty( - os.getenv("CRISIS_ALERT_SMS_ACCOUNT_ID") + strategy_plugin_alert_sms_account_id=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_SMS_ACCOUNT_ID") ), - crisis_alert_sms_auth_token=first_non_empty( - os.getenv("CRISIS_ALERT_SMS_AUTH_TOKEN") + strategy_plugin_alert_sms_auth_token=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN") ), - crisis_alert_sms_sender=first_non_empty( - os.getenv("CRISIS_ALERT_SMS_SENDER") + strategy_plugin_alert_sms_sender=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_SMS_SENDER") ), - crisis_alert_sms_messaging_service_id=first_non_empty( - os.getenv("CRISIS_ALERT_SMS_MESSAGING_SERVICE_ID") + strategy_plugin_alert_sms_messaging_service_id=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_SMS_MESSAGING_SERVICE_ID") ), - crisis_alert_sms_api_base_url=first_non_empty( - os.getenv("CRISIS_ALERT_SMS_API_BASE_URL") + strategy_plugin_alert_sms_api_base_url=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_SMS_API_BASE_URL") ), - crisis_alert_sms_body_max_chars=first_non_empty( - os.getenv("CRISIS_ALERT_SMS_BODY_MAX_CHARS") + strategy_plugin_alert_sms_body_max_chars=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_SMS_BODY_MAX_CHARS") ), - crisis_alert_push_recipients=split_env_list( - os.getenv("CRISIS_ALERT_PUSH_RECIPIENTS") + strategy_plugin_alert_push_recipients=split_env_list( + os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_RECIPIENTS") ), - crisis_alert_push_provider=first_non_empty( - os.getenv("CRISIS_ALERT_PUSH_PROVIDER") + strategy_plugin_alert_push_provider=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_PROVIDER") ), - crisis_alert_push_app_token=first_non_empty( - os.getenv("CRISIS_ALERT_PUSH_APP_TOKEN") + strategy_plugin_alert_push_app_token=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN") ), - crisis_alert_push_access_token=first_non_empty( - os.getenv("CRISIS_ALERT_PUSH_ACCESS_TOKEN") + strategy_plugin_alert_push_access_token=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN") ), - crisis_alert_push_api_base_url=first_non_empty( - os.getenv("CRISIS_ALERT_PUSH_API_BASE_URL") + strategy_plugin_alert_push_api_base_url=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_API_BASE_URL") ), - crisis_alert_push_device=first_non_empty( - os.getenv("CRISIS_ALERT_PUSH_DEVICE") + strategy_plugin_alert_push_device=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_DEVICE") ), - crisis_alert_push_priority=first_non_empty( - os.getenv("CRISIS_ALERT_PUSH_PRIORITY") + strategy_plugin_alert_push_priority=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_PRIORITY") ), - crisis_alert_push_tags=first_non_empty( - os.getenv("CRISIS_ALERT_PUSH_TAGS") + strategy_plugin_alert_push_tags=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_TAGS") ), - crisis_alert_push_body_max_chars=first_non_empty( - os.getenv("CRISIS_ALERT_PUSH_BODY_MAX_CHARS") + strategy_plugin_alert_push_body_max_chars=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_PUSH_BODY_MAX_CHARS") ), - crisis_alert_telegram_chat_ids=split_env_list( - os.getenv("CRISIS_ALERT_TELEGRAM_CHAT_IDS") + strategy_plugin_alert_telegram_chat_ids=split_env_list( + os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS") ), - crisis_alert_telegram_bot_token=first_non_empty( - os.getenv("CRISIS_ALERT_TELEGRAM_BOT_TOKEN") + strategy_plugin_alert_telegram_bot_token=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN") ), - crisis_alert_telegram_api_base_url=first_non_empty( - os.getenv("CRISIS_ALERT_TELEGRAM_API_BASE_URL") + strategy_plugin_alert_telegram_api_base_url=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_API_BASE_URL") ), - crisis_alert_telegram_parse_mode=first_non_empty( - os.getenv("CRISIS_ALERT_TELEGRAM_PARSE_MODE") + strategy_plugin_alert_telegram_parse_mode=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_PARSE_MODE") ), - crisis_alert_telegram_disable_web_page_preview=first_non_empty( - os.getenv("CRISIS_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW") + strategy_plugin_alert_telegram_disable_web_page_preview=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW") ), - crisis_alert_telegram_body_max_chars=first_non_empty( - os.getenv("CRISIS_ALERT_TELEGRAM_BODY_MAX_CHARS") + strategy_plugin_alert_telegram_body_max_chars=first_non_empty( + os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_BODY_MAX_CHARS") ), runtime_target=runtime_target, ) diff --git a/scripts/cloud_run_runtime_guard.py b/scripts/cloud_run_runtime_guard.py index 561a808..bab869b 100644 --- a/scripts/cloud_run_runtime_guard.py +++ b/scripts/cloud_run_runtime_guard.py @@ -168,10 +168,6 @@ def _summarize(entry: dict[str, Any]) -> str: def _send_telegram(message: str) -> bool: targets: list[tuple[str, str]] = [] - crisis_token = os.environ.get("CRISIS_ALERT_TELEGRAM_BOT_TOKEN") - for chat_id in _split_values(os.environ.get("CRISIS_ALERT_TELEGRAM_CHAT_IDS")): - if crisis_token: - targets.append((crisis_token, chat_id)) token = os.environ.get("TELEGRAM_TOKEN") or os.environ.get("TG_TOKEN") for chat_id in _split_values(os.environ.get("GLOBAL_TELEGRAM_CHAT_ID")): @@ -184,7 +180,7 @@ def _send_telegram(message: str) -> bool: return False ok = True - base_url = os.environ.get("CRISIS_ALERT_TELEGRAM_API_BASE_URL") or "https://api.telegram.org" + base_url = "https://api.telegram.org" for token_value, chat_id in unique_targets: body = urllib.parse.urlencode({"chat_id": chat_id, "text": message}).encode() request = urllib.request.Request( diff --git a/scripts/execution_report_heartbeat.py b/scripts/execution_report_heartbeat.py index 7e4bd7e..8f784cb 100644 --- a/scripts/execution_report_heartbeat.py +++ b/scripts/execution_report_heartbeat.py @@ -289,10 +289,6 @@ def _is_accepted_report(payload: dict[str, Any]) -> tuple[bool, str]: def _send_telegram(message: str) -> bool: targets: list[tuple[str, str]] = [] - crisis_token = os.environ.get("CRISIS_ALERT_TELEGRAM_BOT_TOKEN") - for chat_id in _split_values(os.environ.get("CRISIS_ALERT_TELEGRAM_CHAT_IDS")): - if crisis_token: - targets.append((crisis_token, chat_id)) token = os.environ.get("TELEGRAM_TOKEN") or os.environ.get("TG_TOKEN") for chat_id in _split_values(os.environ.get("GLOBAL_TELEGRAM_CHAT_ID")): if token: @@ -301,7 +297,7 @@ def _send_telegram(message: str) -> bool: if not unique_targets: print("No Telegram token/chat configured; unable to send heartbeat alert.", file=sys.stderr) return False - base_url = os.environ.get("CRISIS_ALERT_TELEGRAM_API_BASE_URL") or "https://api.telegram.org" + base_url = "https://api.telegram.org" ok = True for token_value, chat_id in unique_targets: body = urllib.parse.urlencode({"chat_id": chat_id, "text": message}).encode() diff --git a/tests/conftest.py b/tests/conftest.py index 74f73ef..3051382 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -30,28 +30,28 @@ def load_strategy_module(**env_overrides): ), "IB_ACCOUNT_GROUP_CONFIG_SECRET_NAME": None, "GLOBAL_TELEGRAM_CHAT_ID": None, - "CRISIS_ALERT_CHANNELS": None, - "CRISIS_ALERT_EMAIL_RECIPIENTS": None, - "CRISIS_ALERT_EMAIL_SENDER_EMAIL": None, - "CRISIS_ALERT_EMAIL_SENDER_PASSWORD": None, - "CRISIS_ALERT_EMAIL_SMTP_HOST": None, - "CRISIS_ALERT_EMAIL_SMTP_PORT": None, - "CRISIS_ALERT_EMAIL_SMTP_SECURITY": None, - "CRISIS_ALERT_PUSH_RECIPIENTS": None, - "CRISIS_ALERT_PUSH_PROVIDER": None, - "CRISIS_ALERT_PUSH_APP_TOKEN": None, - "CRISIS_ALERT_PUSH_ACCESS_TOKEN": None, - "CRISIS_ALERT_PUSH_API_BASE_URL": None, - "CRISIS_ALERT_PUSH_DEVICE": None, - "CRISIS_ALERT_PUSH_PRIORITY": None, - "CRISIS_ALERT_PUSH_TAGS": None, - "CRISIS_ALERT_PUSH_BODY_MAX_CHARS": None, - "CRISIS_ALERT_TELEGRAM_CHAT_IDS": None, - "CRISIS_ALERT_TELEGRAM_BOT_TOKEN": None, - "CRISIS_ALERT_TELEGRAM_API_BASE_URL": None, - "CRISIS_ALERT_TELEGRAM_PARSE_MODE": None, - "CRISIS_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW": None, - "CRISIS_ALERT_TELEGRAM_BODY_MAX_CHARS": None, + "STRATEGY_PLUGIN_ALERT_CHANNELS": None, + "STRATEGY_PLUGIN_ALERT_EMAIL_RECIPIENTS": None, + "STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_EMAIL": None, + "STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD": None, + "STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_HOST": None, + "STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_PORT": None, + "STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_SECURITY": None, + "STRATEGY_PLUGIN_ALERT_PUSH_RECIPIENTS": None, + "STRATEGY_PLUGIN_ALERT_PUSH_PROVIDER": None, + "STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN": None, + "STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN": None, + "STRATEGY_PLUGIN_ALERT_PUSH_API_BASE_URL": None, + "STRATEGY_PLUGIN_ALERT_PUSH_DEVICE": None, + "STRATEGY_PLUGIN_ALERT_PUSH_PRIORITY": None, + "STRATEGY_PLUGIN_ALERT_PUSH_TAGS": None, + "STRATEGY_PLUGIN_ALERT_PUSH_BODY_MAX_CHARS": None, + "STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS": None, + "STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN": None, + "STRATEGY_PLUGIN_ALERT_TELEGRAM_API_BASE_URL": None, + "STRATEGY_PLUGIN_ALERT_TELEGRAM_PARSE_MODE": None, + "STRATEGY_PLUGIN_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW": None, + "STRATEGY_PLUGIN_ALERT_TELEGRAM_BODY_MAX_CHARS": None, } defaults.update(env_overrides) if "RUNTIME_TARGET_JSON" not in defaults: diff --git a/tests/test_request_handling.py b/tests/test_request_handling.py index 8d4e3a6..5f8767b 100644 --- a/tests/test_request_handling.py +++ b/tests/test_request_handling.py @@ -582,6 +582,8 @@ def fake_post(_url, *, json, timeout): monkeypatch.setattr(strategy_module, "_handle_request", lambda: (_ for _ in ()).throw(RuntimeError("boom"))) monkeypatch.setattr(strategy_module, "TG_TOKEN", "token-1") monkeypatch.setattr(strategy_module, "TG_CHAT_ID", "chat-1") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN", "plugin-token") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS", "plugin-chat") monkeypatch.setattr(strategy_module.requests, "post", fake_post) with strategy_module.app.test_request_context("/", method="POST"): diff --git a/tests/test_runtime_config_support.py b/tests/test_runtime_config_support.py index b2da74d..4d26861 100644 --- a/tests/test_runtime_config_support.py +++ b/tests/test_runtime_config_support.py @@ -193,36 +193,36 @@ def test_load_platform_runtime_settings_uses_minimal_group_config(monkeypatch): assert settings.quantconnect_version_id is None assert settings.quantconnect_credentials_secret_name is None assert settings.quantconnect_brokerage_secret_name is None - assert settings.crisis_alert_channels == () - assert settings.crisis_alert_email_recipients == () - assert settings.crisis_alert_email_sender_email is None - assert settings.crisis_alert_email_sender_password is None - assert settings.crisis_alert_email_smtp_host is None - assert settings.crisis_alert_email_smtp_port is None - assert settings.crisis_alert_email_smtp_security is None - assert settings.crisis_alert_sms_recipients == () - assert settings.crisis_alert_sms_provider is None - assert settings.crisis_alert_sms_account_id is None - assert settings.crisis_alert_sms_auth_token is None - assert settings.crisis_alert_sms_sender is None - assert settings.crisis_alert_sms_messaging_service_id is None - assert settings.crisis_alert_sms_api_base_url is None - assert settings.crisis_alert_sms_body_max_chars is None - assert settings.crisis_alert_push_recipients == () - assert settings.crisis_alert_push_provider is None - assert settings.crisis_alert_push_app_token is None - assert settings.crisis_alert_push_access_token is None - assert settings.crisis_alert_push_api_base_url is None - assert settings.crisis_alert_push_device is None - assert settings.crisis_alert_push_priority is None - assert settings.crisis_alert_push_tags is None - assert settings.crisis_alert_push_body_max_chars is None - assert settings.crisis_alert_telegram_chat_ids == () - assert settings.crisis_alert_telegram_bot_token is None - assert settings.crisis_alert_telegram_api_base_url is None - assert settings.crisis_alert_telegram_parse_mode is None - assert settings.crisis_alert_telegram_disable_web_page_preview is None - assert settings.crisis_alert_telegram_body_max_chars is None + assert settings.strategy_plugin_alert_channels == () + assert settings.strategy_plugin_alert_email_recipients == () + assert settings.strategy_plugin_alert_email_sender_email is None + assert settings.strategy_plugin_alert_email_sender_password is None + assert settings.strategy_plugin_alert_email_smtp_host is None + assert settings.strategy_plugin_alert_email_smtp_port is None + assert settings.strategy_plugin_alert_email_smtp_security is None + assert settings.strategy_plugin_alert_sms_recipients == () + assert settings.strategy_plugin_alert_sms_provider is None + assert settings.strategy_plugin_alert_sms_account_id is None + assert settings.strategy_plugin_alert_sms_auth_token is None + assert settings.strategy_plugin_alert_sms_sender is None + assert settings.strategy_plugin_alert_sms_messaging_service_id is None + assert settings.strategy_plugin_alert_sms_api_base_url is None + assert settings.strategy_plugin_alert_sms_body_max_chars is None + assert settings.strategy_plugin_alert_push_recipients == () + assert settings.strategy_plugin_alert_push_provider is None + assert settings.strategy_plugin_alert_push_app_token is None + assert settings.strategy_plugin_alert_push_access_token is None + assert settings.strategy_plugin_alert_push_api_base_url is None + assert settings.strategy_plugin_alert_push_device is None + assert settings.strategy_plugin_alert_push_priority is None + assert settings.strategy_plugin_alert_push_tags is None + assert settings.strategy_plugin_alert_push_body_max_chars is None + assert settings.strategy_plugin_alert_telegram_chat_ids == () + assert settings.strategy_plugin_alert_telegram_bot_token is None + assert settings.strategy_plugin_alert_telegram_api_base_url is None + assert settings.strategy_plugin_alert_telegram_parse_mode is None + assert settings.strategy_plugin_alert_telegram_disable_web_page_preview is None + assert settings.strategy_plugin_alert_telegram_body_max_chars is None def test_load_platform_runtime_settings_prefers_runtime_target_json(monkeypatch): @@ -388,91 +388,91 @@ def test_resolve_execution_backend_rejects_unknown_backend(): resolve_execution_backend("unsupported") -def test_load_platform_runtime_settings_reads_crisis_alert_email_config(monkeypatch): +def test_load_platform_runtime_settings_reads_strategy_plugin_alert_email_config(monkeypatch): monkeypatch.setenv("RUNTIME_TARGET_JSON", runtime_target_json(SAMPLE_STRATEGY_PROFILE)) monkeypatch.setenv("ACCOUNT_GROUP", "paper") monkeypatch.setenv("IB_ACCOUNT_GROUP_CONFIG_JSON", MINIMAL_GROUP_JSON) - monkeypatch.setenv("CRISIS_ALERT_EMAIL_RECIPIENTS", "alerts@example.com; voice@example.com") - monkeypatch.setenv("CRISIS_ALERT_EMAIL_SENDER_EMAIL", "sender@example.com") - monkeypatch.setenv("CRISIS_ALERT_EMAIL_SENDER_PASSWORD", "secret") - monkeypatch.setenv("CRISIS_ALERT_EMAIL_SMTP_HOST", "smtp.example.com") - monkeypatch.setenv("CRISIS_ALERT_EMAIL_SMTP_PORT", "587") - monkeypatch.setenv("CRISIS_ALERT_EMAIL_SMTP_SECURITY", "starttls") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_EMAIL_RECIPIENTS", "alerts@example.com; voice@example.com") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_EMAIL", "sender@example.com") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD", "secret") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_HOST", "smtp.example.com") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_PORT", "587") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_EMAIL_SMTP_SECURITY", "starttls") settings = load_platform_runtime_settings(project_id_resolver=lambda: "project-1") - assert settings.crisis_alert_email_recipients == ("alerts@example.com", "voice@example.com") - assert settings.crisis_alert_email_sender_email == "sender@example.com" - assert settings.crisis_alert_email_sender_password == "secret" - assert settings.crisis_alert_email_smtp_host == "smtp.example.com" - assert settings.crisis_alert_email_smtp_port == "587" - assert settings.crisis_alert_email_smtp_security == "starttls" + assert settings.strategy_plugin_alert_email_recipients == ("alerts@example.com", "voice@example.com") + assert settings.strategy_plugin_alert_email_sender_email == "sender@example.com" + assert settings.strategy_plugin_alert_email_sender_password == "secret" + assert settings.strategy_plugin_alert_email_smtp_host == "smtp.example.com" + assert settings.strategy_plugin_alert_email_smtp_port == "587" + assert settings.strategy_plugin_alert_email_smtp_security == "starttls" -def test_load_platform_runtime_settings_reads_crisis_alert_sms_config(monkeypatch): +def test_load_platform_runtime_settings_reads_strategy_plugin_alert_sms_config(monkeypatch): monkeypatch.setenv("RUNTIME_TARGET_JSON", runtime_target_json(SAMPLE_STRATEGY_PROFILE)) monkeypatch.setenv("ACCOUNT_GROUP", "paper") monkeypatch.setenv("IB_ACCOUNT_GROUP_CONFIG_JSON", MINIMAL_GROUP_JSON) - monkeypatch.setenv("CRISIS_ALERT_SMS_RECIPIENTS", "+15165480265;(516) 548-0265") - monkeypatch.setenv("CRISIS_ALERT_SMS_PROVIDER", "twilio") - monkeypatch.setenv("CRISIS_ALERT_SMS_ACCOUNT_ID", "AC123") - monkeypatch.setenv("CRISIS_ALERT_SMS_AUTH_TOKEN", "secret") - monkeypatch.setenv("CRISIS_ALERT_SMS_SENDER", "+15551234567") - monkeypatch.setenv("CRISIS_ALERT_SMS_MESSAGING_SERVICE_ID", "MG123") - monkeypatch.setenv("CRISIS_ALERT_SMS_API_BASE_URL", "https://twilio.example.test") - monkeypatch.setenv("CRISIS_ALERT_SMS_BODY_MAX_CHARS", "160") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_SMS_RECIPIENTS", "+15165480265;(516) 548-0265") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_SMS_PROVIDER", "twilio") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_SMS_ACCOUNT_ID", "AC123") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_SMS_AUTH_TOKEN", "secret") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_SMS_SENDER", "+15551234567") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_SMS_MESSAGING_SERVICE_ID", "MG123") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_SMS_API_BASE_URL", "https://twilio.example.test") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_SMS_BODY_MAX_CHARS", "160") settings = load_platform_runtime_settings(project_id_resolver=lambda: "project-1") - assert settings.crisis_alert_sms_recipients == ("+15165480265", "(516) 548-0265") - assert settings.crisis_alert_sms_provider == "twilio" - assert settings.crisis_alert_sms_account_id == "AC123" - assert settings.crisis_alert_sms_auth_token == "secret" - assert settings.crisis_alert_sms_sender == "+15551234567" - assert settings.crisis_alert_sms_messaging_service_id == "MG123" - assert settings.crisis_alert_sms_api_base_url == "https://twilio.example.test" - assert settings.crisis_alert_sms_body_max_chars == "160" + assert settings.strategy_plugin_alert_sms_recipients == ("+15165480265", "(516) 548-0265") + assert settings.strategy_plugin_alert_sms_provider == "twilio" + assert settings.strategy_plugin_alert_sms_account_id == "AC123" + assert settings.strategy_plugin_alert_sms_auth_token == "secret" + assert settings.strategy_plugin_alert_sms_sender == "+15551234567" + assert settings.strategy_plugin_alert_sms_messaging_service_id == "MG123" + assert settings.strategy_plugin_alert_sms_api_base_url == "https://twilio.example.test" + assert settings.strategy_plugin_alert_sms_body_max_chars == "160" -def test_load_platform_runtime_settings_reads_crisis_alert_channels_and_push_config(monkeypatch): +def test_load_platform_runtime_settings_reads_strategy_plugin_alert_channels_and_push_config(monkeypatch): monkeypatch.setenv("RUNTIME_TARGET_JSON", runtime_target_json(SAMPLE_STRATEGY_PROFILE)) monkeypatch.setenv("ACCOUNT_GROUP", "paper") monkeypatch.setenv("IB_ACCOUNT_GROUP_CONFIG_JSON", MINIMAL_GROUP_JSON) - monkeypatch.setenv("CRISIS_ALERT_CHANNELS", "email;push;telegram") - monkeypatch.setenv("CRISIS_ALERT_PUSH_RECIPIENTS", "risk-topic; backup-topic") - monkeypatch.setenv("CRISIS_ALERT_PUSH_PROVIDER", "ntfy") - monkeypatch.setenv("CRISIS_ALERT_PUSH_APP_TOKEN", "app-token") - monkeypatch.setenv("CRISIS_ALERT_PUSH_ACCESS_TOKEN", "access-token") - monkeypatch.setenv("CRISIS_ALERT_PUSH_API_BASE_URL", "https://ntfy.example.test") - monkeypatch.setenv("CRISIS_ALERT_PUSH_DEVICE", "iphone") - monkeypatch.setenv("CRISIS_ALERT_PUSH_PRIORITY", "5") - monkeypatch.setenv("CRISIS_ALERT_PUSH_TAGS", "warning") - monkeypatch.setenv("CRISIS_ALERT_PUSH_BODY_MAX_CHARS", "300") - monkeypatch.setenv("CRISIS_ALERT_TELEGRAM_CHAT_IDS", "12345; @risk_channel") - monkeypatch.setenv("CRISIS_ALERT_TELEGRAM_BOT_TOKEN", "telegram-token") - monkeypatch.setenv("CRISIS_ALERT_TELEGRAM_API_BASE_URL", "https://telegram.example.test") - monkeypatch.setenv("CRISIS_ALERT_TELEGRAM_PARSE_MODE", "HTML") - monkeypatch.setenv("CRISIS_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW", "false") - monkeypatch.setenv("CRISIS_ALERT_TELEGRAM_BODY_MAX_CHARS", "900") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_CHANNELS", "email;push;telegram") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_PUSH_RECIPIENTS", "risk-topic; backup-topic") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_PUSH_PROVIDER", "ntfy") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_PUSH_APP_TOKEN", "app-token") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_PUSH_ACCESS_TOKEN", "access-token") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_PUSH_API_BASE_URL", "https://ntfy.example.test") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_PUSH_DEVICE", "iphone") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_PUSH_PRIORITY", "5") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_PUSH_TAGS", "warning") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_PUSH_BODY_MAX_CHARS", "300") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS", "12345; @risk_channel") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN", "telegram-token") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_API_BASE_URL", "https://telegram.example.test") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_PARSE_MODE", "HTML") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_DISABLE_WEB_PAGE_PREVIEW", "false") + monkeypatch.setenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_BODY_MAX_CHARS", "900") settings = load_platform_runtime_settings(project_id_resolver=lambda: "project-1") - assert settings.crisis_alert_channels == ("email", "push", "telegram") - assert settings.crisis_alert_push_recipients == ("risk-topic", "backup-topic") - assert settings.crisis_alert_push_provider == "ntfy" - assert settings.crisis_alert_push_app_token == "app-token" - assert settings.crisis_alert_push_access_token == "access-token" - assert settings.crisis_alert_push_api_base_url == "https://ntfy.example.test" - assert settings.crisis_alert_push_device == "iphone" - assert settings.crisis_alert_push_priority == "5" - assert settings.crisis_alert_push_tags == "warning" - assert settings.crisis_alert_push_body_max_chars == "300" - assert settings.crisis_alert_telegram_chat_ids == ("12345", "@risk_channel") - assert settings.crisis_alert_telegram_bot_token == "telegram-token" - assert settings.crisis_alert_telegram_api_base_url == "https://telegram.example.test" - assert settings.crisis_alert_telegram_parse_mode == "HTML" - assert settings.crisis_alert_telegram_disable_web_page_preview == "false" - assert settings.crisis_alert_telegram_body_max_chars == "900" + assert settings.strategy_plugin_alert_channels == ("email", "push", "telegram") + assert settings.strategy_plugin_alert_push_recipients == ("risk-topic", "backup-topic") + assert settings.strategy_plugin_alert_push_provider == "ntfy" + assert settings.strategy_plugin_alert_push_app_token == "app-token" + assert settings.strategy_plugin_alert_push_access_token == "access-token" + assert settings.strategy_plugin_alert_push_api_base_url == "https://ntfy.example.test" + assert settings.strategy_plugin_alert_push_device == "iphone" + assert settings.strategy_plugin_alert_push_priority == "5" + assert settings.strategy_plugin_alert_push_tags == "warning" + assert settings.strategy_plugin_alert_push_body_max_chars == "300" + assert settings.strategy_plugin_alert_telegram_chat_ids == ("12345", "@risk_channel") + assert settings.strategy_plugin_alert_telegram_bot_token == "telegram-token" + assert settings.strategy_plugin_alert_telegram_api_base_url == "https://telegram.example.test" + assert settings.strategy_plugin_alert_telegram_parse_mode == "HTML" + assert settings.strategy_plugin_alert_telegram_disable_web_page_preview == "false" + assert settings.strategy_plugin_alert_telegram_body_max_chars == "900" def test_load_platform_runtime_settings_uses_whole_share_quantity_step(monkeypatch): diff --git a/tests/test_sync_cloud_run_env_workflow.sh b/tests/test_sync_cloud_run_env_workflow.sh index 9082005..07bfdfa 100644 --- a/tests/test_sync_cloud_run_env_workflow.sh +++ b/tests/test_sync_cloud_run_env_workflow.sh @@ -32,14 +32,14 @@ grep -Fq 'RUNTIME_TARGET_JSON: ${{ vars.RUNTIME_TARGET_JSON }}' "$workflow_file" grep -Fq 'ACCOUNT_GROUP: ${{ vars.ACCOUNT_GROUP }}' "$workflow_file" grep -Fq 'IB_ACCOUNT_GROUP_CONFIG_SECRET_NAME: ${{ vars.IB_ACCOUNT_GROUP_CONFIG_SECRET_NAME }}' "$workflow_file" grep -Fq 'IBKR_STRATEGY_PLUGIN_MOUNTS_JSON: ${{ vars.IBKR_STRATEGY_PLUGIN_MOUNTS_JSON }}' "$workflow_file" -grep -Fq 'CRISIS_ALERT_CHANNELS: ${{ vars.CRISIS_ALERT_CHANNELS }}' "$workflow_file" -grep -Fq 'CRISIS_ALERT_EMAIL_RECIPIENTS: ${{ vars.CRISIS_ALERT_EMAIL_RECIPIENTS }}' "$workflow_file" -grep -Fq 'CRISIS_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME: ${{ vars.CRISIS_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME }}' "$workflow_file" -grep -Fq 'CRISIS_ALERT_TELEGRAM_CHAT_IDS: ${{ vars.CRISIS_ALERT_TELEGRAM_CHAT_IDS }}' "$workflow_file" -grep -Fq 'CRISIS_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME: ${{ vars.CRISIS_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME }}' "$workflow_file" +grep -Fq 'STRATEGY_PLUGIN_ALERT_CHANNELS: ${{ vars.STRATEGY_PLUGIN_ALERT_CHANNELS }}' "$workflow_file" +grep -Fq 'STRATEGY_PLUGIN_ALERT_EMAIL_RECIPIENTS: ${{ vars.STRATEGY_PLUGIN_ALERT_EMAIL_RECIPIENTS }}' "$workflow_file" +grep -Fq 'STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME: ${{ vars.STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME }}' "$workflow_file" +grep -Fq 'STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS: ${{ vars.STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS }}' "$workflow_file" +grep -Fq 'STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME: ${{ vars.STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME }}' "$workflow_file" grep -Fq 'TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}' "$workflow_file" -grep -Fq 'CRISIS_ALERT_EMAIL_SENDER_PASSWORD: ${{ secrets.CRISIS_ALERT_EMAIL_SENDER_PASSWORD }}' "$workflow_file" -grep -Fq 'CRISIS_ALERT_TELEGRAM_BOT_TOKEN: ${{ secrets.CRISIS_ALERT_TELEGRAM_BOT_TOKEN }}' "$workflow_file" +grep -Fq 'STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD: ${{ secrets.STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD }}' "$workflow_file" +grep -Fq 'STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN: ${{ secrets.STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN }}' "$workflow_file" grep -Fq 'Skipping Cloud Run automation because ENABLE_GITHUB_CLOUD_RUN_DEPLOY and ENABLE_GITHUB_ENV_SYNC are not true.' "$workflow_file" grep -Fq 'Skipping Cloud Run automation on push because ENABLE_MAIN_PUSH_CLOUD_RUN_AUTOMATION is not true.' "$workflow_file" @@ -63,12 +63,12 @@ grep -Fq 'shared_secret_pairs=()' "$workflow_file" grep -Fq 'shared_remove_env_vars=(' "$workflow_file" grep -Fq 'shared_remove_secret_vars=(' "$workflow_file" grep -Fq 'shared_secret_pairs+=("TELEGRAM_TOKEN=${TELEGRAM_TOKEN_SECRET_NAME}:latest")' "$workflow_file" -grep -Fq 'shared_secret_pairs+=("CRISIS_ALERT_EMAIL_SENDER_PASSWORD=${CRISIS_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME}:latest")' "$workflow_file" -grep -Fq 'shared_secret_pairs+=("CRISIS_ALERT_TELEGRAM_BOT_TOKEN=${CRISIS_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME}:latest")' "$workflow_file" -grep -Fq 'shared_env_pairs+=("CRISIS_ALERT_CHANNELS=${CRISIS_ALERT_CHANNELS}")' "$workflow_file" -grep -Fq 'shared_remove_env_vars+=("CRISIS_ALERT_CHANNELS")' "$workflow_file" -grep -Fq 'shared_env_pairs+=("CRISIS_ALERT_TELEGRAM_CHAT_IDS=${CRISIS_ALERT_TELEGRAM_CHAT_IDS}")' "$workflow_file" -grep -Fq 'shared_remove_env_vars+=("CRISIS_ALERT_TELEGRAM_BOT_TOKEN")' "$workflow_file" +grep -Fq 'shared_secret_pairs+=("STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD=${STRATEGY_PLUGIN_ALERT_EMAIL_SENDER_PASSWORD_SECRET_NAME}:latest")' "$workflow_file" +grep -Fq 'shared_secret_pairs+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN=${STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN_SECRET_NAME}:latest")' "$workflow_file" +grep -Fq 'shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_CHANNELS=${STRATEGY_PLUGIN_ALERT_CHANNELS}")' "$workflow_file" +grep -Fq 'shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_CHANNELS")' "$workflow_file" +grep -Fq 'shared_env_pairs+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS=${STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS}")' "$workflow_file" +grep -Fq 'shared_remove_env_vars+=("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN")' "$workflow_file" grep -Fq 'mapfile -t target_env_pairs < <(emit_target_env_pairs "${target_index}")' "$workflow_file" grep -Fq 'mapfile -t target_remove_env_vars < <(emit_target_remove_env_vars "${target_index}")' "$workflow_file" grep -Fq 'env_pairs=("${target_env_pairs[@]}" "${shared_env_pairs[@]}")' "$workflow_file"