fix(ci): correct updates.xml regex to target stable channel block only
The previous regex matched across channel boundaries because <version> appears before <tags> in the XML. Fixed by matching the entire <update> block containing the target channel tag, then replacing fields within that block only. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -183,18 +183,18 @@ jobs:
|
||||
sha = data["sha"]
|
||||
content = base64.b64decode(data["content"]).decode("utf-8")
|
||||
|
||||
# Update stable channel version, infourl, and docker tag
|
||||
content = re.sub(
|
||||
r"(<tags><tag>stable</tag></tags>[\s\S]*?<version>)[^<]*(</version>)",
|
||||
rf"\g<1>{moko_ver}\2", content)
|
||||
content = re.sub(
|
||||
r"(<tags><tag>stable</tag></tags>[\s\S]*?<infourl[^>]*>)[^<]*(</infourl>)",
|
||||
rf"\g<1>{release_url}\2", content)
|
||||
content = re.sub(
|
||||
r"(<tags><tag>stable</tag></tags>[\s\S]*?<downloadurl[^>]*>)[^<]*(</downloadurl>)",
|
||||
rf"\g<1>{docker_img}\2", content)
|
||||
# Update stable channel — match the <update> block containing <tag>stable</tag>
|
||||
def replace_channel(xml, channel, ver, url, docker):
|
||||
pattern = rf"(<update>\s*<name>MokoGitea</name>[\s\S]*?<tags><tag>{channel}</tag></tags>[\s\S]*?</update>)"
|
||||
def replacer(m):
|
||||
block = m.group(1)
|
||||
block = re.sub(r"<version>[^<]*</version>", f"<version>{ver}</version>", block)
|
||||
block = re.sub(r"(<infourl[^>]*>)[^<]*(</infourl>)", rf"\1{url}\2", block)
|
||||
block = re.sub(r"(<downloadurl[^>]*>)[^<]*(</downloadurl>)", rf"\1{docker}\2", block)
|
||||
return block
|
||||
return re.sub(pattern, replacer, xml)
|
||||
|
||||
# Also update VERSION comment at top
|
||||
content = replace_channel(content, "stable", moko_ver, release_url, docker_img)
|
||||
content = re.sub(r"VERSION: [^\n]*", f"VERSION: {moko_ver}", content)
|
||||
|
||||
# Push updated file
|
||||
|
||||
Reference in New Issue
Block a user