commit 2aea5058369ac839daf44682d5e11ed9b4c7b240 Author: adminroot Date: Thu Oct 23 06:26:26 2025 -0700 添加 .gitea/workflows/nextcloud_sync&build.yml diff --git a/.gitea/workflows/nextcloud_sync&build.yml b/.gitea/workflows/nextcloud_sync&build.yml new file mode 100644 index 0000000..402bcdb --- /dev/null +++ b/.gitea/workflows/nextcloud_sync&build.yml @@ -0,0 +1,159 @@ +name: Sync Nextcloud and Build Docker + +# 触发条件 +on: + schedule: + # 每天 18:00(UTC)执行一次(相当于北京时间 02:00),周日强制全量构建 + - cron: '0 18 * * *' + push: + branches: + - main + paths: + - 'Dockerfile' + workflow_dispatch: # 支持手动触发 + +# 环境变量(可根据需要自行修改) +env: + NEXTCLOUD_ZIP: latest.zip + NEXTCLOUD_DIR: nextcloud + +jobs: + sync-and-build: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write # 推送镜像需要 + steps: + + # ==================== 1. 基础准备 ==================== + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 # 需要完整历史来比较变更 + + - name: Free disk space (optional) + run: sudo df -h && sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc + + # ==================== 2. 同步 Nextcloud ==================== + - name: Create nextcloud directory + run: mkdir -p ${{ env.NEXTCLOUD_DIR }} + + - name: Download latest.zip + id: download + run: | + curl -fsSL -o ${{ env.NEXTCLOUD_ZIP }} \ + https://download.nextcloud.com/server/releases/latest.zip || exit 1 + + - name: Unzip Nextcloud + run: | + unzip -qo ${{ env.NEXTCLOUD_ZIP }} -d ${{ env.NEXTCLOUD_DIR }} + rm -f ${{ env.NEXTCLOUD_ZIP }} + + # ==================== 3. 检测是否有文件变更 ==================== + - name: Check for changes + id: check_changes + run: | + # 如果是 push 事件且路径匹配,已在触发器里过滤,这里再做一次细粒度检查 + if [ "${{ github.event_name }}" = "push" ]; then + echo "Push 事件,文件已匹配,直接标记为需要构建" + echo "has_changes=true" >> $GITHUB_OUTPUT + exit 0 + fi + + # 比较本地 nextcloud 目录与仓库中已有的差异 + git config --global --add safe.directory "$GITHUB_WORKSPACE" + git fetch --depth=1 origin ${{ github.ref_name }} || true + + # 统计差异文件数 + CHANGES=$(git diff --name-only HEAD ${{ env.NEXTCLOUD_DIR }} | wc -l) + if [ "$CHANGES" -gt 0 ]; then + echo "检测到 ${{ env.NEXTCLOUD_DIR }} 目录有 $CHANGES 处变更" + echo "has_changes=true" >> $GITHUB_OUTPUT + else + echo "无文件变更" + echo "has_changes=false" >> $GITHUB_OUTPUT + fi + + # ==================== 4. 判断是否需要构建 Docker ==================== + - name: Decide whether to build + id: should_build + run: | + # 1. 周日定时任务强制构建 + if [ "${{ github.event_name }}" = "schedule" ] && [ "$(date +%w)" = "0" ]; then + echo "周日定时任务 → 强制构建" + echo "build=true" >> $GITHUB_OUTPUT + + # 2. push 触发且路径匹配(已在 trigger 中过滤,这里直接 true) + elif [ "${{ github.event_name }}" = "push" ]; then + echo "push 触发(Dockerfile)→ 构建" + echo "build=true" >> $GITHUB_OUTPUT + + # 3. 手动触发 + elif [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "手动触发 → 构建" + echo "build=true" >> $GITHUB_OUTPUT + + # 4. 有新的 Nextcloud 文件变更 + elif [ "${{ steps.check_changes.outputs.has_changes }}" = "true" ]; then + echo "Nextcloud 同步有变更 → 构建" + echo "build=true" >> $GITHUB_OUTPUT + + # 5. 其它情况(包括非周日 schedule 且无变更) + else + echo "无变更且非强制构建时间 → 跳过构建" + echo "build=false" >> $GITHUB_OUTPUT + fi + + # ==================== 5. 仅在需要时执行 Docker 构建 ==================== + - name: Set up Docker Buildx + if: steps.should_build.outputs.build == 'true' + uses: docker/setup-buildx-action@v3 + + - name: Login to Custom Registry + if: steps.should_build.outputs.build == 'true' + uses: docker/login-action@v3 + with: + registry: ${{ secrets.REGISTRY_SERVER }}/${{ gitea.repository_owner }}/nextcloud-docker + username: ${{ gitea.actor }} + password: ${{ secrets.REGISTRY_TOKEN }} + + - name: Generate Beijing time version tag + if: steps.should_build.outputs.build == 'true' + id: version + run: | + echo "tag=$(TZ='Asia/Shanghai' date '+%Y%m%d-%H%M%S')" >> $GITHUB_OUTPUT + + - name: Build & Push Docker image + if: steps.should_build.outputs.build == 'true' + uses: docker/build-push-action@v6 + with: + context: . + file: ./Dockerfile + platforms: linux/amd64,linux/arm64 # 可按需调整 + push: true + tags: | + ${{ secrets.REGISTRY_SERVER }}/${{ gitea.repository_owner }}/nextcloud-docker:latest + ${{ secrets.REGISTRY_SERVER }}/${{ gitea.repository_owner }}/nextcloud-docker:${{ steps.version.outputs.tag }} + cache-from: type=registry,ref=${{ secrets.REGISTRY_SERVER }}/${{ gitea.repository_owner }}/nextcloud-docker:latest + cache-to: type=inline,mode=max + + # ==================== 6. 提交同步的 Nextcloud 文件(可选)================ + # 如果你希望把下载的 nextcloud 目录也提交回仓库(保持同步记录),打开下面这段 + # - name: Commit synced Nextcloud files + # if: steps.check_changes.outputs.has_changes == 'true' + # run: | + # git config user.name "github-actions[bot]" + # git config user.email "github-actions@users.noreply.github.com" + # git add ${{ env.NEXTCLOUD_DIR }} + # git commit -m "chore: sync nextcloud $(date '+%Y-%m-%d %H:%M:%S')" || echo "Nothing to commit" + # git push origin HEAD:${{ github.ref_name }} + + # ==================== 7. 结束提示 ==================== + - name: Build summary + if: always() + run: | + echo "=== 工作流执行摘要 ===" + echo "触发方式: ${{ github.event_name }}" + echo "是否构建: ${{ steps.should_build.outputs.build }}" + echo "Nextcloud 变更: ${{ steps.check_changes.outputs.has_changes }}" + [ "${{ steps.should_build.outputs.build }}" = "true" ] && echo "镜像标签: ${{ steps.version.outputs.tag }}" || true \ No newline at end of file