From 2e87d48998b35844ea3ca00d37ca18940e681160 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 25 Sep 2026 02:09:32 +0000 Subject: [PATCH 1/2] chore(main): release 2.3.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 15 +++++++++++++++ desktop/package.json | 2 +- desktop/src-tauri/Cargo.toml | 2 +- desktop/src-tauri/tauri.conf.json | 2 +- pyproject.toml | 2 +- version.json | 2 +- 7 files changed, 21 insertions(+), 6 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index dbf0c48..9965a34 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.2.6" + ".": "2.3.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 999c753..773afef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,21 @@ > 说明:以下历史条目中提及的 `AGENTS.md` 为**本地维护、不随仓库分发**的资产(`.gitignore` 已忽略);条目仅为变更发生时的历史记录,clone 读者无需在仓库中查找该文件。 +## [2.3.0](https://github.com/ReSerendipity/TTS_MultiModel/compare/v2.2.6...v2.3.0) (2026-09-25) + + +### Features + +* **upstream-sync:** 落地 2.5 参数面 + prompt_text 链路与护栏 + 上游同步探针 ([#142](https://github.com/ReSerendipity/TTS_MultiModel/issues/142)) ([d7f609f](https://github.com/ReSerendipity/TTS_MultiModel/commit/d7f609fae4381cb8b234d2d194aa921cb6bba918)) + + +### Bug Fixes + +* **security:** 路径包含性与对外错误面各收敛到一处 ([#155](https://github.com/ReSerendipity/TTS_MultiModel/issues/155)) ([d875c9c](https://github.com/ReSerendipity/TTS_MultiModel/commit/d875c9c9d757478d2041f70dd8524a727205b313)) +* **security:** 转义 step-audio-editx / voicebox 成功页的请求可控插值 ([#153](https://github.com/ReSerendipity/TTS_MultiModel/issues/153)) ([3d549a8](https://github.com/ReSerendipity/TTS_MultiModel/commit/3d549a8946f864b3e8fe4a5afabf164425253dc3)) +* **ui:** [#130](https://github.com/ReSerendipity/TTS_MultiModel/issues/130) —— 16 处(不是 7 处)内联事件属性不再把服务器值拼进 JS 字符串,加一条全仓闸 ([650825c](https://github.com/ReSerendipity/TTS_MultiModel/commit/650825cd371e7a18f2599531c0e59d44e4f98c35)) +* **ui:** 16 处内联事件属性不再把服务器值拼进 JS 字符串,改成 data-* + 事件委托([#130](https://github.com/ReSerendipity/TTS_MultiModel/issues/130)) ([ac9c1dd](https://github.com/ReSerendipity/TTS_MultiModel/commit/ac9c1ddd1c97c610430265cfee373ba021a89dae)) + ## [2.2.6](https://github.com/ReSerendipity/TTS_MultiModel/compare/v2.2.5...v2.2.6) (2026-09-23) diff --git a/desktop/package.json b/desktop/package.json index 47a66a1..df0490c 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -1,6 +1,6 @@ { "name": "tts-multimodel-desktop", - "version": "2.2.6", + "version": "2.3.0", "private": true, "description": "TTS MultiModel 桌面应用壳", "scripts": { diff --git a/desktop/src-tauri/Cargo.toml b/desktop/src-tauri/Cargo.toml index 745a49c..62165e4 100644 --- a/desktop/src-tauri/Cargo.toml +++ b/desktop/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tts-multimodel-desktop" -version = "2.2.6" +version = "2.3.0" description = "TTS MultiModel 桌面应用壳" authors = ["TTSMultiModel"] edition = "2021" diff --git a/desktop/src-tauri/tauri.conf.json b/desktop/src-tauri/tauri.conf.json index d5974cc..7d7a3b6 100644 --- a/desktop/src-tauri/tauri.conf.json +++ b/desktop/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "TTSMultiModel", - "version": "2.2.6", + "version": "2.3.0", "identifier": "com.ttsmultimodel.desktop", "build": { "beforeDevCommand": "", diff --git a/pyproject.toml b/pyproject.toml index 626b37d..8f30173 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "tts-multimodel" -version = "2.2.6" +version = "2.3.0" description = "TTS MultiModel - Multi-engine Text-to-Speech platform with voice cloning, voice design, and LoRA fine-tuning" readme = "README.md" license = "Apache-2.0" diff --git a/version.json b/version.json index 954280c..0027639 100644 --- a/version.json +++ b/version.json @@ -1,5 +1,5 @@ { - "version": "2.2.6", + "version": "2.3.0", "release_date": "2026-09-23", "minimum_shell_version": "2.2.2", "changelog": "2.2.6:这一版修的是「照着 k8s 清单上线却拉不到镜像」。清单、README 与回滚 SOP 里的镜像名一直写的是 ghcr.io/reserendipity/tts-multimodel(连字符),而 docker-publish 真正推的是 tts_multimodel(下划线:名字由 github.repository 整体小写得到,下划线原样保留)—— 连字符那个包从来不存在,照清单起的两个容器(含预建目录的 init 容器)必然 ImagePullBackOff。名字与 tag 形状现在由 tests/test_image_name_consistency.py 从工作流推导钉住:原先那道版本位闸把名字写死在正则里,所以只核得出版本、核不出名字。清单同时补上 imagePullSecrets: ghcr-pull 与 README 里的建法——那个包不是匿名可拉的,缺这一步 kubectl apply 不会报错、Pod 却永远起不来。另外 docker-publish 加了并发组(同一天曾有三条 20+ 分钟的构建并行、抢同一份 10 GiB 层缓存),回滚 SOP 那条命令去掉多余的 v 前缀。真机侧的验收没重跑:这一版不含运行时代码改动。" From dd6f7d6a39066e5a2f77feb53a6e0d9f48666461 Mon Sep 17 00:00:00 2001 From: ReSerendipity Date: Fri, 25 Sep 2026 14:51:17 +0800 Subject: [PATCH 2/2] =?UTF-8?q?chore(release):=20=E8=A1=A5=E9=BD=90=202.3.?= =?UTF-8?q?0=20=E7=9A=84=E4=BA=94=E5=A4=84=E6=89=8B=E5=B7=A5=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=BD=8D=E4=B8=8E=E5=A3=B3=E5=86=85=20changelog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit release-please 的 release commit 只抬它管的 6 位(pyproject + extra-files 四条 + manifest),另有五处按 docs/release-governance.md §5 归手工同步,缺了就会让 test_all_version_sites_agree 在合并后的 main 上变红: config.yaml、deploy/kubernetes/deployment.yaml(两处镜像 tag)、 desktop/src-tauri/Cargo.lock 的 tts-multimodel-desktop、docs/release-governance.md 开头那句"已发布最新"、scripts/installer/setup.nsi 的 OutFile/APP_VERSION/VIProductVersion。 version.json 的 changelog 与 release_date 也是手工位(updater.rs 会把 changelog 显示给用户,只抬 $.version 会发出"自称 2.3.0、说明写着 2.2.6"的壳)。 门禁实测:scripts/check_release_readiness.py rc=0(全部版本位 = 2.3.0,判据全过); pytest tests/test_version_consistency.py tests/test_image_name_consistency.py → 12 passed。 已知时序风险(如实记):docker-publish.yml 不会被 release-please 自己打的 tag 级联 触发(v2.2.5 实测 0 次运行),所以 deployment.yaml 写的 2.3.0 在镜像显式发布 (合并后 dispatch docker-publish)之前是目标值而非已存在值;无自动部署集群消费它。 Signed-off-by: ReSerendipity --- config.yaml | 2 +- deploy/kubernetes/deployment.yaml | 4 ++-- desktop/src-tauri/Cargo.lock | 2 +- docs/release-governance.md | 2 +- scripts/installer/setup.nsi | 6 +++--- version.json | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/config.yaml b/config.yaml index 4fbbb38..dc1c153 100644 --- a/config.yaml +++ b/config.yaml @@ -1,4 +1,4 @@ -version: "2.2.6" +version: "2.3.0" server: host: "127.0.0.1" diff --git a/deploy/kubernetes/deployment.yaml b/deploy/kubernetes/deployment.yaml index 0ecb7ce..3e6246b 100644 --- a/deploy/kubernetes/deployment.yaml +++ b/deploy/kubernetes/deployment.yaml @@ -44,7 +44,7 @@ spec: # P0-1:subPath 挂载要求 PVC 内子目录预先存在(kubelet 不会自动创建)。 # 用主镜像(离线可用、自带 python)在可写的 data 卷上预建全部运行时目录。 - name: init-dirs - image: ghcr.io/reserendipity/tts_multimodel:2.2.6 + image: ghcr.io/reserendipity/tts_multimodel:2.3.0 imagePullPolicy: IfNotPresent command: ["python3.12", "-c", "import os; [os.makedirs(f'/mnt/data/{d}', exist_ok=True) for d in ['data','outputs','logs','cache','lora','personas']]; print('init-dirs ok')"] @@ -65,7 +65,7 @@ spec: memory: "256Mi" containers: - name: tts - image: ghcr.io/reserendipity/tts_multimodel:2.2.6 + image: ghcr.io/reserendipity/tts_multimodel:2.3.0 imagePullPolicy: IfNotPresent ports: - containerPort: 7869 diff --git a/desktop/src-tauri/Cargo.lock b/desktop/src-tauri/Cargo.lock index 24f8d00..4f5a275 100644 --- a/desktop/src-tauri/Cargo.lock +++ b/desktop/src-tauri/Cargo.lock @@ -4750,7 +4750,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tts-multimodel-desktop" -version = "2.2.6" +version = "2.3.0" dependencies = [ "anyhow", "base64 0.22.1", diff --git a/docs/release-governance.md b/docs/release-governance.md index 9fc9846..796a4a1 100644 --- a/docs/release-governance.md +++ b/docs/release-governance.md @@ -8,7 +8,7 @@ ## 1. 版本号规范 -- 遵循 SemVer `MAJOR.MINOR.PATCH`。**已发布最新 = v2.2.6(2026-09-23)**。 +- 遵循 SemVer `MAJOR.MINOR.PATCH`。**已发布最新 = v2.3.0(2026-09-25)**。 版本号出现在 11 处(`version.json`/`pyproject.toml`/`config.yaml`/`desktop/*`/`scripts/installer/setup.nsi`), 但只有 tag + GitHub Release 同时存在才算发出去;核对:`gh release view v<版本>`。 > 其中 `desktop/package-lock.json` 在 `.gitignore` 里(不是仓库内的版本位);仓库内跟踪的 9 处 diff --git a/scripts/installer/setup.nsi b/scripts/installer/setup.nsi index 4f1ad36..d7d9c3a 100644 --- a/scripts/installer/setup.nsi +++ b/scripts/installer/setup.nsi @@ -5,7 +5,7 @@ Unicode true !include "LogicLib.nsh" Name "TTSMultiModel 桌面版" -OutFile "TTSMultiModel-Setup-v2.2.6.exe" +OutFile "TTSMultiModel-Setup-v2.3.0.exe" InstallDir "$LOCALAPPDATA\Programs\TTSMultiModel" InstallDirRegKey HKCU "Software\TTSMultiModel" "InstallDir" RequestExecutionLevel user @@ -13,7 +13,7 @@ SetCompressor /SOLID lzma CRCCheck on BrandingText "TTSMultiModel" -!define APP_VERSION "2.2.6" +!define APP_VERSION "2.3.0" !define DATA_PREFIX "TTSMultiModel-Data.7z" !define UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\TTSMultiModel" !define APP_ICON "${__FILEDIR__}\..\..\desktop\src-tauri\icons\icon.ico" @@ -135,7 +135,7 @@ Section "TTSMultiModel 桌面版" SEC_APP SectionEnd ; ---------- 版本信息 ---------- -VIProductVersion "2.2.6.0" +VIProductVersion "2.3.0.0" VIAddVersionKey "ProductName" "TTSMultiModel 桌面版" VIAddVersionKey "LegalCopyright" "Copyright (C) 2026 TTSMultiModel" VIAddVersionKey "ProductVersion" "${APP_VERSION}" diff --git a/version.json b/version.json index 0027639..4aabc6b 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "version": "2.3.0", - "release_date": "2026-09-23", + "release_date": "2026-09-25", "minimum_shell_version": "2.2.2", - "changelog": "2.2.6:这一版修的是「照着 k8s 清单上线却拉不到镜像」。清单、README 与回滚 SOP 里的镜像名一直写的是 ghcr.io/reserendipity/tts-multimodel(连字符),而 docker-publish 真正推的是 tts_multimodel(下划线:名字由 github.repository 整体小写得到,下划线原样保留)—— 连字符那个包从来不存在,照清单起的两个容器(含预建目录的 init 容器)必然 ImagePullBackOff。名字与 tag 形状现在由 tests/test_image_name_consistency.py 从工作流推导钉住:原先那道版本位闸把名字写死在正则里,所以只核得出版本、核不出名字。清单同时补上 imagePullSecrets: ghcr-pull 与 README 里的建法——那个包不是匿名可拉的,缺这一步 kubectl apply 不会报错、Pod 却永远起不来。另外 docker-publish 加了并发组(同一天曾有三条 20+ 分钟的构建并行、抢同一份 10 GiB 层缓存),回滚 SOP 那条命令去掉多余的 v 前缀。真机侧的验收没重跑:这一版不含运行时代码改动。" + "changelog": "2.3.0:这一版的主干是极致克隆的 prompt_text 链路与 2.5 参数面落地,外加两条上游同步探针(#142);安全面做了三处收敛——路径包含性与对外错误面各收成一处(#155)、step-audio-editx / voicebox 成功页的请求可控插值改为转义(#153)、16 处内联事件属性不再把服务器值拼进 JS 字符串并加了全仓闸(#130)。口径要说清三件事:GPU 真机推理链路本轮没有覆盖(self-hosted runner 数为 0,release-gate 只跑过 fixture);CI 侧新增的 DCO 自证与并发去重属门禁改动,不改运行行为;以及 release-please 自己打的 tag 不会级联触发 docker-publish,所以 2.3.0 的容器镜像需要显式发布(手工 git tag 或 dispatch),k8s 清单的镜像 tag 在那之前只是目标值而非已存在值。" }