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 2024-03-01 23:38:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1770 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Fri Mar  1 23:38:41 2024 rev:522 rq:1154000 version:20240223.f941f9d

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2024-02-14 23:20:05.199168562 +0100
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.1770/openSUSE-release-tools.changes
  2024-03-01 23:38:49.232434814 +0100
@@ -1,0 +2,44 @@
+Fri Feb 23 12:37:59 UTC 2024 - opensuse-releaset...@opensuse.org
+
+- Update to version 20240223.f941f9d:
+  * Call rabbit-repoid.py for openSUSE:Slowroll
+
+-------------------------------------------------------------------
+Thu Feb 22 15:43:06 UTC 2024 - opensuse-releaset...@opensuse.org
+
+- Update to version 20240222.1748b20:
+  * osclib/repochecks.py: Use libsolv for checking conflicts between packages
+  * findfileconflicts: Quote version and release in YAML output
+
+-------------------------------------------------------------------
+Thu Feb 22 13:43:26 UTC 2024 - opensuse-releaset...@opensuse.org
+
+- Update to version 20240222.db4bd75:
+  * Introduce new openSUSE|SUSE.Legal group and move pipelines into them
+
+-------------------------------------------------------------------
+Wed Feb 21 10:27:20 UTC 2024 - opensuse-releaset...@opensuse.org
+
+- Update to version 20240221.84b76ec:
+  * Fix mkdir permissions argument
+  * Add IPv4 and IPv6 handling in one file
+
+-------------------------------------------------------------------
+Tue Feb 20 08:47:19 UTC 2024 - opensuse-releaset...@opensuse.org
+
+- Update to version 20240220.9919e02:
+  * Maintenance setup for Leap 15.6
+
+-------------------------------------------------------------------
+Thu Feb 15 10:07:18 UTC 2024 - opensuse-releaset...@opensuse.org
+
+- Update to version 20240215.54075b0:
+  * Remove 15.4 and add 15.6 where missing
+
+-------------------------------------------------------------------
+Thu Feb 15 10:05:30 UTC 2024 - opensuse-releaset...@opensuse.org
+
+- Update to version 20240215.9e5a7f9:
+  * ttm: Remove livecd size checks
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20240207.602b3d2.obscpio

New:
----
  openSUSE-release-tools-20240223.f941f9d.obscpio

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

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.XCLXsv/_old  2024-03-01 23:38:49.896458825 +0100
+++ /var/tmp/diff_new_pack.XCLXsv/_new  2024-03-01 23:38:49.896458825 +0100
@@ -20,7 +20,7 @@
 %define source_dir openSUSE-release-tools
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20240207.602b3d2
+Version:        20240223.f941f9d
 Release:        0
 Summary:        Tools to aid in staging and release work for openSUSE/SUSE
 License:        GPL-2.0-or-later AND MIT

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.XCLXsv/_old  2024-03-01 23:38:49.928459982 +0100
+++ /var/tmp/diff_new_pack.XCLXsv/_new  2024-03-01 23:38:49.932460127 +0100
@@ -1,7 +1,7 @@
 <servicedata>
   <service name="tar_scm">
     <param 
name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param>
-    <param 
name="changesrevision">602b3d2b1e47b7ba9397524ebd94446982f88c03</param>
+    <param 
name="changesrevision">f941f9da356c0e561c42a69596eef616ea1f2c77</param>
   </service>
 </servicedata>
 

++++++ openSUSE-release-tools-20240207.602b3d2.obscpio -> 
openSUSE-release-tools-20240223.f941f9d.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/dashboard/generate.py 
new/openSUSE-release-tools-20240223.f941f9d/dashboard/generate.py
--- old/openSUSE-release-tools-20240207.602b3d2/dashboard/generate.py   
2024-02-07 15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/dashboard/generate.py   
2024-02-23 13:35:56.000000000 +0100
@@ -191,13 +191,6 @@
                     openqa_group='openSUSE Leap 15.5 ARMv7', 
openqa_version='15.5', openqa_groupid=106)
         fetcher.add('openSUSE:Leap:15.5:ARM:Images', 
nick='Leap:15.5:ARM:Images',
                     openqa_group='openSUSE Leap 15.5 ARMv7 Images', 
openqa_version='15.5', openqa_groupid=104)
-        fetcher.add('openSUSE:Leap:15.4:Images', nick='Leap:15.4:Images', 
openqa_group='openSUSE Leap 15.4 Images',
-                    openqa_version='15.4', openqa_groupid=89)
-        fetcher.add('openSUSE:Leap:15.4:ARM', nick='Leap:15.4:ARM',
-                    
download_url='https://download.opensuse.org/ports/armv7hl/distribution/leap/15.4/iso',
-                    openqa_group='openSUSE Leap 15.4 ARMv7', 
openqa_version='15.4', openqa_groupid=92)
-        fetcher.add('openSUSE:Leap:15.4:ARM:Images', 
nick='Leap:15.4:ARM:Images',
-                    openqa_group='openSUSE Leap 15.4 ARMv7 Images', 
openqa_version='15.4', openqa_groupid=91)
 
     with app.app_context():
         rendered = render_template('dashboard.html',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/data/apimap.json 
new/openSUSE-release-tools-20240223.f941f9d/data/apimap.json
--- old/openSUSE-release-tools-20240207.602b3d2/data/apimap.json        
2024-02-07 15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/data/apimap.json        
2024-02-23 13:35:56.000000000 +0100
@@ -18,5 +18,15 @@
     "version": "15.5",
     "flavor": "DVD-Backports-Incidents",
     "distri": "opensuse"
+  },
+  "openSUSE:Leap:15.6:Update" : {
+    "version": "15.6",
+    "flavor": "DVD-Incidents",
+    "distri": "opensuse"
+  },
+  "openSUSE:Backports:SLE-15-SP6:Update" : {
+    "version": "15.6",
+    "flavor": "DVD-Backports-Incidents",
+    "distri": "opensuse"
   }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/data/incidents.json 
new/openSUSE-release-tools-20240223.f941f9d/data/incidents.json
--- old/openSUSE-release-tools-20240207.602b3d2/data/incidents.json     
2024-02-07 15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/data/incidents.json     
2024-02-23 13:35:56.000000000 +0100
@@ -28,5 +28,20 @@
     "FLAVOR": "DVD-Backports-Incidents",
     "VERSION": "15.5",
     "ARCH": "x86_64"
+  },
+  "openSUSE:Leap:15.6:Update": {
+    "DISTRI": "opensuse",
+    "FLAVOR": "DVD-Incidents",
+    "VERSION": "15.6",
+    "ARCH": [
+      "x86_64",
+      "aarch64"
+    ]
+  },
+  "openSUSE:Backports:SLE-15-SP6:Update": {
+    "DISTRI": "opensuse",
+    "FLAVOR": "DVD-Backports-Incidents",
+    "VERSION": "15.6",
+    "ARCH": "x86_64"
   }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/data/repos.json 
new/openSUSE-release-tools-20240223.f941f9d/data/repos.json
--- old/openSUSE-release-tools-20240207.602b3d2/data/repos.json 2024-02-07 
15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/data/repos.json 2024-02-23 
13:35:56.000000000 +0100
@@ -59,6 +59,36 @@
             "http://download.opensuse.org/update/leap/15.5/backports/";,
             "http://download.opensuse.org/update/leap/15.5/sle/";
          ]
+      },
+      "openSUSE:Leap:15.6:Update": {
+         "settings": {
+            "OS_TEST_ISSUES": "",
+            "FLAVOR": "DVD-Updates",
+            "DISTRI": "opensuse",
+            "VERSION": "15.6",
+            "ARCH": "x86_64"
+         },
+         "test": "textmode",
+         "repos": [
+            "http://download.opensuse.org/update/leap/15.6/oss/";,
+            "http://download.opensuse.org/update/leap/15.6/non-oss/";,
+            "http://download.opensuse.org/update/leap/15.6/backports/";,
+            "http://download.opensuse.org/update/leap/15.6/sle/";
+         ]
+      },
+      "openSUSE:Backports:SLE-15-SP6:Update": {
+         "settings": {
+            "OS_TEST_ISSUES": "",
+            "FLAVOR": "DVD-Backports-Incidents",
+            "DISTRI": "opensuse",
+            "VERSION": "15.6",
+            "ARCH": "x86_64"
+         },
+         "test": "textmode",
+         "repos": [
+            "http://download.opensuse.org/update/leap/15.6/backports/";,
+            "http://download.opensuse.org/update/leap/15.6/sle/";
+         ]
       }
    }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/docker_publisher.py 
new/openSUSE-release-tools-20240223.f941f9d/docker_publisher.py
--- old/openSUSE-release-tools-20240207.602b3d2/docker_publisher.py     
2024-02-07 15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/docker_publisher.py     
2024-02-23 13:35:56.000000000 +0100
@@ -377,16 +377,6 @@
             },
             'publisher': DockerImagePublisherRegistry(drc_tw, "latest"),
         },
-        '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
-                'aarch64': 
DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.4/containers/aarch64/opensuse-leap-image:docker";,
 maintenance_release=True),  # noqa: E501
-                'armv7l': 
DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.4/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.4/containers/ppc64le/opensuse-leap-image:docker";,
 maintenance_release=True),  # noqa: E501
-                's390x': 
DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.4/containers/s390x/opensuse-leap-image:docker";,
 maintenance_release=True),  # noqa: E501
-            },
-            'publisher': DockerImagePublisherRegistry(drc_leap, "15.4"),
-        },
         '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
@@ -397,6 +387,16 @@
             },
             'publisher': DockerImagePublisherRegistry(drc_leap, "latest", 
["15.5", "15"]),
         },
+        'leap-15.6': {
+            'fetchers': {
+                'x86_64': 
DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.6/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.6/containers/aarch64/opensuse-leap-image:docker";,
 maintenance_release=True),  # noqa: E501
+                'armv7l': 
DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.6/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.6/containers/ppc64le/opensuse-leap-image:docker";,
 maintenance_release=True),  # noqa: E501
+                's390x': 
DockerImageFetcherOBS(url="https://build.opensuse.org/public/build/openSUSE:Containers:Leap:15.6/containers/s390x/opensuse-leap-image:docker";,
 maintenance_release=True),  # noqa: E501
+            },
+            'publisher': DockerImagePublisherRegistry(drc_leap, "15.6"),
+        },
     }
 
     # 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-20240207.602b3d2/findfileconflicts 
new/openSUSE-release-tools-20240223.f941f9d/findfileconflicts
--- old/openSUSE-release-tools-20240207.602b3d2/findfileconflicts       
2024-02-07 15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/findfileconflicts       
2024-02-23 13:35:56.000000000 +0100
@@ -446,8 +446,8 @@
       my @sp1 = split(' ', $p1);
       my @sp2 = split(' ', $p2);
       print "- between:\n";
-      print "  - [$sp1[0], $sp1[1], $sp1[2], $sp1[3]]\n";
-      print "  - [$sp2[0], $sp2[1], $sp2[2], $sp2[3]]\n";
+      print "  - [$sp1[0], '$sp1[1]', '$sp1[2]', $sp1[3]]\n";
+      print "  - [$sp2[0], '$sp2[1]', '$sp2[2]', $sp2[3]]\n";
       print "  conflicts: |-\n";
       print "    $_\n" for (@con);
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/gocd/checkers.opensuse.gocd.yaml 
new/openSUSE-release-tools-20240223.f941f9d/gocd/checkers.opensuse.gocd.yaml
--- 
old/openSUSE-release-tools-20240207.602b3d2/gocd/checkers.opensuse.gocd.yaml    
    2024-02-07 15:42:32.000000000 +0100
+++ 
new/openSUSE-release-tools-20240223.f941f9d/gocd/checkers.opensuse.gocd.yaml    
    2024-02-23 13:35:56.000000000 +0100
@@ -41,7 +41,7 @@
             tasks:
             - script: ./maintenance-installcheck.py -A 
https://api.opensuse.org --user=maintenance-installcheck --debug review
   openSUSE.Legal.Check:
-    group: openSUSE.Checkers
+    group: openSUSE.Legal
     lock_behavior: unlockWhenFinished
     timer:
       spec: 0 */5 * ? * *
@@ -62,7 +62,7 @@
             - script: ./legal-auto.py -A https://api.opensuse.org --debug 
--legaldb https://legaldb.suse.de --group=legal-auto review
             - script: ./legal-auto.py -A https://api.opensuse.org --debug 
--legaldb https://legaldb.suse.de --user=licensedigger review
   openSUSE.Legal.Import:
-    group: openSUSE.Checkers
+    group: openSUSE.Legal
     lock_behavior: unlockWhenFinished
     timer:
       spec: 0 0 */3 ? * *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/gocd/checkers.suse.gocd.yaml 
new/openSUSE-release-tools-20240223.f941f9d/gocd/checkers.suse.gocd.yaml
--- old/openSUSE-release-tools-20240207.602b3d2/gocd/checkers.suse.gocd.yaml    
2024-02-07 15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/gocd/checkers.suse.gocd.yaml    
2024-02-23 13:35:56.000000000 +0100
@@ -233,7 +233,7 @@
             tasks:
             - script: ./check_source.py -A https://api.suse.de --verbose 
--skip-add-reviews --group factory-auto --user factory-auto review
   SLE.Legal.Check:
-    group: SLE.Checkers
+    group: SUSE.Legal
     lock_behavior: unlockWhenFinished
     timer:
       spec: 0 */5 * ? * *
@@ -255,7 +255,7 @@
             - script: ./legal-auto.py -A https://api.suse.de --debug --legaldb 
https://legaldb.suse.de --group=legal-auto review
             - script: ./legal-auto.py -A https://api.suse.de --debug --legaldb 
https://legaldb.suse.de --user=licensedigger review
   SLE.Legal.Import:
-    group: SLE.Checkers
+    group: SUSE.Legal
     lock_behavior: unlockWhenFinished
     timer:
       spec: 0 0 0 ? * *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/gocd/checkers.suse.gocd.yaml.erb 
new/openSUSE-release-tools-20240223.f941f9d/gocd/checkers.suse.gocd.yaml.erb
--- 
old/openSUSE-release-tools-20240207.602b3d2/gocd/checkers.suse.gocd.yaml.erb    
    2024-02-07 15:42:32.000000000 +0100
+++ 
new/openSUSE-release-tools-20240223.f941f9d/gocd/checkers.suse.gocd.yaml.erb    
    2024-02-23 13:35:56.000000000 +0100
@@ -233,7 +233,7 @@
             tasks:
             - script: ./check_source.py -A https://api.suse.de --verbose 
--skip-add-reviews --group factory-auto --user factory-auto review
   SLE.Legal.Check:
-    group: SLE.Checkers
+    group: SUSE.Legal
     lock_behavior: unlockWhenFinished
     timer:
       spec: 0 */5 * ? * *
@@ -255,7 +255,7 @@
             - script: ./legal-auto.py -A https://api.suse.de --debug --legaldb 
https://legaldb.suse.de --group=legal-auto review
             - script: ./legal-auto.py -A https://api.suse.de --debug --legaldb 
https://legaldb.suse.de --user=licensedigger review
   SLE.Legal.Import:
-    group: SLE.Checkers
+    group: SUSE.Legal
     lock_behavior: unlockWhenFinished
     timer:
       spec: 0 0 0 ? * *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/gocd/generate.sh 
new/openSUSE-release-tools-20240223.f941f9d/gocd/generate.sh
--- old/openSUSE-release-tools-20240207.602b3d2/gocd/generate.sh        
2024-02-07 15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/gocd/generate.sh        
2024-02-23 13:35:56.000000000 +0100
@@ -14,7 +14,7 @@
 
 grep group: *.yaml | cut -d: -f3 | sort -u | while read group; do
   case $group in
-    
BCI|Factory|Leap|Admin|MicroOS|Monitors|openSUSE.Checkers|SLE15.Stagings|SLE15.Target|SLE.Checkers|ALP.Stagings|ALP.Target|ALP.Checkers)
+    
BCI|Factory|Leap|Admin|MicroOS|Monitors|openSUSE.Checkers|SLE15.Stagings|SLE15.Target|SLE.Checkers|ALP.Stagings|ALP.Target|ALP.Checkers|openSUSE.Legal|SUSE.Legal)
     ;;
   *)
     echo "Do not create new groups without being admin and knowing the 
consequences - found $group"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/gocd/monitors.gocd.yaml 
new/openSUSE-release-tools-20240223.f941f9d/gocd/monitors.gocd.yaml
--- old/openSUSE-release-tools-20240207.602b3d2/gocd/monitors.gocd.yaml 
2024-02-07 15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/gocd/monitors.gocd.yaml 
2024-02-23 13:35:56.000000000 +0100
@@ -121,7 +121,7 @@
                 git config --global user.email "co...@suse.de"
                 git config --global user.name "GoCD Repo Monitor"
                 cd repos
-                ../scripts/gocd/rabbit-repoid.py -A https://api.opensuse.org 
openSUSE:Factory openSUSE:Leap openSUSE:Backports Virtualization:WSL KDE:Medias 
systemsmanagement:Agama SUSE:ALP
+                ../scripts/gocd/rabbit-repoid.py -A https://api.opensuse.org 
openSUSE:Factory openSUSE:Leap openSUSE:Backports Virtualization:WSL KDE:Medias 
systemsmanagement:Agama SUSE:ALP openSUSE:Slowroll
   openSUSE.ObsRsync:
     group: Monitors
     lock_behavior: unlockWhenFinished
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/gocd/pkglistgen.opensuse.gocd.yaml 
new/openSUSE-release-tools-20240223.f941f9d/gocd/pkglistgen.opensuse.gocd.yaml
--- 
old/openSUSE-release-tools-20240207.602b3d2/gocd/pkglistgen.opensuse.gocd.yaml  
    2024-02-07 15:42:32.000000000 +0100
+++ 
new/openSUSE-release-tools-20240223.f941f9d/gocd/pkglistgen.opensuse.gocd.yaml  
    2024-02-23 13:35:56.000000000 +0100
@@ -151,28 +151,6 @@
             tasks:
             - 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
-    environment_variables:
-      OSC_CONFIG: /home/go/config/oscrc-staging-bot
-    timer:
-      spec: 0 40 * ? * *
-      only_on_changes: false
-    materials:
-      git:
-        git: https://github.com/openSUSE/openSUSE-release-tools.git
-    stages:
-    - pkglistgen:
-        approval:
-          type: manual
-        jobs:
-          openSUSE_Leap_15.4_Images_target:
-            resources:
-            - repo-checker
-            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.6:
     group: Leap
     lock_behavior: unlockWhenFinished
@@ -194,24 +172,3 @@
             - repo-checker
             tasks:
               - 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
-    environment_variables:
-      OSC_CONFIG: /home/go/config/oscrc-staging-bot
-    timer:
-      spec: 0 0 0 */3 * ?
-      only_on_changes: false
-    materials:
-      git:
-        git: https://github.com/openSUSE/openSUSE-release-tools.git
-    stages:
-    - Update:
-        approval:
-          type: manual
-        jobs:
-          openSUSE_Leap_15.4_Images:
-            resources:
-            - repo-checker
-            tasks:
-              - script: python3 ./pkglistgen.py --apiurl 
https://api.opensuse.org handle_update_repos openSUSE:Leap:15.4:Images
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/gocd/pkglistgen.opensuse.gocd.yaml.erb
 
new/openSUSE-release-tools-20240223.f941f9d/gocd/pkglistgen.opensuse.gocd.yaml.erb
--- 
old/openSUSE-release-tools-20240207.602b3d2/gocd/pkglistgen.opensuse.gocd.yaml.erb
  2024-02-07 15:42:32.000000000 +0100
+++ 
new/openSUSE-release-tools-20240223.f941f9d/gocd/pkglistgen.opensuse.gocd.yaml.erb
  2024-02-23 13:35:56.000000000 +0100
@@ -118,38 +118,7 @@
             - 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:
-    group: Leap
-    lock_behavior: unlockWhenFinished
-    environment_variables:
-      OSC_CONFIG: /home/go/config/oscrc-staging-bot
-    timer:
-      spec: 0 40 * ? * *
-      only_on_changes: false
-    materials:
-      git:
-        git: https://github.com/openSUSE/openSUSE-release-tools.git
-    stages:
-    - pkglistgen:
-        approval:
-          type: manual
-        jobs:
-<% ['openSUSE:Leap:15.4:Images/target'].each do |project|
-  project=project.split('/')
-  name=project[0].gsub(':', '_')
-  if project.size > 1
-    options=" -s #{project[1]}"
-    name = name + "_#{project[1]}"
-  end
-  -%>
-          <%= name %>:
-            resources:
-            - repo-checker
-            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 <%= project[0] %><%= options %>
-<% end -%>
-<% %w(openSUSE:Leap:15.6 openSUSE:Leap:15.4:Images).each do |project| -%>
+<% %w(openSUSE:Leap:15.6).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-20240207.602b3d2/gocd/totestmanager.gocd.yaml 
new/openSUSE-release-tools-20240223.f941f9d/gocd/totestmanager.gocd.yaml
--- old/openSUSE-release-tools-20240207.602b3d2/gocd/totestmanager.gocd.yaml    
2024-02-07 15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/gocd/totestmanager.gocd.yaml    
2024-02-23 13:35:56.000000000 +0100
@@ -105,69 +105,6 @@
         - 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:Factory:zSystems
-  TTM.Leap_15.4_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.4:Images
-  TTM.Leap_15.4_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.4:ARM
-  TTM.Leap_15.4_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.4:ARM:Images
   TTM.Leap_15.5_Images:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/gocd/totestmanager.gocd.yaml.erb 
new/openSUSE-release-tools-20240223.f941f9d/gocd/totestmanager.gocd.yaml.erb
--- 
old/openSUSE-release-tools-20240207.602b3d2/gocd/totestmanager.gocd.yaml.erb    
    2024-02-07 15:42:32.000000000 +0100
+++ 
new/openSUSE-release-tools-20240223.f941f9d/gocd/totestmanager.gocd.yaml.erb    
    2024-02-23 13:35:56.000000000 +0100
@@ -6,9 +6,6 @@
       openSUSE:Factory:LegacyX86
       openSUSE:Factory:PowerPC
       openSUSE:Factory:zSystems
-      openSUSE:Leap:15.4:Images
-      openSUSE:Leap:15.4:ARM
-      openSUSE:Leap:15.4:ARM:Images
       openSUSE:Leap:15.5:Images
       openSUSE:Leap:15.5:ARM
       openSUSE:Leap:15.5:ARM:Images
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/gocd/vagrant-publisher.gocd.yaml 
new/openSUSE-release-tools-20240223.f941f9d/gocd/vagrant-publisher.gocd.yaml
--- 
old/openSUSE-release-tools-20240207.602b3d2/gocd/vagrant-publisher.gocd.yaml    
    2024-02-07 15:42:32.000000000 +0100
+++ 
new/openSUSE-release-tools-20240223.f941f9d/gocd/vagrant-publisher.gocd.yaml    
    2024-02-23 13:35:56.000000000 +0100
@@ -51,27 +51,27 @@
             tasks:
               - script: |
                   ruby obs-to-vagrantcloud.rb --url 
https://download.opensuse.org/ports/aarch64/tumbleweed/appliances/boxes/openSUSE-MicroOS.aarch64-ContainerHost-Vagrant.json
 --organization opensuse --new-box-name MicroOS-ContainerHost.aarch64
-          publish_Leap-15_4_x86_64:
+          publish_Leap-15_5_x86_64:
             resources:
             - staging-bot
             tasks:
               - script: |
-                  ruby obs-to-vagrantcloud.rb --url 
https://download.opensuse.org/distribution/leap/15.4/appliances/boxes/Leap-15.4.x86_64.json
 --organization opensuse --new-box-name Leap-15.4.x86_64
-          publish_Leap-15_4_aarch64:
+                  ruby obs-to-vagrantcloud.rb --url 
https://download.opensuse.org/distribution/leap/15.5/appliances/boxes/Leap-15.5.x86_64.json
 --organization opensuse --new-box-name Leap-15.5.x86_64
+          publish_Leap-15_5_aarch64:
             resources:
             - staging-bot
             tasks:
               - script: |
-                  ruby obs-to-vagrantcloud.rb --url 
https://download.opensuse.org/distribution/leap/15.4/appliances/boxes/Leap-15.4.aarch64-libvirt_aarch64.json
 --organization opensuse --new-box-name Leap-15.4.aarch64
-          publish_Leap-15_5_x86_64:
+                  ruby obs-to-vagrantcloud.rb --url 
https://download.opensuse.org/distribution/leap/15.5/appliances/boxes/Leap-15.5.aarch64-libvirt_aarch64.json
 --organization opensuse --new-box-name Leap-15.5.aarch64
+          publish_Leap-15_6_x86_64:
             resources:
             - staging-bot
             tasks:
               - script: |
-                  ruby obs-to-vagrantcloud.rb --url 
https://download.opensuse.org/distribution/leap/15.5/appliances/boxes/Leap-15.5.x86_64.json
 --organization opensuse --new-box-name Leap-15.5.x86_64
-          publish_Leap-15_5_aarch64:
+                  ruby obs-to-vagrantcloud.rb --url 
https://download.opensuse.org/distribution/leap/15.6/appliances/boxes/Leap-15.6.x86_64.json
 --organization opensuse --new-box-name Leap-15.6.x86_64
+          publish_Leap-15_6_aarch64:
             resources:
             - staging-bot
             tasks:
               - script: |
-                  ruby obs-to-vagrantcloud.rb --url 
https://download.opensuse.org/distribution/leap/15.5/appliances/boxes/Leap-15.5.aarch64-libvirt_aarch64.json
 --organization opensuse --new-box-name Leap-15.5.aarch64
+                  ruby obs-to-vagrantcloud.rb --url 
https://download.opensuse.org/distribution/leap/15.6/appliances/boxes/Leap-15.6.aarch64-libvirt_aarch64.json
 --organization opensuse --new-box-name Leap-15.6.aarch64
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/gocd/vagrant-publisher.gocd.yaml.erb
 
new/openSUSE-release-tools-20240223.f941f9d/gocd/vagrant-publisher.gocd.yaml.erb
--- 
old/openSUSE-release-tools-20240207.602b3d2/gocd/vagrant-publisher.gocd.yaml.erb
    2024-02-07 15:42:32.000000000 +0100
+++ 
new/openSUSE-release-tools-20240223.f941f9d/gocd/vagrant-publisher.gocd.yaml.erb
    2024-02-23 13:35:56.000000000 +0100
@@ -21,10 +21,10 @@
 
['https://download.opensuse.org/tumbleweed/appliances/boxes/openSUSE-MicroOS.x86_64-ContainerHost-Vagrant.json',
 'MicroOS-ContainerHost.x86_64'],
 
['https://download.opensuse.org/ports/aarch64/tumbleweed/appliances/boxes/openSUSE-MicroOS.aarch64-Vagrant.json',
 'MicroOS.aarch64'],
 
['https://download.opensuse.org/ports/aarch64/tumbleweed/appliances/boxes/openSUSE-MicroOS.aarch64-ContainerHost-Vagrant.json',
 'MicroOS-ContainerHost.aarch64'],
-['https://download.opensuse.org/distribution/leap/15.4/appliances/boxes/Leap-15.4.x86_64.json',
 'Leap-15.4.x86_64'],
-['https://download.opensuse.org/distribution/leap/15.4/appliances/boxes/Leap-15.4.aarch64-libvirt_aarch64.json',
 'Leap-15.4.aarch64'],
 
['https://download.opensuse.org/distribution/leap/15.5/appliances/boxes/Leap-15.5.x86_64.json',
 'Leap-15.5.x86_64'],
 
['https://download.opensuse.org/distribution/leap/15.5/appliances/boxes/Leap-15.5.aarch64-libvirt_aarch64.json',
 'Leap-15.5.aarch64'],
+['https://download.opensuse.org/distribution/leap/15.6/appliances/boxes/Leap-15.6.x86_64.json',
 'Leap-15.6.x86_64'],
+['https://download.opensuse.org/distribution/leap/15.6/appliances/boxes/Leap-15.6.aarch64-libvirt_aarch64.json',
 'Leap-15.6.aarch64'],
 ].each do |url, box_name| %>
           publish_<%= box_name.gsub('.', '_') %>:
             resources:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/metrics/access/aggregate.php 
new/openSUSE-release-tools-20240223.f941f9d/metrics/access/aggregate.php
--- old/openSUSE-release-tools-20240207.602b3d2/metrics/access/aggregate.php    
2024-02-07 15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/metrics/access/aggregate.php    
2024-02-23 13:35:56.000000000 +0100
@@ -1,11 +1,12 @@
 #!/usr/bin/php
 <?php
 
-use InfluxDB\Point;
-use InfluxDB\Database;
+use InfluxDB2\Client;
+use InfluxDB2\Point;
 
 $CACHE_DIR = $_SERVER['HOME'] . 
'/.cache/openSUSE-release-tools/metrics-access';
 const PROTOCOLS = ['ipv4', 'ipv6'];
+const DOWNLOAD_OPENSUSE_ORG = 'https://download.opensuse.org/logs';
 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';
@@ -19,22 +20,24 @@
 $begin->sub(date_interval_create_from_date_string('1 day'));
 $source_map = [
   'ipv4' => [
+    // the first item defines the starting date for aggregation
     '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,
+    '2023-11-13' => DOWNLOAD_OPENSUSE_ORG . '/' . VHOST,
     'filename' => FILENAME,
   ],
   'ipv6' => [
     '2012-12-31' => 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,
+    '2023-11-13' => DOWNLOAD_OPENSUSE_ORG . '/' . IPV6_PREFIX . VHOST,
     'filename' => IPV6_PREFIX . FILENAME,
   ],
+  'ipv4+6' => [
+    '2023-11-13' => false,
+    $begin->format('Y-m-d') => DOWNLOAD_OPENSUSE_ORG . '/' . VHOST,
+    'filename' => FILENAME,
+  ],
 ];
 $end = new DateTime(key($source_map['ipv4'])); // decide about adding one day
+$migration_date = new DateTime(key($source_map['ipv4+6']));
 $period_reversed = date_period_reversed($end, '1 day', $begin);
 
 error_log('begin: ' . $begin->format('Y-m-d'));
@@ -53,9 +56,11 @@
     foreach (PROTOCOLS as $protocol) {
       mkdir("$CACHE_DIR/$protocol", 0755, true);
     }
+    mkdir("$CACHE_DIR/ipv4+6", 0755, true);
 
     // Avoid packaging mess while still automating, but not ideal.
-    passthru('cd ' . escapeshellarg($CACHE_DIR) . ' && composer require 
influxdb/influxdb-php ~1');
+    passthru('cd ' . escapeshellarg($CACHE_DIR) .
+      ' && composer require influxdata/influxdb-client-php:~3.4 
guzzlehttp/guzzle');
   }
 
   require "$CACHE_DIR/vendor/autoload.php";
@@ -68,9 +73,10 @@
   $found = [];
   // Walk backwards until found in cache.
   foreach ($period_reversed as $date) {
-    $date_string = $date->format('Y-m-d');
+    $date_string = print_date($date);
+    $protocols_on_day = get_protocols($date);
 
-    foreach (PROTOCOLS as $protocol) {
+    foreach ($protocols_on_day as $protocol) {
       if (!empty($found[$protocol])) continue;
       if (isset($source_map[$protocol][$date_string]))
         $source[$protocol] = $source_map[$protocol][$date_string];
@@ -78,7 +84,7 @@
       // Skip date+protocol if no source is available.
       if (empty($source[$protocol])) continue;
 
-      $cache_file = "$CACHE_DIR/$protocol/$date_string.json";
+      $cache_file = get_cache_file($protocol, $date);
       if (file_exists($cache_file)) {
         error_log("[$date_string] [$protocol] found");
         $found[$protocol] = true;
@@ -88,7 +94,8 @@
       }
     }
 
-    if (count($found) == count(PROTOCOLS)) {
+    // Stop when all cache files were found
+    if (count($found) == count($protocols_on_day)) {
       error_log('ingest initialization complete');
       break;
     }
@@ -98,6 +105,47 @@
   subprocess_wait(1, 1);
 }
 
+function print_date($date)
+{
+  return $date->format('Y-m-d');
+}
+
+// Logs before migration date have been kept in separate files for IPv4 and 
IPv6 addresses
+function has_separate_protocol_logs($date)
+{
+  global $migration_date;
+  if ($date > $migration_date)
+    return false;
+  else
+    return true;
+}
+
+function get_cache_file($protocol, $date)
+{
+  global $CACHE_DIR;
+  if (has_separate_protocol_logs($date))
+    return "$CACHE_DIR/$protocol/" . print_date($date) . ".json";
+  else
+    return "$CACHE_DIR/ipv4+6/" . print_date($date) . ".json";
+}
+
+function get_cache_files($date)
+{
+  $files = [];
+  foreach (get_protocols($date) as $protocol)
+    array_push($files, get_cache_file($protocol, $date));
+
+  return $files;
+}
+
+function get_protocols($date)
+{
+  if (has_separate_protocol_logs($date))
+    return PROTOCOLS;
+  else
+    return array("ipv4+6");
+}
+
 function ingest($date, $source, $filename, $destination)
 {
   $url = implode('/', [
@@ -107,7 +155,7 @@
     sprintf($filename, $date->format('Ymd')),
   ]);
   $command = implode(' ', [
-    'curl -s',
+    'curl -s --digest --netrc',
     escapeshellarg($url),
     '| xzcat',
     '| ' . __DIR__ . '/ingest.php',
@@ -159,14 +207,14 @@
   $merged_protocol = [];
   $date_previous = null;
   foreach ($period as $date) {
-    $date_string = $date->format('Y-m-d');
+    $date_string = print_date($date);
 
     $data = null;
     foreach (PROTOCOLS as $protocol) {
-      $cache_file = "$CACHE_DIR/$protocol/$date_string.json";
+      $cache_file = get_cache_file($protocol, $date);
       if (!file_exists($cache_file) or !filesize($cache_file)) continue;
 
-      error_log("[$date_string] [$protocol] load cache");
+      error_log("[$date_string]" . (has_separate_protocol_logs($date) ? " 
[$protocol]" : "") . " load cache");
       $data_new = json_decode(file_get_contents($cache_file), true);
       if (!$data_new) {
         error_log('ERROR: failed to load ' . $cache_file);
@@ -174,17 +222,31 @@
         exit(1);
       }
 
+      if (isset($data_new[$protocol])) {
+        // new cache files have 'ipv4' and 'ipv6' array keys
+        $data_protocol = $data_new[$protocol];
+        // we don't want to count 'total_invalid' and 'bytes' twice
+        if ($data) {
+          $data_protocol['total_invalid'] = 0;
+          $data_protocol['bytes'] = 0;
+        } else {
+          $data_protocol['total_invalid'] = $data_new['total_invalid'];
+          $data_protocol['bytes'] = $data_new['bytes'];
+        }
+      }
+      else
+        $data_protocol = $data_new;
       if (!isset($merged_protocol[$protocol])) $merged_protocol[$protocol] = 
[];
-      $data_new['days'] = 1;
-      normalize($data_new);
-      aggregate($intervals, $merged_protocol[$protocol], $date, 
$date_previous, $data_new,
+      $data_protocol['days'] = 1;
+      normalize($data_protocol);
+      aggregate($intervals, $merged_protocol[$protocol], $date, 
$date_previous, $data_protocol,
         ['protocol' => $protocol], 'protocol');
 
       if ($data) {
-        merge($data, $data_new);
+        merge($data, $data_protocol);
         $data['days'] = 1;
       } else {
-        $data = $data_new;
+        $data = $data_protocol;
       }
     }
 
@@ -213,12 +275,12 @@
 function aggregate($intervals, &$merged, $date, $date_previous, $data, $tags = 
[], $prefix = 'access')
 {
   foreach ($intervals as $interval => $format) {
-    if ($interval == 'FQ') {
+    if ($interval === 'FQ') {
       $value = format_FQ($date);
       if (isset($date_previous))
         $value_previous = format_FQ($date_previous);
     }
-    elseif ($interval == 'FY') {
+    elseif ($interval === 'FY') {
       $value = format_FY($date);
       if (isset($date_previous))
         $value_previous = format_FY($date_previous);
@@ -231,7 +293,7 @@
     if (!isset($merged[$interval]) || $value != $merged[$interval]['value']) {
       if (!empty($merged[$interval]['data'])) {
         $summary = summarize($merged[$interval]['data']);
-        if ($prefix == 'protocol') {
+        if ($prefix === 'protocol') {
           $summary = ['-' => $summary['-']];
         }
         $flavors = [];
@@ -248,7 +310,7 @@
             $count += write_flavors($interval, $date_previous, $flavors);
           }
 
-          if ($prefix == 'access') {
+          if ($prefix === 'access') {
             $summary = 
summarize_product_plus_key($merged[$interval]['data']['total_image_product']);
             $count += write_summary_product_plus_key($interval, 
$date_previous, $summary, 'image');
           }
@@ -313,7 +375,7 @@
     if (empty($data1['total_product'][$product]))
       $data1['total_product'][$product] = 0;
 
-    $data1['total_product'][$product] += $data2['total_product'][$product];
+    $data1['total_product'][$product] += $total;
   }
 
   merge_unique_products($data1['unique_product'], $data2['unique_product']);
@@ -451,8 +513,7 @@
   $measurement = $prefix . '_' . $interval;
   $points = [];
   foreach ($summary as $product => $fields) {
-    $points[] = new Point($measurement, null,
-      ['product' => $product] + $tags, $fields, $value->getTimestamp());
+    $points[] = new Point($measurement, ['product' => $product] + $tags, 
$fields, $value->getTimestamp());
   }
   write($points);
   return count($points);
@@ -465,7 +526,8 @@
   foreach ($flavors as $product => $unique_flavors) {
     foreach($unique_flavors as $flavor => $unique_count) {
       $tags = ['product' => $product, 'flavor' => $flavor];
-      $points[] = new Point($measurement, $unique_count, $tags, [], 
$value->getTimestamp());
+      $fields = ['value' => $unique_count];
+      $points[] = new Point($measurement, $tags, $fields, 
$value->getTimestamp());
     }
   }
   write($points);
@@ -478,7 +540,7 @@
   $points = [];
   foreach ($summary as $product => $pairs) {
     foreach ($pairs as $key => $value) {
-      $points[] = new Point($measurement, null,
+      $points[] = new Point($measurement,
         ['product' => $product, 'key' => $key], ['value' => $value], 
$date->getTimestamp());
     }
   }
@@ -488,13 +550,20 @@
 
 function write($points)
 {
-  static $database = null;
+  static $client;
+  static $writeApi;
 
-  if (!$database) {
-    $database = 
InfluxDB\Client::fromDSN('influxdb://0.0.0.0:8086/osrt_access');
-    // $database->drop();
-    // $database->create();
+  if (!$client) {
+    $client = new Client([
+      "url" => "http://localhost:8086";,
+      "token" => "",
+      "bucket" => "osrt_access/autogen",
+      "org" => "-",
+      "precision" => InfluxDB2\Model\WritePrecision::S
+    ]);
+    $writeApi = $client->createWriteApi();
   }
 
-  if (!$database->writePoints($points, Database::PRECISION_SECONDS)) 
die('failed to write points');
+  if (!is_null($writeApi->write($points)))
+    die('failed to write points');
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/metrics/access/ingest.php 
new/openSUSE-release-tools-20240223.f941f9d/metrics/access/ingest.php
--- old/openSUSE-release-tools-20240207.602b3d2/metrics/access/ingest.php       
2024-02-07 15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/metrics/access/ingest.php       
2024-02-23 13:35:56.000000000 +0100
@@ -4,16 +4,21 @@
 const REGEX_LINE = '/(\S+) \S+ \S+ \[([^:]+:\d+:\d+:\d+ [^\]]+)\] "(\S+)(?: 
(\S+) \S+)?" (\S+) (\S+) "[^"]*" "[^"]*" .* (?:size:|want:- give:- \d+ )(\S+) 
\S+(?: +"?(\S+-\S+-\S+-\S+-[^\s"]+|-)"? 
"?(dvd|ftp|mini|usb-[^"]*|livecd-[^"]*|appliance-?[^"]*|-)"?)?/';
 const REGEX_PRODUCT = 
'#/(?:(tumbleweed)|distribution/(?:leap/)?(\d+\.\d+)|openSUSE(?:_|:/)(?:leap(?:_|:/))?(factory|tumbleweed|\d+\.\d+))#i';
 const REGEX_IMAGE = 
'#(?:/(?:iso|live)/[^/]+-(DVD|NET|GNOME-Live|KDE-Live|Rescue-CD|Kubic-DVD)-[^/]+\.iso(?:\.torrent)?|/jeos/[^/]+-(JeOS)\.[^/]+\.(?:qcow2|vhdx|vmdk|vmx)$)#';
+const REGEX_IPV4 = '/^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$/';
+const PROTOCOLS = ['ipv4', 'ipv6'];
 
-$total = 0;
 $total_invalid = 0;
-$total_product = [];
-$unique_product = [];
-$total_image_product = [];
+foreach (PROTOCOLS as $protocol) {
+  $total[$protocol] = 0;
+  $total_product[$protocol] = [];
+  $unique_product[$protocol] = [];
+  $total_image_product[$protocol] = [];
+}
 
 $file = $argc == 2 ? $argv[1] : 'php://stdin';
 $handle = fopen($file, 'r');
 while (($line = fgets($handle)) !== false) {
+  $protocol = '';
   if (!preg_match(REGEX_LINE, $line, $match)) {
     error_log('[failed to parse] ' . rtrim($line));
     $total_invalid++;
@@ -24,7 +29,12 @@
   if ($match[3] != 'GET' && $match[3] != 'HEAD') continue;
   // Not interested on errors.
   if ($match[5] >= '400') continue;
-  $total++;
+
+  if (preg_match(REGEX_IPV4, $match[1]))
+    $protocol = 'ipv4';
+  else
+    $protocol = 'ipv6';
+  $total[$protocol]++;
 
   // Attempt to determine for which product was the request.
   if (!preg_match(REGEX_PRODUCT, $match[4], $match_product)) {
@@ -35,47 +45,53 @@
   $values = array_filter($match_product);
   $product = str_replace('factory', 'tumbleweed', strtolower(next($values)));
 
-  if (!isset($total_product[$product])) $total_product[$product] = 0;
-  $total_product[$product] += 1;
+  if (!isset($total_product[$protocol][$product])) 
$total_product[$protocol][$product] = 0;
+  $total_product[$protocol][$product] += 1;
 
   if (count($match) == 10 && $match[8] != '-') {
     $uuid = $match[8];
-    if (!isset($unique_product[$product])) $unique_product[$product] = [];
-    if (!isset($unique_product[$product][$uuid])) {
-      $unique_product[$product][$uuid] = [
+    if (!isset($unique_product[$protocol][$product])) 
$unique_product[$protocol][$product] = [];
+    if (!isset($unique_product[$protocol][$product][$uuid])) {
+      $unique_product[$protocol][$product][$uuid] = [
         'count' => 0,
         'flavor' => $match[9],
         'ip' => $match[1],
       ];
     }
-    $unique_product[$product][$uuid]['count'] += 1;
+    $unique_product[$protocol][$product][$uuid]['count'] += 1;
   }
 
   if (preg_match(REGEX_IMAGE, $match[4], $match_image)) {
     // Remove empty match groups and select non-all match.
     $values = array_filter($match_image);
     $image = next($values);
-    if (!isset($total_image_product[$product])) $total_image_product[$product] 
= [];
-    if (!isset($total_image_product[$product][$image])) 
$total_image_product[$product][$image] = 0;
-    $total_image_product[$product][$image] += 1;
+    if (!isset($total_image_product[$protocol][$product])) 
$total_image_product[$protocol][$product] = [];
+    if (!isset($total_image_product[$protocol][$product][$image])) 
$total_image_product[$protocol][$product][$image] = 0;
+    $total_image_product[$protocol][$product][$image] += 1;
   }
 }
 $position = ftell($handle);
 fclose($handle);
 
 error_log('processed ' . number_format($position) . ' bytes');
-error_log('found ' . number_format($total) . ' requests across ' .
-  number_format(count($total_product)) . ' products');
+error_log('found ' . number_format(array_sum($total)) . ' requests across ' .
+  number_format(array_sum(array_map('count', $total_product))) . ' products');
+
+$output = [
+  'total_invalid' => $total_invalid,
+  'bytes' => $position
+];
+foreach (PROTOCOLS as $protocol) {
+  ksort($total_product[$protocol]);
+  ksort($unique_product[$protocol]);
+  $output[$protocol] = [
+    'total' => $total[$protocol],
+    'total_product' => $total_product[$protocol],
+    'unique_product' => $unique_product[$protocol],
+    'total_image_product' => $total_image_product[$protocol]
+  ];
+}
 
-ksort($total_product);
-ksort($unique_product);
 if ($position) {
-  echo json_encode([
-    'total' => $total,
-    'total_product' => $total_product,
-    'unique_product' => $unique_product,
-    'total_image_product' => $total_image_product,
-    'total_invalid' => $total_invalid,
-    'bytes' => $position,
-  ]) . "\n"; // JSON_PRETTY_PRINT for debugging.
+  echo json_encode($output) . "\n"; // JSON_PRETTY_PRINT for debugging.
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/osclib/repochecks.py 
new/openSUSE-release-tools-20240223.f941f9d/osclib/repochecks.py
--- old/openSUSE-release-tools-20240207.602b3d2/osclib/repochecks.py    
2024-02-07 15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/osclib/repochecks.py    
2024-02-23 13:35:56.000000000 +0100
@@ -2,6 +2,7 @@
 import os
 import re
 import requests
+import solv
 import subprocess
 import tempfile
 import glob
@@ -63,12 +64,40 @@
         return True
 
 
-def _fileconflicts(pfile, target_packages, whitelist):
+def _do_packages_conflict(pool, pkgs):
+    logger.debug("Checking whether %s can be installed at once", pkgs)
+    jobs = []
+    for pkg in pkgs:
+        sel = pool.select(pkg, solv.Selection.SELECTION_CANON | 
solv.Selection.SELECTION_DOTARCH)
+        if sel.isempty():
+            raise RuntimeError(f"{pkg} not found in pool")
+
+        jobs += sel.jobs(solv.Job.SOLVER_INSTALL)
+
+    solver = pool.Solver()
+    problems = solver.solve(jobs)
+    if not problems:
+        return False
+
+    for problem in problems:
+        logger.debug("Problem: %s", str(problem))
+
+    return True
+
+
+def _fileconflicts(pfile, arch, target_packages, whitelist):
     script = os.path.join(SCRIPT_PATH, '..', 'findfileconflicts')
     p = subprocess.run(['perl', script, pfile], stdout=subprocess.PIPE)
     if p.returncode or len(p.stdout):
         output = ''
         conflicts = yaml.safe_load(p.stdout)
+
+        pool = solv.Pool()
+        pool.setarch(arch)
+        repo = pool.add_repo("packages")
+        repo.add_susetags(solv.xfopen(pfile), pool.lookup_id(solv.SOLVID_META, 
solv.SUSETAGS_DEFAULTVENDOR), "en")
+        pool.createwhatprovides()
+
         for conflict in conflicts:
             sp1 = conflict['between'][0]
             sp2 = conflict['between'][1]
@@ -79,6 +108,12 @@
             if _check_conflicts_whitelist(sp1, sp2, whitelist):
                 continue
 
+            pkgcanon1 = _format_pkg(sp1)
+            pkgcanon2 = _format_pkg(sp2)
+            if _do_packages_conflict(pool, [pkgcanon1, pkgcanon2]):
+                logger.debug("Packages %s and %s with conflicting files 
conflict", pkgcanon1, pkgcanon2)
+                continue
+
             output += "found conflict of {} with 
{}\n".format(_format_pkg(sp1), _format_pkg(sp2))
             for file in conflict['conflicts'].split('\n'):
                 output += "  {}\n".format(file)
@@ -159,7 +194,7 @@
             target_packages = catalog.get(directories[0], [])
 
         parts = []
-        output = _fileconflicts(pfile, target_packages, ignore_conflicts)
+        output = _fileconflicts(pfile, arch, target_packages, ignore_conflicts)
         if output:
             parts.append(output)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20240207.602b3d2/ttm/releaser.py 
new/openSUSE-release-tools-20240223.f941f9d/ttm/releaser.py
--- old/openSUSE-release-tools-20240207.602b3d2/ttm/releaser.py 2024-02-07 
15:42:32.000000000 +0100
+++ new/openSUSE-release-tools-20240223.f941f9d/ttm/releaser.py 2024-02-23 
13:35:56.000000000 +0100
@@ -88,12 +88,6 @@
         if re.match(r'.*-dvd5-.*', package):
             return 4700372992  # a DVD needs to match
 
-        if re.match(r'livecd-x11-.*', package) and arch == 'x86_64':
-            return 681574400  # not a full CD on x86
-
-        if re.match(r'livecd-.*', package):
-            return 999999999  # a GB stick
-
         if re.match(r'.*-(dvd9-dvd|cd-DVD)-.*', package):
             return 8539996159
 

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.XCLXsv/_old  2024-03-01 23:38:50.684487320 +0100
+++ /var/tmp/diff_new_pack.XCLXsv/_new  2024-03-01 23:38:50.688487464 +0100
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20240207.602b3d2
-mtime: 1707316952
-commit: 602b3d2b1e47b7ba9397524ebd94446982f88c03
+version: 20240223.f941f9d
+mtime: 1708691756
+commit: f941f9da356c0e561c42a69596eef616ea1f2c77
 

Reply via email to