From 7b4f479aad0567d2dc290279a4052088e109a60c Mon Sep 17 00:00:00 2001 From: Huarch Date: Tue, 19 May 2026 11:27:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Gitea=20CI/CD=20=E8=A7=A6?= =?UTF-8?q?=E5=8F=91=E6=96=B9=E5=BC=8F=EF=BC=8C=E6=94=AF=E6=8C=81=E5=88=86?= =?UTF-8?q?=E6=94=AF=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/package.yml | 35 +++++++++++++++++++++++-------- README.md | 2 +- scripts/trigger-gitea-pipeline.sh | 23 ++++++++------------ 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/.gitea/workflows/package.yml b/.gitea/workflows/package.yml index 783c244..e318c7a 100644 --- a/.gitea/workflows/package.yml +++ b/.gitea/workflows/package.yml @@ -88,7 +88,7 @@ jobs: docker-image: runs-on: ubuntu-22.04 needs: validate - if: startsWith(github.ref, 'refs/tags/') + if: startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' permissions: contents: read defaults: @@ -134,7 +134,8 @@ jobs: env: RAW_REGISTRY_HOST: ${{ vars.REGISTRY_HOST }} RAW_REPOSITORY: ${{ github.repository }} - IMAGE_TAG: ${{ github.ref_name }} + RAW_REF: ${{ github.ref }} + RAW_REF_NAME: ${{ github.ref_name }} run: | REGISTRY_HOST="${RAW_REGISTRY_HOST#http://}" REGISTRY_HOST="${REGISTRY_HOST#https://}" @@ -142,6 +143,14 @@ jobs: REPOSITORY_PATH="${RAW_REPOSITORY#/}" IMAGE_REPOSITORY_PATH="$(printf '%s' "$REPOSITORY_PATH" | tr '[:upper:]' '[:lower:]')" IMAGE_NAME="${REGISTRY_HOST}/${IMAGE_REPOSITORY_PATH}" + case "$RAW_REF" in + refs/heads/main|refs/heads/master) + IMAGE_TAG="latest" + ;; + *) + IMAGE_TAG="${RAW_REF_NAME}" + ;; + esac { echo "REGISTRY_HOST=${REGISTRY_HOST}" echo "REPOSITORY_PATH=${REPOSITORY_PATH}" @@ -179,13 +188,21 @@ jobs: done } - docker build \ - -f ./Dockerfile \ - -t "${IMAGE_NAME}:${IMAGE_TAG}" \ - -t "${IMAGE_NAME}:latest" \ - . - push_with_retry "${IMAGE_NAME}:${IMAGE_TAG}" - push_with_retry "${IMAGE_NAME}:latest" + if [ "${IMAGE_TAG}" = "latest" ]; then + docker build \ + -f ./Dockerfile \ + -t "${IMAGE_NAME}:latest" \ + . + push_with_retry "${IMAGE_NAME}:latest" + else + docker build \ + -f ./Dockerfile \ + -t "${IMAGE_NAME}:${IMAGE_TAG}" \ + -t "${IMAGE_NAME}:latest" \ + . + push_with_retry "${IMAGE_NAME}:${IMAGE_TAG}" + push_with_retry "${IMAGE_NAME}:latest" + fi - name: Notify Deploy Server run: | diff --git a/README.md b/README.md index 547c10f..11804fb 100644 --- a/README.md +++ b/README.md @@ -248,7 +248,7 @@ docker compose down | `bun run start` | 直接运行 `src/server.ts` | | `bun run start:prod` | 先类型检查再启动 | | `bun run install:opencode` | 手动安装 `.opencode` 依赖 | -| `bun run pipeline:trigger` | 通过更新远端 tag 触发 Gitea CI/CD(默认优先 `gitea`,否则回退到 `origin`;tag=`latest`) | +| `bun run pipeline:trigger` | 通过强制更新远端 `main` 分支触发 Gitea CI/CD;分支触发时只发布/覆盖 `latest` 镜像 | ### 模型与 API 配置 diff --git a/scripts/trigger-gitea-pipeline.sh b/scripts/trigger-gitea-pipeline.sh index 579372f..f059591 100644 --- a/scripts/trigger-gitea-pipeline.sh +++ b/scripts/trigger-gitea-pipeline.sh @@ -3,13 +3,12 @@ set -euo pipefail if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then - echo "Usage: bash scripts/trigger-gitea-pipeline.sh [remote] [tag]" + echo "Usage: bash scripts/trigger-gitea-pipeline.sh [remote] [branch]" echo "" echo "Examples:" echo " bash scripts/trigger-gitea-pipeline.sh" - echo " bash scripts/trigger-gitea-pipeline.sh gitea latest" - echo " bash scripts/trigger-gitea-pipeline.sh origin latest" - echo " bash scripts/trigger-gitea-pipeline.sh gitea v2026.05.15.1" + echo " bash scripts/trigger-gitea-pipeline.sh gitea main" + echo " bash scripts/trigger-gitea-pipeline.sh origin main" exit 0 fi @@ -28,7 +27,7 @@ resolve_default_remote() { } REMOTE="${1:-}" -TAG="${2:-latest}" +BRANCH="${2:-main}" if ! git rev-parse --git-dir >/dev/null 2>&1; then echo "[ERROR] Current directory is not a git repository." @@ -52,16 +51,12 @@ if ! git remote get-url "$REMOTE" >/dev/null 2>&1; then fi HEAD_SHA="$(git rev-parse --short HEAD)" -MESSAGE="manual trigger: ${TAG} $(date '+%F %T')" echo "[INFO] HEAD: ${HEAD_SHA}" -echo "[INFO] Recreate annotated tag '${TAG}'" -git tag -fa "$TAG" -m "$MESSAGE" +echo "[INFO] Force-push HEAD to remote branch '${BRANCH}'" +git push "$REMOTE" "HEAD:refs/heads/${BRANCH}" --force -echo "[INFO] Push '${TAG}' to remote '${REMOTE}' (force update)" -git push "$REMOTE" "refs/tags/${TAG}" --force +echo "[INFO] Verify remote branch reference" +git ls-remote "$REMOTE" "refs/heads/${BRANCH}" -echo "[INFO] Verify remote tag reference" -git ls-remote --tags "$REMOTE" "refs/tags/${TAG}" - -echo "[DONE] Pipeline trigger request sent by updating tag '${TAG}'." +echo "[DONE] Pipeline trigger request sent by updating branch '${BRANCH}'."