44 push :
55 branches : [ main ]
66 workflow_dispatch :
7+ inputs :
8+ target :
9+ description : " Deployment target to run. Use hk-verify for an isolated HK dry-run Cloud Run service."
10+ required : true
11+ type : choice
12+ default : configured
13+ options :
14+ - configured
15+ - hk-verify
16+ cloud_run_region :
17+ description : " Cloud Run region for hk-verify. Leave blank to use repository/environment variables."
18+ required : false
19+ type : string
20+ cloud_run_service :
21+ description : " Cloud Run service for hk-verify."
22+ required : false
23+ type : string
24+ default : interactive-brokers-hk-verify-service
25+ account_group :
26+ description : " IBKR account-group selector for hk-verify."
27+ required : false
28+ type : string
29+ default : hk-verify
30+ account_group_config_secret_name :
31+ description : " Optional Secret Manager secret name for the IBKR account-group config."
32+ required : false
33+ type : string
34+ deploy_image :
35+ description : " Build and deploy the container image for hk-verify."
36+ required : true
37+ type : boolean
38+ default : true
39+ sync_env :
40+ description : " Sync hk-verify Cloud Run environment variables."
41+ required : true
42+ type : boolean
43+ default : true
744
845env :
946 GCP_PROJECT_ID : interactivebrokersquant
2360 ENABLE_GITHUB_CLOUD_RUN_DEPLOY : ${{ vars.ENABLE_GITHUB_CLOUD_RUN_DEPLOY }}
2461 ENABLE_GITHUB_ENV_SYNC : ${{ vars.ENABLE_GITHUB_ENV_SYNC }}
2562 ENABLE_MAIN_PUSH_CLOUD_RUN_AUTOMATION : ${{ vars.ENABLE_MAIN_PUSH_CLOUD_RUN_AUTOMATION }}
63+ WORKFLOW_TARGET : ${{ inputs.target || 'configured' }}
64+ INPUT_CLOUD_RUN_REGION : ${{ inputs.cloud_run_region }}
65+ INPUT_CLOUD_RUN_SERVICE : ${{ inputs.cloud_run_service }}
66+ INPUT_ACCOUNT_GROUP : ${{ inputs.account_group }}
67+ INPUT_ACCOUNT_GROUP_CONFIG_SECRET_NAME : ${{ inputs.account_group_config_secret_name }}
68+ INPUT_DEPLOY_IMAGE : ${{ inputs.deploy_image }}
69+ INPUT_SYNC_ENV : ${{ inputs.sync_env }}
2670 GCP_ARTIFACT_REGISTRY_HOSTNAME : ${{ vars.GCP_ARTIFACT_REGISTRY_HOSTNAME }}
2771 CLOUD_RUN_REGION : ${{ vars.CLOUD_RUN_REGION }}
2872 CLOUD_RUN_SERVICE : ${{ vars.CLOUD_RUN_SERVICE }}
@@ -108,12 +152,21 @@ jobs:
108152 exit 0
109153 fi
110154
111- if [ "${ENABLE_GITHUB_CLOUD_RUN_DEPLOY:-}" = "true" ]; then
112- deploy_enabled=true
113- fi
155+ if [ "${GITHUB_EVENT_NAME:-}" = "workflow_dispatch" ] && [ "${WORKFLOW_TARGET:-configured}" = "hk-verify" ]; then
156+ if [ "${INPUT_DEPLOY_IMAGE:-true}" = "true" ]; then
157+ deploy_enabled=true
158+ fi
159+ if [ "${INPUT_SYNC_ENV:-true}" = "true" ]; then
160+ env_sync_enabled=true
161+ fi
162+ else
163+ if [ "${ENABLE_GITHUB_CLOUD_RUN_DEPLOY:-}" = "true" ]; then
164+ deploy_enabled=true
165+ fi
114166
115- if [ "${ENABLE_GITHUB_ENV_SYNC:-}" = "true" ]; then
116- env_sync_enabled=true
167+ if [ "${ENABLE_GITHUB_ENV_SYNC:-}" = "true" ]; then
168+ env_sync_enabled=true
169+ fi
117170 fi
118171
119172 echo "deploy_enabled=${deploy_enabled}" >> "$GITHUB_OUTPUT"
@@ -131,6 +184,60 @@ jobs:
131184 if : steps.config.outputs.enabled == 'true'
132185 uses : actions/checkout@v6
133186
187+ - name : Apply HK verify-only dispatch defaults
188+ if : steps.config.outputs.enabled == 'true' && github.event_name == 'workflow_dispatch' && inputs.target == 'hk-verify'
189+ run : |
190+ set -euo pipefail
191+
192+ service="${INPUT_CLOUD_RUN_SERVICE:-interactive-brokers-hk-verify-service}"
193+ account_group="${INPUT_ACCOUNT_GROUP:-hk-verify}"
194+ region="${INPUT_CLOUD_RUN_REGION:-${CLOUD_RUN_REGION:-}}"
195+ runtime_target="$(SERVICE="${service}" ACCOUNT_GROUP_VALUE="${account_group}" python3 - <<'PY'
196+ import json
197+ import os
198+
199+ print(
200+ json.dumps(
201+ {
202+ "platform_id": "ibkr",
203+ "strategy_profile": "hk_listed_global_etf_rotation",
204+ "deployment_selector": os.environ["ACCOUNT_GROUP_VALUE"],
205+ "account_scope": os.environ["ACCOUNT_GROUP_VALUE"],
206+ "execution_mode": "paper",
207+ "dry_run_only": True,
208+ "service_name": os.environ["SERVICE"],
209+ },
210+ separators=(",", ":"),
211+ )
212+ )
213+ PY
214+ )"
215+
216+ {
217+ echo "CLOUD_RUN_SERVICE=${service}"
218+ echo "CLOUD_RUN_SERVICES="
219+ echo "CLOUD_RUN_SERVICE_TARGETS_JSON="
220+ echo "ACCOUNT_GROUP=${account_group}"
221+ echo "RUNTIME_TARGET_JSON=${runtime_target}"
222+ echo "IBKR_DRY_RUN_ONLY=true"
223+ echo "IBKR_MARKET=HK"
224+ echo "IBKR_MARKET_CALENDAR=XHKG"
225+ echo "IBKR_MARKET_CURRENCY=HKD"
226+ echo "IBKR_MARKET_DATA_SYMBOL_SUFFIX=.HK"
227+ echo "IBKR_MARKET_EXCHANGE=SEHK"
228+ echo "IBKR_MARKET_TIMEZONE=Asia/Hong_Kong"
229+ } >> "$GITHUB_ENV"
230+
231+ if [ -n "${region}" ]; then
232+ echo "CLOUD_RUN_REGION=${region}" >> "$GITHUB_ENV"
233+ fi
234+ if [ -n "${INPUT_ACCOUNT_GROUP_CONFIG_SECRET_NAME:-}" ]; then
235+ echo "IB_ACCOUNT_GROUP_CONFIG_SECRET_NAME=${INPUT_ACCOUNT_GROUP_CONFIG_SECRET_NAME}" >> "$GITHUB_ENV"
236+ fi
237+ if [ "${INPUT_DEPLOY_IMAGE:-true}" != "true" ]; then
238+ echo "CLOUD_RUN_ENV_SYNC_WAIT_FOR_COMMIT=false" >> "$GITHUB_ENV"
239+ fi
240+
134241 - name : Set up Python for strategy requirement resolution
135242 if : steps.config.outputs.env_sync_enabled == 'true'
136243 uses : actions/setup-python@v6
0 commit comments