diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9949c58..29e66f9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -375,6 +375,7 @@ jobs: exit 0 fi + # Cascading channels: each stability updates itself and all lower levels export PY_STABILITY="$STABILITY" PY_VERSION="$VERSION" PY_SHA256="$SHA256" \ PY_ZIP_NAME="$ZIP_NAME" PY_TAG="$TAG" PY_DATE="$DATE" \ PY_GITEA_ORG="$GITEA_ORG" PY_GITEA_REPO="$GITEA_REPO" @@ -390,73 +391,53 @@ jobs: gitea_org = os.environ["PY_GITEA_ORG"] gitea_repo = os.environ["PY_GITEA_REPO"] - # Map stability to the value in updates.xml - tag_map = { - "development": "development", - "alpha": "alpha", - "beta": "beta", - "rc": "rc", - "stable": "stable", + # Cascade map: each level updates itself + all lower levels + cascade = { + "stable": ["development", "alpha", "beta", "rc", "stable"], + "rc": ["development", "alpha", "beta", "rc"], + "beta": ["development", "alpha", "beta"], + "alpha": ["development", "alpha"], + "development": ["development"], } - xml_tag = tag_map.get(stability, "development") + targets = cascade.get(stability, [stability]) with open("updates.xml", "r") as f: content = f.read() - # Build regex to find the specific block for this stability tag - # Use negative lookahead to avoid matching across multiple blocks - block_pattern = r"((?:(?!).)*?" + re.escape(xml_tag) + r".*?)" - match = re.search(block_pattern, content, re.DOTALL) - - if not match: - print(f"No block found for {xml_tag}") - exit(0) - - block = match.group(1) - original_block = block - - # Update version - block = re.sub(r"[^<]*", f"{version}", block) - - # Update creation date - block = re.sub(r"[^<]*", f"{date}", block) - - # Update or add SHA-256 - if "" in block: - block = re.sub(r"[^<]*", f"{sha256}", block) - else: - block = block.replace("", f"\n {sha256}") - - # Update Gitea download URL gitea_url = f"https://git.mokoconsulting.tech/{gitea_org}/{gitea_repo}/releases/download/{tag}/{zip_name}" - block = re.sub( - r"(]*>)https://git\.mokoconsulting\.tech/[^<]*()", - rf"\g<1>{gitea_url}\g<2>", - block - ) - # Update GitHub download URL only for RC and stable (others are Gitea-only) - if stability in ("rc", "stable"): - gh_url = f"https://github.com/mokoconsulting-tech/{gitea_repo}/releases/download/{tag}/{zip_name}" + for xml_tag in targets: + block_pattern = r"((?:(?!).)*?" + re.escape(xml_tag) + r".*?)" + match = re.search(block_pattern, content, re.DOTALL) + + if not match: + print(f"No block for {xml_tag} — skipping") + continue + + block = match.group(1) + original = block + + block = re.sub(r"[^<]*", f"{version}", block) + block = re.sub(r"[^<]*", f"{date}", block) + + if "" in block: + block = re.sub(r"[^<]*", f"{sha256}", block) + else: + block = block.replace("", f"\n {sha256}") + block = re.sub( - r"(]*>)https://github\.com/[^<]*()", - rf"\g<1>{gh_url}\g<2>", - block - ) - else: - # Remove any GitHub download URL for dev/alpha/beta - block = re.sub( - r"\n\s*]*>https://github\.com/[^<]*", - "", + r"(]*>)https://git\.mokoconsulting\.tech/[^<]*()", + rf"\g<1>{gitea_url}\g<2>", block ) - content = content.replace(original_block, block) + content = content.replace(original, block) + print(f"Updated {xml_tag} channel") with open("updates.xml", "w") as f: f.write(content) - print(f"Updated {xml_tag} channel: version={version}, sha={sha256[:16]}..., date={date}") + print(f"Cascaded {stability} → {', '.join(targets)}: v={version}, sha={sha256[:16]}...") PYEOF - name: "Commit updates.xml to current branch and main"