88 lines
3.0 KiB
YAML
88 lines
3.0 KiB
YAML
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
# 🪞 光湖格点库 → Google Drive 全量同步
|
||
#
|
||
# 守护: PER-ZY001 铸渊 (Zhuyuan)
|
||
# 系统: SYS-GLW-0001
|
||
# 主控: TCS-0002∞ (冰朔)
|
||
#
|
||
# 方案: 宿主机直装 rclone(OAuth2 代理人模式)
|
||
# 凭证: GDRIVE_CLIENT_ID / GDRIVE_CLIENT_SECRET / GDRIVE_REFRESH_TOKEN
|
||
# 目标: Google Drive 文件夹 1fqWdLPaZkUZYt4OT_h3fJQHnd-q5QN3G
|
||
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
name: "🪞 光湖格点库 → Google Drive 同步"
|
||
|
||
on:
|
||
push:
|
||
branches:
|
||
- main
|
||
schedule:
|
||
- cron: "0 */6 * * *"
|
||
workflow_dispatch:
|
||
|
||
permissions:
|
||
contents: read
|
||
|
||
jobs:
|
||
sync-to-drive:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: "📦 Checkout repository"
|
||
uses: actions/checkout@v4
|
||
|
||
- name: "🔧 Install rclone"
|
||
run: |
|
||
sudo apt-get update -qq
|
||
sudo apt-get install -y -qq rclone
|
||
rclone version
|
||
|
||
- name: "🔑 Configure rclone (OAuth2)"
|
||
env:
|
||
GDRIVE_CLIENT_ID: ${{ secrets.GDRIVE_CLIENT_ID }}
|
||
GDRIVE_CLIENT_SECRET: ${{ secrets.GDRIVE_CLIENT_SECRET }}
|
||
GDRIVE_REFRESH_TOKEN: ${{ secrets.GDRIVE_REFRESH_TOKEN }}
|
||
run: |
|
||
if [ -z "${GDRIVE_CLIENT_ID}" ] || [ -z "${GDRIVE_CLIENT_SECRET}" ] || [ -z "${GDRIVE_REFRESH_TOKEN}" ]; then
|
||
echo "::error::OAuth2 secrets not set (GDRIVE_CLIENT_ID / GDRIVE_CLIENT_SECRET / GDRIVE_REFRESH_TOKEN)"
|
||
exit 1
|
||
fi
|
||
|
||
echo "✅ OAuth2 credentials validated"
|
||
|
||
mkdir -p "${HOME}/.config/rclone"
|
||
{
|
||
echo "[gdrive]"
|
||
echo "type = drive"
|
||
echo "scope = drive"
|
||
echo "client_id = ${GDRIVE_CLIENT_ID}"
|
||
echo "client_secret = ${GDRIVE_CLIENT_SECRET}"
|
||
echo "token = {\"access_token\":\"\",\"token_type\":\"Bearer\",\"refresh_token\":\"${GDRIVE_REFRESH_TOKEN}\",\"expiry\":\"2000-01-01T00:00:00Z\"}"
|
||
echo "root_folder_id = 1fqWdLPaZkUZYt4OT_h3fJQHnd-q5QN3G"
|
||
} > "${HOME}/.config/rclone/rclone.conf"
|
||
chmod 600 "${HOME}/.config/rclone/rclone.conf"
|
||
|
||
echo "✅ rclone configured with OAuth2"
|
||
|
||
- name: "🪞 Sync to Google Drive"
|
||
# 使用 copy(非 sync)—— 仅添加/更新文件,不删除 Drive 端已有文件(防误删)
|
||
run: |
|
||
rclone copy . gdrive: \
|
||
--exclude ".git/**" \
|
||
--exclude "node_modules/**" \
|
||
--exclude ".env" \
|
||
--exclude "*.bak" \
|
||
--exclude "*.log" \
|
||
--transfers 4 \
|
||
--checkers 8 \
|
||
--retries 3 \
|
||
--low-level-retries 10 \
|
||
--stats 30s \
|
||
--stats-one-line \
|
||
-v
|
||
|
||
- name: "🧹 Cleanup credentials"
|
||
if: always()
|
||
run: |
|
||
rm -f "${HOME}/.config/rclone/rclone.conf"
|
||
echo "✅ Credentials cleaned up"
|