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-07-25 11:51:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1467 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Tue Jul 25 11:51:37 2023 rev:486 rq:1100547 version:20230721.2396b32

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2023-07-24 18:26:29.302334077 +0200
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1467/openSUSE-release-tools.changes
  2023-07-25 11:53:31.326302243 +0200
@@ -1,0 +2,23 @@
+Fri Jul 21 15:20:17 UTC 2023 - opensuse-releaset...@opensuse.org
+
+- Update to version 20230721.2396b32:
+  * docs/staging: remove obsolete references
+  * Add backup server URL and update source map
+
+-------------------------------------------------------------------
+Fri Jul 21 15:18:49 UTC 2023 - opensuse-releaset...@opensuse.org
+
+- Update to version 20230721.2d37d5b:
+  * gocd: enable Leap 15.6 checkers
+  * Revert temporary fixups, these are working now
+  * Add a simple smoke test launching all scripts with --help
+  * Require typing_extensions on SLE & Leap
+  * Fallback import Literal & TypedDict from typing_extension
+
+-------------------------------------------------------------------
+Fri Jul 21 15:17:21 UTC 2023 - opensuse-releaset...@opensuse.org
+
+- Update to version 20230721.3301485:
+  * Add BCI repo publishing bot
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20230721.5bc933b.obscpio

New:
----
  openSUSE-release-tools-20230721.2396b32.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.5dK4c3/_old  2023-07-25 11:53:32.174307209 +0200
+++ /var/tmp/diff_new_pack.5dK4c3/_new  2023-07-25 11:53:32.178307232 +0200
@@ -20,7 +20,7 @@
 %define source_dir openSUSE-release-tools
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20230721.5bc933b
+Version:        20230721.2396b32
 Release:        0
 Summary:        Tools to aid in staging and release work for openSUSE/SUSE
 License:        GPL-2.0-or-later AND MIT
@@ -58,6 +58,10 @@
 Requires:       python3-python-dateutil
 Requires:       python3-pyxdg
 Requires:       python3-requests
+# typing extensions are needed on SLE & Leap
+%if 0%{?suse_version} <= 1500
+Requires:       python3-typing_extensions
+%endif
 
 # bs_mirrorfull
 Requires:       perl-Net-SSLeay

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.5dK4c3/_old  2023-07-25 11:53:32.226307513 +0200
+++ /var/tmp/diff_new_pack.5dK4c3/_new  2023-07-25 11:53:32.230307536 +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">5bc933b1b7426aba8cb75dbc25410aebfa07f974</param>
+    <param 
name="changesrevision">2396b32c141ca25b057c43758454abdc43f9131b</param>
   </service>
 </servicedata>
 

++++++ openSUSE-release-tools-20230721.5bc933b.obscpio -> 
openSUSE-release-tools-20230721.2396b32.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/.github/workflows/ci-test.yml 
new/openSUSE-release-tools-20230721.2396b32/.github/workflows/ci-test.yml
--- old/openSUSE-release-tools-20230721.5bc933b/.github/workflows/ci-test.yml   
2023-07-21 13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/.github/workflows/ci-test.yml   
2023-07-21 17:19:45.000000000 +0200
@@ -42,6 +42,50 @@
       if: always()
       run: docker-compose -f dist/ci/docker-compose.yml down
 
+  smoke-test:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        image:
+          - registry.opensuse.org/opensuse/tumbleweed:latest
+          - registry.opensuse.org/opensuse/leap:15.5
+
+    container: ${{ matrix.image }}
+    steps:
+      - name: install git to checkout the repo
+        run: zypper -n in git
+
+      - uses: actions/checkout@v3
+
+      - name: fix the file permissions of the repository
+        run: chown -R $(id -un):$(id -gn) .
+
+      - name: add the openSUSE:Tools repository for Tumbleweed
+        if: ${{ contains(matrix.image, 'tumbleweed') }}
+        run: zypper -n ar 
https://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_Tumbleweed/openSUSE:Tools.repo
+
+      - name: add the openSUSE:Tools repository for Leap
+        if: ${{ contains(matrix.image, '15.5') }}
+        run: zypper -n ar 
https://download.opensuse.org/repositories/openSUSE:/Tools/15.5/openSUSE:Tools.repo
+
+      - name: install the build & runtime dependencies of openSUSE-release-tool
+        run: |
+          zypper -n --gpg-auto-import-keys refresh
+          zypper -n source-install openSUSE-release-tools
+          zypper -n install openSUSE-release-tools
+
+      - name: FIXME, install missing dependencies
+        run: |
+          zypper -n in python3-typing_extensions python3-solv python3-pika 
python3-openqa_client build python3-influxdb python3-bugzilla
+
+      - name: run a simple smoke test whether --help actually works
+        run: |
+          for f in $(find . -maxdepth 1 -type f -executable -print); do
+              # skip completely broken scripts or those without --help
+              [[ " ./checknewer.py ./repo2fileprovides.py 
./openqa-maintenance.py ./docker_publisher.py ./publish_distro ./bs_mirrorfull 
./findfileconflicts ./write_repo_susetags_file.pl ./issue-diff.py " =~ "$f" ]] 
|| "$f" --help
+          done
+
   linters:
     runs-on: ubuntu-latest
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/check_source.py 
new/openSUSE-release-tools-20230721.2396b32/check_source.py
--- old/openSUSE-release-tools-20230721.5bc933b/check_source.py 2023-07-21 
13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/check_source.py 2023-07-21 
17:19:45.000000000 +0200
@@ -1,6 +1,5 @@
 #!/usr/bin/python3
 
-from contextlib import suppress
 import difflib
 import glob
 import os
@@ -248,22 +247,17 @@
                                      pathname=copath, 
server_service_files=True, expand_link=True)
         os.rename(source_package, target_package)
         shutil.rmtree(os.path.join(target_package, '.osc'))
-        # TODO(dmllr): Fix in the source checker
-        with suppress(FileNotFoundError):
-            os.remove(os.path.join(target_package, '.gitattributes'))
 
         new_info = self.package_source_parse(source_project, source_package, 
source_revision, target_package)
         filename = new_info.get('filename', '')
         expected_name = target_package
         if filename == '_preinstallimage':
             expected_name = 'preinstallimage'
-        # TODO(dmllr): self.package_source_parse cannot handle scm_sync 
submissions, so skip the check for now
-        if not self.source_is_scm_staging_submission(source_project):
-            if not (filename.endswith('.kiwi') or filename == 'Dockerfile') 
and new_info['name'] != expected_name:
-                shutil.rmtree(copath)
-                self.review_messages['declined'] = "A package submitted as %s 
has to build as 'Name: %s' - found Name '%s'" % (
-                    target_package, expected_name, new_info['name'])
-                return False
+        if not (filename.endswith('.kiwi') or filename == 'Dockerfile') and 
new_info['name'] != expected_name:
+            shutil.rmtree(copath)
+            self.review_messages['declined'] = "A package submitted as %s has 
to build as 'Name: %s' - found Name '%s'" % (
+                target_package, expected_name, new_info['name'])
+            return False
 
         if not self.check_service_file(target_package):
             return False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/dist/package/openSUSE-release-tools.spec
 
new/openSUSE-release-tools-20230721.2396b32/dist/package/openSUSE-release-tools.spec
--- 
old/openSUSE-release-tools-20230721.5bc933b/dist/package/openSUSE-release-tools.spec
        2023-07-21 13:05:41.000000000 +0200
+++ 
new/openSUSE-release-tools-20230721.2396b32/dist/package/openSUSE-release-tools.spec
        2023-07-21 17:19:45.000000000 +0200
@@ -58,6 +58,10 @@
 Requires:       python3-python-dateutil
 Requires:       python3-pyxdg
 Requires:       python3-requests
+# typing extensions are needed on SLE & Leap
+%if 0%{?suse_version} <= 1500
+Requires:       python3-typing_extensions
+%endif
 
 # bs_mirrorfull
 Requires:       perl-Net-SSLeay
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/docs/staging.asciidoc 
new/openSUSE-release-tools-20230721.2396b32/docs/staging.asciidoc
--- old/openSUSE-release-tools-20230721.5bc933b/docs/staging.asciidoc   
2023-07-21 13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/docs/staging.asciidoc   
2023-07-21 17:19:45.000000000 +0200
@@ -8,9 +8,8 @@
 ------------
 [id="intro"]
 
-The staging plugin is used to enable the new
-https://progress.opensuse.org/workflow/factory-proposal.html[factory
-workflow] to work with staging projects.  This plugin implements some
+The staging plugin is used to enable the new factory
+workflow to work with staging projects.  This plugin implements some
 functionality that some day will be directly implemented in OBS
 itself.  Meanwhile this plugin is used as a playground field to
 explore these new concepts and operations.
@@ -229,10 +228,9 @@
 
 * 
https://build.opensuse.org/project/show/openSUSE:Factory:Rings:0-Bootstrap[openSUSE:Factory:Rings:0-Bootstrap]
 * 
https://build.opensuse.org/project/show/openSUSE:Factory:Rings:1-MinimalX[openSUSE:Factory:Rings:1-MinimalX]
-* 
https://build.opensuse.org/project/show/openSUSE:Factory:Rings:2-TestDVD[openSUSE:Factory:Rings:2-TestDVD]
 
-And you can find a better description in the
-https://www.youtube.com/watch?v=K-wTVGqKFR8[talk conference]
+And you can find a better description in this
+https://www.youtube.com/watch?v=K-wTVGqKFR8[very old presentation] from a 
conference
 celebrated in 2014 in Dubrovnik, Croatia.
 
 This command is used to check the current status of the rings and to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/gocd/bci.gocd.yaml 
new/openSUSE-release-tools-20230721.2396b32/gocd/bci.gocd.yaml
--- old/openSUSE-release-tools-20230721.5bc933b/gocd/bci.gocd.yaml      
2023-07-21 13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/gocd/bci.gocd.yaml      
2023-07-21 17:19:45.000000000 +0200
@@ -127,6 +127,25 @@
               osc -A https://api.suse.de/ api 
"/build/$PRJ/_result?view=summary&repository=images" | grep "result project" | 
grep 'code="published" state="published">' && echo PUBLISHED
             done
 
+  SLE_BCI_15SP3.RepoPublisher:
+    group: BCI
+    lock_behavior: unlockWhenFinished
+    materials:
+      git:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+    environment_variables:
+        OSC_CONFIG: /home/go/config/oscrc-totest-manager
+        BCI_TOKEN: '{{SECRET:[opensuse.secrets][BCI_TOKEN]}}'
+    stages:
+    - Run:
+        approval: manual
+        resources:
+        - staging-bot
+        tasks:
+        - script: |
+            export PYTHONPATH=scripts
+            ./scripts/gocd/bci_repo_publish.py -A https://api.suse.de 
--verbose --debug run "--token=$BCI_TOKEN" 15-SP3
+
   SLE_BCI_15SP4.RelPkgs:
     group: BCI
     lock_behavior: unlockWhenFinished
@@ -212,6 +231,25 @@
               osc -A https://api.suse.de/ api 
"/build/$PRJ/_result?view=summary&repository=images" | grep "result project" | 
grep 'code="published" state="published">' && echo PUBLISHED
             done
 
+  SLE_BCI_15SP4.RepoPublisher:
+    group: BCI
+    lock_behavior: unlockWhenFinished
+    materials:
+      git:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+    environment_variables:
+        OSC_CONFIG: /home/go/config/oscrc-totest-manager
+        BCI_TOKEN: '{{SECRET:[opensuse.secrets][BCI_TOKEN]}}'
+    stages:
+    - Run:
+        approval: manual
+        resources:
+        - staging-bot
+        tasks:
+        - script: |
+            export PYTHONPATH=scripts
+            ./scripts/gocd/bci_repo_publish.py -A https://api.suse.de 
--verbose --debug run "--token=$BCI_TOKEN" 15-SP4
+
   SLE_BCI_15SP5.RelPkgs:
     group: BCI
     lock_behavior: unlockWhenFinished
@@ -297,3 +335,22 @@
               osc -A https://api.suse.de/ api 
"/build/$PRJ/_result?view=summary&repository=images" | grep "result project" | 
grep 'code="published" state="published">' && echo PUBLISHED
             done
 
+  SLE_BCI_15SP5.RepoPublisher:
+    group: BCI
+    lock_behavior: unlockWhenFinished
+    materials:
+      git:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+    environment_variables:
+        OSC_CONFIG: /home/go/config/oscrc-totest-manager
+        BCI_TOKEN: '{{SECRET:[opensuse.secrets][BCI_TOKEN]}}'
+    stages:
+    - Run:
+        approval: manual
+        resources:
+        - staging-bot
+        tasks:
+        - script: |
+            export PYTHONPATH=scripts
+            ./scripts/gocd/bci_repo_publish.py -A https://api.suse.de 
--verbose --debug run "--token=$BCI_TOKEN" 15-SP5
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/gocd/bci.gocd.yaml.erb 
new/openSUSE-release-tools-20230721.2396b32/gocd/bci.gocd.yaml.erb
--- old/openSUSE-release-tools-20230721.5bc933b/gocd/bci.gocd.yaml.erb  
2023-07-21 13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/gocd/bci.gocd.yaml.erb  
2023-07-21 17:19:45.000000000 +0200
@@ -126,4 +126,23 @@
               done
               osc -A https://api.suse.de/ api 
"/build/$PRJ/_result?view=summary&repository=images" | grep "result project" | 
grep 'code="published" state="published">' && echo PUBLISHED
             done
+
+  SLE_BCI_15<%= sp %>.RepoPublisher:
+    group: BCI
+    lock_behavior: unlockWhenFinished
+    materials:
+      git:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+    environment_variables:
+        OSC_CONFIG: /home/go/config/oscrc-totest-manager
+        BCI_TOKEN: '{{SECRET:[opensuse.secrets][BCI_TOKEN]}}'
+    stages:
+    - Run:
+        approval: manual
+        resources:
+        - staging-bot
+        tasks:
+        - script: |
+            export PYTHONPATH=scripts
+            ./scripts/gocd/bci_repo_publish.py -A https://api.suse.de 
--verbose --debug run "--token=$BCI_TOKEN" 15-<%= sp %>
 <% end %>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/gocd/bci_repo_publish.py 
new/openSUSE-release-tools-20230721.2396b32/gocd/bci_repo_publish.py
--- old/openSUSE-release-tools-20230721.5bc933b/gocd/bci_repo_publish.py        
1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20230721.2396b32/gocd/bci_repo_publish.py        
2023-07-21 17:19:45.000000000 +0200
@@ -0,0 +1,199 @@
+#!/usr/bin/python3
+# (c) 2023 fv...@suse.de
+# GPL-2.0-or-later
+
+# This is a "mini ttm" for the BCI repo. Differences:
+# * No :ToTest staging area
+# * Only the repo is built, so it needs BCI specific openQA queries
+# * The publishing location is arch specific
+# * Uses a token for releasing to the publishing project
+
+
+import cmdln
+import logging
+import ToolBase
+import requests
+import sys
+import time
+import re
+from lxml import etree as ET
+from openqa_client.client import OpenQA_Client
+from osc.core import http_GET, makeurl
+
+
+class BCIRepoPublisher(ToolBase.ToolBase):
+    def __init__(self):
+        ToolBase.ToolBase.__init__(self)
+        self.logger = logging.getLogger(__name__)
+        self.openqa = OpenQA_Client(server='https://openqa.suse.de')
+
+    def version_of_product(self, project, package, repo, arch):
+        """Get the build version of the given product build, based on the 
binary name."""
+        url = makeurl(self.apiurl, ['build', project, repo, arch, package])
+        root = ET.parse(http_GET(url)).getroot()
+        for binary in root.findall('binary'):
+            result = re.match(r'.*-Build(.*)-Media1.report', 
binary.get('filename'))
+            if result:
+                return result.group(1)
+
+        raise RuntimeError(f"Failed to get version of {project}/{package}")
+
+    def mtime_of_product(self, project, package, repo, arch):
+        """Get the build time stamp of the given product, based on 
_buildenv."""
+        url = makeurl(self.apiurl, ['build', project, repo, arch, package])
+        root = ET.parse(http_GET(url)).getroot()
+        mtime = root.xpath('/binarylist/binary[@filename = 
"_buildenv"]/@mtime')
+        return mtime[0]
+
+    def openqa_jobs_for_product(self, arch, version, build):
+        """Query openQA for all relevant jobs"""
+        values = {
+            'group': 'BCI repo',
+            'flavor': 'BCI-Repo-Updates',
+            'arch': arch,
+            'version': version,
+            'build': build,
+            'scope': 'current',
+            'latest': '1',
+        }
+        return self.openqa.openqa_request('GET', 'jobs', values)['jobs']
+
+    def is_repo_published(self, project, repo):
+        """Validates that the given prj/repo is fully published and all builds
+        have succeeded."""
+        url = makeurl(self.apiurl, ['build', project, '_result'],
+                      {'view': 'summary', 'repository': repo})
+        root = ET.parse(http_GET(url)).getroot()
+        for result in root.findall('result'):
+            if result.get('dirty', 'false') != 'false':
+                return False
+            if result.get('code') != 'published' or result.get('state') != 
'published':
+                return False
+
+        for statuscount in root.findall('statuscount'):
+            if statuscount.get('code') not in ('succeeded', 'disabled', 
'excluded'):
+                return False
+
+        return True
+
+    def run(self, version, token=None):
+        build_prj = f'SUSE:SLE-{version}:Update:BCI'
+
+        if not self.is_repo_published(build_prj, 'images'):
+            self.logger.info(f'{build_prj}/images not successfully built')
+            return
+
+        # Build the list of packages with metainfo
+        packages = []
+        # As long as it's the same everywhere, hardcoding this list here
+        # is easier and safer than trying to derive it from the package list.
+        for arch in ('aarch64', 'ppc64le', 's390x', 'x86_64'):
+            packages.append({
+                'arch': arch,
+                'name': f'000product:SLE_BCI-ftp-POOL-{arch}',
+                'build_prj': build_prj,
+                'publish_prj': f'SUSE:Products:SLE-BCI:{version}:{arch}'
+            })
+
+        # Fetch the build numbers of built products.
+        # After release, the BuildXXX part vanishes, so the mtime has to be
+        # used instead for comparing built and published binaries.
+        for pkg in packages:
+            pkg['built_version'] = self.version_of_product(pkg['build_prj'], 
pkg['name'],
+                                                           'images', 'local')
+            pkg['built_mtime'] = self.mtime_of_product(pkg['build_prj'], 
pkg['name'],
+                                                       'images', 'local')
+            pkg['published_mtime'] = self.mtime_of_product(pkg['publish_prj'], 
pkg['name'],
+                                                           'images', 'local')
+
+        # Verify that the builds for all archs are in sync
+        built_versions = {pkg['built_version'] for pkg in packages}
+        if len(built_versions) != 1:
+            # This should not be the case if everything is built and idle
+            self.logger.warning(f'Different builds found - not releasing: 
{packages}')
+            return
+
+        # Compare versions
+        newer_version_available = [int(pkg['built_mtime']) > 
int(pkg['published_mtime'])
+                                   for pkg in packages]
+        if not any(newer_version_available):
+            self.logger.info('Current build already published, nothing to do.')
+            return
+
+        # Check openQA results
+        openqa_passed = True
+        for pkg in packages:
+            passed = 0
+            pending = 0
+            failed = 0
+            for job in self.openqa_jobs_for_product(arch=pkg['arch'], 
version=version,
+                                                    
build=pkg['built_version']):
+                if job['result'] in ('passed', 'softfailed'):
+                    passed += 1
+                elif job['result'] == 'none':
+                    
self.logger.info(f'https://openqa.suse.de/tests/{job["id"]} pending')
+                    pending += 1
+                else:
+                    
self.logger.warning(f'https://openqa.suse.de/tests/{job["id"]} failed')
+                    failed += 1
+
+            if passed == 0 or pending > 0 or failed > 0:
+                openqa_passed = False
+
+        if not openqa_passed:
+            self.logger.info('No positive result from openQA (yet)')
+            return
+
+        # Trigger publishing
+        if token is None:
+            self.logger.warning('Would publish now, but no token specified')
+            return
+
+        for pkg in packages:
+            self.logger.info(f'Releasing {pkg["name"]}...')
+            params = {
+                'project': pkg['build_prj'], 'package': pkg['name'],
+                'filter_source_repository': 'images',
+                'targetproject': pkg['publish_prj'], 'targetrepository': 
'images'
+            }
+            url = makeurl(self.apiurl, ['trigger', 'release'], params)
+            # No bindings for using tokens yet, so do the request manually
+            req = requests.post(url, headers={'Authorization': f'Token 
{token}'})
+            if req.status_code != 200:
+                raise RuntimeError(f'Releasing failed: {req.text}')
+
+        self.logger.info('Waiting for publishing to finish')
+        for pkg in packages:
+            while not self.is_repo_published(pkg['publish_prj'], 'images'):
+                self.logger.debug(f'Waiting for {pkg["publish_prj"]}')
+                time.sleep(20)
+
+
+class CommandLineInterface(ToolBase.CommandLineInterface):
+    def __init__(self, *args, **kwargs):
+        ToolBase.CommandLineInterface.__init__(self, args, kwargs)
+
+    def setup_tool(self):
+        tool = BCIRepoPublisher()
+        if self.options.debug:
+            logging.basicConfig(level=logging.DEBUG)
+        elif self.options.verbose:
+            logging.basicConfig(level=logging.INFO)
+
+        return tool
+
+    @cmdln.option('--token', help='The token for publishing. Does a dry run if 
not given.')
+    def do_run(self, subcmd, opts, project):
+        """${cmd_name}: run the BCI repo publisher for the specified project,
+        e.g. 15-SP3
+
+        ${cmd_usage}
+        ${cmd_option_list}
+        """
+
+        self.tool.run(project, token=opts.token)
+
+
+if __name__ == "__main__":
+    cli = CommandLineInterface()
+    sys.exit(cli.main())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/gocd/pkglistgen.opensuse.gocd.yaml 
new/openSUSE-release-tools-20230721.2396b32/gocd/pkglistgen.opensuse.gocd.yaml
--- 
old/openSUSE-release-tools-20230721.5bc933b/gocd/pkglistgen.opensuse.gocd.yaml  
    2023-07-21 13:05:41.000000000 +0200
+++ 
new/openSUSE-release-tools-20230721.2396b32/gocd/pkglistgen.opensuse.gocd.yaml  
    2023-07-21 17:19:45.000000000 +0200
@@ -129,7 +129,7 @@
             - repo-checker
             tasks:
             - script: python3 ./pkglistgen.py -d -A https://api.opensuse.org 
update_and_solve -p openSUSE:Leap:16.0 -s target
-  Pkglistgen.openSUSE_Leap_15.5:
+  Pkglistgen.openSUSE_Leap_15.6:
     group: Leap
     lock_behavior: unlockWhenFinished
     environment_variables:
@@ -145,12 +145,12 @@
         approval:
           type: manual
         jobs:
-          openSUSE_Leap_15.5_target:
+          openSUSE_Leap_15.6_target:
             resources:
             - repo-checker
             tasks:
-            - script: python3 ./skippkg-finder.py -A https://api.opensuse.org 
-o openSUSE:Leap:15.5 -s SUSE:SLE-15-SP5:GA
-            - script: python3 ./pkglistgen.py -d -A https://api.opensuse.org 
update_and_solve -p openSUSE:Leap:15.5 -s target
+            - script: python3 ./skippkg-finder.py -A https://api.opensuse.org 
-o openSUSE:Leap:15.6 -s SUSE:SLE-15-SP6:GA
+            - script: python3 ./pkglistgen.py -d -A https://api.opensuse.org 
update_and_solve -p openSUSE:Leap:15.6 -s target
   Pkglistgen.openSUSE_Leap_15.4_CR:
     group: Leap
     lock_behavior: unlockWhenFinished
@@ -173,7 +173,7 @@
             tasks:
             - script: python3 ./skippkg-finder.py -A https://api.opensuse.org 
-o openSUSE:Leap:15.4:Images -t openSUSE:Leap:15.4:Update -s 
SUSE:SLE-15-SP4:Update
             - script: python3 ./pkglistgen.py -d -A https://api.opensuse.org 
update_and_solve -p openSUSE:Leap:15.4:Images -s target
-  Update.Repos.Leap.openSUSE_Leap_15.5:
+  Update.Repos.Leap.openSUSE_Leap_15.6:
     group: Leap
     lock_behavior: unlockWhenFinished
     environment_variables:
@@ -189,11 +189,11 @@
         approval:
           type: manual
         jobs:
-          openSUSE_Leap_15.5:
+          openSUSE_Leap_15.6:
             resources:
             - repo-checker
             tasks:
-              - script: python3 ./pkglistgen.py --apiurl 
https://api.opensuse.org handle_update_repos openSUSE:Leap:15.5
+              - script: python3 ./pkglistgen.py --apiurl 
https://api.opensuse.org handle_update_repos openSUSE:Leap:15.6
   Update.Repos.Leap.openSUSE_Leap_15.4_Images:
     group: Leap
     lock_behavior: unlockWhenFinished
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/gocd/pkglistgen.opensuse.gocd.yaml.erb
 
new/openSUSE-release-tools-20230721.2396b32/gocd/pkglistgen.opensuse.gocd.yaml.erb
--- 
old/openSUSE-release-tools-20230721.5bc933b/gocd/pkglistgen.opensuse.gocd.yaml.erb
  2023-07-21 13:05:41.000000000 +0200
+++ 
new/openSUSE-release-tools-20230721.2396b32/gocd/pkglistgen.opensuse.gocd.yaml.erb
  2023-07-21 17:19:45.000000000 +0200
@@ -87,7 +87,7 @@
             tasks:
             - script: python3 ./pkglistgen.py -d -A https://api.opensuse.org 
update_and_solve -p <%= project[0] %><%= options %>
 <% end -%>
-  Pkglistgen.openSUSE_Leap_15.5:
+  Pkglistgen.openSUSE_Leap_15.6:
     group: Leap
     lock_behavior: unlockWhenFinished
     environment_variables:
@@ -103,7 +103,7 @@
         approval:
           type: manual
         jobs:
-<% ['openSUSE:Leap:15.5/target'].each do |project|
+<% ['openSUSE:Leap:15.6/target'].each do |project|
   project=project.split('/')
   name=project[0].gsub(':', '_')
   if project.size > 1
@@ -115,7 +115,7 @@
             resources:
             - repo-checker
             tasks:
-            - script: python3 ./skippkg-finder.py -A https://api.opensuse.org 
-o openSUSE:Leap:15.5 -s SUSE:SLE-15-SP5:GA
+            - script: python3 ./skippkg-finder.py -A https://api.opensuse.org 
-o openSUSE:Leap:15.6 -s SUSE:SLE-15-SP6:GA
             - script: python3 ./pkglistgen.py -d -A https://api.opensuse.org 
update_and_solve -p <%= project[0] %><%= options %>
 <% end -%>
   Pkglistgen.openSUSE_Leap_15.4_CR:
@@ -149,7 +149,7 @@
             - script: python3 ./skippkg-finder.py -A https://api.opensuse.org 
-o openSUSE:Leap:15.4:Images -t openSUSE:Leap:15.4:Update -s 
SUSE:SLE-15-SP4:Update
             - script: python3 ./pkglistgen.py -d -A https://api.opensuse.org 
update_and_solve -p <%= project[0] %><%= options %>
 <% end -%>
-<% %w(openSUSE:Leap:15.5 openSUSE:Leap:15.4:Images).each do |project| -%>
+<% %w(openSUSE:Leap:15.6 openSUSE:Leap:15.4:Images).each do |project| -%>
   Update.Repos.Leap.<%= project.gsub(':', '_') %>:
     group: Leap
     lock_behavior: unlockWhenFinished
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/gocd/rebuild-trigger.gocd.yaml 
new/openSUSE-release-tools-20230721.2396b32/gocd/rebuild-trigger.gocd.yaml
--- old/openSUSE-release-tools-20230721.5bc933b/gocd/rebuild-trigger.gocd.yaml  
2023-07-21 13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/gocd/rebuild-trigger.gocd.yaml  
2023-07-21 17:19:45.000000000 +0200
@@ -143,7 +143,7 @@
               ./project-installcheck.py --debug check --store 
home:repo-checker/rebuilds -r openSUSE_PPC GNOME:Factory
               ./project-installcheck.py --debug check --store 
home:repo-checker/rebuilds -r openSUSE_Factory GNOME:Next
               ./project-installcheck.py --debug check --store 
home:repo-checker/rebuilds -r openSUSE_PPC GNOME:Next
-  Trigger.Rebuild.SLE_15_SP5_Backports:
+  Trigger.Rebuild.SLE_15_SP6_Backports:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
     environment_variables:
@@ -161,10 +161,10 @@
           - repo-checker
         tasks:
           - script: |-
-              echo "SLE15 SP5 Backports"
-              ./project-installcheck.py --debug check --store 
openSUSE:Backports:SLE-15-SP5:Staging/dashboard --no-rebuild 
openSUSE:Backports:SLE-15-SP5
-              echo "SLE15 SP5 Step Backports (Rebuilds)"
-              ./project-installcheck.py --debug check --store 
home:repo-checker/rebuilds -r step openSUSE:Backports:SLE-15-SP5
+              echo "SLE15 SP6 Backports"
+              ./project-installcheck.py --debug check --store 
openSUSE:Backports:SLE-15-SP6:Staging/dashboard --no-rebuild 
openSUSE:Backports:SLE-15-SP6
+              echo "SLE15 SP6 Step Backports (Rebuilds)"
+              ./project-installcheck.py --debug check --store 
home:repo-checker/rebuilds -r step openSUSE:Backports:SLE-15-SP6
   Trigger.Rebuild.Step:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
@@ -193,7 +193,7 @@
               ./project-installcheck.py --debug check --store 
home:repo-checker/rebuilds -r standard openSUSE:Step:15-SP1
               echo "Step 15"
               ./project-installcheck.py --debug check --store 
home:repo-checker/rebuilds -r standard openSUSE:Step:15
-  Trigger.Rebuild.Leap_15_5:
+  Trigger.Rebuild.Leap_15_6:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
     environment_variables:
@@ -211,5 +211,5 @@
           - repo-checker
         tasks:
           - script: |-
-              echo "Leap 15.5"
-              ./project-installcheck.py --debug check --store 
openSUSE:Leap:15.5:Staging/dashboard --no-rebuild openSUSE:Leap:15.5
+              echo "Leap 15.6"
+              ./project-installcheck.py --debug check --store 
openSUSE:Leap:15.6:Staging/dashboard --no-rebuild openSUSE:Leap:15.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/gocd/staging.bot.gocd.yaml 
new/openSUSE-release-tools-20230721.2396b32/gocd/staging.bot.gocd.yaml
--- old/openSUSE-release-tools-20230721.5bc933b/gocd/staging.bot.gocd.yaml      
2023-07-21 13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/gocd/staging.bot.gocd.yaml      
2023-07-21 17:19:45.000000000 +0200
@@ -114,7 +114,7 @@
                 osc -A https://api.opensuse.org staging -p 
openSUSE:Factory:NonFree unselect --cleanup
                 osc -A https://api.opensuse.org staging -p 
openSUSE:Factory:NonFree repair --cleanup
                 rm -rf $tempdir
-  AdiChecker.Backports.SLE-15-SP5:
+  AdiChecker.Backports.SLE-15-SP6:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
     environment_variables:
@@ -127,7 +127,7 @@
         git: git://botmaster.suse.de/opensuse-repos.git
         auto_update: true
         whitelist:
-          - openSUSE:Backports:SLE-15-SP5:Staging:adi*.yaml
+          - openSUSE:Backports:SLE-15-SP6:Staging:adi*.yaml
         destination: repos
     stages:
     - Run:
@@ -137,8 +137,8 @@
             - repo-checker
             tasks:
             - script: |-
-                ./scripts/staging-installcheck.py -A https://api.opensuse.org 
-p openSUSE:Backports:SLE-15-SP5
-  SBot.Regular.Backports.SLE-15-SP5:
+                ./scripts/staging-installcheck.py -A https://api.opensuse.org 
-p openSUSE:Backports:SLE-15-SP6
+  SBot.Regular.Backports.SLE-15-SP6:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
     timer:
@@ -165,13 +165,13 @@
                 ln -s $PWD/osclib $tempdir/.osc-plugins
                 export HOME=$tempdir
 
-                osc -A https://api.opensuse.org staging -p 
openSUSE:Backports:SLE-15-SP5 rebuild
-                osc -A https://api.opensuse.org staging -p 
openSUSE:Backports:SLE-15-SP5 list --supersede
-                osc -A https://api.opensuse.org staging -p 
openSUSE:Backports:SLE-15-SP5 adi
-                osc -A https://api.opensuse.org staging -p 
openSUSE:Backports:SLE-15-SP5 unselect --cleanup
-                osc -A https://api.opensuse.org staging -p 
openSUSE:Backports:SLE-15-SP5 repair --cleanup
+                osc -A https://api.opensuse.org staging -p 
openSUSE:Backports:SLE-15-SP6 rebuild
+                osc -A https://api.opensuse.org staging -p 
openSUSE:Backports:SLE-15-SP6 list --supersede
+                osc -A https://api.opensuse.org staging -p 
openSUSE:Backports:SLE-15-SP6 adi
+                osc -A https://api.opensuse.org staging -p 
openSUSE:Backports:SLE-15-SP6 unselect --cleanup
+                osc -A https://api.opensuse.org staging -p 
openSUSE:Backports:SLE-15-SP6 repair --cleanup
                 rm -rf $tempdir
-  AdiChecker.Leap.15.5:
+  AdiChecker.Leap.15.6:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
     environment_variables:
@@ -184,7 +184,7 @@
         git: git://botmaster.suse.de/opensuse-repos.git
         auto_update: true
         whitelist:
-          - openSUSE:Leap:15.5:Staging:adi*.yaml
+          - openSUSE:Leap:15.6:Staging:adi*.yaml
         destination: repos
     stages:
     - Run:
@@ -194,8 +194,8 @@
             - repo-checker
             tasks:
             - script: |-
-                ./scripts/staging-installcheck.py -A https://api.opensuse.org 
-p openSUSE:Leap:15.5
-  SBot.Regular.Leap.15.5:
+                ./scripts/staging-installcheck.py -A https://api.opensuse.org 
-p openSUSE:Leap:15.6
+  SBot.Regular.Leap.15.6:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
     timer:
@@ -222,9 +222,9 @@
                 ln -s $PWD/osclib $tempdir/.osc-plugins
                 export HOME=$tempdir
 
-                osc -A https://api.opensuse.org staging -p openSUSE:Leap:15.5 
rebuild
-                osc -A https://api.opensuse.org staging -p openSUSE:Leap:15.5 
list --supersede
-                osc -A https://api.opensuse.org staging -p openSUSE:Leap:15.5 
adi
-                osc -A https://api.opensuse.org staging -p openSUSE:Leap:15.5 
unselect --cleanup
-                osc -A https://api.opensuse.org staging -p openSUSE:Leap:15.5 
repair --cleanup
+                osc -A https://api.opensuse.org staging -p openSUSE:Leap:15.6 
rebuild
+                osc -A https://api.opensuse.org staging -p openSUSE:Leap:15.6 
list --supersede
+                osc -A https://api.opensuse.org staging -p openSUSE:Leap:15.6 
adi
+                osc -A https://api.opensuse.org staging -p openSUSE:Leap:15.6 
unselect --cleanup
+                osc -A https://api.opensuse.org staging -p openSUSE:Leap:15.6 
repair --cleanup
                 rm -rf $tempdir
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/gocd/staging.bot.gocd.yaml.erb 
new/openSUSE-release-tools-20230721.2396b32/gocd/staging.bot.gocd.yaml.erb
--- old/openSUSE-release-tools-20230721.5bc933b/gocd/staging.bot.gocd.yaml.erb  
2023-07-21 13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/gocd/staging.bot.gocd.yaml.erb  
2023-07-21 17:19:45.000000000 +0200
@@ -1,6 +1,6 @@
 format_version: 3
 pipelines:
-<% %w(Factory Factory:NonFree Backports:SLE-15-SP5 Leap:15.5).each do 
|project| -%>
+<% %w(Factory Factory:NonFree Backports:SLE-15-SP6 Leap:15.6).each do 
|project| -%>
 <% nickname =  project.gsub(':', '.') -%>
   AdiChecker.<%= nickname %>:
     group: openSUSE.Checkers
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/gocd/totestmanager.gocd.yaml 
new/openSUSE-release-tools-20230721.2396b32/gocd/totestmanager.gocd.yaml
--- old/openSUSE-release-tools-20230721.5bc933b/gocd/totestmanager.gocd.yaml    
2023-07-21 13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/gocd/totestmanager.gocd.yaml    
2023-07-21 17:19:45.000000000 +0200
@@ -168,7 +168,7 @@
         - script: |-
             install -D /home/go/config/openqa-client.conf 
/home/go/.config/openqa/client.conf
             scripts/totest-manager.py -A https://api.opensuse.org --debug run 
openSUSE:Leap:15.4:ARM:Images
-  TTM.Leap_15.5:
+  TTM.Leap_15.5_Images:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
     environment_variables:
@@ -188,8 +188,8 @@
         tasks:
         - script: |-
             install -D /home/go/config/openqa-client.conf 
/home/go/.config/openqa/client.conf
-            scripts/totest-manager.py -A https://api.opensuse.org --debug run 
openSUSE:Leap:15.5
-  TTM.Leap_15.5_Images:
+            scripts/totest-manager.py -A https://api.opensuse.org --debug run 
openSUSE:Leap:15.5:Images
+  TTM.Leap_15.5_ARM:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
     environment_variables:
@@ -209,8 +209,8 @@
         tasks:
         - script: |-
             install -D /home/go/config/openqa-client.conf 
/home/go/.config/openqa/client.conf
-            scripts/totest-manager.py -A https://api.opensuse.org --debug run 
openSUSE:Leap:15.5:Images
-  TTM.Leap_15.5_ARM:
+            scripts/totest-manager.py -A https://api.opensuse.org --debug run 
openSUSE:Leap:15.5:ARM
+  TTM.Leap_15.5_ARM_Images:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
     environment_variables:
@@ -230,8 +230,8 @@
         tasks:
         - script: |-
             install -D /home/go/config/openqa-client.conf 
/home/go/.config/openqa/client.conf
-            scripts/totest-manager.py -A https://api.opensuse.org --debug run 
openSUSE:Leap:15.5:ARM
-  TTM.Leap_15.5_ARM_Images:
+            scripts/totest-manager.py -A https://api.opensuse.org --debug run 
openSUSE:Leap:15.5:ARM:Images
+  TTM.Leap_15.6:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
     environment_variables:
@@ -251,7 +251,70 @@
         tasks:
         - script: |-
             install -D /home/go/config/openqa-client.conf 
/home/go/.config/openqa/client.conf
-            scripts/totest-manager.py -A https://api.opensuse.org --debug run 
openSUSE:Leap:15.5:ARM:Images
+            scripts/totest-manager.py -A https://api.opensuse.org --debug run 
openSUSE:Leap:15.6
+  TTM.Leap_15.6_Images:
+    group: openSUSE.Checkers
+    lock_behavior: unlockWhenFinished
+    environment_variables:
+      OSC_CONFIG: /home/go/config/oscrc-totest-manager
+    materials:
+      script:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+        destination: scripts
+    timer:
+      spec: 0 */15 * ? * *
+      only_on_changes: false
+    stages:
+    - Run:
+        approval: manual
+        resources:
+        - staging-bot
+        tasks:
+        - script: |-
+            install -D /home/go/config/openqa-client.conf 
/home/go/.config/openqa/client.conf
+            scripts/totest-manager.py -A https://api.opensuse.org --debug run 
openSUSE:Leap:15.6:Images
+  TTM.Leap_15.6_ARM:
+    group: openSUSE.Checkers
+    lock_behavior: unlockWhenFinished
+    environment_variables:
+      OSC_CONFIG: /home/go/config/oscrc-totest-manager
+    materials:
+      script:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+        destination: scripts
+    timer:
+      spec: 0 */15 * ? * *
+      only_on_changes: false
+    stages:
+    - Run:
+        approval: manual
+        resources:
+        - staging-bot
+        tasks:
+        - script: |-
+            install -D /home/go/config/openqa-client.conf 
/home/go/.config/openqa/client.conf
+            scripts/totest-manager.py -A https://api.opensuse.org --debug run 
openSUSE:Leap:15.6:ARM
+  TTM.Leap_15.6_ARM_Images:
+    group: openSUSE.Checkers
+    lock_behavior: unlockWhenFinished
+    environment_variables:
+      OSC_CONFIG: /home/go/config/oscrc-totest-manager
+    materials:
+      script:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+        destination: scripts
+    timer:
+      spec: 0 */15 * ? * *
+      only_on_changes: false
+    stages:
+    - Run:
+        approval: manual
+        resources:
+        - staging-bot
+        tasks:
+        - script: |-
+            install -D /home/go/config/openqa-client.conf 
/home/go/.config/openqa/client.conf
+            scripts/totest-manager.py -A https://api.opensuse.org --debug run 
openSUSE:Leap:15.6:ARM:Images
   TTM.Leap_Micro_5.4:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/gocd/totestmanager.gocd.yaml.erb 
new/openSUSE-release-tools-20230721.2396b32/gocd/totestmanager.gocd.yaml.erb
--- 
old/openSUSE-release-tools-20230721.5bc933b/gocd/totestmanager.gocd.yaml.erb    
    2023-07-21 13:05:41.000000000 +0200
+++ 
new/openSUSE-release-tools-20230721.2396b32/gocd/totestmanager.gocd.yaml.erb    
    2023-07-21 17:19:45.000000000 +0200
@@ -9,10 +9,13 @@
       openSUSE:Leap:15.4:Images
       openSUSE:Leap:15.4:ARM
       openSUSE:Leap:15.4:ARM:Images
-      openSUSE:Leap:15.5
       openSUSE:Leap:15.5:Images
       openSUSE:Leap:15.5:ARM
       openSUSE:Leap:15.5:ARM:Images
+      openSUSE:Leap:15.6
+      openSUSE:Leap:15.6:Images
+      openSUSE:Leap:15.6:ARM
+      openSUSE:Leap:15.6:ARM:Images
       openSUSE:Leap:Micro:5.4
       openSUSE:Leap:Micro:5.4:Images
   ) -%>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/metrics/access/aggregate.php 
new/openSUSE-release-tools-20230721.2396b32/metrics/access/aggregate.php
--- old/openSUSE-release-tools-20230721.5bc933b/metrics/access/aggregate.php    
2023-07-21 13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/metrics/access/aggregate.php    
2023-07-21 17:19:45.000000000 +0200
@@ -7,6 +7,7 @@
 $CACHE_DIR = $_SERVER['HOME'] . 
'/.cache/openSUSE-release-tools/metrics-access';
 const PROTOCOLS = ['ipv4', 'ipv6'];
 const PONTIFEX = 'http://pontifex.infra.opensuse.org/logs';
+const BACKUP = 'http://backup.infra.opensuse.org';
 const LANGLEY = 'http://langley.suse.de/pub/pontifex%s-opensuse.suse.de';
 const VHOST = 'download.opensuse.org';
 const FILENAME = 'download.opensuse.org-%s-access_log.xz';
@@ -18,18 +19,17 @@
 $begin->sub(date_interval_create_from_date_string('1 day'));
 $source_map = [
   'ipv4' => [
-    '2010-01-03' => false,
-    '2014-04-14' => sprintf(LANGLEY, 2) . '/' . VHOST,
-    '2017-12-04' => sprintf(LANGLEY, 3) . '/' . VHOST,
-    // 2017-12-05 has bad permissions on langley and is still on origin.
-    '2021-09-05' => false,
+    '2023-01-01' => false,
+    //'2014-04-14' => sprintf(LANGLEY, 2) . '/' . VHOST,
+    //'2017-12-04' => sprintf(LANGLEY, 3) . '/' . VHOST,
+    '2023-06-18' => BACKUP . '/' . VHOST,
     $begin->format('Y-m-d') => PONTIFEX . '/' . VHOST,
     'filename' => FILENAME,
   ],
   'ipv6' => [
     '2012-12-31' => false,
-    '2017-12-04' => sprintf(LANGLEY, 3) . '/' . IPV6_PREFIX . VHOST,
-    '2021-09-05' => false,
+    //'2017-12-04' => sprintf(LANGLEY, 3) . '/' . IPV6_PREFIX . VHOST,
+    '2023-06-18' => BACKUP . '/' . IPV6_PREFIX . VHOST,
     $begin->format('Y-m-d') => PONTIFEX . '/' . IPV6_PREFIX . VHOST,
     'filename' => IPV6_PREFIX . FILENAME,
   ],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/origin-manager.py 
new/openSUSE-release-tools-20230721.2396b32/origin-manager.py
--- old/openSUSE-release-tools-20230721.5bc933b/origin-manager.py       
2023-07-21 13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/origin-manager.py       
2023-07-21 17:19:45.000000000 +0200
@@ -1,6 +1,11 @@
 #!/usr/bin/python3
 
-from typing import Literal, Optional, Tuple, Union
+from typing import Optional, Tuple, Union
+try:
+    from typing import Literal
+except ImportError:
+    from typing_extensions import Literal
+
 from osclib.core import devel_project_get
 from osclib.core import package_source_hash
 from osclib.core import package_kind
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/osclib/comments.py 
new/openSUSE-release-tools-20230721.2396b32/osclib/comments.py
--- old/openSUSE-release-tools-20230721.5bc933b/osclib/comments.py      
2023-07-21 13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/osclib/comments.py      
2023-07-21 17:19:45.000000000 +0200
@@ -1,5 +1,10 @@
 from datetime import datetime
-from typing import TYPE_CHECKING, Any, Dict, Generator, List, Literal, 
Optional, Tuple, TypedDict, Union
+from typing import TYPE_CHECKING, Any, Dict, Generator, List, Optional, Tuple, 
Union
+try:
+    from typing import Literal, TypedDict
+except ImportError:
+    from typing_extensions import Literal, TypedDict
+
 from dateutil.parser import parse as date_parse
 import re
 if TYPE_CHECKING:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/osclib/core.py 
new/openSUSE-release-tools-20230721.2396b32/osclib/core.py
--- old/openSUSE-release-tools-20230721.5bc933b/osclib/core.py  2023-07-21 
13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/osclib/core.py  2023-07-21 
17:19:45.000000000 +0200
@@ -4,7 +4,12 @@
 import re
 import socket
 import logging
-from typing import List, Literal, Optional, Tuple, Union
+from typing import List, Optional, Tuple, Union
+try:
+    from typing import Literal
+except ImportError:
+    from typing_extensions import Literal
+
 from lxml import etree as ET
 from urllib.error import HTTPError
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20230721.5bc933b/osclib/origin.py 
new/openSUSE-release-tools-20230721.2396b32/osclib/origin.py
--- old/openSUSE-release-tools-20230721.5bc933b/osclib/origin.py        
2023-07-21 13:05:41.000000000 +0200
+++ new/openSUSE-release-tools-20230721.2396b32/osclib/origin.py        
2023-07-21 17:19:45.000000000 +0200
@@ -1,6 +1,10 @@
 from copy import deepcopy
 import logging
-from typing import Any, Dict, Generator, List, Literal, NamedTuple, Optional, 
Tuple, TypedDict, Union
+from typing import Any, Dict, Generator, List, NamedTuple, Optional, Tuple, 
Union
+try:
+    from typing import Literal, TypedDict
+except ImportError:
+    from typing_extensions import Literal, TypedDict
 
 from osc.core import ReviewState
 from osclib.conf import Config

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.5dK4c3/_old  2023-07-25 11:53:33.130312806 +0200
+++ /var/tmp/diff_new_pack.5dK4c3/_new  2023-07-25 11:53:33.130312806 +0200
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20230721.5bc933b
-mtime: 1689937541
-commit: 5bc933b1b7426aba8cb75dbc25410aebfa07f974
+version: 20230721.2396b32
+mtime: 1689952785
+commit: 2396b32c141ca25b057c43758454abdc43f9131b
 

Reply via email to