Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package openSUSE-release-tools for openSUSE:Factory checked in at 2023-04-27 20:01:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old) and /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1533 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openSUSE-release-tools" Thu Apr 27 20:01:32 2023 rev:462 rq:1083184 version:20230420.372c67d Changes: -------- --- /work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes 2023-04-05 21:35:55.830662792 +0200 +++ /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1533/openSUSE-release-tools.changes 2023-04-27 20:02:44.278561647 +0200 @@ -1,0 +2,54 @@ +Thu Apr 20 06:13:18 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230420.372c67d: + * staging-installcheck.py: Detect some edge cases in check_required_by + +------------------------------------------------------------------- +Wed Apr 19 05:45:15 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230419.c0f2057: + * Filter out access logs with error code + +------------------------------------------------------------------- +Tue Apr 18 07:28:08 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230418.aebe39c: + * Publish kiwi-templates-Minimal-s390x for SLE15 + +------------------------------------------------------------------- +Tue Apr 11 14:06:16 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230411.8639ce3: + * repo2fileprovides.py: Support file deps in boolean dependencies + +------------------------------------------------------------------- +Tue Apr 11 13:15:13 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230411.f596472: + * docker_publisher.py: Add 15.5, remove 15.3 + +------------------------------------------------------------------- +Tue Apr 11 11:55:53 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230411.7f92b23: + * Fix the OBS CI workflow (#2950) + +------------------------------------------------------------------- +Tue Apr 11 11:27:15 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230411.363c84c: + * dist: Package osrt-repo2fileprovides + +------------------------------------------------------------------- +Tue Apr 11 10:51:23 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230411.816d0eb: + * cleanup_rings.py: Add snobol4 to whitelist + +------------------------------------------------------------------- +Thu Apr 06 08:08:54 UTC 2023 - opensuse-releaset...@opensuse.org + +- Update to version 20230406.c548870: + * Add repo2fileprovides.py + +------------------------------------------------------------------- Old: ---- openSUSE-release-tools-20230329.af36a03.obscpio New: ---- openSUSE-release-tools-20230420.372c67d.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openSUSE-release-tools.spec ++++++ --- /var/tmp/diff_new_pack.0cZZUg/_old 2023-04-27 20:02:45.238567291 +0200 +++ /var/tmp/diff_new_pack.0cZZUg/_new 2023-04-27 20:02:45.242567314 +0200 @@ -20,7 +20,7 @@ %define source_dir openSUSE-release-tools %define announcer_filename factory-package-news Name: openSUSE-release-tools -Version: 20230329.af36a03 +Version: 20230420.372c67d Release: 0 Summary: Tools to aid in staging and release work for openSUSE/SUSE License: GPL-2.0-or-later AND MIT @@ -396,6 +396,7 @@ %{_bindir}/osrt-issue-diff %{_bindir}/osrt-legal-auto %{_bindir}/osrt-openqa-maintenance +%{_bindir}/osrt-repo2fileprovides %{_bindir}/osrt-requestfinder %{_bindir}/osrt-totest-manager %{_datadir}/%{source_dir} @@ -494,7 +495,6 @@ %files repo-checker %{_bindir}/osrt-project-installcheck %{_bindir}/osrt-staging-installcheck -%{_bindir}/osrt-maintenance-installcheck %{_bindir}/osrt-findfileconflicts %{_bindir}/osrt-maintenance-installcheck %{_bindir}/osrt-write_repo_susetags_file ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.0cZZUg/_old 2023-04-27 20:02:45.298567643 +0200 +++ /var/tmp/diff_new_pack.0cZZUg/_new 2023-04-27 20:02:45.302567667 +0200 @@ -1,7 +1,7 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param> - <param name="changesrevision">af36a030b3d2e34f24828caf849c463ffeb2db14</param> + <param name="changesrevision">372c67d51607fb0d27e0b2413be79e1ffdabc527</param> </service> </servicedata> ++++++ openSUSE-release-tools-20230329.af36a03.obscpio -> openSUSE-release-tools-20230420.372c67d.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230329.af36a03/.obs/workflows.yml new/openSUSE-release-tools-20230420.372c67d/.obs/workflows.yml --- old/openSUSE-release-tools-20230329.af36a03/.obs/workflows.yml 2023-03-29 11:02:25.000000000 +0200 +++ new/openSUSE-release-tools-20230420.372c67d/.obs/workflows.yml 2023-04-20 08:12:22.000000000 +0200 @@ -1,23 +1,10 @@ --- pr: steps: - - link_package: - source_project: openSUSE:Tools + - branch_package: + source_project: openSUSE:Tools:OSRT:TestGithub source_package: openSUSE-release-tools target_project: openSUSE:Tools:OSRT:TestGithub - - configure_repositories: - project: openSUSE:Tools:OSRT:TestGithub - repositories: - - name: openSUSE_Tumbleweed - paths: - - target_project: openSUSE:Factory - target_repository: snapshot - architectures: [ x86_64 ] - - name: '15.4' - paths: - - target_project: openSUSE:Tools - target_repository: '15.4' - architectures: [ x86_64 ] filters: event: pull_request diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230329.af36a03/CONTENTS.md new/openSUSE-release-tools-20230420.372c67d/CONTENTS.md --- old/openSUSE-release-tools-20230329.af36a03/CONTENTS.md 2023-03-29 11:02:25.000000000 +0200 +++ new/openSUSE-release-tools-20230420.372c67d/CONTENTS.md 2023-04-20 08:12:22.000000000 +0200 @@ -171,6 +171,15 @@ * Package: -- * Usage: ? +#### repo2fileprovides.py + +Script to generate necessary FileProvides lines needed by OBS from repo data. + +* Sources: [repo2fileprovides.py](repo2fileprovides.py) +* Documentation: -- +* Package: -- +* Usage: repo2fileprovides.py primary.xml(.gz) + ### Bots #### check_maintenance_incidents diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230329.af36a03/dist/package/openSUSE-release-tools.spec new/openSUSE-release-tools-20230420.372c67d/dist/package/openSUSE-release-tools.spec --- old/openSUSE-release-tools-20230329.af36a03/dist/package/openSUSE-release-tools.spec 2023-03-29 11:02:25.000000000 +0200 +++ new/openSUSE-release-tools-20230420.372c67d/dist/package/openSUSE-release-tools.spec 2023-04-20 08:12:22.000000000 +0200 @@ -396,6 +396,7 @@ %{_bindir}/osrt-issue-diff %{_bindir}/osrt-legal-auto %{_bindir}/osrt-openqa-maintenance +%{_bindir}/osrt-repo2fileprovides %{_bindir}/osrt-requestfinder %{_bindir}/osrt-totest-manager %{_datadir}/%{source_dir} @@ -494,7 +495,6 @@ %files repo-checker %{_bindir}/osrt-project-installcheck %{_bindir}/osrt-staging-installcheck -%{_bindir}/osrt-maintenance-installcheck %{_bindir}/osrt-findfileconflicts %{_bindir}/osrt-maintenance-installcheck %{_bindir}/osrt-write_repo_susetags_file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230329.af36a03/docker_publisher.py new/openSUSE-release-tools-20230420.372c67d/docker_publisher.py --- old/openSUSE-release-tools-20230329.af36a03/docker_publisher.py 2023-03-29 11:02:25.000000000 +0200 +++ new/openSUSE-release-tools-20230420.372c67d/docker_publisher.py 2023-04-20 08:12:22.000000000 +0200 @@ -377,16 +377,6 @@ }, 'publisher': DockerImagePublisherRegistry(drc_tw, "latest"), }, - 'leap-15.3': { - 'fetchers': { - 'x86_64': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.3/containers/x86_64/opensuse-leap-image:docker", maintenance_release=True), # noqa: E501 - 'aarch64': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.3/containers/aarch64/opensuse-leap-image:docker", maintenance_release=True), # noqa: E501 - 'armv7l': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.3/containers_armv7/armv7l/opensuse-leap-image:docker", maintenance_release=True), # noqa: E501 - 'ppc64le': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.3/containers/ppc64le/opensuse-leap-image:docker", maintenance_release=True), # noqa: E501 - 's390x': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.3/containers/s390x/opensuse-leap-image:docker", maintenance_release=True), # noqa: E501 - }, - 'publisher': DockerImagePublisherRegistry(drc_leap, "15.3"), - }, 'leap-15.4': { 'fetchers': { 'x86_64': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.4/containers/x86_64/opensuse-leap-image:docker", maintenance_release=True), # noqa: E501 @@ -396,6 +386,16 @@ }, 'publisher': DockerImagePublisherRegistry(drc_leap, "latest", ["15.4", "15"]), }, + 'leap-15.5': { + 'fetchers': { + 'x86_64': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.5/containers/x86_64/opensuse-leap-image:docker", maintenance_release=True), # noqa: E501 + 'aarch64': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.5/containers/aarch64/opensuse-leap-image:docker", maintenance_release=True), # noqa: E501 + 'armv7l': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.5/containers_armv7/armv7l/opensuse-leap-image:docker", maintenance_release=True), # noqa: E501 + 'ppc64le': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.5/containers/ppc64le/opensuse-leap-image:docker", maintenance_release=True), # noqa: E501 + 's390x': DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.5/containers/s390x/opensuse-leap-image:docker", maintenance_release=True), # noqa: E501 + }, + 'publisher': DockerImagePublisherRegistry(drc_leap, "15.5"), + }, } # Parse args after defining the config - the available distros are included diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230329.af36a03/gocd/sp.target.gocd.yaml new/openSUSE-release-tools-20230420.372c67d/gocd/sp.target.gocd.yaml --- old/openSUSE-release-tools-20230329.af36a03/gocd/sp.target.gocd.yaml 2023-03-29 11:02:25.000000000 +0200 +++ new/openSUSE-release-tools-20230420.372c67d/gocd/sp.target.gocd.yaml 2023-04-20 08:12:22.000000000 +0200 @@ -49,7 +49,7 @@ if [ -z "${PRODUCTS}" ]; then echo "[WARNNING] There is no cloud image to be released" fi - for product in kiwi-templates-Minimal 000product $PRODUCTS; do + for product in kiwi-templates-Minimal kiwi-templates-Minimal-s390x 000product $PRODUCTS; do osc -A https://api.suse.de release SUSE:SLE-15-SP5:GA $product done sleep 600 @@ -203,7 +203,7 @@ done osc -A https://api.suse.de release --target-project=SUSE:SLE-15-SP5:GA:TEST --target-repository=containers -r images SUSE:SLE-15-SP5:GA sles15-image PRODUCTS=$(osc -A https://api.suse.de ls SUSE:SLE-15-SP5:GA | grep "^SLES15-SP5" | grep -v release) - for product in kiwi-templates-Minimal 000product $PRODUCTS; do + for product in kiwi-templates-Minimal kiwi-templates-Minimal-s390x 000product $PRODUCTS; do osc -A https://api.suse.de release SUSE:SLE-15-SP5:GA $product done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230329.af36a03/metrics/access/ingest.php new/openSUSE-release-tools-20230420.372c67d/metrics/access/ingest.php --- old/openSUSE-release-tools-20230329.af36a03/metrics/access/ingest.php 2023-03-29 11:02:25.000000000 +0200 +++ new/openSUSE-release-tools-20230420.372c67d/metrics/access/ingest.php 2023-04-20 08:12:22.000000000 +0200 @@ -22,6 +22,8 @@ // Only interested in GET or HEAD requests, others are invalid. if ($match[2] != 'GET' && $match[2] != 'HEAD') continue; + // Not interested on errors. + if ($match[4] >= '400') continue; $total++; // Attempt to determine for which product was the request. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230329.af36a03/osclib/cleanup_rings.py new/openSUSE-release-tools-20230420.372c67d/osclib/cleanup_rings.py --- old/openSUSE-release-tools-20230329.af36a03/osclib/cleanup_rings.py 2023-03-29 11:02:25.000000000 +0200 +++ new/openSUSE-release-tools-20230420.372c67d/osclib/cleanup_rings.py 2023-04-20 08:12:22.000000000 +0200 @@ -29,6 +29,8 @@ 'raspberrypi-firmware-config', # Added manually to notice failures early 'vagrant', + # https://github.com/openSUSE/open-build-service/issues/14129 + 'snobol4', ] def perform(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230329.af36a03/repo2fileprovides.py new/openSUSE-release-tools-20230420.372c67d/repo2fileprovides.py --- old/openSUSE-release-tools-20230329.af36a03/repo2fileprovides.py 1970-01-01 01:00:00.000000000 +0100 +++ new/openSUSE-release-tools-20230420.372c67d/repo2fileprovides.py 2023-04-20 08:12:22.000000000 +0200 @@ -0,0 +1,57 @@ +#!/usr/bin/python3 +import gzip +import sys +from collections import defaultdict +from lxml import etree + +if len(sys.argv) != 2: + print("Script to generate necessary FileProvides lines needed by OBS from repo data.", file=sys.stderr) + print("Usage: repo2fileprovides.py primary.xml(.gz)", file=sys.stderr) + sys.exit(1) + +repofilename = sys.argv[1] +xmlfile = open(repofilename, 'rb') +if repofilename.endswith('.gz'): + xmlfile = gzip.GzipFile(fileobj=xmlfile) + +NS = {'md': 'http://linux.duke.edu/metadata/common', + 'rpm': 'http://linux.duke.edu/metadata/rpm'} +repodata = etree.parse(xmlfile) + +# Step 1: Collect all provided files +# Set of all provided files +providedfiles = set() +# Map of filename -> set of packages providing it +fileprovides = defaultdict(set) + +for pkg in repodata.iterfind('/md:package', namespaces=NS): + pkgname = pkg.xpath('./md:name/text()', namespaces=NS)[0] + # Implicit file provides + for f in pkg.iterfind('./md:format/md:file', namespaces=NS): + filename = f.text + fileprovides[filename].add(pkgname) + providedfiles.add(filename) + + # Explicit file provides + for filename in pkg.xpath("./md:format/rpm:provides/rpm:entry[starts-with(@name, '/')]/@name", + namespaces=NS): + fileprovides[filename].add(pkgname) + providedfiles.add(filename) + +# Step 2: Collect all required files +requiredfiles = set(repodata.xpath("/md:metadata/md:package/md:format/rpm:requires/rpm:entry[starts-with(@name, '/')]/@name", + namespaces=NS)) + +# Split up boolean deps +booleandeps = set(repodata.xpath("/md:metadata/md:package/md:format/rpm:requires/rpm:entry" + "[starts-with(@name, '(') and contains(@name, '/')]/@name", + namespaces=NS)) +for dep in booleandeps: + for capability in dep.replace('(', ' ').replace(')', ' ').split(): + if capability[0] == '/': + requiredfiles.add(capability) + +# Step 3: For all provided files which are also required, print "FileProvides" +# lines +for filename in sorted(providedfiles.intersection(requiredfiles)): + print(f"FileProvides: {filename} {' '.join(sorted(fileprovides[filename]))}") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openSUSE-release-tools-20230329.af36a03/staging-installcheck.py new/openSUSE-release-tools-20230420.372c67d/staging-installcheck.py --- old/openSUSE-release-tools-20230329.af36a03/staging-installcheck.py 2023-03-29 11:02:25.000000000 +0200 +++ new/openSUSE-release-tools-20230420.372c67d/staging-installcheck.py 2023-04-20 08:12:22.000000000 +0200 @@ -49,6 +49,17 @@ def check_required_by(self, fileinfo, provides, requiredby, built_binaries, comments): if requiredby.get('name') in built_binaries: return True + + result = True + + # In some cases (boolean deps?) it's possible that fileinfo_ext for A + # shows that A provides cap needed by B, but fileinfo_ext for B does + # not list cap or A at all... In that case better error out and ask for + # human intervention. + dep_found = False + # In case the dep was not found, give a hint what OBS might have meant. + possible_dep = None + # extract >= and the like provide = provides.get('dep') provide = provide.split(' ')[0] @@ -57,18 +68,44 @@ url = api.makeurl(['build', api.project, api.cmain_repo, 'x86_64', '_repository', requiredby.get('name') + '.rpm'], {'view': 'fileinfo_ext'}) reverse_fileinfo = ET.parse(osc.core.http_GET(url)).getroot() + for require in reverse_fileinfo.findall('requires_ext'): # extract >= and the like here too dep = require.get('dep').split(' ')[0] if dep != provide: + if provide in require.get('dep'): + possible_dep = require.get('dep') continue + dep_found = True + # Whether this is provided by something being deleted + provided_found = False + # Whether this is provided by something not being deleted + alternative_found = False for provided_by in require.findall('providedby'): if provided_by.get('name') in built_binaries: - continue - comments.append(' also provided by {} -> ignoring'.format(provided_by.get('name'))) - return True - comments.append('Error: missing alternative provides for {}'.format(provide)) - return False + provided_found = True + else: + comments.append(' also provided by {} -> ignoring'.format(provided_by.get('name'))) + alternative_found = True + + if not alternative_found: + result = False + + if not provided_found: + comments.append(" OBS doesn't see this in the reverse resolution though. Not sure what to do.") + result = False + + if not dep_found: + comments.append(" OBS doesn't see this dep in reverse though. Not sure what to do.") + if possible_dep is not None: + comments.append(f' Might be required by {possible_dep}') + return False + + if result: + return True + else: + comments.append('Error: missing alternative provides for {}'.format(provide)) + return False @memoize(session=True) def pkg_with_multibuild_flavors(self, package): ++++++ openSUSE-release-tools.obsinfo ++++++ --- /var/tmp/diff_new_pack.0cZZUg/_old 2023-04-27 20:02:46.346573804 +0200 +++ /var/tmp/diff_new_pack.0cZZUg/_new 2023-04-27 20:02:46.350573827 +0200 @@ -1,5 +1,5 @@ name: openSUSE-release-tools -version: 20230329.af36a03 -mtime: 1680080545 -commit: af36a030b3d2e34f24828caf849c463ffeb2db14 +version: 20230420.372c67d +mtime: 1681971142 +commit: 372c67d51607fb0d27e0b2413be79e1ffdabc527