fix(发布): push-all.sh 补上 git tag,并补打 v1.2.0 ~ v1.4.0 历史标签

问题:脚本里只有 docker tag / docker push,**没有 git tag**,所以远程仓库
一直只有软件包、没有版本 tag —— 「某个版本对应哪个提交」只能靠翻 CHANGELOG 猜。
镜像 tag 只说明「注册表里有这个包」,回答不了「这个包是哪份代码构建的」。

tools/push-all.sh:
- 新增**版本预检**(传了版本号时):从 workbuddy_portal/__init__.py 读
  __version__ 与传入值比对,不一致立刻退出 —— 放在最前面,免得代码和镜像
  都推完了才发现「代码写着 1.4.0、却当 1.5.0 发」
- 新增 git tag -a vX.Y.Z + 推送该 tag,**放在代码与镜像都推成功之后**:
  tag 一旦出现在远端就是「这个版本发过了」的公开声明,不该先于产物出现
- 已存在的 tag 只提示、不改写(指向哪个提交由历史决定)

补打历史标签:v1.2.0 / v1.3.0 / v1.4.0,各指向引入该版本号的那个提交
(1.1.0 在仓库里没有对应提交,故未补)。

文档:
- DEPLOYMENT 7.1 补上「为什么必须有 git tag」与版本预检说明
- DEPLOYMENT 7.4 补上「镜像与 tag 要分别核验」的命令(git ls-remote --tags)
  —— 此前 7.4 只验镜像,正是这个盲区让「没有 tag」一直没被发现

验证:python tools/check_docs.py → 0 处问题;python tools/smoke.py → ok=264 fail=0
这个提交包含在:
2026-09-18 14:54:48 +08:00
父节点 f36149efc3
当前提交 4720149c20
共修改 3 个文件,包含 107 行新增和 8 行删除
+24
查看文件
@@ -8,6 +8,30 @@
---
## [未发布]
### 发布流程修复:脚本从来没打过 git tag
- **问题**:`tools/push-all.sh` 里只有 `docker tag` + `docker push`,**没有 `git tag`**。
结果是远程仓库里**只有软件包、没有版本 tag** —— 「1.5.0 对应哪个提交」只能靠翻本文件猜,
想 checkout 某个已发布版本的代码没有可靠入口。镜像 tag 只说明「注册表里有这个包」,
它回答不了「这个包是哪份代码构建的」。
- **现在脚本会做三件事**:
1. **版本预检**(传了版本号时):从 `workbuddy_portal/__init__.py` 读 `__version__`
与传入值比对,不一致**立刻退出**。放在最前面,免得代码和镜像都推完了才发现
「代码里写着 1.4.0、却当 1.5.0 发」——那种错误只能靠改 tag 补救。
2. 代码与镜像都推成功后,打 `git tag -a vX.Y.Z` 并推送该 tag。放在最后是有意的:
tag 一旦出现在远端就是「这个版本发过了」的公开声明,不该先于产物出现。
3. 已存在的 tag **只提示、不改写** —— 指向哪个提交由历史决定,不该被脚本偷偷换掉。
- **补齐历史 tag**:`v1.2.0` / `v1.3.0` / `v1.4.0` 三个注解 tag 已按各自提交的
`__version__` 补打并推送(每个都指向引入该版本号的那个提交,可用
`git for-each-ref refs/tags` 复核)。1.1.0 在仓库里没有对应提交,故未补。
- **文档**:`docs/DEPLOYMENT.md` 第 7.1 节补上「为什么必须有 git tag」与版本预检说明;
第 7.4 节补上「镜像与 tag 要分别核验」的命令(`git ls-remote --tags origin`)——
此前 7.4 只验镜像,正是这个盲区让「没有 tag」一直没被发现。
---
## [1.5.0] — 2026-09-18
**主题:按「将会被公网访问」重新审一遍界面与暴露面**