From d6d501ad99137d3d17d3950e48ea768f0c0848d6d48fbb0f3cf05769ea7285c0 Mon Sep 17 00:00:00 2001 From: Nicolas Belouin Date: Thu, 20 Feb 2025 11:05:47 +0100 Subject: [PATCH 1/6] Sync metadata, revamp PR jobs Signed-off-by: Nicolas Belouin --- .gitea/workflows/pr_project.yaml | 40 ++++++++++++++++ .gitea/workflows/sync_config.yaml | 7 ++- .gitea/workflows/sync_meta.yaml | 41 ++++++++++++++++ .obs/create_projects.sh | 32 +++++++++++++ .obs/render_meta.py | 62 ++++++++++++++++++++++++ .obs/wait_obs.py | 79 +++++++++++++++++++++++++++++++ _meta | 79 +++++++++++++++++++++++++++++++ 7 files changed, 336 insertions(+), 4 deletions(-) create mode 100644 .gitea/workflows/pr_project.yaml create mode 100644 .gitea/workflows/sync_meta.yaml create mode 100644 .obs/create_projects.sh create mode 100644 .obs/render_meta.py create mode 100644 .obs/wait_obs.py create mode 100644 _meta diff --git a/.gitea/workflows/pr_project.yaml b/.gitea/workflows/pr_project.yaml new file mode 100644 index 0000000..b0aae8e --- /dev/null +++ b/.gitea/workflows/pr_project.yaml @@ -0,0 +1,40 @@ +name: Synchronize Project Config +on: + pull_request_target: + types: + - opened + - reopened + - synchronize + - closed + branches-ignore: + - "devel" + +jobs: + sync-prjconf: + runs-on: tumbleweed + steps: + - run: | + zypper in -y python3-jinja2 + mkdir -p ~/.config/osc + cat >~/.config/osc/oscrc <~/.config/osc/oscrc </dev/null | sha256sum)"; then + new_meta="$(python3 .obs/render_meta.py)" + if [ "${meta}" != "$(echo "${new_meta}" | sha256sum)"]; then + echo "${new_meta}" | osc meta prj "${PROJECT}" -F - + fi + else + # Create the projects + bash .obs/create_projects.sh + fi diff --git a/.obs/create_projects.sh b/.obs/create_projects.sh new file mode 100644 index 0000000..86604b1 --- /dev/null +++ b/.obs/create_projects.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +show_help() { + echo "Usage: $(basename $0) [--internal]" + echo "options:" + echo "-h, --help display this help and exit" + echo "-i, --internal create project as internal" + exit 0 +} + +while [[ "$#" -gt 0 ]]; do + case $1 in + -h|--help) show_help;; + -i|--internal) internal="--internal" ;; + *) echo "Unknown parameter passed: $1";show_help ;; + esac + shift +done + +PROJECT="$(grep PROJECT .obs/common.py | sed 's/PROJECT = "\(.*\)"/\1/')" +if [ -n "$internal" ]; then + PROJECT="ISV${PROJECT:3}" +fi + +python3 .obs/render_meta.py ${internal} ToTest | osc meta prj "${PROJECT}:ToTest" -F - +python3 .obs/render_meta.py ${internal} | osc meta prj "${PROJECT}" -F - +osc meta prjconf "${PROJECT}:ToTest" -F _config +osc meta prjconf "${PROJECT}" -F _config + +if [ -z "$internal" ]; then + python3 .obs/sync_packages.py +fi \ No newline at end of file diff --git a/.obs/render_meta.py b/.obs/render_meta.py new file mode 100644 index 0000000..3ed31ec --- /dev/null +++ b/.obs/render_meta.py @@ -0,0 +1,62 @@ +import argparse + +from jinja2 import Template +from common import PROJECT + +def render(base_project, subproject, internal, scm_url=None): + version = base_project.rsplit(':', 1)[-1] + context = { + "base_project": subproject == "", + "title": f"SUSE Edge {version} {subproject}".rstrip(), + } + if subproject == "ToTest": + context["project"] = f"{base_project}:ToTest" + context["description"] = ( + f"This project doesn't build, it stores a snapshot of SUSE Edge {version} " + "project currently going through the automated test layer" + ) + if "Factory" in base_project or internal: + context["release_project"] = f"{base_project}:Snapshot" + elif subproject == "Snapshot": + context["project"] = f"{base_project}:Snapshot" + context["release_project"] = f"{base_project.rsplit(':', 1)[0]}:Containers" + context["for_release"] = True + context["description"] = ( + f"This project doesn't build, it stores a snapshot of SUSE Edge {version} " + "project that passed automated test layer" + ) + elif subproject == "": + context["project"] = base_project + context["release_project"] = f"{base_project}:ToTest" + else: # PR case direct python call + context["base_project"] = True + context["project"] = f"{base_project}:{subproject}" + if scm_url is not None: + context["scm_url"] = scm_url + + with open("_meta") as meta: + template = Template(meta.read()) + return template.render(context) + +def main(): + parser = argparse.ArgumentParser( + prog='ProgramName', + description='What the program does', + epilog='Text at the bottom of help') + parser.add_argument("subproject", default="", choices=["", "ToTest", "Snapshot"], nargs="?") + parser.add_argument("--internal", action="store_true") + parser.add_argument("--pr") + parser.add_argument("--scm-url") + args = parser.parse_args() + base_project = PROJECT.replace("isv", "ISV", 1) if args.internal else PROJECT + + print(render( + base_project=base_project, + subproject=args.subproject if args.pr is None else f"Staging:PR-{args.pr}", + internal=args.internal, + scm_url=args.scm_url, + )) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/.obs/wait_obs.py b/.obs/wait_obs.py new file mode 100644 index 0000000..8f4ea1d --- /dev/null +++ b/.obs/wait_obs.py @@ -0,0 +1,79 @@ +import xml.etree.ElementTree as ET +import subprocess +import time +import os + +from collections import Counter + +def get_buildstatus(project: str) -> ET.Element: + for _ in range(5): + try: + output = subprocess.check_output(["osc", "pr", "--xml", project]) + return ET.fromstring(output) + except subprocess.CalledProcessError: + continue + +def do_wait(project:str, commit:str) -> ET.Element: + last_state = None + while True: + time.sleep(5) + status = get_buildstatus(project) + if last_state == status.get("state"): + continue + else: + last_state = status.get("state") + + scminfo = { e.text for e in status.findall(".//scminfo") } + if len(scminfo) != 1 or scminfo.pop() != commit: + print("Waiting for OBS to sync with SCM") + continue + + if not all([ e.get('state') == "published" and e.get('dirty') is None for e in status.findall("./result")]): + print("Waiting for OBS to finish building") + continue + + return status + +def print_results(status: ET.Element): + results = {} + failed = [] + for e in status.findall("./result"): + repo = results.get(e.get("repository"), {}) + repo[e.get("arch")] = e + results[e.get("repository")] = repo + + for repo in results.keys(): + print(f"{repo}:") + depth=1 + for arch in results[repo].keys(): + counts = Counter() + if repo != "charts": + print(f"\t{arch}:") + depth=2 + for package in results[repo][arch].findall("./status"): + if package.get("code") in ["excluded", "disabled"]: + continue + if package.get("code") in ["failed", "unresolvable", "broken"]: + details = package.findtext("details") + if details: + failed.append(f"{package.get('package')} ({arch}): {details}") + else: + failed.append(f"{package.get('package')} ({arch})") + counts[package.get("code")] += 1 + for (code, count) in counts.items(): + print("\t"*depth, f"{code}: {count}") + + failed.sort() + if failed: + print("\nPackages failing: ") + for fail in failed: + print("\t", fail) + +def main(): + project = os.environ.get("OBS_PROJECT") + sha = os.environ.get("GITEA_SHA") + status = do_wait(project, sha) + print_results(status) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/_meta b/_meta new file mode 100644 index 0000000..6d7e8b9 --- /dev/null +++ b/_meta @@ -0,0 +1,79 @@ +{#- + This template is rendered by the render_meta.py script + it is not automatically enforced by OBS +-#} +{%- set maintainers = [ + "adinov", + "dirkmueller", + "dprodanov", + "edge-engineering", + "jtomasek", + "kzhelyazkov", + "nbelouin", + "steven.hardy", +] -%} +{%- set maintainers = [ + "nbelouin", +] -%} + + {{ title }} + {%- if description is defined %} + {{ description }} + {%- else %} + + {%- endif %} + {%- if scm_url is defined %} + {{ scm_url }} + {%- endif %} +{%- for maintainer in maintainers %} + +{%- endfor %} +{%- if not base_project %} + + + + + + + + + + x86_64 + +{%- endif %} +{%- for repository in ["images", "test_manifest_images"] %} + + {%- if release_project is defined and repository == "images" %} + + {%- endif %} + + + + x86_64 + aarch64 + +{%- endfor %} + + {%- if release_project is defined and not for_release %} + + {%- endif %} + + + x86_64 + aarch64 + + + {%- if release_project is defined and not for_release %} + + {%- endif %} + + x86_64 + + {%- if for_release %} + + + + x86_64 + + {%- endif %} + From 7f93226cd33d1abfa2f6a95a14834da88c4ad853b3dd59e44761a71bff86106f Mon Sep 17 00:00:00 2001 From: Nicolas Belouin Date: Thu, 20 Feb 2025 11:15:35 +0100 Subject: [PATCH 2/6] Fix akri tar step Signed-off-by: Nicolas Belouin --- akri/_service | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/akri/_service b/akri/_service index e983bf4..c04162f 100644 --- a/akri/_service +++ b/akri/_service @@ -10,7 +10,9 @@ akri - + + akri.obsinfo + version.txt ^(.*)$ From 4d824b71cc20b0ab2b5292d78ac8d79c3046b48fa5b70a1c805252f32e491827 Mon Sep 17 00:00:00 2001 From: Nicolas Belouin Date: Thu, 20 Feb 2025 14:01:04 +0100 Subject: [PATCH 3/6] Remove need for workflow Signed-off-by: Nicolas Belouin --- .gitea/workflows/pr_project.yaml | 7 +- .obs/add_package.py | 28 +--- .obs/delete_package.py | 14 -- .obs/wait_obs.py | 6 +- .obs/workflows.yml | 216 ------------------------------- 5 files changed, 11 insertions(+), 260 deletions(-) delete mode 100644 .obs/workflows.yml diff --git a/.gitea/workflows/pr_project.yaml b/.gitea/workflows/pr_project.yaml index b0aae8e..4785c58 100644 --- a/.gitea/workflows/pr_project.yaml +++ b/.gitea/workflows/pr_project.yaml @@ -37,4 +37,9 @@ jobs: SCM_URL: ${{ gitea.event.pull_request.head.repo.clone_url }}#${{ gitea.head_ref }} run: | PROJECT="$(grep PROJECT .obs/common.py | sed 's/PROJECT = "\(.*\)"/\1/')" - python3 .obs/render_meta.py --pr ${{ gitea.event.number }} --scm-url "${SCM_URL}" | osc meta prj "${PROJECT}:Staging:PR-${{ gitea.event.number }}" -F - \ No newline at end of file + python3 .obs/render_meta.py --pr ${{ gitea.event.number }} --scm-url "${SCM_URL}" | osc meta prj "${PROJECT}:Staging:PR-${{ gitea.event.number }}" -F - + - if: gitea.event.action != "closed" + run: | + PROJECT="$(grep PROJECT .obs/common.py | sed 's/PROJECT = "\(.*\)"/\1/')" + export OBS_PROJECT="${PROJECT}:Staging:PR-${{ gitea.event.number }}" + python3 .obs/wait_obs.py \ No newline at end of file diff --git a/.obs/add_package.py b/.obs/add_package.py index c2c6e21..67d913e 100755 --- a/.obs/add_package.py +++ b/.obs/add_package.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -import yaml import subprocess import argparse import os @@ -7,30 +6,6 @@ import os.path from common import PROJECT, REPOSITORY, BRANCH -def add_package_to_workflow(name: str): - modified = False - with open(".obs/workflows.yml", "r") as wf_file: - workflows = yaml.safe_load(wf_file) - if not any( - x - for x in workflows["staging_build"]["steps"] - if x["branch_package"]["source_package"] == name - ): - workflows["staging_build"]["steps"].append( - { - "branch_package": { - "source_project": PROJECT, - "target_project": f"{PROJECT}:Staging", - "source_package": name, - } - } - ) - modified = True - if modified: - with open(".obs/workflows.yml", "w") as wf_file: - yaml.dump(workflows, wf_file) - - def add_package_to_project(name: str): package_meta = f""" @@ -53,7 +28,6 @@ def add_package(package_name: str): os.exit(1) add_package_to_project(package_name) - add_package_to_workflow(package_name) def main(): @@ -65,7 +39,7 @@ def main(): add_package(args.package) - print("Package created in OBS, you can now push the modified workflow file") + print("Package created in OBS !") if __name__ == '__main__': diff --git a/.obs/delete_package.py b/.obs/delete_package.py index 763219c..f529319 100755 --- a/.obs/delete_package.py +++ b/.obs/delete_package.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -import yaml import subprocess import argparse import os @@ -8,18 +7,6 @@ import os.path from common import PROJECT -def delete_package_from_workflow(name: str): - with open(".obs/workflows.yml", "r") as wf_file: - workflows = yaml.safe_load(wf_file) - workflows["staging_build"]["steps"] = [ - x - for x in workflows["staging_build"]["steps"] - if x["branch_package"]["source_package"] != name - ] - with open(".obs/workflows.yml", "w") as wf_file: - yaml.dump(workflows, wf_file) - - def delete_package_from_project(name: str): p = subprocess.run(["osc", "rdelete", PROJECT, name, "-m \"Deleted via delete_package.py\"" ], stdout=subprocess.PIPE) print(p.stdout) @@ -33,7 +20,6 @@ def delete_package(package_name: str): os.exit(1) delete_package_from_project(package_name) - delete_package_from_workflow(package_name) def main(): diff --git a/.obs/wait_obs.py b/.obs/wait_obs.py index 8f4ea1d..ea3ce03 100644 --- a/.obs/wait_obs.py +++ b/.obs/wait_obs.py @@ -34,7 +34,7 @@ def do_wait(project:str, commit:str) -> ET.Element: return status -def print_results(status: ET.Element): +def print_results(status: ET.Element) -> bool: results = {} failed = [] for e in status.findall("./result"): @@ -68,12 +68,14 @@ def print_results(status: ET.Element): print("\nPackages failing: ") for fail in failed: print("\t", fail) + return len(failed) != 0 def main(): project = os.environ.get("OBS_PROJECT") sha = os.environ.get("GITEA_SHA") status = do_wait(project, sha) - print_results(status) + if print_results(status): + return 1 if __name__ == "__main__": main() \ No newline at end of file diff --git a/.obs/workflows.yml b/.obs/workflows.yml deleted file mode 100644 index 74f1ef0..0000000 --- a/.obs/workflows.yml +++ /dev/null @@ -1,216 +0,0 @@ -staging_build: - filters: - event: pull_request - steps: - - branch_package: - source_package: endpoint-copier-operator - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: endpoint-copier-operator-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: endpoint-copier-operator-chart - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: akri - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: akri-agent-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: akri-chart - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: akri-controller-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: akri-dashboard-extension-chart - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: akri-debug-echo-discovery-handler-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: akri-onvif-discovery-handler-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: akri-opcua-discovery-handler-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: akri-udev-discovery-handler-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: akri-webhook-configuration-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: obs-service-set_version - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: cosign - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: frr-k8s - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: kubectl - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: upgrade-controller - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: nm-configurator - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: kube-rbac-proxy - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: edge-image-builder - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: metallb - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: hauler - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: baremetal-operator - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: cdi-chart - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: metallb-chart - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: sriov-crd-chart - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: upgrade-controller-chart - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: edge-image-builder-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: ironic-ipa-downloader-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: upgrade-controller-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: metal3-chart - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: baremetal-operator-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: sriov-network-operator-chart - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: metallb-controller-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: metallb-speaker-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: ironic-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: cri-tools - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: crudini - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: fakeroot - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: ipcalc - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: autoconf - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: rancher-turtles-airgap-resources-chart - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: rancher-turtles-chart - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: kube-rbac-proxy-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: ironic-ipa-ramdisk - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: kubevirt-dashboard-extension-chart - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: kiwi-builder-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: kubevirt-chart - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: release-manifest-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: frr-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: kubectl-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging - - branch_package: - source_package: frr-k8s-image - source_project: isv:SUSE:Edge:Factory - target_project: isv:SUSE:Edge:Factory:Staging From 0d3c83fca159371618bee443a192b3b78adc5465ace6a457e5100a0ca334e1d0 Mon Sep 17 00:00:00 2001 From: Nicolas Belouin <nicolas.belouin@suse.com> Date: Thu, 20 Feb 2025 14:13:37 +0100 Subject: [PATCH 4/6] Fix create_project for internal Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com> --- .obs/create_projects.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.obs/create_projects.sh b/.obs/create_projects.sh index 86604b1..514502f 100644 --- a/.obs/create_projects.sh +++ b/.obs/create_projects.sh @@ -18,14 +18,19 @@ while [[ "$#" -gt 0 ]]; do done PROJECT="$(grep PROJECT .obs/common.py | sed 's/PROJECT = "\(.*\)"/\1/')" +EXTRA_OSC_ARGS="" if [ -n "$internal" ]; then PROJECT="ISV${PROJECT:3}" + EXTRA_OSC_ARGS="-A https://api.suse.de" + + python3 .obs/render_meta.py ${internal} Snapshot | osc ${EXTRA_OSC_ARGS} meta prj "${PROJECT}:Snapshot" -F - + osc ${EXTRA_OSC_ARGS} meta prjconf "${PROJECT}:Snapshot" -F _config fi -python3 .obs/render_meta.py ${internal} ToTest | osc meta prj "${PROJECT}:ToTest" -F - -python3 .obs/render_meta.py ${internal} | osc meta prj "${PROJECT}" -F - -osc meta prjconf "${PROJECT}:ToTest" -F _config -osc meta prjconf "${PROJECT}" -F _config +python3 .obs/render_meta.py ${internal} ToTest | osc ${EXTRA_OSC_ARGS} meta prj "${PROJECT}:ToTest" -F - +python3 .obs/render_meta.py ${internal} | osc ${EXTRA_OSC_ARGS} meta prj "${PROJECT}" -F - +osc ${EXTRA_OSC_ARGS} meta prjconf "${PROJECT}:ToTest" -F _config +osc ${EXTRA_OSC_ARGS} meta prjconf "${PROJECT}" -F _config if [ -z "$internal" ]; then python3 .obs/sync_packages.py From 5a73d61002b63c37b7c204a1d01bf712e892fee5bbcc41e83635c4b633215fa3 Mon Sep 17 00:00:00 2001 From: Nicolas Belouin <nicolas.belouin@suse.com> Date: Thu, 20 Feb 2025 15:57:08 +0100 Subject: [PATCH 5/6] Fix issue with bash being annoying Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com> --- .gitea/workflows/pr_project.yaml | 2 +- .gitea/workflows/sync_config.yaml | 2 +- .gitea/workflows/sync_meta.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/pr_project.yaml b/.gitea/workflows/pr_project.yaml index 4785c58..6de0ce5 100644 --- a/.gitea/workflows/pr_project.yaml +++ b/.gitea/workflows/pr_project.yaml @@ -16,7 +16,7 @@ jobs: - run: | zypper in -y python3-jinja2 mkdir -p ~/.config/osc - cat >~/.config/osc/oscrc <<EOF + cat >~/.config/osc/oscrc <<'EOF' [general] apiurl = https://api.opensuse.org diff --git a/.gitea/workflows/sync_config.yaml b/.gitea/workflows/sync_config.yaml index 173cc77..e4f23fd 100644 --- a/.gitea/workflows/sync_config.yaml +++ b/.gitea/workflows/sync_config.yaml @@ -13,7 +13,7 @@ jobs: steps: - run: | mkdir -p ~/.config/osc - cat >~/.config/osc/oscrc <<EOF + cat >~/.config/osc/oscrc <<'EOF' [general] apiurl = https://api.opensuse.org diff --git a/.gitea/workflows/sync_meta.yaml b/.gitea/workflows/sync_meta.yaml index 433428b..f0178b9 100644 --- a/.gitea/workflows/sync_meta.yaml +++ b/.gitea/workflows/sync_meta.yaml @@ -15,7 +15,7 @@ jobs: - run: | zypper in -y python3-jinja2 mkdir -p ~/.config/osc - cat >~/.config/osc/oscrc <<EOF + cat >~/.config/osc/oscrc <<'EOF' [general] apiurl = https://api.opensuse.org From 34687fb5e96509bcd109122a5b4ea3dac33b1a7d0190a41ff7aa8fa61be968e3 Mon Sep 17 00:00:00 2001 From: Nicolas Belouin <nicolas.belouin@suse.com> Date: Fri, 21 Feb 2025 09:33:48 +0100 Subject: [PATCH 6/6] Reduce number of maintainers to avoid spam Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com> --- .gitea/workflows/sync_meta.yaml | 3 ++- _meta | 10 ---------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/.gitea/workflows/sync_meta.yaml b/.gitea/workflows/sync_meta.yaml index f0178b9..319a87d 100644 --- a/.gitea/workflows/sync_meta.yaml +++ b/.gitea/workflows/sync_meta.yaml @@ -4,7 +4,7 @@ on: branches-ignore: - "devel" paths: - - "_meta" + - "*" # Will trigger on new directories and changes to files in root of repository - ".gitea/workflows/sync_meta.yaml" - ".obs/common.py" @@ -35,6 +35,7 @@ jobs: if [ "${meta}" != "$(echo "${new_meta}" | sha256sum)"]; then echo "${new_meta}" | osc meta prj "${PROJECT}" -F - fi + python3 .obs/sync_packages.py else # Create the projects bash .obs/create_projects.sh diff --git a/_meta b/_meta index 6d7e8b9..fa14c49 100644 --- a/_meta +++ b/_meta @@ -3,17 +3,7 @@ it is not automatically enforced by OBS -#} {%- set maintainers = [ - "adinov", - "dirkmueller", - "dprodanov", "edge-engineering", - "jtomasek", - "kzhelyazkov", - "nbelouin", - "steven.hardy", -] -%} -{%- set maintainers = [ - "nbelouin", ] -%} <project name="{{ project }}"> <title>{{ title }}