name: 备份到阿里云OSS on: schedule: - cron: "0 0 * * 0" # 每周日的00:00执行一次(UTC) workflow_dispatch: # 手动触发工作流 concurrency: group: "aliyun-backup" cancel-in-progress: true jobs: backup: runs-on: ubuntu-latest permissions: contents: read steps: - name: 下载代码 uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 - name: 配置阿里云OSS uses: manyuanrong/setup-ossutil@v3.0 with: endpoint: ${{ secrets.OSS_ENDPOINT }} access-key-id: ${{ secrets.OSS_ACCESS_KEY_ID }} access-key-secret: ${{ secrets.OSS_ACCESS_KEY_SECRET }} - name: 增量上传资源(排除 public 文件夹) run: | # 使用 find -print0 和 xargs -0 安全处理特殊字符 # 排除 public、.git、node_modules 等不必要的文件 find . \ -path ./public -prune -o \ -path ./.git -prune -o \ -path ./node_modules -prune -o \ -path ./resources -prune -o \ -type f -print0 | xargs -0 -I {} ossutil cp "{}" "oss://${{ secrets.OSS_BUCKET }}/{}" --update - name: 验证备份完整性 run: | # 统计本地文件数(排除目录) LOCAL_COUNT=$(find . -path ./public -prune -o -path ./.git -prune -o -path ./node_modules -prune -o -path ./resources -prune -o -type f | wc -l) echo "本地文件数: $LOCAL_COUNT" # 统计 OSS 上的文件数 REMOTE_COUNT=$(ossutil ls oss://${{ secrets.OSS_BUCKET }}/ --recursive | grep -v "Directory:" | wc -l) echo "OSS 文件数: $REMOTE_COUNT" echo "## 备份统计" >> $GITHUB_STEP_SUMMARY echo "- **本地文件数**: $LOCAL_COUNT" >> $GITHUB_STEP_SUMMARY echo "- **OSS 文件数**: $REMOTE_COUNT" >> $GITHUB_STEP_SUMMARY