Feishu CMS Sync #44
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Feishu CMS Sync | |
| on: | |
| schedule: | |
| # GitHub cron uses UTC. This runs at 02:00 Asia/Shanghai (UTC+8). | |
| - cron: '0 18 * * *' | |
| workflow_dispatch: | |
| permissions: | |
| contents: write | |
| concurrency: | |
| group: feishu-sync | |
| cancel-in-progress: false | |
| jobs: | |
| sync: | |
| runs-on: ubuntu-latest | |
| env: | |
| FEISHU_APP_ID: ${{ secrets.FEISHU_APP_ID }} | |
| FEISHU_APP_SECRET: ${{ secrets.FEISHU_APP_SECRET }} | |
| FEISHU_FOLDER_TOKEN: ${{ secrets.FEISHU_FOLDER_TOKEN }} | |
| FEISHU_ROOT_FOLDER_NAME: ${{ vars.FEISHU_ROOT_FOLDER_NAME }} | |
| FEISHU_ENDPOINT: ${{ vars.FEISHU_ENDPOINT || 'https://open.feishu.cn' }} | |
| FEISHU_CLEAN_REMOVED: ${{ vars.FEISHU_CLEAN_REMOVED }} | |
| FEISHU_GIT_AUTO_PUSH: 'true' | |
| FEISHU_GIT_BRANCH: 'main' | |
| FEISHU_GIT_REMOTE: 'origin' | |
| FEISHU_GIT_USER_NAME: 'github-actions[bot]' | |
| FEISHU_GIT_USER_EMAIL: '41898282+github-actions[bot]@users.noreply.github.com' | |
| FEISHU_AI_ENABLED: ${{ vars.FEISHU_AI_ENABLED || 'true' }} | |
| FEISHU_AI_TRANSLATE_ZH_TO_EN: ${{ vars.FEISHU_AI_TRANSLATE_ZH_TO_EN || 'true' }} | |
| FEISHU_AI_STRICT: ${{ vars.FEISHU_AI_STRICT || 'true' }} | |
| FEISHU_AI_TEMPERATURE: ${{ vars.FEISHU_AI_TEMPERATURE }} | |
| FEISHU_AI_TIMEOUT_MS: ${{ vars.FEISHU_AI_TIMEOUT_MS || '180000' }} | |
| FEISHU_AI_RETRY_BACKOFF_MS: ${{ vars.FEISHU_AI_RETRY_BACKOFF_MS || '1500' }} | |
| FEISHU_AI_FAIL_ON_TRANSLATION_ERROR: ${{ vars.FEISHU_AI_FAIL_ON_TRANSLATION_ERROR || 'false' }} | |
| FEISHU_AI_MAX_TOKENS: ${{ vars.FEISHU_AI_MAX_TOKENS }} | |
| FEISHU_AI_TAG_MAX: ${{ vars.FEISHU_AI_TAG_MAX }} | |
| FEISHU_AI_KEYWORD_MAX: ${{ vars.FEISHU_AI_KEYWORD_MAX }} | |
| TRANSLATE_API_KEY: ${{ secrets.TRANSLATE_API_KEY }} | |
| TRANSLATE_MODEL: ${{ vars.TRANSLATE_MODEL }} | |
| TRANSLATE_BASE_URL: ${{ vars.TRANSLATE_BASE_URL }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup Node | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| - name: Preflight sync configuration | |
| run: | | |
| missing=0 | |
| if [ -z "$FEISHU_APP_ID" ]; then | |
| echo "::error::Missing FEISHU_APP_ID secret." | |
| missing=1 | |
| fi | |
| if [ -z "$FEISHU_APP_SECRET" ]; then | |
| echo "::error::Missing FEISHU_APP_SECRET secret." | |
| missing=1 | |
| fi | |
| if [ -z "$FEISHU_FOLDER_TOKEN" ] && [ -z "$FEISHU_ROOT_FOLDER_NAME" ]; then | |
| echo "::error::Set FEISHU_FOLDER_TOKEN secret or FEISHU_ROOT_FOLDER_NAME variable." | |
| missing=1 | |
| fi | |
| if [ "$missing" -eq 1 ]; then | |
| exit 1 | |
| fi | |
| if [ "$GITHUB_EVENT_NAME" = "schedule" ] \ | |
| && [ "$FEISHU_AI_ENABLED" = "true" ] \ | |
| && [ "$FEISHU_AI_TRANSLATE_ZH_TO_EN" = "true" ] \ | |
| && [ "$FEISHU_AI_STRICT" = "true" ] \ | |
| && [ -z "$TRANSLATE_API_KEY" ]; then | |
| echo "::warning::TRANSLATE_API_KEY is empty for the scheduled sync. Falling back to zh-only sync and preserving existing English content." | |
| echo "FEISHU_AI_STRICT=false" >> "$GITHUB_ENV" | |
| fi | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Sync Feishu folder to Astro content | |
| run: npm run feishu:sync |