Files
image-forge/.gitea/workflows/k8s_buildscript.py

77 lines
2.7 KiB
Python
Executable File

#!/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()