From 0028254b40f1677ea0e73534712b5efbeda55db7 Mon Sep 17 00:00:00 2001 From: Qiu Yuzhou Date: Thu, 22 Oct 2026 16:35:33 +0800 Subject: [PATCH] fix(packaging): reject duplicate releases before build --- ShadowsocksX-NG2/Taskfile.package.yml | 3 +++ docs/distribution.md | 2 ++ 2 files changed, 5 insertions(+) diff --git a/ShadowsocksX-NG2/Taskfile.package.yml b/ShadowsocksX-NG2/Taskfile.package.yml index 281c26b8..746935ba 100644 --- a/ShadowsocksX-NG2/Taskfile.package.yml +++ b/ShadowsocksX-NG2/Taskfile.package.yml @@ -18,7 +18,10 @@ tasks: msg: 'MARKETING_VERSION must be a release version (for example, 2.1.0 or v2.0.0-alpha-1).' - sh: '{{if regexMatch "^[0-9]+(\\.[0-9]+){0,2}$" .CURRENT_PROJECT_VERSION}}true{{else}}false{{end}}' msg: 'CURRENT_PROJECT_VERSION must have one to three numeric components.' + - sh: 'test ! -e {{.RELEASE_PATH | shellQuote}} && test ! -L {{.RELEASE_PATH | shellQuote}}' + msg: 'This release already exists in dist; existing releases are never overwritten: {{.RELEASE_PATH}}' vars: + RELEASE_PATH: '{{.DIST_DIR}}/ShadowsocksX-NG2-{{.MARKETING_VERSION}}-{{.CURRENT_PROJECT_VERSION}}-arm64.dmg' RUN_DIR: sh: | mkdir -p {{.BUILD_DIR | shellQuote}}/packaging diff --git a/docs/distribution.md b/docs/distribution.md index 330d0e61..567f35df 100644 --- a/docs/distribution.md +++ b/docs/distribution.md @@ -71,6 +71,8 @@ DMG 文件名保留完整发布版本:`ShadowsocksX-NG2-v2.0.0-alpha-1-22-arm6 DMG 复用 App 实际签名证书的 SHA-1 指纹选择签名身份,使用安全时间戳。公证仅接收 `NOTARY_PROFILE` 指定的钥匙串配置名称。发布产物示例为 `dist/ShadowsocksX-NG2-2.1.0-21-arm64.dmg`。名称保留传入的完整发布版本。构建号始终从 App 的 Info.plist 读取。打包前校验发布版本的数字部分与 App 版本一致,防止文件名与包内版本不符。已有同名发布产物时明确失败,不覆盖文件。 +`package` 根据必填版本参数,在工具检查、公证凭据检查、冒烟和构建之前检查同名产物。制盘、公证和最终发布时仍保留覆盖保护,防止并发打包产生覆盖。 + 每次构建使用独立的 `.build/packaging/run-*/`,其中保留签名 DMG、构建产物与冒烟结果。每次公证在 `.build/notarization/run-*/` 保存提交响应、提交编号、等待结果与 Apple 诊断日志。控制台打印这两个目录。提交和等待分别执行,等待中断时仍保留提交编号。公证等待上限为 30 分钟;本地等待结束后 Apple 仍可能继续处理。 公证失败后,可以直接重跑保留的签名 DMG,无须重新构建: