diff --git a/scripts/ci/release-client.sh b/scripts/ci/release-client.sh index 953d600..b007823 100644 --- a/scripts/ci/release-client.sh +++ b/scripts/ci/release-client.sh @@ -44,8 +44,13 @@ for line in raw.splitlines(keepends=True): if line.startswith('version:'): out.append('version: "%s"\n' % ver) elif line.startswith('build_number:'): + # build_number 由版本号公式派生(major*10000+minor*100+patch),与 pubspec + # 的 CFBundleVersion 同源、天然单调。旧法「读仓库 version.yaml +1」有 bug: + # CI/本地发版都不回写仓库那份,它永远冻结 → 每次都算出同一个值(见 1.1.9/1.1.10 + # 均为 5 的历史)。改公式后无状态依赖,CI 与 local-release 结果一致。 try: - b = int(line.split(':', 1)[1].strip()) + 1 + _mj, _mn, _pt = (int(x) for x in ver.split('.')[:3]) + b = _mj * 10000 + _mn * 100 + _pt except Exception: b = 1 out.append('build_number: %d\n' % b) diff --git a/scripts/local-release.sh b/scripts/local-release.sh index 1c13fca..4d9e663 100755 --- a/scripts/local-release.sh +++ b/scripts/local-release.sh @@ -381,8 +381,12 @@ for line in raw.splitlines(keepends=True): if line.startswith('version:'): out.append('version: "%s"\n' % ver) elif line.startswith('build_number:'): + # build_number 由版本号公式派生(major*10000+minor*100+patch),与 pubspec + # 的 CFBundleVersion(BUILD)同源、天然单调。旧法「读仓库 version.yaml +1」有 bug: + # 仓库那份从不回写、永远冻结 → 每次都算出同一个值(1.1.9/1.1.10 均为 5)。 try: - b = int(line.split(':', 1)[1].strip()) + 1 + _mj, _mn, _pt = (int(x) for x in ver.split('.')[:3]) + b = _mj * 10000 + _mn * 100 + _pt except Exception: b = 1 out.append('build_number: %d\n' % b)