#!/usr/bin/env python3 """Bump all rule-engine release metadata from the workspace version.""" from pathlib import Path import re cargo_path = Path("Cargo.toml") cargo = cargo_path.read_text() match = re.search(r'(?ms)(^\[workspace\.package\]\s+.*?^version\s*=\s*")(\d+)\.(\d+)\.(\d+)(")', cargo) if not match: raise SystemExit("Missing [workspace.package].version") major, minor, patch = map(int, match.group(2, 3, 4)) current_version = f"{major}.{minor}.{patch}" version = f"{major}.{minor}.{patch + 1}" cargo_path.write_text(cargo[:match.start(2)] + version + cargo[match.end(4):]) lock_path = Path("Cargo.lock") lock = lock_path.read_text() lock_pattern = rf'(?ms)^\[\[package\]\]\nname\s*=\s*"ai-spel-rule-engine"\nversion\s*=\s*"{re.escape(current_version)}"' if not re.search(lock_pattern, lock): raise SystemExit(f"Missing ai-spel-rule-engine {current_version} package in {lock_path}") lock_path.write_text(re.sub( lock_pattern, f'[[package]]\nname = "ai-spel-rule-engine"\nversion = "{version}"', lock, count=1, )) for path, pattern in ( (Path("deploy/helm/ai-spel-rule-engine/Chart.yaml"), r'(?m)^version:\s*\d+\.\d+\.\d+\s*$'), (Path("deploy/helm/ai-spel-rule-engine/Chart.yaml"), r'(?m)^appVersion:\s*"\d+\.\d+\.\d+"\s*$'), (Path("deploy/argocd/application.yaml"), r'(?m)^\s+targetRevision:\s*"\d+\.\d+\.\d+"\s*$'), ): contents = path.read_text() if not re.search(pattern, contents): raise SystemExit(f"Missing version field in {path}") replacement = f'version: {version}' if pattern.startswith(r'(?m)^version') else ( f'appVersion: "{version}"' if pattern.startswith(r'(?m)^appVersion') else f' targetRevision: "{version}"' ) path.write_text(re.sub(pattern, replacement, contents, count=1)) schema_path = Path("contracts/rule-evaluation-v1.schema.json") schema = schema_path.read_text() schema_pattern = r'(?m)^ "\$id": "https://gitea\.k3s\.k0\.nu/ai-spel/ai-spel-rule-engine/raw/tag/v\d+\.\d+\.\d+/contracts/rule-evaluation-v1\.schema\.json",$' if not re.search(schema_pattern, schema): raise SystemExit(f"Missing versioned schema id in {schema_path}") schema_path.write_text(re.sub( schema_pattern, f' "$id": "https://gitea.k3s.k0.nu/ai-spel/ai-spel-rule-engine/raw/tag/v{version}/contracts/rule-evaluation-v1.schema.json",', schema, count=1, )) print(version)