From aac8faf125669a43d2be342735795af9d92f9bf2 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sun, 22 Mar 2026 19:22:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0workflow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/docker-build-deploy.yml | 32 +++++++++++++++++++++-- app-expo/app.config.ts | 6 +++-- app-expo/locales/en.json | 7 ----- app-expo/locales/permissions/en.json | 7 +++++ app-expo/locales/permissions/zh.json | 7 +++++ app-expo/locales/zh.json | 7 ----- 6 files changed, 48 insertions(+), 18 deletions(-) create mode 100644 app-expo/locales/permissions/en.json create mode 100644 app-expo/locales/permissions/zh.json diff --git a/.github/workflows/docker-build-deploy.yml b/.github/workflows/docker-build-deploy.yml index ea0b5dc..5be9648 100644 --- a/.github/workflows/docker-build-deploy.yml +++ b/.github/workflows/docker-build-deploy.yml @@ -124,10 +124,38 @@ jobs: echo "target=dev" >> "$GITHUB_OUTPUT" fi - - name: Set up SSH + - name: Ensure production SSH secret is set + if: steps.deploy_target.outputs.target == 'prod' + env: + PROD_SSH_PRIVATE_KEY: ${{ secrets.PROD_SSH_PRIVATE_KEY }} + run: | + if [ -z "$PROD_SSH_PRIVATE_KEY" ]; then + echo "::error::PROD_SSH_PRIVATE_KEY 未配置或为空,无法部署生产。请在 Repository secrets 中设置 PROD_SSH_*。" + exit 1 + fi + + - name: Ensure development SSH secret is set + if: steps.deploy_target.outputs.target != 'prod' + env: + DEV_SSH_PRIVATE_KEY: ${{ secrets.DEV_SSH_PRIVATE_KEY }} + run: | + if [ -z "$DEV_SSH_PRIVATE_KEY" ]; then + echo "::error::DEV_SSH_PRIVATE_KEY 未配置或为空,无法部署开发机。请在 Repository secrets 中设置 DEV_SSH_*。" + exit 1 + fi + + # 勿用 `prod && PROD_KEY || DEV_KEY`:PROD 为空时会错误回退到 DEV 密钥,导致连生产机报 Permission denied。 + - name: Set up SSH (production) + if: steps.deploy_target.outputs.target == 'prod' uses: webfactory/ssh-agent@v0.9.0 with: - ssh-private-key: ${{ steps.deploy_target.outputs.target == 'prod' && secrets.PROD_SSH_PRIVATE_KEY || secrets.DEV_SSH_PRIVATE_KEY }} + ssh-private-key: ${{ secrets.PROD_SSH_PRIVATE_KEY }} + + - name: Set up SSH (development) + if: steps.deploy_target.outputs.target != 'prod' + uses: webfactory/ssh-agent@v0.9.0 + with: + ssh-private-key: ${{ secrets.DEV_SSH_PRIVATE_KEY }} - name: Export deploy connection env run: | diff --git a/app-expo/app.config.ts b/app-expo/app.config.ts index c962eb0..21fe6d2 100644 --- a/app-expo/app.config.ts +++ b/app-expo/app.config.ts @@ -2,6 +2,8 @@ import type { ConfigContext, ExpoConfig } from 'expo/config'; import zh from './locales/zh.json'; import en from './locales/en.json'; +import permissionsZh from './locales/permissions/zh.json'; +import permissionsEn from './locales/permissions/en.json'; type PermissionKey = | 'microphone' @@ -20,8 +22,8 @@ type PrivacyAccessedAPIType = { }; const LOCALES: Record = { - zh, - en, + zh: { ...zh, permissions: permissionsZh }, + en: { ...en, permissions: permissionsEn }, }; const SUPPORTED_LOCALES = ['zh', 'en'] as const; diff --git a/app-expo/locales/en.json b/app-expo/locales/en.json index fda316d..67e40eb 100644 --- a/app-expo/locales/en.json +++ b/app-expo/locales/en.json @@ -4,12 +4,5 @@ }, "android": { "app_name": "app-expo" - }, - "permissions": { - "microphone": "Allow $(PRODUCT_NAME) to access your microphone for recording and voice features.", - "photos": "Allow $(PRODUCT_NAME) to access your photos and videos to select media.", - "camera": "Allow $(PRODUCT_NAME) to access your camera for taking photos and recording videos.", - "microphoneForVideo": "Allow $(PRODUCT_NAME) to access your microphone for recording videos with sound.", - "faceId": "Allow $(PRODUCT_NAME) to use Face ID to securely access local sensitive data." } } diff --git a/app-expo/locales/permissions/en.json b/app-expo/locales/permissions/en.json new file mode 100644 index 0000000..eee05be --- /dev/null +++ b/app-expo/locales/permissions/en.json @@ -0,0 +1,7 @@ +{ + "microphone": "Allow $(PRODUCT_NAME) to access your microphone for recording and voice features.", + "photos": "Allow $(PRODUCT_NAME) to access your photos and videos to select media.", + "camera": "Allow $(PRODUCT_NAME) to access your camera for taking photos and recording videos.", + "microphoneForVideo": "Allow $(PRODUCT_NAME) to access your microphone for recording videos with sound.", + "faceId": "Allow $(PRODUCT_NAME) to use Face ID to securely access local sensitive data." +} diff --git a/app-expo/locales/permissions/zh.json b/app-expo/locales/permissions/zh.json new file mode 100644 index 0000000..3079791 --- /dev/null +++ b/app-expo/locales/permissions/zh.json @@ -0,0 +1,7 @@ +{ + "microphone": "允许 $(PRODUCT_NAME) 访问麦克风,用于录音和语音功能。", + "photos": "允许 $(PRODUCT_NAME) 访问你的照片和视频,用于选择媒体内容。", + "camera": "允许 $(PRODUCT_NAME) 访问相机,用于拍照和录制视频。", + "microphoneForVideo": "允许 $(PRODUCT_NAME) 访问麦克风,用于录制带声音的视频。", + "faceId": "允许 $(PRODUCT_NAME) 使用 Face ID 来安全访问本地敏感数据。" +} diff --git a/app-expo/locales/zh.json b/app-expo/locales/zh.json index 4ec4774..67e40eb 100644 --- a/app-expo/locales/zh.json +++ b/app-expo/locales/zh.json @@ -4,12 +4,5 @@ }, "android": { "app_name": "app-expo" - }, - "permissions": { - "microphone": "允许 $(PRODUCT_NAME) 访问麦克风,用于录音和语音功能。", - "photos": "允许 $(PRODUCT_NAME) 访问你的照片和视频,用于选择媒体内容。", - "camera": "允许 $(PRODUCT_NAME) 访问相机,用于拍照和录制视频。", - "microphoneForVideo": "允许 $(PRODUCT_NAME) 访问麦克风,用于录制带声音的视频。", - "faceId": "允许 $(PRODUCT_NAME) 使用 Face ID 来安全访问本地敏感数据。" } }