From 5007ee3c9923f547c0c1c0801286674b085f9fcc Mon Sep 17 00:00:00 2001 From: meoacgx Date: Tue, 3 Mar 2026 02:10:57 +0800 Subject: [PATCH] =?UTF-8?q?ci(release):=20=E5=A2=9E=E5=8A=A0=20Docker=20?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=9E=84=E5=BB=BA=E4=B8=8E=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8F=91=E5=B8=83=20changelog=20=E5=B7=A5=E4=BD=9C=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本次主要更新: - ✨ 新增 Docker 多架构自动构建工作流:push 到 main/dev 自动构建并推送 GHCR 镜像(amd64/arm64)。 - ✨ 新增 Release 自动发布工作流:推送 v* tag 后自动创建 GitHub Release。 - ✨ 新增自动 changelog 分类规则:按 feat/fix/docs 等标签分组展示发布说明。 - ⚡ 增加 PR 构建校验路径:PR 到 main/dev 时执行镜像构建验证但不推送。 - 📚 README 补充 CI/CD 使用说明:镜像标签策略、拉取示例、发布命令。 --- .github/release.yml | 39 +++++++++++++++++ .github/workflows/docker.yml | 80 +++++++++++++++++++++++++++++++++++ .github/workflows/release.yml | 51 ++++++++++++++++++++++ README.md | 47 ++++++++++++++++++++ 4 files changed, 217 insertions(+) create mode 100644 .github/release.yml create mode 100644 .github/workflows/docker.yml create mode 100644 .github/workflows/release.yml diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 0000000..2050bb3 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,39 @@ +changelog: + exclude: + labels: + - skip-changelog + authors: + - dependabot + categories: + - title: "🚀 新功能" + labels: + - feat + - feature + - enhancement + - title: "🐛 问题修复" + labels: + - fix + - bug + - bugfix + - title: "⚡ 性能优化" + labels: + - perf + - performance + - optimization + - title: "🔐 安全相关" + labels: + - security + - vuln + - title: "♻️ 重构与工程改进" + labels: + - refactor + - chore + - ci + - build + - test + - title: "📚 文档" + labels: + - docs + - title: "🧩 其他变更" + labels: + - "*" diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..3d7050a --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,80 @@ +name: Docker Build & Publish + +on: + push: + branches: + - main + - dev + tags: + - "v*" + pull_request: + branches: + - main + - dev + paths: + - "Dockerfile" + - "Dockerfile.local" + - "docker-compose.yml" + - "src/**" + - ".github/workflows/docker.yml" + workflow_dispatch: {} + +permissions: + contents: read + packages: write + +concurrency: + group: docker-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # 仅在非 PR 事件时登录 GHCR(PR 不推送镜像) + - name: Log in to GHCR + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # 生成镜像标签: + # - main 分支:latest + main + # - dev 分支:dev + dev-latest + # - tag(如 v1.2.3):v1.2.3 + # - 额外附带短 SHA 标签便于定位 + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ github.repository }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=raw,value=latest,enable={{is_default_branch}} + type=raw,value=dev-latest,enable=${{ github.ref == 'refs/heads/dev' }} + type=sha,prefix=sha- + + - name: Build and (optionally) push + uses: docker/build-push-action@v6 + with: + context: . + file: ./Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d9668b0 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,51 @@ +name: Release (Auto Changelog) + +on: + push: + tags: + - "v*" + workflow_dispatch: + inputs: + tag: + description: "要发布的 tag(例如 v1.2.3)" + required: true + type: string + +permissions: + contents: write + +concurrency: + group: release-${{ github.ref }} + cancel-in-progress: false + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Resolve tag name + id: vars + shell: bash + run: | + if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]]; then + TAG="${{ inputs.tag }}" + else + TAG="${GITHUB_REF_NAME}" + fi + echo "tag=${TAG}" >> "$GITHUB_OUTPUT" + + - name: Create GitHub Release with auto changelog + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ steps.vars.outputs.tag }} + generate_release_notes: true + append_body: true + prerelease: ${{ contains(steps.vars.outputs.tag, '-') }} + body: | + ## Docker 镜像 + + ```bash + docker pull ghcr.io/${{ github.repository }}:${{ steps.vars.outputs.tag }} + ``` + + > 提示:该版本对应的多架构镜像由 `Docker Build & Publish` 工作流自动构建并推送。 + diff --git a/README.md b/README.md index 16b81ae..d435814 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,53 @@ docker compose up -d --build > 更完整的安装、更新、导入与生产部署建议:见 https://moeacgx.github.io/Telegram-Panel/ 。 +## CI 自动构建镜像(GitHub Actions) + +已内置工作流:`.github/workflows/docker.yml` + +触发规则: +- 推送到 `main` / `dev`:自动构建并推送镜像 +- 推送 tag(如 `v1.2.3`):自动构建并推送版本镜像 +- PR 到 `main` / `dev`:只构建验证,不推送 + +镜像仓库(GHCR): +- `ghcr.io/<你的GitHub用户名或组织>/telegram-panel` + +标签规则: +- `main` 分支:`latest`、`main`、`sha-xxxxxxx` +- `dev` 分支:`dev`、`dev-latest`、`sha-xxxxxxx` +- `v*` tag:例如 `v1.2.3` + +拉取示例: + +```bash +# 稳定版 +docker pull ghcr.io//telegram-panel:latest + +# 开发版 +docker pull ghcr.io//telegram-panel:dev-latest + +# 指定版本 +docker pull ghcr.io//telegram-panel:v1.2.3 +``` + +## 自动发布与 Changelog + +已内置工作流:`.github/workflows/release.yml` + +触发规则: +- 推送 `v*` tag(如 `v1.2.3`)后,自动创建 GitHub Release +- Release 内容自动生成 changelog(基于提交/PR),并读取 `.github/release.yml` 分类规则 + +发布示例: + +```bash +git checkout main +git pull --ff-only origin main +git tag v1.2.3 +git push origin v1.2.3 +``` + ## 截图 更多截图见:`screenshot/`