From 81b4573eddc57a5ebb705a18b270c1345f902b00 Mon Sep 17 00:00:00 2001 From: erio Date: Sun, 1 Mar 2026 21:09:47 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=89=88=E6=9C=AC=E5=8F=B7?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E4=BB=A5=20git=20tag=20=E4=B8=BA=E5=8D=95?= =?UTF-8?q?=E4=B8=80=E6=9D=A5=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除 VERSION 文件 - publish.sh:用 git describe --exact-match 读当前 commit 的 tag 若无精确 tag 则拒绝构建并打印提示 - tag 支持 v1.2.3 或 1.2.3,推送时自动去掉 v 前缀 - 构建流程:git tag vX.Y.Z → git push origin vX.Y.Z → git pull --tags → bash scripts/publish.sh --- VERSION | 1 - scripts/publish.sh | 61 +++++++++++++++++++++++++++++----------------- 2 files changed, 39 insertions(+), 23 deletions(-) delete mode 100644 VERSION diff --git a/VERSION b/VERSION deleted file mode 100644 index 3eefcb9..0000000 --- a/VERSION +++ /dev/null @@ -1 +0,0 @@ -1.0.0 diff --git a/scripts/publish.sh b/scripts/publish.sh index b88d7f1..82a9143 100644 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -3,9 +3,15 @@ # 构建并发布 Docker 镜像到 Docker Hub # 在构建服务器(us-asaki-root)上运行 # -# 用法: -# ./scripts/publish.sh # 读取 VERSION 文件中的版本号 -# ./scripts/publish.sh 1.2.3 # 手动指定版本号 +# 发布流程: +# 1. 本地开发完成后打 tag:git tag v1.2.3 && git push origin v1.2.3 +# 2. 构建服务器拉取:git pull --tags +# 3. 运行此脚本:bash scripts/publish.sh +# +# 规则: +# - 当前 commit 必须有精确 git tag,否则拒绝构建 +# - tag 格式支持 v1.2.3 或 1.2.3(推送时自动去掉前缀 v) +# - 同时推送具体版本号和 latest 两个标签 set -euo pipefail @@ -13,35 +19,41 @@ REGISTRY="touwaeriol/sub2apipay" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" -# 读取版本号 -if [[ $# -ge 1 ]]; then - VERSION="$1" -else - VERSION="$(cat "$ROOT_DIR/VERSION" | tr -d '[:space:]')" -fi +cd "$ROOT_DIR" -if [[ -z "$VERSION" ]]; then - echo "错误:VERSION 文件为空,请填写版本号(如 1.0.0)" >&2 +# ── 读取版本号:必须来自当前 commit 的 git tag ──────────────────────────── +RAW_TAG="$(git describe --exact-match --tags HEAD 2>/dev/null || true)" + +if [[ -z "$RAW_TAG" ]]; then + echo "✗ 构建中止:当前 commit 没有 git tag" >&2 + echo "" >&2 + echo " 请先打 tag 再运行此脚本:" >&2 + echo " git tag v1.2.3" >&2 + echo " git push origin v1.2.3" >&2 + echo " git pull --tags # 在构建服务器上同步" >&2 exit 1 fi -echo "==============================" -echo " 构建版本: $VERSION" -echo " 镜像: $REGISTRY" -echo "==============================" +# 去掉 v 前缀作为 Docker tag(v1.2.3 → 1.2.3) +VERSION="${RAW_TAG#v}" -cd "$ROOT_DIR" +echo "==============================" +echo " git tag : $RAW_TAG" +echo " 版本号 : $VERSION" +echo " 镜像 : $REGISTRY" +echo "==============================" +echo "" -# 构建 +# ── 1. 构建 ──────────────────────────────────────────────────────────────── echo "[1/3] 构建镜像..." docker compose build -# 打标签:具体版本 + latest +# ── 2. 打标签 ────────────────────────────────────────────────────────────── echo "[2/3] 打标签: $VERSION 和 latest..." docker tag sub2apipay-app:latest "$REGISTRY:$VERSION" docker tag sub2apipay-app:latest "$REGISTRY:latest" -# 推送 +# ── 3. 推送 ──────────────────────────────────────────────────────────────── echo "[3/3] 推送到 Docker Hub..." docker push "$REGISTRY:$VERSION" docker push "$REGISTRY:latest" @@ -51,6 +63,11 @@ echo "✓ 发布完成" echo " $REGISTRY:$VERSION" echo " $REGISTRY:latest" echo "" -echo "部署命令:" -echo " IMAGE_TAG=$VERSION docker compose -f docker-compose.hub.yml pull" -echo " IMAGE_TAG=$VERSION docker compose -f docker-compose.hub.yml up -d" +echo "━━━ 部署命令 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "# 含自带数据库" +echo "IMAGE_TAG=$VERSION docker compose -f docker-compose.hub.yml pull" +echo "IMAGE_TAG=$VERSION docker compose -f docker-compose.hub.yml up -d" +echo "" +echo "# 仅应用(外部数据库)" +echo "IMAGE_TAG=$VERSION docker compose -f docker-compose.app.yml pull" +echo "IMAGE_TAG=$VERSION docker compose -f docker-compose.app.yml up -d"