Skip to content

Commit 3923bae

Browse files
committed
Switch LongBridge runtime secrets to Secret Manager refs
1 parent 7cf72d8 commit 3923bae

File tree

3 files changed

+190
-30
lines changed

3 files changed

+190
-30
lines changed

.github/workflows/sync-cloud-run-env.yml

Lines changed: 140 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ jobs:
1616
CLOUD_RUN_SERVICE: ${{ vars.CLOUD_RUN_SERVICE }}
1717
ACCOUNT_PREFIX: ${{ vars.ACCOUNT_PREFIX }}
1818
SERVICE_NAME: ${{ vars.SERVICE_NAME }}
19+
TELEGRAM_TOKEN_SECRET_NAME: ${{ vars.TELEGRAM_TOKEN_SECRET_NAME }}
20+
LONGPORT_APP_KEY_SECRET_NAME: ${{ vars.LONGPORT_APP_KEY_SECRET_NAME }}
21+
LONGPORT_APP_SECRET_SECRET_NAME: ${{ vars.LONGPORT_APP_SECRET_SECRET_NAME }}
1922
STRATEGY_PROFILE: ${{ vars.STRATEGY_PROFILE || 'semiconductor_rotation_income' }}
2023
ACCOUNT_REGION: ${{ vars.ACCOUNT_REGION || 'HK' }}
2124
LONGPORT_SECRET_NAME: ${{ vars.LONGPORT_SECRET_NAME }}
@@ -46,9 +49,6 @@ jobs:
4649
NOTIFY_LANG
4750
GLOBAL_TELEGRAM_CHAT_ID
4851
GCP_SA_KEY
49-
TELEGRAM_TOKEN
50-
LONGPORT_APP_KEY
51-
LONGPORT_APP_SECRET
5252
)
5353
5454
missing_vars=()
@@ -58,6 +58,18 @@ jobs:
5858
fi
5959
done
6060
61+
if [ -z "${TELEGRAM_TOKEN_SECRET_NAME:-}" ] && [ -z "${TELEGRAM_TOKEN:-}" ]; then
62+
missing_vars+=("TELEGRAM_TOKEN_SECRET_NAME or TELEGRAM_TOKEN")
63+
fi
64+
65+
if [ -z "${LONGPORT_APP_KEY_SECRET_NAME:-}" ] && [ -z "${LONGPORT_APP_KEY:-}" ]; then
66+
missing_vars+=("LONGPORT_APP_KEY_SECRET_NAME or LONGPORT_APP_KEY")
67+
fi
68+
69+
if [ -z "${LONGPORT_APP_SECRET_SECRET_NAME:-}" ] && [ -z "${LONGPORT_APP_SECRET:-}" ]; then
70+
missing_vars+=("LONGPORT_APP_SECRET_SECRET_NAME or LONGPORT_APP_SECRET")
71+
fi
72+
6173
if [ "${#missing_vars[@]}" -gt 0 ]; then
6274
echo "enabled=false" >> "$GITHUB_OUTPUT"
6375
echo "HK Cloud Run env sync is enabled, but these values are missing:" >&2
@@ -87,10 +99,61 @@ jobs:
8799
run: |
88100
set -euo pipefail
89101
90-
gcloud run services update "${CLOUD_RUN_SERVICE}" \
91-
--region "${CLOUD_RUN_REGION}" \
92-
--remove-env-vars "TELEGRAM_CHAT_ID" \
93-
--update-env-vars "TELEGRAM_TOKEN=${TELEGRAM_TOKEN},GLOBAL_TELEGRAM_CHAT_ID=${GLOBAL_TELEGRAM_CHAT_ID},NOTIFY_LANG=${NOTIFY_LANG},LONGPORT_APP_KEY=${LONGPORT_APP_KEY},LONGPORT_APP_SECRET=${LONGPORT_APP_SECRET},LONGPORT_SECRET_NAME=${LONGPORT_SECRET_NAME},ACCOUNT_PREFIX=${ACCOUNT_PREFIX},SERVICE_NAME=${SERVICE_NAME},STRATEGY_PROFILE=${STRATEGY_PROFILE},ACCOUNT_REGION=${ACCOUNT_REGION}"
102+
env_pairs=(
103+
"GLOBAL_TELEGRAM_CHAT_ID=${GLOBAL_TELEGRAM_CHAT_ID}"
104+
"NOTIFY_LANG=${NOTIFY_LANG}"
105+
"LONGPORT_SECRET_NAME=${LONGPORT_SECRET_NAME}"
106+
"ACCOUNT_PREFIX=${ACCOUNT_PREFIX}"
107+
"SERVICE_NAME=${SERVICE_NAME}"
108+
"STRATEGY_PROFILE=${STRATEGY_PROFILE}"
109+
"ACCOUNT_REGION=${ACCOUNT_REGION}"
110+
)
111+
secret_pairs=()
112+
remove_env_vars=(
113+
"TELEGRAM_CHAT_ID"
114+
)
115+
remove_secret_vars=()
116+
117+
if [ -n "${TELEGRAM_TOKEN_SECRET_NAME:-}" ]; then
118+
secret_pairs+=("TELEGRAM_TOKEN=${TELEGRAM_TOKEN_SECRET_NAME}:latest")
119+
remove_env_vars+=("TELEGRAM_TOKEN")
120+
else
121+
env_pairs+=("TELEGRAM_TOKEN=${TELEGRAM_TOKEN}")
122+
remove_secret_vars+=("TELEGRAM_TOKEN")
123+
fi
124+
125+
if [ -n "${LONGPORT_APP_KEY_SECRET_NAME:-}" ]; then
126+
secret_pairs+=("LONGPORT_APP_KEY=${LONGPORT_APP_KEY_SECRET_NAME}:latest")
127+
remove_env_vars+=("LONGPORT_APP_KEY")
128+
else
129+
env_pairs+=("LONGPORT_APP_KEY=${LONGPORT_APP_KEY}")
130+
remove_secret_vars+=("LONGPORT_APP_KEY")
131+
fi
132+
133+
if [ -n "${LONGPORT_APP_SECRET_SECRET_NAME:-}" ]; then
134+
secret_pairs+=("LONGPORT_APP_SECRET=${LONGPORT_APP_SECRET_SECRET_NAME}:latest")
135+
remove_env_vars+=("LONGPORT_APP_SECRET")
136+
else
137+
env_pairs+=("LONGPORT_APP_SECRET=${LONGPORT_APP_SECRET}")
138+
remove_secret_vars+=("LONGPORT_APP_SECRET")
139+
fi
140+
141+
gcloud_args=(
142+
run services update "${CLOUD_RUN_SERVICE}"
143+
--region "${CLOUD_RUN_REGION}"
144+
--remove-env-vars "$(IFS=,; echo "${remove_env_vars[*]}")"
145+
--update-env-vars "$(IFS=,; echo "${env_pairs[*]}")"
146+
)
147+
148+
if [ "${#remove_secret_vars[@]}" -gt 0 ]; then
149+
gcloud_args+=(--remove-secrets "$(IFS=,; echo "${remove_secret_vars[*]}")")
150+
fi
151+
152+
if [ "${#secret_pairs[@]}" -gt 0 ]; then
153+
gcloud_args+=(--update-secrets "$(IFS=,; echo "${secret_pairs[*]}")")
154+
fi
155+
156+
gcloud "${gcloud_args[@]}"
94157
95158
sync-sg:
96159
name: Sync SG Cloud Run Env
@@ -103,6 +166,9 @@ jobs:
103166
CLOUD_RUN_SERVICE: ${{ vars.CLOUD_RUN_SERVICE }}
104167
ACCOUNT_PREFIX: ${{ vars.ACCOUNT_PREFIX }}
105168
SERVICE_NAME: ${{ vars.SERVICE_NAME }}
169+
TELEGRAM_TOKEN_SECRET_NAME: ${{ vars.TELEGRAM_TOKEN_SECRET_NAME }}
170+
LONGPORT_APP_KEY_SECRET_NAME: ${{ vars.LONGPORT_APP_KEY_SECRET_NAME }}
171+
LONGPORT_APP_SECRET_SECRET_NAME: ${{ vars.LONGPORT_APP_SECRET_SECRET_NAME }}
106172
STRATEGY_PROFILE: ${{ vars.STRATEGY_PROFILE || 'semiconductor_rotation_income' }}
107173
ACCOUNT_REGION: ${{ vars.ACCOUNT_REGION || 'SG' }}
108174
LONGPORT_SECRET_NAME: ${{ vars.LONGPORT_SECRET_NAME }}
@@ -133,9 +199,6 @@ jobs:
133199
NOTIFY_LANG
134200
GLOBAL_TELEGRAM_CHAT_ID
135201
GCP_SA_KEY
136-
TELEGRAM_TOKEN
137-
LONGPORT_APP_KEY
138-
LONGPORT_APP_SECRET
139202
)
140203
141204
missing_vars=()
@@ -145,6 +208,18 @@ jobs:
145208
fi
146209
done
147210
211+
if [ -z "${TELEGRAM_TOKEN_SECRET_NAME:-}" ] && [ -z "${TELEGRAM_TOKEN:-}" ]; then
212+
missing_vars+=("TELEGRAM_TOKEN_SECRET_NAME or TELEGRAM_TOKEN")
213+
fi
214+
215+
if [ -z "${LONGPORT_APP_KEY_SECRET_NAME:-}" ] && [ -z "${LONGPORT_APP_KEY:-}" ]; then
216+
missing_vars+=("LONGPORT_APP_KEY_SECRET_NAME or LONGPORT_APP_KEY")
217+
fi
218+
219+
if [ -z "${LONGPORT_APP_SECRET_SECRET_NAME:-}" ] && [ -z "${LONGPORT_APP_SECRET:-}" ]; then
220+
missing_vars+=("LONGPORT_APP_SECRET_SECRET_NAME or LONGPORT_APP_SECRET")
221+
fi
222+
148223
if [ "${#missing_vars[@]}" -gt 0 ]; then
149224
echo "enabled=false" >> "$GITHUB_OUTPUT"
150225
echo "SG Cloud Run env sync is enabled, but these values are missing:" >&2
@@ -174,7 +249,58 @@ jobs:
174249
run: |
175250
set -euo pipefail
176251
177-
gcloud run services update "${CLOUD_RUN_SERVICE}" \
178-
--region "${CLOUD_RUN_REGION}" \
179-
--remove-env-vars "TELEGRAM_CHAT_ID" \
180-
--update-env-vars "TELEGRAM_TOKEN=${TELEGRAM_TOKEN},GLOBAL_TELEGRAM_CHAT_ID=${GLOBAL_TELEGRAM_CHAT_ID},NOTIFY_LANG=${NOTIFY_LANG},LONGPORT_APP_KEY=${LONGPORT_APP_KEY},LONGPORT_APP_SECRET=${LONGPORT_APP_SECRET},LONGPORT_SECRET_NAME=${LONGPORT_SECRET_NAME},ACCOUNT_PREFIX=${ACCOUNT_PREFIX},SERVICE_NAME=${SERVICE_NAME},STRATEGY_PROFILE=${STRATEGY_PROFILE},ACCOUNT_REGION=${ACCOUNT_REGION}"
252+
env_pairs=(
253+
"GLOBAL_TELEGRAM_CHAT_ID=${GLOBAL_TELEGRAM_CHAT_ID}"
254+
"NOTIFY_LANG=${NOTIFY_LANG}"
255+
"LONGPORT_SECRET_NAME=${LONGPORT_SECRET_NAME}"
256+
"ACCOUNT_PREFIX=${ACCOUNT_PREFIX}"
257+
"SERVICE_NAME=${SERVICE_NAME}"
258+
"STRATEGY_PROFILE=${STRATEGY_PROFILE}"
259+
"ACCOUNT_REGION=${ACCOUNT_REGION}"
260+
)
261+
secret_pairs=()
262+
remove_env_vars=(
263+
"TELEGRAM_CHAT_ID"
264+
)
265+
remove_secret_vars=()
266+
267+
if [ -n "${TELEGRAM_TOKEN_SECRET_NAME:-}" ]; then
268+
secret_pairs+=("TELEGRAM_TOKEN=${TELEGRAM_TOKEN_SECRET_NAME}:latest")
269+
remove_env_vars+=("TELEGRAM_TOKEN")
270+
else
271+
env_pairs+=("TELEGRAM_TOKEN=${TELEGRAM_TOKEN}")
272+
remove_secret_vars+=("TELEGRAM_TOKEN")
273+
fi
274+
275+
if [ -n "${LONGPORT_APP_KEY_SECRET_NAME:-}" ]; then
276+
secret_pairs+=("LONGPORT_APP_KEY=${LONGPORT_APP_KEY_SECRET_NAME}:latest")
277+
remove_env_vars+=("LONGPORT_APP_KEY")
278+
else
279+
env_pairs+=("LONGPORT_APP_KEY=${LONGPORT_APP_KEY}")
280+
remove_secret_vars+=("LONGPORT_APP_KEY")
281+
fi
282+
283+
if [ -n "${LONGPORT_APP_SECRET_SECRET_NAME:-}" ]; then
284+
secret_pairs+=("LONGPORT_APP_SECRET=${LONGPORT_APP_SECRET_SECRET_NAME}:latest")
285+
remove_env_vars+=("LONGPORT_APP_SECRET")
286+
else
287+
env_pairs+=("LONGPORT_APP_SECRET=${LONGPORT_APP_SECRET}")
288+
remove_secret_vars+=("LONGPORT_APP_SECRET")
289+
fi
290+
291+
gcloud_args=(
292+
run services update "${CLOUD_RUN_SERVICE}"
293+
--region "${CLOUD_RUN_REGION}"
294+
--remove-env-vars "$(IFS=,; echo "${remove_env_vars[*]}")"
295+
--update-env-vars "$(IFS=,; echo "${env_pairs[*]}")"
296+
)
297+
298+
if [ "${#remove_secret_vars[@]}" -gt 0 ]; then
299+
gcloud_args+=(--remove-secrets "$(IFS=,; echo "${remove_secret_vars[*]}")")
300+
fi
301+
302+
if [ "${#secret_pairs[@]}" -gt 0 ]; then
303+
gcloud_args+=(--update-secrets "$(IFS=,; echo "${secret_pairs[*]}")")
304+
fi
305+
306+
gcloud "${gcloud_args[@]}"

README.md

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,10 @@ BOXX: $34,000.00 Cash: $10,000.00
7676

7777
| Variable | Required | Description |
7878
|----------|----------|-------------|
79-
| `TELEGRAM_TOKEN` | Yes | Bot token for alerts |
79+
| `TELEGRAM_TOKEN` | Yes | Bot token for alerts; recommended to inject from Secret Manager secret `longbridge-telegram-token` |
8080
| `GLOBAL_TELEGRAM_CHAT_ID` | Yes | Telegram chat or user ID used by this service. |
81-
| `LONGPORT_APP_KEY` | Yes | LongPort OpenAPI app key (for token refresh) |
82-
| `LONGPORT_APP_SECRET` | Yes | LongPort OpenAPI app secret (for token refresh) |
81+
| `LONGPORT_APP_KEY` | Yes | LongPort OpenAPI app key (for token refresh); recommended to inject from Secret Manager secret `longport-app-key` |
82+
| `LONGPORT_APP_SECRET` | Yes | LongPort OpenAPI app secret (for token refresh); recommended to inject from Secret Manager secret `longport-app-secret` |
8383
| `LONGPORT_SECRET_NAME` | No | Secret Manager secret name for LongPort token (default: `longport_token`) |
8484
| `ACCOUNT_PREFIX` | No | Alert/log prefix for account/environment (default: `DEFAULT`) |
8585
| `SERVICE_NAME` | No | Alert/log prefix for service identity (default: `longbridge-quant`) |
@@ -90,6 +90,14 @@ BOXX: $34,000.00 Cash: $10,000.00
9090

9191
Secret Manager must contain the secret named by `LONGPORT_SECRET_NAME` (default: `longport_token`), where the **latest version = active access token**. The app refreshes it when expiry is within 30 days.
9292

93+
Recommended shared runtime secrets in the `longbridgequant` project:
94+
95+
- `longbridge-telegram-token`
96+
- `longport-app-key`
97+
- `longport-app-secret`
98+
- `longport_token_hk`
99+
- `longport_token_sg`
100+
93101
### Multi-deployment isolation (HK/SG, etc.)
94102

95103
Deploy the same codebase as multiple Cloud Run services (e.g. `HK` and `SG`) by setting different values per service:
@@ -110,18 +118,21 @@ Recommended setup:
110118

111119
- **Repository Variables (shared):**
112120
- `ENABLE_GITHUB_ENV_SYNC` = `true`
121+
- `TELEGRAM_TOKEN_SECRET_NAME` (recommended: `longbridge-telegram-token`)
122+
- `LONGPORT_APP_KEY_SECRET_NAME` (recommended: `longport-app-key`)
123+
- `LONGPORT_APP_SECRET_SECRET_NAME` (recommended: `longport-app-secret`)
113124
- `STRATEGY_PROFILE` (recommended: `semiconductor_rotation_income`)
114125
- `NOTIFY_LANG`
115126
- `GLOBAL_TELEGRAM_CHAT_ID`
116127
- **Repository Secrets (shared):**
117128
- `GCP_SA_KEY`
118-
- `TELEGRAM_TOKEN`
129+
- Optional fallback only: `TELEGRAM_TOKEN`
119130
- **GitHub Environment: `longbridge-hk`**
120131
- Variables: `CLOUD_RUN_REGION`, `CLOUD_RUN_SERVICE`, `ACCOUNT_PREFIX`, `SERVICE_NAME`, `ACCOUNT_REGION`, `LONGPORT_SECRET_NAME`
121-
- Secrets: `LONGPORT_APP_KEY`, `LONGPORT_APP_SECRET`
132+
- Secrets: optional fallback only `LONGPORT_APP_KEY`, `LONGPORT_APP_SECRET`
122133
- **GitHub Environment: `longbridge-sg`**
123134
- Variables: `CLOUD_RUN_REGION`, `CLOUD_RUN_SERVICE`, `ACCOUNT_PREFIX`, `SERVICE_NAME`, `ACCOUNT_REGION`, `LONGPORT_SECRET_NAME`
124-
- Secrets: `LONGPORT_APP_KEY`, `LONGPORT_APP_SECRET`
135+
- Secrets: optional fallback only `LONGPORT_APP_KEY`, `LONGPORT_APP_SECRET`
125136

126137
On every push to `main`, the workflow updates both Cloud Run services with the shared and per-environment values above, and removes `TELEGRAM_CHAT_ID` from each Cloud Run service.
127138

@@ -130,7 +141,7 @@ Important:
130141
- Put `GCP_SA_KEY` in **repository secrets**, not only under a single Environment. Both `longbridge-hk` and `longbridge-sg` jobs need it.
131142
- `CLOUD_RUN_REGION` should be set on each GitHub Environment, not as one shared repository variable. This lets `HK` and `SG` live in different Cloud Run regions.
132143
- The workflow only becomes strict when `ENABLE_GITHUB_ENV_SYNC=true`. If this variable is unset, the sync job is skipped and the old Google Cloud Trigger-only setup keeps working. Once you set it to `true`, missing env-sync values become a hard failure so you do not get a false green deployment.
133-
- Here "shared" only means **shared inside this repository** between the `HK` and `SG` Cloud Run services. `GCP_SA_KEY`, `TELEGRAM_TOKEN`, and the LongPort secrets remain repository- or environment-specific; they are not meant to be a global secret set reused by unrelated quant repos.
144+
- Here "shared" only means **shared inside this repository** between the `HK` and `SG` Cloud Run services. `GCP_SA_KEY` remains repository-specific. The Telegram token and LongPort app credentials should live in Secret Manager and be referenced by the shared secret-name variables above; they are not meant to be a global secret set reused by unrelated quant repos.
134145
- If you want one cross-project shared layer across multiple quant repos, keep it small: `GLOBAL_TELEGRAM_CHAT_ID` and `NOTIFY_LANG` are reasonable; account credentials and deployment keys are not.
135146

136147
### Deployment unit and naming
@@ -233,10 +244,10 @@ BOXX: $34,000.00 现金: $10,000.00
233244

234245
| 变量 | 必需 | 说明 |
235246
|------|------|------|
236-
| `TELEGRAM_TOKEN` || Telegram 机器人 Token |
247+
| `TELEGRAM_TOKEN` || Telegram 机器人 Token;建议通过 Secret Manager 的 `longbridge-telegram-token` 注入 |
237248
| `GLOBAL_TELEGRAM_CHAT_ID` || 这个服务使用的 Telegram Chat ID。 |
238-
| `LONGPORT_APP_KEY` || LongPort OpenAPI 应用密钥(用于刷新 Token) |
239-
| `LONGPORT_APP_SECRET` || LongPort OpenAPI 应用密钥(用于刷新 Token) |
249+
| `LONGPORT_APP_KEY` || LongPort OpenAPI 应用密钥(用于刷新 Token);建议通过 Secret Manager 的 `longport-app-key` 注入 |
250+
| `LONGPORT_APP_SECRET` || LongPort OpenAPI 应用密钥(用于刷新 Token);建议通过 Secret Manager 的 `longport-app-secret` 注入 |
240251
| `LONGPORT_SECRET_NAME` || Secret Manager 中的密钥名称(默认: `longport_token`|
241252
| `ACCOUNT_PREFIX` || 通知/日志前缀,区分账户环境(默认: `DEFAULT`|
242253
| `SERVICE_NAME` || 通知/日志前缀,区分服务(默认: `longbridge-quant`|
@@ -247,6 +258,14 @@ BOXX: $34,000.00 现金: $10,000.00
247258

248259
Secret Manager 中需存在 `LONGPORT_SECRET_NAME` 指定的密钥(默认: `longport_token`),**最新版本 = 当前有效的 access token**。Token 到期前 30 天会自动刷新。
249260

261+
建议在 `longbridgequant` 项目里统一维护这些运行时 secret:
262+
263+
- `longbridge-telegram-token`
264+
- `longport-app-key`
265+
- `longport-app-secret`
266+
- `longport_token_hk`
267+
- `longport_token_sg`
268+
250269
### 多部署隔离(港区/新加坡等)
251270

252271
同一代码库可部署为多个 Cloud Run 服务(如 `HK``SG`),通过以下变量区分:
@@ -267,18 +286,21 @@ Secret Manager 中需存在 `LONGPORT_SECRET_NAME` 指定的密钥(默认: `lo
267286

268287
- **仓库级 Variables(共享):**
269288
- `ENABLE_GITHUB_ENV_SYNC` = `true`
289+
- `TELEGRAM_TOKEN_SECRET_NAME`(建议:`longbridge-telegram-token`
290+
- `LONGPORT_APP_KEY_SECRET_NAME`(建议:`longport-app-key`
291+
- `LONGPORT_APP_SECRET_SECRET_NAME`(建议:`longport-app-secret`
270292
- `STRATEGY_PROFILE`(建议设为 `semiconductor_rotation_income`
271293
- `NOTIFY_LANG`
272294
- `GLOBAL_TELEGRAM_CHAT_ID`
273295
- **仓库级 Secrets(共享):**
274296
- `GCP_SA_KEY`
275-
- `TELEGRAM_TOKEN`
297+
- 仅保留为 fallback:`TELEGRAM_TOKEN`
276298
- **GitHub Environment: `longbridge-hk`**
277299
- Variables: `CLOUD_RUN_REGION``CLOUD_RUN_SERVICE``ACCOUNT_PREFIX``SERVICE_NAME``ACCOUNT_REGION``LONGPORT_SECRET_NAME`
278-
- Secrets: `LONGPORT_APP_KEY``LONGPORT_APP_SECRET`
300+
- Secrets: 仅保留为 fallback:`LONGPORT_APP_KEY``LONGPORT_APP_SECRET`
279301
- **GitHub Environment: `longbridge-sg`**
280302
- Variables: `CLOUD_RUN_REGION``CLOUD_RUN_SERVICE``ACCOUNT_PREFIX``SERVICE_NAME``ACCOUNT_REGION``LONGPORT_SECRET_NAME`
281-
- Secrets: `LONGPORT_APP_KEY``LONGPORT_APP_SECRET`
303+
- Secrets: 仅保留为 fallback:`LONGPORT_APP_KEY``LONGPORT_APP_SECRET`
282304

283305
每次 push 到 `main` 时,这个 workflow 会分别更新两个 Cloud Run 服务,把共享和各自隔离的变量同步进去,并删除旧的 `TELEGRAM_CHAT_ID`
284306

@@ -287,7 +309,7 @@ Secret Manager 中需存在 `LONGPORT_SECRET_NAME` 指定的密钥(默认: `lo
287309
- `GCP_SA_KEY` 请放在**仓库级 Secret**,不要只放在某一个 Environment 里,因为 `longbridge-hk``longbridge-sg` 两个 job 都要用它。
288310
- `CLOUD_RUN_REGION` 应该分别放在 `longbridge-hk``longbridge-sg` 这两个 Environment 里,不要再当成一个仓库级共享变量。这样 HK 和 SG 才能各自更新到自己的 region。
289311
- 现在 workflow 只有在 `ENABLE_GITHUB_ENV_SYNC=true` 时才会严格检查配置。没打开这个开关时,它会直接跳过,不影响原来只靠 Google Cloud Trigger 的老流程;一旦打开,缺任何配置都会直接失败,避免你以为已经同步成功。
290-
- 这里的“共享”只是指 **同一个仓库里的 HK / SG 两个服务共享**`GCP_SA_KEY``TELEGRAM_TOKEN`LongPort 相关 secrets 仍然是这个仓库或某个 Environment 自己的,不建议把它们当成所有 quant 共用的全局 secrets。
312+
- 这里的“共享”只是指 **同一个仓库里的 HK / SG 两个服务共享**`GCP_SA_KEY` 仍然是这个仓库自己的 secret。Telegram token 和 LongPort app 凭据建议放到 Secret Manager,并通过上面的 shared secret-name 变量引用,不建议把它们当成所有 quant 共用的全局 secrets。
291313
- 如果你真的要在多个 quant 仓库之间保留一层全局共享,建议只保留 `GLOBAL_TELEGRAM_CHAT_ID``NOTIFY_LANG` 这种低耦合配置。
292314

293315
### 部署单元和命名建议

0 commit comments

Comments
 (0)