Skip to content

Feishu CMS Sync

Feishu CMS Sync #44

Workflow file for this run

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