refactor: master 沿用 release 轨道名,develop 用 develop,feature 用 feature

上一版把 master 的轨道也改名成 master,会把历史构建号搬到新键上。
改为 master/main 继续用现有的 release 轨(build_map 原地保留),
只有 develop 等其它上架分支新建以分支名命名的轨道并复制一份构建号。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BJaZ913U5GVdTkYHiRpvDU
This commit is contained in:
shenlei
2026-09-02 10:39:52 +09:00
co-authored by Claude Opus 5
parent bf7a5a0449
commit 9b4667cab5
8 changed files with 64 additions and 59 deletions
+21 -19
View File
@@ -93,16 +93,18 @@ DEFAULT_SERVERS = {
DEFAULT_APP_VER = "2.180.0"
# 版本轨道:每个上架分支master / develop / release-* 等)各有一条独立轨道,
# 轨道名即分支名,App_Store 打包时构建号自增;所有自测分支共用一条 feature 轨,
# 构建号永不自增。各轨道的 App_Ver 互不影响
# 版本轨道:每个上架分支各有一条独立轨道,App_Store 打包时构建号自增;
# 所有自测分支共用一条 feature 轨,构建号永不自增。各轨道的 App_Ver 互不影响。
# 轨道名:master/main 沿用历史名称 release,其余上架分支以分支名命名(develop、hotfix-x…)
KIND_RELEASE = "release"
KIND_FEATURE = "feature"
TRACK_RELEASE = "release" # master/main 的上架轨(沿用旧名,历史构建号原地保留)
TRACK_FEATURE = "feature" # 自测轨的固定轨道名
LEGACY_RELEASE_TRACK = "release" # 旧版 master/develop 共用的上架轨,迁移时按分支拆开
FIXED_TRACKS = (TRACK_RELEASE, TRACK_FEATURE)
# 按名字推断轨道的默认规则;config["branch_track"] 中的显式配置优先。
RELEASE_BRANCH_NAMES = {"master", "main", "develop", "dev"}
MASTER_BRANCH_NAMES = {"master", "main"}
RELEASE_BRANCH_NAMES = MASTER_BRANCH_NAMES | {"develop", "dev"}
RELEASE_BRANCH_PREFIXES = ("release/", "release-", "hotfix/", "hotfix-")
@@ -113,8 +115,10 @@ def _is_release_branch(branch: str) -> bool:
def _release_track_name(branch: str) -> str:
"""上架轨道名即分支名与固定的自测轨重名时加前缀避让。"""
return f"release:{branch}" if branch == TRACK_FEATURE else branch
"""上架分支的轨道名:master/main 为 release,其余即分支名与固定轨重名时避让"""
if (branch or "").strip().lower() in MASTER_BRANCH_NAMES:
return TRACK_RELEASE
return f"release:{branch}" if branch in FIXED_TRACKS else branch
def _default_track_for_branch(branch: str) -> str:
@@ -173,7 +177,8 @@ def _ensure_versions(config: dict) -> bool:
"""确保 versions 为「每个上架分支一条轨 + 一条 feature 轨」结构,并迁移旧配置。
旧式单轨 ``{"app_ver": ..., "build_map": ...}`` 和旧的 master/develop 共用
``release`` 轨,都会按上架分支拆成各自独立的轨道,并复制已用构建号
``release`` 轨,都会按上架分支拆开:master/main 留在 release 轨(历史构建号原地
保留),develop 等其它上架分支新建以分支名命名的轨道,并复制一份已用构建号,
使拆分后每个分支都从原来的构建号继续递增。
"""
versions = config.get("versions")
@@ -191,16 +196,15 @@ def _ensure_versions(config: dict) -> bool:
versions["tracks"] = tracks
changed = True
else:
# 迁移后的轨道都带 kind;没有 kind 的 release 轨即旧的共用上架轨
old = tracks.get(LEGACY_RELEASE_TRACK)
if isinstance(old, dict) and "kind" not in old:
build_map = old.get("build_map")
# 迁移后的轨道都带 kind;没有 kind 的 release 轨即旧的 master/develop 共用轨,
# 它继续作为 master/main 的轨道,同时作为其它上架分支新轨的初值。
shared = tracks.get(TRACK_RELEASE)
if isinstance(shared, dict) and "kind" not in shared:
build_map = shared.get("build_map")
legacy = {
"app_ver": old.get("app_ver") or DEFAULT_APP_VER,
"app_ver": shared.get("app_ver") or DEFAULT_APP_VER,
"build_map": build_map if isinstance(build_map, dict) else {},
}
tracks.pop(LEGACY_RELEASE_TRACK)
changed = True
feature = tracks.get(TRACK_FEATURE)
if not isinstance(feature, dict):
@@ -230,8 +234,8 @@ def _ensure_versions(config: dict) -> bool:
changed = True
for branch in config.get("branches", []) or []:
name = branch_track.get(branch)
if name == LEGACY_RELEASE_TRACK and LEGACY_RELEASE_TRACK not in tracks:
# 旧的共用上架轨 → 该分支自己的轨
if name == TRACK_RELEASE and legacy is not None:
# 旧的共用上架轨 → master/main 留在 release 轨,其余分支拆到自己的轨
name = _release_track_name(branch)
if not isinstance(name, str) or not name:
name = _default_track_for_branch(branch)
@@ -263,8 +267,6 @@ def get_track_name(config: dict, branch: str) -> str:
tracks = (config.get("versions") or {}).get("tracks") or {}
if isinstance(name, str) and name in tracks:
return name
if name == LEGACY_RELEASE_TRACK: # 尚未迁移的旧配置
return _release_track_name(branch)
return _default_track_for_branch(branch)