From e95f2aa487a075060e0f02255626b1d9111e83a0 Mon Sep 17 00:00:00 2001 From: Pigbibi <20649888+Pigbibi@users.noreply.github.com> Date: Tue, 30 Jun 2026 23:22:59 +0800 Subject: [PATCH] feat: add QSL_ prefix support for shared environment variables Add QSL_ prefixed variants for all cross-platform env vars with backward-compatible fallback to unprefixed names. Pattern: QSL_{NAME} first, then {NAME} for backward compatibility. Affected vars: DRY_RUN_ONLY, NOTIFY_LANG, GLOBAL_TELEGRAM_CHAT_ID, STRATEGY_PLUGIN_MOUNTS_JSON, STRATEGY_PLUGIN_ALERT_*, etc. Also adds QSL_ENABLE_CLOUD_RUN_AUTOMATION. Co-Authored-By: Claude --- .env.example | 6 ++++++ .github/workflows/sync-cloud-run-env.yml | 3 +++ runtime_config_support.py | 8 +++++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index eddbfd3..39ba181 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,7 @@ # Interactive Brokers Platform - Required Environment Variables # ── Runtime Target (REQUIRED) ── +# 优先使用 QSL_RUNTIME_TARGET_JSON(跨平台共享),否则使用 RUNTIME_TARGET_JSON RUNTIME_TARGET_JSON={"platform_id":"interactive_brokers","strategy_profile":"global_etf_rotation","execution_mode":"live","account_scope":"paper","dry_run_only":true} # ── IBKR Connection ── @@ -13,9 +14,13 @@ IB_CLIENT_ID=1 IB_CONNECT_TIMEOUT_SECONDS=60 # ── Notification ── +# QSL_GLOBAL_TELEGRAM_CHAT_ID 和 QSL_NOTIFY_LANG 是跨平台共享的 QSL_ 前缀变量, +# 设置后会覆盖 GLOBAL_TELEGRAM_CHAT_ID 和 NOTIFY_LANG。 TELEGRAM_TOKEN= GLOBAL_TELEGRAM_CHAT_ID= +QSL_GLOBAL_TELEGRAM_CHAT_ID= NOTIFY_LANG=zh +QSL_NOTIFY_LANG= # ── Execution Control ── IBKR_DRY_RUN_ONLY=false @@ -24,3 +29,4 @@ IBKR_FORCE_RUN=false # ── Execution Report ── EXECUTION_REPORT_OUTPUT_DIR=/tmp/quant_runtime_reports EXECUTION_REPORT_GCS_URI=gs://qsl-runtime-logs-shared/execution-reports +QSL_EXECUTION_REPORT_GCS_URI= diff --git a/.github/workflows/sync-cloud-run-env.yml b/.github/workflows/sync-cloud-run-env.yml index d358935..b654e86 100644 --- a/.github/workflows/sync-cloud-run-env.yml +++ b/.github/workflows/sync-cloud-run-env.yml @@ -76,6 +76,7 @@ jobs: ENABLE_GITHUB_CLOUD_RUN_DEPLOY: ${{ vars.ENABLE_GITHUB_CLOUD_RUN_DEPLOY }} ENABLE_GITHUB_ENV_SYNC: ${{ vars.ENABLE_GITHUB_ENV_SYNC }} ENABLE_MAIN_PUSH_CLOUD_RUN_AUTOMATION: ${{ vars.ENABLE_MAIN_PUSH_CLOUD_RUN_AUTOMATION }} + QSL_ENABLE_CLOUD_RUN_AUTOMATION: ${{ vars.QSL_ENABLE_CLOUD_RUN_AUTOMATION }} WORKFLOW_TARGET: ${{ inputs.target || 'configured' }} INPUT_CLOUD_RUN_REGION: ${{ inputs.cloud_run_region }} INPUT_CLOUD_RUN_SERVICE: ${{ inputs.cloud_run_service }} @@ -191,6 +192,8 @@ jobs: deploy_enabled=false env_sync_enabled=false + # QSL_ENABLE_CLOUD_RUN_AUTOMATION overrides ENABLE_MAIN_PUSH_CLOUD_RUN_AUTOMATION + ENABLE_MAIN_PUSH_CLOUD_RUN_AUTOMATION="${QSL_ENABLE_CLOUD_RUN_AUTOMATION:-$ENABLE_MAIN_PUSH_CLOUD_RUN_AUTOMATION}" if [ "${GITHUB_EVENT_NAME:-}" = "push" ] && [ "${ENABLE_MAIN_PUSH_CLOUD_RUN_AUTOMATION:-}" != "true" ]; then write_github_output \ "deploy_enabled=false" \ diff --git a/runtime_config_support.py b/runtime_config_support.py index 96270ea..cd2d922 100644 --- a/runtime_config_support.py +++ b/runtime_config_support.py @@ -486,10 +486,11 @@ def load_platform_runtime_settings( service_name=group_config.service_name, account_ids=group_config.account_ids, tg_token=os.getenv("TELEGRAM_TOKEN"), - tg_chat_id=os.getenv("GLOBAL_TELEGRAM_CHAT_ID"), - notify_lang=os.getenv("NOTIFY_LANG", "en"), + tg_chat_id=os.getenv("QSL_GLOBAL_TELEGRAM_CHAT_ID") or os.getenv("GLOBAL_TELEGRAM_CHAT_ID"), + notify_lang=os.getenv("QSL_NOTIFY_LANG") or os.getenv("NOTIFY_LANG", "en"), strategy_plugin_mounts_json=( os.getenv("IBKR_STRATEGY_PLUGIN_MOUNTS_JSON") + or os.getenv("QSL_STRATEGY_PLUGIN_MOUNTS_JSON") or os.getenv("STRATEGY_PLUGIN_MOUNTS_JSON") ), quantconnect_project_id=group_config.quantconnect_project_id, @@ -572,7 +573,8 @@ def load_platform_runtime_settings( "STRATEGY_PLUGIN_ALERT_TELEGRAM_CHAT_IDS" ), strategy_plugin_alert_telegram_bot_token=first_non_empty( - os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN") + os.getenv("QSL_STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN") + or os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_BOT_TOKEN") ), strategy_plugin_alert_telegram_api_base_url=first_non_empty( os.getenv("STRATEGY_PLUGIN_ALERT_TELEGRAM_API_BASE_URL")