Hello community,

here is the log from the commit of package openSUSE-release-tools for 
openSUSE:Factory checked in at 2019-09-07 11:50:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.7948 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Sat Sep  7 11:50:01 2019 rev:214 rq:728471 version:20190905.a24bcf0f

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2019-09-05 12:42:03.751482309 +0200
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.7948/openSUSE-release-tools.changes
  2019-09-07 11:50:08.394302094 +0200
@@ -1,0 +2,70 @@
+Thu Sep 05 11:00:15 UTC 2019 - [email protected]
+
+- Update to version 20190905.a24bcf0f:
+  * Fix syntax of build-fail-reminder.gocd.yaml (endless story)
+
+-------------------------------------------------------------------
+Thu Sep 05 10:30:13 UTC 2019 - [email protected]
+
+- Update to version 20190905.87de492d:
+  * New basic test case
+  * Don't use the webui for project status
+  * Add little SMTP server that does not send mails for testing
+  * Fix filename of the build-fail-reminder gocd config
+  * Inline the mail text for the mailing list post - easier to map
+  * Deduplicate the 2 mail sending functions
+  * build-fail-notification: Mail to -factory after 4, dr after 6 weeks
+
+-------------------------------------------------------------------
+Wed Sep 04 21:39:25 UTC 2019 - [email protected]
+
+- Update to version 20190904.1b3a6e1f:
+  * osclib/core: request_action_key(): handle add_role/set_bugowner against 
project.
+  * osclib/core: request_action_key(): include set_bugowner in top level 
condition.
+
+-------------------------------------------------------------------
+Wed Sep 04 16:12:21 UTC 2019 - [email protected]
+
+- Update to version 20190904.41587803:
+  * Continue python3 port of abichecker
+  * Fix cron for openqa - it's supposed to run every 10 minutes
+
+-------------------------------------------------------------------
+Wed Sep 04 14:19:48 UTC 2019 - [email protected]
+
+- Update to version 20190904.3d286c35:
+  * Fix group name for the abichecker pipeline
+
+-------------------------------------------------------------------
+Wed Sep 04 14:13:52 UTC 2019 - [email protected]
+
+- Update to version 20190904.f5eee13e:
+  * Run abichecker on botmaster as well
+
+-------------------------------------------------------------------
+Wed Sep 04 12:17:27 UTC 2019 - [email protected]
+
+- Update to version 20190904.fb0c4142:
+  * oqamaint: fix more python3 issues and add _OBSOLETE=1
+
+-------------------------------------------------------------------
+Wed Sep 04 11:54:12 UTC 2019 - [email protected]
+
+- Update to version 20190904.3ba02675:
+  * also remove 42.3 from apimap
+  * remove leap 42.3 add 15.2
+
+-------------------------------------------------------------------
+Wed Sep 04 11:43:43 UTC 2019 - [email protected]
+
+- Update to version 20190904.0f9d84a0:
+  * oqamaint: Take the default modules
+
+-------------------------------------------------------------------
+Wed Sep 04 11:12:19 UTC 2019 - [email protected]
+
+- Update to version 20190904.72915933:
+  * Python3 port of openqa maintenance bot
+  * Run openqa-maintenance on botmaster as well
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20190903.79a13ddd.obscpio

New:
----
  openSUSE-release-tools-20190905.a24bcf0f.obscpio

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

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.WoucgR/_old  2019-09-07 11:50:11.090301712 +0200
+++ /var/tmp/diff_new_pack.WoucgR/_new  2019-09-07 11:50:11.098301710 +0200
@@ -20,7 +20,7 @@
 %define source_dir openSUSE-release-tools
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20190903.79a13ddd
+Version:        20190905.a24bcf0f
 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.WoucgR/_old  2019-09-07 11:50:11.126301707 +0200
+++ /var/tmp/diff_new_pack.WoucgR/_new  2019-09-07 11:50:11.142301704 +0200
@@ -1,6 +1,6 @@
 <servicedata>
   <service name="tar_scm">
     <param 
name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param>
-    <param 
name="changesrevision">d3f6c62ea01fca8fd46cfa51506b46153511440f</param>
+    <param 
name="changesrevision">3d7b3fbb03d78d8f9eb9fe36cf24e3b5eec7bd13</param>
   </service>
 </servicedata>

++++++ openSUSE-release-tools-20190903.79a13ddd.obscpio -> 
openSUSE-release-tools-20190905.a24bcf0f.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/abichecker/abichecker.py 
new/openSUSE-release-tools-20190905.a24bcf0f/abichecker/abichecker.py
--- old/openSUSE-release-tools-20190903.79a13ddd/abichecker/abichecker.py       
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/abichecker/abichecker.py       
2019-09-05 12:59:37.000000000 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python3
 
 from optparse import OptionParser
 from pprint import pformat, pprint
@@ -15,20 +15,13 @@
 import abichecker_dbmodel as DB
 import sqlalchemy.orm.exc
 
-try:
-    from xml.etree import cElementTree as ET
-except ImportError:
-    import cElementTree as ET
+from xml.etree import cElementTree as ET
 
 import osc.conf
 import osc.core
 from osc.util.cpio import CpioRead
 
-try:
-    from urllib.error import HTTPError
-except ImportError:
-    # python 2.x
-    from urllib2 import HTTPError
+from urllib.error import HTTPError
 
 import rpm
 from collections import namedtuple
@@ -759,11 +752,11 @@
             h = self.ts.hdrFromFdno(fd)
         except rpm.error as e:
             if str(e) == "public key not available":
-                print str(e)
+                print(str(e))
             if str(e) == "public key not trusted":
-                print str(e)
+                print(str(e))
             if str(e) == "error reading package header":
-                print str(e)
+                print(str(e))
             h = None
         return h
 
@@ -792,7 +785,7 @@
                 h = self.readRpmHeaderFD(fh)
                 if h is None:
                     raise FetchError("failed to read rpm header for 
%s"%ch.filename)
-                m = rpm_re.match(ch.filename)
+                m = rpm_re.match(ch.filename.decode('utf-8'))
                 if m:
                     yield m.group(1), h
         os.unlink(tmpfile.name)
@@ -947,7 +940,7 @@
     # common with repochecker
     def _md5_disturl(self, disturl):
         """Get the md5 from the DISTURL from a RPM file."""
-        return os.path.basename(disturl).split('-')[0]
+        return os.path.basename(disturl.decode('utf-8')).split('-')[0]
 
     def disturl_matches_md5(self, disturl, md5):
         if self._md5_disturl(disturl) != md5:
@@ -982,7 +975,7 @@
             if h['sourcepackage']:
                 continue
             pkgname = h['name']
-            if pkgname.endswith('-32bit') or pkgname.endswith('-64bit'):
+            if pkgname.endswith(b'-32bit') or pkgname.endswith(b'-64bit'):
                 # -32bit and -64bit packages are just repackaged, so
                 # we skip them and only check the original one.
                 continue
@@ -990,10 +983,10 @@
             if not self.disturl_matches(h['disturl'], prj, srcinfo):
                 raise DistUrlMismatch(h['disturl'], srcinfo)
             pkgs[pkgname] = (rpmfn, h)
-            if debugpkg_re.match(pkgname):
+            if debugpkg_re.match(pkgname.decode('utf-8')):
                 continue
             for fn, mode, lnk in zip(h['filenames'], h['filemodes'], 
h['filelinktos']):
-                if so_re.match(fn):
+                if so_re.match(fn.decode('utf-8')):
                     if S_ISREG(mode):
                         self.logger.debug('found lib: %s'%fn)
                         lib_packages.setdefault(pkgname, set()).add(fn)
@@ -1007,6 +1000,7 @@
         liblist = dict()
         # check whether debug info exists for each lib
         for pkgname in sorted(lib_packages.keys()):
+            pkgname = pkgname.decode('utf-8')
             dpkgname = pkgname+'-debuginfo'
             if not dpkgname in pkgs:
                 missing_debuginfo.add((prj, pkg, repo, arch, pkgname))
@@ -1071,7 +1065,7 @@
     @cmdln.option('-r', '--revision', metavar="number", type="int", 
help="revision number")
     def do_diff(self, subcmd, opts, src_project, src_package, dst_project, 
dst_package):
         src_rev = opts.revision
-        print self.checker.check_source_submission(src_project, src_package, 
src_rev, dst_project, dst_package)
+        print(self.checker.check_source_submission(src_project, src_package, 
src_rev, dst_project, dst_package))
 
 if __name__ == "__main__":
     app = CommandLineInterface()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/build-fail-reminder.py 
new/openSUSE-release-tools-20190905.a24bcf0f/build-fail-reminder.py
--- old/openSUSE-release-tools-20190903.79a13ddd/build-fail-reminder.py 
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/build-fail-reminder.py 
2019-09-05 12:59:37.000000000 +0200
@@ -6,16 +6,14 @@
 import osc.core
 import osc.conf
 import xml.etree.ElementTree as ET
-import smtplib
-from email.mime.text import MIMEText
-import email.utils
+import cgi
 import logging
 import argparse
 import sys
 from collections import namedtuple
+from osclib.util import mail_send_with_details
+import email.utils
 
-# FIXME: compute from apiurl
-URL="https://build.opensuse.org/project/status/%s?ignore_pending=true&limit_to_fails=true&include_versions=false&format=json";
 # for maintainer search
 FACTORY='openSUSE:Factory'
 
@@ -74,8 +72,18 @@
 
 Kind regards,
 %(sender)s
-"""
-)
+""")
+
+def SendMail(logger, project, sender, to, fullname, subject, text):
+    try:
+        xmailer = '{} - Failure Notification'.format(project)
+        to = email.utils.formataddr((to, fullname))
+        mail_send_with_details(sender=sender, to=to,
+                        subject=subject, text=text, xmailer=xmailer,
+                        relay=args.relay, dry=args.dry)
+    except Exception as e:
+        print(e)
+        logger.error("Failed to send an email to %s (%s)" % (fullname, to))
 
 def main(args):
 
@@ -91,7 +99,13 @@
     project = args.project
 
     logger.debug('loading build fails for %s'%project)
-    json_data = osc.core.http_GET(URL%project)
+    url = osc.core.makeurl(apiurl, ['project', 'status', project],
+        { 'ignore_pending': True,
+           'limit_to_fails': True,
+           'include_versions': False,
+           'format': 'json'
+        })
+    json_data = osc.core.http_GET(url)
     data = json.load(json_data)
     json_data.close()
 
@@ -112,6 +126,7 @@
 
     Reminded = {}
     Person = {}
+    ProjectComplainList = []
 
     # Go through all the failed packages and update the reminder
     for package in data:
@@ -157,6 +172,7 @@
                 for userid in maintainers:
                     to = Person[userid][1]
                     fullname = Person[userid][2]
+                    subject = '%s - %s - Build fail notification' % (project, 
package)
                     text = MAIL_TEMPLATES[Reminded[package].remindCount-1] % {
                                 'recepient': to,
                                 'sender': sender,
@@ -164,30 +180,45 @@
                                 'package' : package,
                                 'date': 
time.ctime(Reminded[package].firstfail),
                                 }
-                    msg = MIMEText(text, _charset='UTF-8')
-                    msg['Subject'] = '%s - %s - Build fail notification' % 
(project, package)
-                    msg['To'] = email.utils.formataddr((to, fullname))
-                    msg['From'] = sender
-                    msg['Date'] = email.utils.formatdate()
-                    msg['Message-ID'] = email.utils.make_msgid()
-                    msg.add_header('Precedence', 'bulk')
-                    msg.add_header('X-Mailer', '%s - Failure Notification' % 
project)
-                    logger.info("%s: %s", msg['To'], msg['Subject'])
-                    if args.dry:
-                        logger.debug(msg.as_string())
-                    else:
-                        try:
-                            s = smtplib.SMTP(args.relay)
-                            s.sendmail(msg['From'], {msg['To'], sender }, 
msg.as_string())
-                            s.quit()
-                        except:
-                            logger.error("Failed to send an email to %s (%s)" 
% (fullname, to))
-                            pass
-
-            elif Reminded[package].remindCount == 3:
-                logger.warning( "Package '%s' has been failing for three weeks 
- let's create a bug report" % package)
-            else:
-                logger.warning( "Package '%s' is no longer maintained - send a 
mail to factory maintainers..." % package)
+                    SendMail(logger, project, sender, to, fullname, subject, 
text)
+            elif Reminded[package].remindCount == 4:
+                # Package has failed for 4 weeks - Collect packages to send a 
mail to openSUSE-factory@ (one mail per day max)
+                ProjectComplainList.append(package)
+            elif Reminded[package].remindCount == 6:
+                # Package failed to build for 6 weeks - file a delete request
+                r = osc.core.Request()
+                r.add_action('delete', tgt_project=project, 
tgt_package=package)
+                r.description = cgi.escape("[botdel] Package has failed to 
build for >= 6 weeks")
+                r.create(apiurl)
+
+    if len(ProjectComplainList):
+        # At least to report to the project for not building - send a mail to 
openSUSE-Factory
+        ProjectComplainList.sort()
+        to = '[email protected]'
+        fullname = "openSUSE Factory - Mailing List"
+        subject = "%(project)s - Build fail notification" % {'project': 
project}
+
+        text = u"""Dear Package maintainers and hackers.
+
+        Below package(s) in %(project)s have been failing to build for at
+        least 4 weeks. We tried to send out notifications to the
+        configured bugowner/maintainers of the package(s), but so far no
+        fix has been submitted. This probably means that the
+        maintainer/bugowner did not yet find the time to look into the
+        matter and he/she would certainly appreciate help to get this
+        sorted.
+
+        """ % { 'project': project }
+        for pkg in ProjectComplainList:
+            text += "- %s\n" % pkg
+        text += u"""
+        Unless somebody is stepping up and submitting fixes, the listed
+        package(s) are going to be removed from %(project)s.
+
+        Kind regards,
+        %(sender)s
+        """ % { 'project': project, 'sender': sender }
+        SendMail(logger, project, sender, to, fullname, subject, text)
 
 if __name__ == '__main__':
     parser = argparse.ArgumentParser(description='boilerplate python commmand 
line program')
@@ -213,4 +244,3 @@
     logging.basicConfig(level = level)
 
     sys.exit(main(args))
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/data/apimap.json 
new/openSUSE-release-tools-20190905.a24bcf0f/data/apimap.json
--- old/openSUSE-release-tools-20190903.79a13ddd/data/apimap.json       
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/data/apimap.json       
2019-09-05 12:59:37.000000000 +0200
@@ -129,11 +129,6 @@
         "x86_64"
     ]
     },
-  "openSUSE:Leap:42.3:Update" : {
-    "version": "42.3",
-    "flavor": "DVD-Incidents",
-    "distri": "opensuse"
-  },
   "openSUSE:Leap:15.0:Update" : {
     "version": "15.0",
     "flavor": "DVD-Incidents",
@@ -143,5 +138,10 @@
     "version": "15.1",
     "flavor": "DVD-Incidents",
     "distri": "opensuse"
+  },
+  "openSUSE:Leap:15.2:Update" : {
+    "version": "15.2",
+    "flavor": "DVD-Incidents",
+    "distri": "opensuse"
   }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/data/incidents.json 
new/openSUSE-release-tools-20190905.a24bcf0f/data/incidents.json
--- old/openSUSE-release-tools-20190903.79a13ddd/data/incidents.json    
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/data/incidents.json    
2019-09-05 12:59:37.000000000 +0200
@@ -140,12 +140,6 @@
       "VERSION" : "12-SP2",
       "ARCH" : "x86_64"
   },
-  "openSUSE:Leap:42.3:Update": {
-     "DISTRI": "opensuse",
-     "FLAVOR": "DVD-Incidents",
-     "VERSION": "42.3",
-     "ARCH": "x86_64"
-  },
   "openSUSE:Leap:15.0:Update": {
      "DISTRI": "opensuse",
      "FLAVOR": "DVD-Incidents",
@@ -157,5 +151,11 @@
      "FLAVOR": "DVD-Incidents",
      "VERSION": "15.1",
      "ARCH": "x86_64"
+  },
+  "openSUSE:Leap:15.2:Update": {
+     "DISTRI": "opensuse",
+     "FLAVOR": "DVD-Incidents",
+     "VERSION": "15.2",
+     "ARCH": "x86_64"
   }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/data/repos.json 
new/openSUSE-release-tools-20190905.a24bcf0f/data/repos.json
--- old/openSUSE-release-tools-20190903.79a13ddd/data/repos.json        
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/data/repos.json        
2019-09-05 12:59:37.000000000 +0200
@@ -1,45 +1,45 @@
 {
    "https://openqa.opensuse.org"; : {
-      "openSUSE:Leap:42.3:Update" : {
+      "openSUSE:Leap:15.0:Update" : {
          "settings" : {
             "OS_TEST_ISSUES" : "",
             "FLAVOR" : "DVD-Updates",
             "DISTRI" : "opensuse",
-            "VERSION" : "42.3",
+            "VERSION" : "15.0",
             "ARCH" : "x86_64"
          },
          "test" : "kde",
          "repos" : [
-            "http://download.opensuse.org/update/leap/42.3/oss/";,
-            "http://download.opensuse.org/update/leap/42.3/non-oss/";
+            "http://download.opensuse.org/update/leap/15.0/oss/";,
+            "http://download.opensuse.org/update/leap/15.0/non-oss/";
          ]
       },
-      "openSUSE:Leap:15.0:Update" : {
+      "openSUSE:Leap:15.1:Update" : {
          "settings" : {
             "OS_TEST_ISSUES" : "",
             "FLAVOR" : "DVD-Updates",
             "DISTRI" : "opensuse",
-            "VERSION" : "15.0",
+            "VERSION" : "15.1",
             "ARCH" : "x86_64"
          },
          "test" : "kde",
          "repos" : [
-            "http://download.opensuse.org/update/leap/15.0/oss/";,
-            "http://download.opensuse.org/update/leap/15.0/non-oss/";
+            "http://download.opensuse.org/update/leap/15.1/oss/";,
+            "http://download.opensuse.org/update/leap/15.1/non-oss/";
          ]
       },
-      "openSUSE:Leap:15.1:Update" : {
+      "openSUSE:Leap:15.2:Update" : {
          "settings" : {
             "OS_TEST_ISSUES" : "",
             "FLAVOR" : "DVD-Updates",
             "DISTRI" : "opensuse",
-            "VERSION" : "15.1",
+            "VERSION" : "15.2",
             "ARCH" : "x86_64"
          },
          "test" : "kde",
          "repos" : [
-            "http://download.opensuse.org/update/leap/15.1/oss/";,
-            "http://download.opensuse.org/update/leap/15.1/non-oss/";
+            "http://download.opensuse.org/update/leap/15.2/oss/";,
+            "http://download.opensuse.org/update/leap/15.2/non-oss/";
          ]
       }
    },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/dist/ci/docker-compose.yml 
new/openSUSE-release-tools-20190905.a24bcf0f/dist/ci/docker-compose.yml
--- old/openSUSE-release-tools-20190903.79a13ddd/dist/ci/docker-compose.yml     
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/dist/ci/docker-compose.yml     
2019-09-05 12:59:37.000000000 +0200
@@ -33,10 +33,14 @@
   servicedispatch:
     <<: *obs
     command: chroot --userspec=obsrun / /usr/lib/obs/server/bs_servicedispatch
+  smtp:
+    <<: *testenv
+    command: python3 /code/dist/ci/smtp/eml-server.py
   test:
     <<: *testenv
     depends_on:
       - api
+      - smtp
     command: /code/dist/ci/docker-compose-test.sh
     cap_add:
       - SYS_PTRACE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/dist/ci/smtp/eml-server.py 
new/openSUSE-release-tools-20190905.a24bcf0f/dist/ci/smtp/eml-server.py
--- old/openSUSE-release-tools-20190903.79a13ddd/dist/ci/smtp/eml-server.py     
1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20190905.a24bcf0f/dist/ci/smtp/eml-server.py     
2019-09-05 12:59:37.000000000 +0200
@@ -0,0 +1,32 @@
+#! /usr/bin/python3
+
+# https://www.djangosnippets.org/snippets/96/
+# Considered public domain
+
+from datetime import datetime
+import asyncore
+from smtpd import SMTPServer
+
+class EmlServer(SMTPServer):
+    no = 0
+
+    def process_message(self, peer, mailfrom, rcpttos, data):
+        filename = '%s-%d.eml' % (datetime.now().strftime('%Y%m%d%H%M%S'),
+                self.no)
+        f = open(filename, 'w')
+        f.write(data)
+        f.close
+        print('%s saved.' % filename)
+        self.no += 1
+
+
+def run():
+    foo = EmlServer(('0.0.0.0', 25), None)
+    try:
+        asyncore.loop()
+    except KeyboardInterrupt:
+        pass
+
+
+if __name__ == '__main__':
+    run()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/gocd/abichecker.gocd.yaml 
new/openSUSE-release-tools-20190905.a24bcf0f/gocd/abichecker.gocd.yaml
--- old/openSUSE-release-tools-20190903.79a13ddd/gocd/abichecker.gocd.yaml      
1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20190905.a24bcf0f/gocd/abichecker.gocd.yaml      
2019-09-05 12:59:37.000000000 +0200
@@ -0,0 +1,20 @@
+format_version: 3
+pipelines:
+  SUSE.Abichecker:
+    group: SLE.Checkers
+    lock_behavior: unlockWhenFinished
+    environment_variables:
+      OSC_CONFIG: /home/go/config/oscrc-abichecker
+    materials:
+      script:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+    timer:
+      spec: 0 */15 * ? * *
+      only_on_changes: false
+    stages:
+    - Run:
+        approval: manual
+        resources:
+        - repo-checker
+        tasks:
+        - script: ./abichecker/abichecker.py --no-review --verbose -A 
https://api.suse.de --web-url=http://abichecker.suse.de project 
SUSE:Maintenance maintenance_incident
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/gocd/announcer.gocd.yaml 
new/openSUSE-release-tools-20190905.a24bcf0f/gocd/announcer.gocd.yaml
--- old/openSUSE-release-tools-20190903.79a13ddd/gocd/announcer.gocd.yaml       
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/gocd/announcer.gocd.yaml       
2019-09-05 12:59:37.000000000 +0200
@@ -54,7 +54,7 @@
           - staging-bot
         tasks:
           - script: ./factory-package-news/announcer.py --config 
config/announcer/openSUSE:MicroOS.yml --verbose --state-file 
/home/go/config/announcer.yaml
-  Announcer.Leap:
+  Announcer.Leap:15.2:
     group: openSUSE.Checkers
     lock_behavior: unlockWhenFinished
     environment_variables:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/gocd/build-fail-reminder.gocd.yaml 
new/openSUSE-release-tools-20190905.a24bcf0f/gocd/build-fail-reminder.gocd.yaml
--- 
old/openSUSE-release-tools-20190903.79a13ddd/gocd/build-fail-reminder.gocd.yaml 
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20190905.a24bcf0f/gocd/build-fail-reminder.gocd.yaml 
    2019-09-05 12:59:37.000000000 +0200
@@ -0,0 +1,38 @@
+format_version: 3
+pipelines:
+  BuildFailReminder.Factory:
+    group: openSUSE.Checkers
+    lock_behavior: unlockWhenFinished
+    environment_variables:
+      OSC_CONFIG: /home/go/config/oscrc-repo-checker
+    materials:
+      scripts:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+    timer:
+      spec: 0 0 0 ? * *
+      only_on_changes: false
+    stages:
+    - Run:
+        approval: manual
+        resources:
+        - staging-bot
+        tasks:
+        - script: ./build-fail-reminder.py --sender="DimStar / Dominique 
Leuenberger <[email protected]>" --project=openSUSE:Factory 
--relay=relay.suse.de --json=/home/go/config/openSUSE:Factory.reminded.json 
--debug
+  BuildFailReminder.Leap152:
+    group: openSUSE.Checkers
+    lock_behavior: unlockWhenFinished
+    environment_variables:
+      OSC_CONFIG: /home/go/config/oscrc-repo-checker
+    materials:
+      scripts:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+    timer:
+      spec: 0 0 0 ? * *
+      only_on_changes: false
+    stages:
+    - Run:
+        approval: manual
+        resources:
+        - staging-bot
+        tasks:
+        - script: ./build-fail-reminder.py --sender="Ludwig Nussel 
<[email protected]>" --project=openSUSE:Leap:15.2 --relay=relay.suse.de 
--json=/home/go/config/openSUSE:Leap:15.2.reminded.json --debug
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/gocd/build-fail-reminder.yaml 
new/openSUSE-release-tools-20190905.a24bcf0f/gocd/build-fail-reminder.yaml
--- old/openSUSE-release-tools-20190903.79a13ddd/gocd/build-fail-reminder.yaml  
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/gocd/build-fail-reminder.yaml  
1970-01-01 01:00:00.000000000 +0100
@@ -1,21 +0,0 @@
-format_version: 3
-pipelines:
-  BuildFailReminder.Factory:
-    group: openSUSE.Checkers
-    lock_behavior: unlockWhenFinished
-    environment_variables:
-      OSC_CONFIG: /home/go/config/oscrc-totest-manager
-    materials:
-      scripts:
-        git: https://github.com/openSUSE/openSUSE-release-tools.git
-    timer:
-      spec: 0 0 0 ? * *
-      only_on_changes: false
-    stages:
-    - Run:
-        approval: manual
-        resources:
-        - staging-bot
-        tasks:
-        - script: |-
-          ./build-fail-reminder.py --sender="DimStar / Dominique Leuenberger 
<[email protected]>" --project=openSUSE:Factory --relay=relay.suse.de 
--json=/home/go/config/openSUSE:Factory.reminded.json --debug
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/gocd/openqa.gocd.yaml 
new/openSUSE-release-tools-20190905.a24bcf0f/gocd/openqa.gocd.yaml
--- old/openSUSE-release-tools-20190903.79a13ddd/gocd/openqa.gocd.yaml  
1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20190905.a24bcf0f/gocd/openqa.gocd.yaml  
2019-09-05 12:59:37.000000000 +0200
@@ -0,0 +1,21 @@
+format_version: 3
+pipelines:
+  openSUSE.QA.Maint:
+    group: openSUSE.Checkers
+    lock_behavior: unlockWhenFinished
+    environment_variables:
+      OSC_CONFIG: /home/go/config/oscrc-openqa-maintenance
+    materials:
+      script:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+    timer:
+      spec: 0 */10 * ? * *
+      only_on_changes: false
+    stages:
+    - Run:
+        approval: manual
+        resources:
+          - staging-bot
+        tasks:
+          - script: |-
+             ./openqa-maintenance.py --group qam-openqa 
--review-mode=accept-onpass --debug --openqa https://openqa.opensuse.org  
--apiurl https://api.opensuse.org review
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/openqa-maintenance.py 
new/openSUSE-release-tools-20190905.a24bcf0f/openqa-maintenance.py
--- old/openSUSE-release-tools-20190903.79a13ddd/openqa-maintenance.py  
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/openqa-maintenance.py  
2019-09-05 12:59:37.000000000 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python3
 
 from oqamaint.cli import CommandLineInterface
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/oqamaint/cli.py 
new/openSUSE-release-tools-20190905.a24bcf0f/oqamaint/cli.py
--- old/openSUSE-release-tools-20190903.79a13ddd/oqamaint/cli.py        
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/oqamaint/cli.py        
2019-09-05 12:59:37.000000000 +0200
@@ -3,7 +3,7 @@
 # standard library
 import logging
 import os.path as opa
-import simplejson as json
+import json
 import sys
 
 # external dependency
@@ -11,10 +11,10 @@
 
 # from package itself
 import osc
-from openqabot import OpenQABot
-from opensuse import openSUSEUpdate
+from oqamaint.openqabot import OpenQABot
+from oqamaint.opensuse import openSUSEUpdate
 import ReviewBot
-from suse import SUSEUpdate
+from oqamaint.suse import SUSEUpdate
 
 
 class CommandLineInterface(ReviewBot.CommandLineInterface):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/oqamaint/openqabot.py 
new/openSUSE-release-tools-20190905.a24bcf0f/oqamaint/openqabot.py
--- old/openSUSE-release-tools-20190903.79a13ddd/oqamaint/openqabot.py  
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/oqamaint/openqabot.py  
2019-09-05 12:59:37.000000000 +0200
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
+import hashlib
 from datetime import date
-import md5
 from pprint import pformat
-from urllib2 import HTTPError
-from urllib import quote_plus
+from urllib.error import HTTPError
+from urllib.parse import quote_plus
 from osclib.comments import CommentAPI
 
 import requests
@@ -12,18 +12,10 @@
 
 import ReviewBot
 
-from suse import SUSEUpdate
+from oqamaint.suse import SUSEUpdate
 
-try:
-    from xml.etree import cElementTree as ET
-except ImportError:
-    from xml.etree import ElementTree as ET
-
-
-try:
-    import simplejson as json
-except ImportError:
-    import json
+from xml.etree import cElementTree as ET
+import json
 
 QA_UNKNOWN = 0
 QA_INPROGRESS = 1
@@ -91,9 +83,9 @@
     # check a set of repos for their primary checksums
     @staticmethod
     def calculate_repo_hash(repos, incidents):
-        m = md5.new()
+        m = hashlib.md5()
         # if you want to force it, increase this number
-        m.update('b')
+        m.update(b'b')
         for url in repos:
             url += '/repodata/repomd.xml'
             try:
@@ -102,9 +94,9 @@
                 raise
             cs = root.find(
                 
'.//{http://linux.duke.edu/metadata/repo}data[@type="primary"]/{http://linux.duke.edu/metadata/repo}checksum')
-            m.update(cs.text)
+            m.update(cs.text.encode('utf-8'))
         # now add the open incidents
-        m.update(json.dumps(incidents, sort_keys=True))
+        m.update(json.dumps(incidents, sort_keys=True).encode('utf-8'))
         digest = m.hexdigest()
         open_incidents = sorted(incidents.keys())
         if open_incidents:
@@ -219,6 +211,7 @@
                 s[x] = y
         s['BUILD'] = buildnr
         s['REPOHASH'] = repohash
+        s['_OBSOLETE'] = '1'
         self.logger.debug("Prepared: {}".format(pformat(s)))
         if not self.dryrun:
             try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/oqamaint/opensuse.py 
new/openSUSE-release-tools-20190905.a24bcf0f/oqamaint/opensuse.py
--- old/openSUSE-release-tools-20190903.79a13ddd/oqamaint/opensuse.py   
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/oqamaint/opensuse.py   
2019-09-05 12:59:37.000000000 +0200
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
 
-from update import Update
 import re
 from collections import namedtuple
 import osc.core
+from oqamaint.update import Update
 
 try:
     from xml.etree import cElementTree as ET
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/oqamaint/suse.py 
new/openSUSE-release-tools-20190905.a24bcf0f/oqamaint/suse.py
--- old/openSUSE-release-tools-20190903.79a13ddd/oqamaint/suse.py       
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/oqamaint/suse.py       
2019-09-05 12:59:37.000000000 +0200
@@ -5,14 +5,14 @@
 
 import osc.core
 
-from update import Update
+from oqamaint.update import Update
 
 
 MINIMALS = {
     x.rstrip()
     for x in requests.get(
         
'https://gitlab.suse.de/qa-maintenance/metadata/raw/master/packages-to-be-tested-on-minimal-systems').iter_lines()
-    if len(x) > 0 and not(x.startswith("#") or x.startswith(' '))}
+    if len(x) > 0 and not(x.startswith(b"#") or x.startswith(b' '))}
 
 
 class SUSEUpdate(Update):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/oqamaint/update.py 
new/openSUSE-release-tools-20190905.a24bcf0f/oqamaint/update.py
--- old/openSUSE-release-tools-20190903.79a13ddd/oqamaint/update.py     
2019-09-03 22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/oqamaint/update.py     
2019-09-05 12:59:37.000000000 +0200
@@ -4,23 +4,8 @@
 import requests
 
 
-# python 3 has gzip decompress function
-try:
-    from gzip import decompress
-except ImportError:
-    from gzip import GzipFile
-    import io
-
-    def decompress(data):
-        with GzipFile(fileobj=io.BytesIO(data)) as f:
-            return f.read()
-
-# use cElementTree by default, fallback to pure python
-try:
-    from xml.etree import cElementTree as ET
-except ImportError:
-    from xml.etree import ElementTree as ET
-
+from gzip import decompress
+from xml.etree import cElementTree as ET
 import osc.core
 
 from osclib.memoize import memoize
@@ -31,7 +16,6 @@
 
     def __init__(self, settings):
         self._settings = settings
-        self._settings['_NOOBSOLETEBUILD'] = '1'
         self.opensuse = True
 
     def get_max_revision(self, job):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/osclib/core.py 
new/openSUSE-release-tools-20190905.a24bcf0f/osclib/core.py
--- old/openSUSE-release-tools-20190903.79a13ddd/osclib/core.py 2019-09-03 
22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/osclib/core.py 2019-09-05 
12:59:37.000000000 +0200
@@ -781,9 +781,10 @@
 def request_action_key(action):
     identifier = []
 
-    if action.type in ['add_role', 'change_devel', 'maintenance_release', 
'submit']:
+    if action.type in ['add_role', 'change_devel', 'maintenance_release', 
'set_bugowner', 'submit']:
         identifier.append(action.tgt_project)
-        identifier.append(action.tgt_package)
+        if action.tgt_package is not None:
+            identifier.append(action.tgt_package)
 
         if action.type in ['add_role', 'set_bugowner']:
             if action.person_name is not None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/osclib/util.py 
new/openSUSE-release-tools-20190905.a24bcf0f/osclib/util.py
--- old/openSUSE-release-tools-20190903.79a13ddd/osclib/util.py 2019-09-03 
22:37:10.000000000 +0200
+++ new/openSUSE-release-tools-20190905.a24bcf0f/osclib/util.py 2019-09-05 
12:59:37.000000000 +0200
@@ -1,9 +1,12 @@
+import logging
+
 from osc import conf
 from osclib.conf import Config
 from osclib.core import entity_email
 from osclib.core import project_list_prefix
 from osclib.memoize import memoize
 
+logger = logging.getLogger()
 
 @memoize(session=True)
 def project_list_family(apiurl, project, include_update=False):
@@ -123,36 +126,47 @@
 
     return 0
 
-def mail_send(apiurl, project, to, subject, body, from_key='maintainer',
-              followup_to_key='release-list', dry=False):
+def mail_send_with_details(relay, sender, subject, to, text, xmailer=None, 
followup_to=None, dry=True):
+    import smtplib
     from email.mime.text import MIMEText
     import email.utils
-    import smtplib
-
-    config = Config.get(apiurl, project)
-    msg = MIMEText(body)
+    msg = MIMEText(text, _charset='UTF-8')
+    msg['Subject'] = subject
     msg['Message-ID'] = email.utils.make_msgid()
     msg['Date'] = email.utils.formatdate(localtime=1)
-    if from_key is None:
-        msg['From'] = entity_email(apiurl, conf.get_apiurl_usr(apiurl), 
include_name=True)
-    else:
-        msg['From'] = config['mail-{}'.format(from_key)]
-    if '@' not in to:
-        to = config['mail-{}'.format(to)]
+    msg['From'] = sender
     msg['To'] = to
-    followup_to = config.get('mail-{}'.format(followup_to_key))
     if followup_to:
         msg['Mail-Followup-To'] = followup_to
-    msg['Subject'] = subject
-
+    if xmailer:
+        msg.add_header('X-Mailer', xmailer)
+    msg.add_header('Precedence', 'bulk')
     if dry:
-        print(msg.as_string())
+        logger.debug(msg.as_string())
         return
-
-    s = smtplib.SMTP(config.get('mail-relay', 'relay.suse.de'))
-    s.sendmail(msg['From'], [msg['To']], msg.as_string())
+    logger.info("%s: %s", msg['To'], msg['Subject'])
+    s = smtplib.SMTP(relay)
+    s.sendmail(msg['From'], {msg['To'], sender }, msg.as_string())
     s.quit()
 
+def mail_send(apiurl, project, to, subject, body, from_key='maintainer',
+              followup_to_key='release-list', dry=False):
+
+    config = Config.get(apiurl, project)
+    if from_key is None:
+        sender = entity_email(apiurl, conf.get_apiurl_usr(apiurl), 
include_name=True)
+    else:
+        sender = config['mail-{}'.format(from_key)]
+
+    if '@' not in to:
+        to = config['mail-{}'.format(to)]
+
+    followup_to = config.get('mail-{}'.format(followup_to_key))
+    relay = config.get('mail-relay', 'relay.suse.de')
+
+    mail_send_with_details(text=body, subject=subject, relay=relay, 
sender=sender,
+                           followup_to=followup_to, to=to, dry=dry)
+
 def sha1_short(data):
     import hashlib
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20190903.79a13ddd/tests/build_fail_reminder_tests.py 
new/openSUSE-release-tools-20190905.a24bcf0f/tests/build_fail_reminder_tests.py
--- 
old/openSUSE-release-tools-20190903.79a13ddd/tests/build_fail_reminder_tests.py 
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20190905.a24bcf0f/tests/build_fail_reminder_tests.py 
    2019-09-05 12:59:37.000000000 +0200
@@ -0,0 +1,12 @@
+import unittest
+from . import OBSLocal
+
+class TestBuildFailReminder(OBSLocal.TestCase):
+    script = './build-fail-reminder.py'
+
+    def test_basic(self):
+        self.wf = OBSLocal.StagingWorkflow()
+        self.wf.create_target()
+
+        self.execute_script(['--relay', 'smtp', '--sender', 'Tester'])
+        self.assertOutput('loading build fails for openSUSE:Factory')

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.WoucgR/_old  2019-09-07 11:50:12.702301483 +0200
+++ /var/tmp/diff_new_pack.WoucgR/_new  2019-09-07 11:50:12.702301483 +0200
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20190903.79a13ddd
-mtime: 1567543030
-commit: 79a13dddfe8312d2ecf0adf411b663332a05d127
+version: 20190905.a24bcf0f
+mtime: 1567681177
+commit: a24bcf0f20a3dc2346f928c110854904a546a526
 


Reply via email to