本文档用于把 OutlookMail Plus 的发版/发布流程固定下来,确保:
- GitHub Release / Changelog / Docker 镜像版本一致
- 发布可追溯、可复现、可回滚
- 代码版本:以 Git Tag 为准,格式
vX.Y.Z(例如v1.11.0) - 发布说明:
CHANGELOG.md中对应版本段落(## [vX.Y.Z] - YYYY-MM-DD) - Docker 镜像:
- DockerHub:
guangshanshui/outlook-email-plus(常用:latest/vX.Y.Z) - GHCR:
ghcr.io/zeropointsix/outlook-email-plus(常用:latest/main/vX.Y.Z)
- DockerHub:
说明:镜像以 GitHub Actions 工作流
.github/workflows/docker-build-push.yml为准。
采用语义化版本(SemVer):
- Major(X):破坏性变更(不兼容)
- Minor(Y):新增功能(兼容)
- Patch(Z):缺陷修复/小改动(兼容)
Tag 统一带 v 前缀:v1.11.0。
仓库存在工作流:Build and Push Docker Image(docker-build-push.yml),触发规则:
- push 到
main/master/dev:会构建并推送镜像(其中main/master会推latest) - push Tag
v*.*.*:会构建并推送以 Tag 命名的镜像(例如v1.11.0)
因此:
- 想要“稳定版本镜像”(
vX.Y.Z)→ 必须打 Tag 并 push Tag - 想要“体验最新代码”(
latest)→ push 到 main/master 即可
在开始发版前,确保以下条件成立:
-
主分支干净
git status无未提交变更git pull --ff-only已是最新
-
CI 全绿
Code Quality、Python Tests、Build and Push Docker Image等工作流通过
-
变更记录准备完成
CHANGELOG.md已补齐本次版本的变更- 如 README 中的 Docker 示例固定展示明确版本号,需同步更新到本次版本(可选但建议)
-
数据库迁移/破坏性变更已说明
- 若涉及 DB schema 版本升级、字段含义变更、默认配置变化,必须在
CHANGELOG.md中写清“升级注意事项/回滚注意事项”。
- 若涉及 DB schema 版本升级、字段含义变更、默认配置变化,必须在
发布说明以 上一个版本 Tag 为起点,收集到 本次版本 Tag 为止的所有变更。
推荐命令:
# 找到最近一次 release tag
git fetch --tags
git tag --sort=-creatordate | head
# 查看从上个 tag 到当前 HEAD 的提交
git log --oneline <prev_tag>..HEADPR 模板(.github/PULL_REQUEST_TEMPLATE.md)里也有同样的“发布日志生成规则”,提交信息要写清楚,便于汇总。
以下流程用于发布 vX.Y.Z:
- 切到 main 并拉取最新
git checkout main
git pull --ff-only- 准备版本内容
- 更新
CHANGELOG.md:新增## [vX.Y.Z] - YYYY-MM-DD,写清新功能/修复/兼容性说明 - (可选)更新 README / README.en 的 Docker 示例版本号
- 提交版本准备
git add CHANGELOG.md README.md README.en.md
git commit -m "docs(release): vX.Y.Z"- 打 Tag 并推送
git tag -a vX.Y.Z -m "vX.Y.Z"
git push origin main
git push origin vX.Y.Z- 监控镜像发布工作流
在 GitHub Actions 中确认 Build and Push Docker Image 成功,且 build-and-push job 没有被跳过。
- 验证镜像
# 验证稳定版本镜像
docker pull guangshanshui/outlook-email-plus:vX.Y.Z
# 验证 latest(main/master)
docker pull guangshanshui/outlook-email-plus:latest验证点:
- 拉取时间与 Actions 构建时间匹配
docker image inspect的 digest 与发布时一致(可选)
- 创建 GitHub Release(自动)
push vX.Y.Z tag 后,会由工作流 .github/workflows/create-github-release.yml 自动创建同名 Release,内容从 CHANGELOG.md 对应章节提取。
如需补充附件或微调文案,可在 GitHub Releases 页面直接编辑。
- 从
main分支修复 → 走同样流程发布vX.Y.(Z+1) - 强烈建议生产始终 pin 到明确版本(
vX.Y.Z),而不是长期使用latest。
- 生产回滚优先使用 明确版本标签(例如回滚到
v1.10.1)
docker pull guangshanshui/outlook-email-plus:v1.10.1
# 将部署配置中的镜像标签改回 v1.10.1 并重启- 不建议依赖
latest回滚(latest会随 main 推进而变化)。
按以下顺序排查:
- GitHub Actions 的
Build and Push Docker Image是否成功(失败时镜像不会更新) quality-gate是否通过(格式化/静态检查/安全门禁/单测失败会阻断 push)- 是否配置了 DockerHub 推送所需 Secrets(
DOCKERHUB_USERNAME/DOCKERHUB_TOKEN) - 你拉取的镜像仓库是否正确(DockerHub vs GHCR)
- 是否真的 push 了 Tag:
git push origin vX.Y.Z - Tag 是否符合触发规则:
v*.*.* - Actions 里该 tag 事件的
Build and Push Docker Image是否执行并成功