Files
在7楼 9e79ca09a1 维护[#1153]: 发布策略重构——CI 托管版本号与单主干 alpha/stable 通道 (#1160)
* chore: 补齐 agent 配置文档,版本升至 4.0.8 (#1152)

* docs(agents): 术语表迁到根目录 CONTEXT.md,补齐 agent 配置文档

新增 AGENTS.md 指向 issue tracker / triage 标签 / 领域文档三份说明,
docs/glossary.md 的内容改为 CONTEXT.md 的术语条目后删除。

* chore: VersionPrefix 升到 4.0.8

* docs(changelog): 开 4.0.8 段落

与 common.props 的 VersionPrefix 同号,否则 CI 的版本一致性校验会失败。

* docs: 版本与分支策略重构的 ADR-0002 与术语表(#1153)

* feat: CI 托管版本号的算号与 notes 生成脚本(#1154 #1155)

- version-next.sh:alpha/stable/latest 算号,权威源为 git tag 历史
- release-notes.sh:PR 标题分类生成 release notes 与 CHANGELOG 段落,不合规标题兜底
- 两个 fixture 测试套件(临时 git 仓库 / 模拟标题列表),并作为 ScriptTests job 纳入 PR CI

* refactor: code-review 修复——断言框架提取 test-lib、section 对齐 CHANGELOG 无空行风格、latest 复用 version-next.sh、补跨 major fixture 与错误信息断言

* feat: alpha 通道——main 合并自动推 alpha 镜像(#1156)

- 新增 alpha.yml:version-next.sh 算号,推 :x.y.z-alpha.N + :alpha 到 DockerHub/GHCR,串行防撞号
- Dockerfile:ARG VERSION 完整版本显式注入(构建时烘焙),补 OCI version LABEL;VERSION_SUFFIX 暂时兼容
- ci.yml ScriptTests:真实 tag 历史上的 alpha dry-run 冒烟

* feat: 稳定版通道——手动触发,全套制品 + CHANGELOG 回写(#1157)

- workflow_dispatch 下拉 patch/minor/major,version-next.sh 算号
- release-notes.sh 生成 notes(无合并 PR 时发版失败,不发空版本)
- softprops/action-gh-release 建 tag 与 Release(重跑幂等)
- 镜像 :x.y.z + :latest,显式 VERSION 注入
- CHANGELOG 段落 bot 回写 main([skip ci] 防触发 alpha)

* refactor: 拆除旧发布体系,版本权威源切换为 git tag 历史(#1158)

- common.props:VersionPrefix 0.0.0 + VersionSuffix dev,仅本地兜底(已验证宿主产物为 0.0.0-dev)
- ci.yml:删版本一致性校验与播报步骤,PR 目标收窄为 main
- 删除 preview-image/release/verify-pr-target 三个旧 workflow 与 version.sh/report-version.sh
- publish.sh:版本与 notes 改用新脚本
- codeql/dependabot/README 的 develop 引用改为 main

* fix: code-review 修复——Console zip 显式注入程序集版本、changelog 逻辑入脚本、platforms 断链修復

- publish.sh:dotnet publish 补 -p:Version,否则 zip 内程序集恒为 0.0.0-dev(Spec 轴关键发现);本地兜底统一为 0.0.0-dev
- Dockerfile:删除已无调用方的 VERSION_SUFFIX 遗留分支
- 提取 update-changelog.sh(重跑安全:同版本段落替换而非重复插入)+ 5 个 fixture,纳入 ScriptTests
- 术语对齐 CONTEXT.md:避免词「预览镜像」改为「alpha 版本镜像」
- platforms:青龙 QL_BRANCH 默认改 main,baihu/daidai/qinglong 脚本内 blob/develop 链接改 main,两份 README 的先行版说明对齐单主干
2026-09-28 01:24:53 +08:00

80 lines
3.0 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# release-notes.sh 的 fixture 测试:以模拟 PR 标题列表为输入,断言生成的
# release notes 与 CHANGELOG 段落。只测脚本 CLI 的外部行为。
#
# 本地/CI 通用:bash ./scripts/test-release-notes.sh
set -euo pipefail
repo_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
sut="$repo_dir/scripts/release-notes.sh"
source "$repo_dir/scripts/test-lib.sh"
titles_file=$(mktemp)
# --- 场景 1:分类排序 + 不合规兜底 ---
cat > "$titles_file" <<'EOF'
维护[#1152]: 补齐 AI 协作者的仓库配置 (#1152)
随便一个不合规的标题 (#2000)
Fix[#1144]: Web 面板启动失败改为以非 0 退出码结束 (#1147)
Feature[#1100]: 新增某个配置项 (#1150)
**BREAKING[#1138]**: 部署平台目录统一迁移 (#1140)
EOF
expected='- **BREAKING[#1138]**: 部署平台目录统一迁移 (#1140)
- Feature[#1100]: 新增某个配置项 (#1150)
- Fix[#1144]: Web 面板启动失败改为以非 0 退出码结束 (#1147)
- 维护[#1152]: 补齐 AI 协作者的仓库配置 (#1152)
- 随便一个不合规的标题 (#2000)'
assert_eq "按 BREAKING/Feature/Fix/维护/其他 分类排序,原文保留" \
"$expected" "$(bash "$sut" notes --from-file "$titles_file")"
# --- 场景 2:同类内保持合并顺序 ---
cat > "$titles_file" <<'EOF'
Fix[#1001]: 第一个修复 (#1001)
Fix[#1002]: 第二个修复 (#1002)
Fix[#1003]: 第三个修复 (#1003)
EOF
expected='- Fix[#1001]: 第一个修复 (#1001)
- Fix[#1002]: 第二个修复 (#1002)
- Fix[#1003]: 第三个修复 (#1003)'
assert_eq "同类内保持输入顺序" "$expected" "$(bash "$sut" notes --from-file "$titles_file")"
# --- 场景 3:空列表阻止发版,且给出可读错误信息 ---
: > "$titles_file"
assert_exit_nonzero "空 PR 列表报错退出" bash "$sut" notes --from-file "$titles_file"
assert_exit_nonzero "空 PR 列表时 section 同样报错" bash "$sut" section 4.0.8 --from-file "$titles_file"
err=$(bash "$sut" notes --from-file "$titles_file" 2>&1 >/dev/null || true)
assert_contains "空列表错误信息可读" "没有合并的 PR" "$err"
# --- 场景 4:CHANGELOG 段落格式与仓库现有风格一致(标题后无空行)---
cat > "$titles_file" <<'EOF'
Fix[#1144]: 某个修复 (#1147)
EOF
expected='## 4.0.8
- Fix[#1144]: 某个修复 (#1147)'
assert_eq "section 输出 '## 版本号 + 条目'(无空行,同现有 CHANGELOG)" \
"$expected" "$(bash "$sut" section 4.0.8 --from-file "$titles_file")"
# --- 场景 5:全是不合规标题也能出(全进"其他",不中断)---
cat > "$titles_file" <<'EOF'
Update something
bump deps
EOF
expected='- Update something
- bump deps'
assert_eq "全不合规标题原样收录" "$expected" "$(bash "$sut" notes --from-file "$titles_file")"
# 与 test-version-next.sh 同一策略:只在 CI 上删除临时文件;
# 本地沙箱可能对 rm 临时路径直接 SIGTERM,会误杀测试进程。
if [ "${CI:-}" = "true" ]; then rm -f "$titles_file" 2>/dev/null || true; fi
finish