#!/usr/bin/env python3 import argparse import json import subprocess vers_path = ".gitea/workflows/k8s_vers.json" def run(args): result = subprocess.run( args, capture_output = True, text = True ) if result.stderr is not None: print(result.stderr) return False print(result.stdout) return True def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) parser.add_argument( "--branch", help="used to pick the appropriate VM template to clone", choices=["sisyphus", "c10f2", "p10", "p11"], ) parser.add_argument( "--other-build-args", help="other build arg as a string", ) parser.add_argument( "--workspace", help="workspace, path to builing script", ) return parser.parse_args() def main() -> None: args = parse_args() if args.branch is None or args.branch == "": raise RuntimeError("Empty branch setting. Check your choise --branch.") data = {} with open(f"{args.workspace}/{vers_path}", "r") as f: data = json.load(f) i = 0 for br in data.get("branches"): if br.get("name") == args.branch: break i += 1 vers_branch = data.get("branches")[i].get("versions") if vers_branch == None : raise RuntimeError(f"Unknown branch: {args.branch!r}. In {vers_path} no k8s-versions list.") images_to_rebuild="k8s/kube-apiserver k8s/kube-scheduler k8s/kube-controller-manager k8s/kube-proxy k8s/kubelet k8s/coredns k8s/etcd" for ver in vers_branch: kube_ver = ver.get("kube-version") dns_ver = ver.get("coredns") etcd_ver = ver.get("etcd", kube_ver) if kube_ver != None and dns_ver != None: packs_string=f"-b {args.branch} " + "--package-versions '{\"k8s/kube-apiserver\":" + f"\"{kube_ver}\",\"k8s/kube-scheduler\":\"{kube_ver}\",\"k8s/kube-controller-manager\":\"{kube_ver}\",\"k8s/kube-proxy\":\"{kube_ver}\",\"k8s/kubelet\":\"{kube_ver}\",\"k8s/coredns\":\"{dns_ver}\",\"k8s/etcd\":\"{etcd_ver}\"" + "}'" if ver.get("latest") != None and ver.get("latest"): packs_string=f"-o k8s --latest {args.branch} "+packs_string else: packs_string=f"-i {images_to_rebuild} "+packs_string print(f'Run build command: {args.workspace}/build.py {args.other_build_args} {packs_string}') subprocess.run(f"{args.workspace}/build.py {args.other_build_args} {packs_string}", shell=True) subprocess.run("podman rmi -f --all", shell=True) if __name__ == "__main__": main()