diff --git a/.gitea/workflows/check_manifest.yaml b/.gitea/workflows/check_manifest.yaml index daa1102..19ac1b5 100644 --- a/.gitea/workflows/check_manifest.yaml +++ b/.gitea/workflows/check_manifest.yaml @@ -17,7 +17,7 @@ jobs: object-format: 'sha256' - name: Setup dependencies run: | - zypper in -y python3-PyYAML + zypper in -y python3-ruamel.yaml - name: Check release manifest run: | - python3 .obs/manifest-check.py \ No newline at end of file + python3 .obs/manifest-check.py --check diff --git a/.obs/manifest-check.py b/.obs/manifest-check.py old mode 100644 new mode 100755 index f4e05bc..eb211e6 --- a/.obs/manifest-check.py +++ b/.obs/manifest-check.py @@ -1,11 +1,15 @@ #!/usr/bin/python3 -import yaml +import ruamel.yaml +import pathlib +import argparse import sys +yaml = ruamel.yaml.YAML() + def get_chart_version(chart_name: str) -> str: with open(f"./{chart_name}-chart/Chart.yaml") as f: - chart = yaml.safe_load(f) + chart = yaml.load(f) return chart["version"] def get_charts(chart): @@ -21,22 +25,57 @@ def get_charts(chart): def get_charts_list(): with open("./release-manifest-image/release_manifest.yaml") as f: - manifest = yaml.safe_load(f) + manifest = yaml.load(f) charts = {} for chart in manifest["spec"]["components"]["workloads"]["helm"]: charts.update(get_charts(chart)) return charts -def main(): - print("Checking charts versions in release manifest") +def check_charts(fix: bool) -> bool: success = True charts = get_charts_list() + to_fix = {} for chart in charts: expected_version = get_chart_version(chart) if expected_version != charts[chart]: success = False + to_fix[f'%%CHART_REPO%%/%%CHART_PREFIX%%{chart}'] = expected_version print(f"{chart}: Expected: {expected_version}, Got: {charts[chart]}") - if not success: + if fix and not success: + fix_charts(to_fix) + return True + return success + +def fix_charts(to_fix): + manifest_path = pathlib.Path("./release-manifest-image/release_manifest.yaml") + manifest = yaml.load(manifest_path) + yaml.indent(mapping=2, sequence=4, offset=2) + yaml.width = 4096 + for chart_index, chart in enumerate(manifest["spec"]["components"]["workloads"]["helm"]): + changed = False + if chart["chart"] in to_fix.keys(): + changed = True + chart["version"] = to_fix[chart["chart"]] + for subchart_index, subchart in enumerate(chart.get("addonCharts", [])): + if subchart["chart"] in to_fix.keys(): + changed = True + subchart["version"] = to_fix[subchart["chart"]] + chart["addonCharts"][subchart_index] = subchart + for subchart_index, subchart in enumerate(chart.get("dependencyCharts", [])): + if subchart["chart"] in to_fix.keys(): + changed = True + subchart["version"] = to_fix[subchart["chart"]] + chart["dependencyCharts"][subchart_index] = subchart + if changed: + manifest["spec"]["components"]["workloads"]["helm"][chart_index] = chart + yaml.dump(manifest, manifest_path) + +def main(): + print("Checking charts versions in release manifest") + parser = argparse.ArgumentParser() + parser.add_argument('-c', '--check', action='store_true') + args = parser.parse_args() + if not check_charts(not args.check): sys.exit(1) else: print("All local charts in release manifest are using the right version") diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..6297996 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,10 @@ +repos: + - repo: local + hooks: + - id: check-manifest + name: "Check release-manifest" + entry: .obs/manifest-check.py + language: python + additional_dependencies: ['ruamel.yaml'] + pass_filenames: false + always_run: true diff --git a/release-manifest-image/release_manifest.yaml b/release-manifest-image/release_manifest.yaml index 5da3346..94c7f2e 100644 --- a/release-manifest-image/release_manifest.yaml +++ b/release-manifest-image/release_manifest.yaml @@ -9,81 +9,81 @@ spec: k3s: version: v1.32.4+k3s1 coreComponents: - - name: traefik-crd - version: 34.2.1+up34.2.0 - type: HelmChart - - name: traefik - version: 34.2.1+up34.2.0 - type: HelmChart - - name: local-path-provisioner - containers: + - name: traefik-crd + version: 34.2.1+up34.2.0 + type: HelmChart + - name: traefik + version: 34.2.1+up34.2.0 + type: HelmChart - name: local-path-provisioner - image: rancher/local-path-provisioner:v0.0.31 - type: Deployment - - name: coredns - containers: + containers: + - name: local-path-provisioner + image: rancher/local-path-provisioner:v0.0.31 + type: Deployment - name: coredns - image: rancher/mirrored-coredns-coredns:1.12.1 - type: Deployment - - name: metrics-server - containers: + containers: + - name: coredns + image: rancher/mirrored-coredns-coredns:1.12.1 + type: Deployment - name: metrics-server - image: rancher/mirrored-metrics-server:v0.7.2 - type: Deployment + containers: + - name: metrics-server + image: rancher/mirrored-metrics-server:v0.7.2 + type: Deployment rke2: version: v1.32.4+rke2r1 coreComponents: - - name: rke2-cilium - version: 1.17.300 - type: HelmChart - - name: rke2-canal - version: v3.29.3-build2025040801 - type: HelmChart - - name: rke2-calico-crd - version: v3.29.101 - type: HelmChart - - name: rke2-calico - version: v3.29.300 - type: HelmChart - - name: rke2-coredns - version: 1.39.201 - type: HelmChart - - name: rke2-ingress-nginx - version: 4.12.101 - type: HelmChart - - name: rke2-metrics-server - version: 3.12.200 - type: HelmChart - - name: rancher-vsphere-csi - version: 3.3.1-rancher900 - type: HelmChart - - name: rancher-vsphere-cpi - version: 1.10.000 - type: HelmChart - - name: harvester-cloud-provider - version: 0.2.900 - type: HelmChart - - name: harvester-csi-driver - version: 0.1.2300 - type: HelmChart - - name: rke2-snapshot-controller-crd - version: 4.0.002 - type: HelmChart - - name: rke2-snapshot-controller - version: 4.0.002 - type: HelmChart - # Deprecated this empty chart addon can be removed in v1.34 - - name: rke2-snapshot-validation-webhook - version: 0.0.0 - type: HelmChart + - name: rke2-cilium + version: 1.17.300 + type: HelmChart + - name: rke2-canal + version: v3.29.3-build2025040801 + type: HelmChart + - name: rke2-calico-crd + version: v3.29.101 + type: HelmChart + - name: rke2-calico + version: v3.29.300 + type: HelmChart + - name: rke2-coredns + version: 1.39.201 + type: HelmChart + - name: rke2-ingress-nginx + version: 4.12.101 + type: HelmChart + - name: rke2-metrics-server + version: 3.12.200 + type: HelmChart + - name: rancher-vsphere-csi + version: 3.3.1-rancher900 + type: HelmChart + - name: rancher-vsphere-cpi + version: 1.10.000 + type: HelmChart + - name: harvester-cloud-provider + version: 0.2.900 + type: HelmChart + - name: harvester-csi-driver + version: 0.1.2300 + type: HelmChart + - name: rke2-snapshot-controller-crd + version: 4.0.002 + type: HelmChart + - name: rke2-snapshot-controller + version: 4.0.002 + type: HelmChart + # Deprecated this empty chart addon can be removed in v1.34 + - name: rke2-snapshot-validation-webhook + version: 0.0.0 + type: HelmChart operatingSystem: - version: "6.1" - zypperID: "SL-Micro" - cpeScheme: "cpe:/o:suse:sl-micro:6.1" - prettyName: "SUSE Linux Micro 6.1" + version: '6.1' + zypperID: SL-Micro + cpeScheme: cpe:/o:suse:sl-micro:6.1 + prettyName: SUSE Linux Micro 6.1 supportedArchs: - - "x86_64" - - "aarch64" + - x86_64 + - aarch64 workloads: helm: - prettyName: Rancher @@ -106,20 +106,20 @@ spec: repository: https://charts.rancher.io - prettyName: MetalLB releaseName: metallb - chart: "%%CHART_REPO%%/%%CHART_PREFIX%%metallb" - version: "%%CHART_MAJOR%%.0.0+up0.14.9" + chart: '%%CHART_REPO%%/%%CHART_PREFIX%%metallb' + version: '%%CHART_MAJOR%%.0.0+up0.14.9' - prettyName: CDI releaseName: cdi - chart: "%%CHART_REPO%%/%%CHART_PREFIX%%cdi" - version: "%%CHART_MAJOR%%.0.0+up0.5.0" + chart: '%%CHART_REPO%%/%%CHART_PREFIX%%cdi' + version: '%%CHART_MAJOR%%.0.0+up0.5.0' - prettyName: KubeVirt releaseName: kubevirt - chart: "%%CHART_REPO%%/%%CHART_PREFIX%%kubevirt" - version: "%%CHART_MAJOR%%.0.0+up0.5.0" + chart: '%%CHART_REPO%%/%%CHART_PREFIX%%kubevirt' + version: '%%CHART_MAJOR%%.0.0+up0.5.0' addonCharts: - releaseName: kubevirt-dashboard-extension - chart: "%%CHART_REPO%%/%%CHART_PREFIX%%kubevirt-dashboard-extension" - version: "%%CHART_MAJOR%%.0.2+up1.3.2" + chart: '%%CHART_REPO%%/%%CHART_PREFIX%%kubevirt-dashboard-extension' + version: '%%CHART_MAJOR%%.0.2+up1.3.2' - prettyName: NeuVector releaseName: neuvector chart: neuvector @@ -137,8 +137,8 @@ spec: version: 2.1.3 - prettyName: EndpointCopierOperator releaseName: endpoint-copier-operator - chart: "%%CHART_REPO%%/%%CHART_PREFIX%%endpoint-copier-operator" - version: "%%CHART_MAJOR%%.0.1+up0.3.0" + chart: '%%CHART_REPO%%/%%CHART_PREFIX%%endpoint-copier-operator' + version: '%%CHART_MAJOR%%.0.1+up0.3.0' - prettyName: Elemental releaseName: elemental-operator chart: oci://registry.suse.com/rancher/elemental-operator-chart @@ -154,29 +154,29 @@ spec: version: 3.0.0 - prettyName: SRIOV releaseName: sriov-network-operator - chart: "%%CHART_REPO%%/%%CHART_PREFIX%%sriov-network-operator" - version: "%%CHART_MAJOR%%.0.2+up1.5.0" + chart: '%%CHART_REPO%%/%%CHART_PREFIX%%sriov-network-operator' + version: '%%CHART_MAJOR%%.0.2+up1.5.0' dependencyCharts: - releaseName: sriov-crd - chart: "%%CHART_REPO%%/%%CHART_PREFIX%%sriov-crd" - version: "%%CHART_MAJOR%%.0.2+up1.5.0" + chart: '%%CHART_REPO%%/%%CHART_PREFIX%%sriov-crd' + version: '%%CHART_MAJOR%%.0.2+up1.5.0' - prettyName: Akri releaseName: akri - chart: "%%CHART_REPO%%/%%CHART_PREFIX%%akri" - version: "%%CHART_MAJOR%%.0.0+up0.12.20" + chart: '%%CHART_REPO%%/%%CHART_PREFIX%%akri' + version: '%%CHART_MAJOR%%.0.0+up0.12.20' addonCharts: - releaseName: akri-dashboard-extension - chart: "%%CHART_REPO%%/%%CHART_PREFIX%%akri-dashboard-extension" - version: "%%CHART_MAJOR%%.0.2+up1.3.1" + chart: '%%CHART_REPO%%/%%CHART_PREFIX%%akri-dashboard-extension' + version: '%%CHART_MAJOR%%.0.2+up1.3.1' - prettyName: Metal3 releaseName: metal3 - chart: "%%CHART_REPO%%/%%CHART_PREFIX%%metal3" - version: "%%CHART_MAJOR%%.0.10+up0.12.0" + chart: '%%CHART_REPO%%/%%CHART_PREFIX%%metal3' + version: '%%CHART_MAJOR%%.0.10+up0.12.0' - prettyName: RancherTurtles releaseName: rancher-turtles - chart: "%%CHART_REPO%%/%%CHART_PREFIX%%rancher-turtles" - version: "%%CHART_MAJOR%%.0.4+up0.20.0" + chart: '%%CHART_REPO%%/%%CHART_PREFIX%%rancher-turtles' + version: '%%CHART_MAJOR%%.0.4+up0.20.0' - prettyName: RancherTurtlesAirgapResources releaseName: rancher-turtles-airgap-resources - chart: "%%CHART_REPO%%/%%CHART_PREFIX%%rancher-turtles-airgap-resources" - version: "%%CHART_MAJOR%%.0.4+up0.20.0" + chart: '%%CHART_REPO%%/%%CHART_PREFIX%%rancher-turtles-airgap-resources' + version: '%%CHART_MAJOR%%.0.4+up0.20.0'