Hello community,

here is the log from the commit of package openSUSE-release-tools for 
openSUSE:Factory checked in at 2018-04-26 13:38:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Thu Apr 26 13:38:34 2018 rev:86 rq:600971 version:20180425.8bb627d

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2018-04-25 10:02:42.247865210 +0200
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new/openSUSE-release-tools.changes
       2018-04-26 13:38:38.626733390 +0200
@@ -1,0 +2,17 @@
+Wed Apr 25 09:50:31 UTC 2018 - [email protected]
+
+- Update to version 20180425.8bb627d:
+  * [oqamaint] Reset the hashes on every review round
+  * [oqamaint] Fix re-reviewing requests
+  * [oqamaint] Do not append to OS_TEST_ISSUES
+  * [oqamaint] Look at all open release requests for Updates
+  * [oqamaint] Reschedule Updates test if the list of incidents changed
+  * [oqamaint] Remove wrong entries in json
+
+-------------------------------------------------------------------
+Wed Apr 25 01:23:09 UTC 2018 - [email protected]
+
+- Update to version 20180424.2010288:
+  * osclib/accept_command: avoid making empty commit to dashboard.
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20180424.855f660.obscpio

New:
----
  openSUSE-release-tools-20180425.8bb627d.obscpio

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

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.AIXwCk/_old  2018-04-26 13:38:39.230711253 +0200
+++ /var/tmp/diff_new_pack.AIXwCk/_new  2018-04-26 13:38:39.230711253 +0200
@@ -20,7 +20,7 @@
 %define source_dir openSUSE-release-tools
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20180424.855f660
+Version:        20180425.8bb627d
 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.AIXwCk/_old  2018-04-26 13:38:39.282709347 +0200
+++ /var/tmp/diff_new_pack.AIXwCk/_new  2018-04-26 13:38:39.286709201 +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">855f660bf4af3e275c86933c3420663d2fb53385</param>
+    <param 
name="changesrevision">8bb627d9bfe07dc22af6910b73564eef7cb0f53d</param>
   </service>
 </servicedata>

++++++ openSUSE-release-tools-20180424.855f660.obscpio -> 
openSUSE-release-tools-20180425.8bb627d.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openSUSE-release-tools-20180424.855f660/ReviewBot.py 
new/openSUSE-release-tools-20180425.8bb627d/ReviewBot.py
--- old/openSUSE-release-tools-20180424.855f660/ReviewBot.py    2018-04-24 
18:31:28.000000000 +0200
+++ new/openSUSE-release-tools-20180425.8bb627d/ReviewBot.py    2018-04-25 
11:44:55.000000000 +0200
@@ -449,18 +449,23 @@
             req.read(request)
             self.requests.append(req)
 
-    def set_request_ids_project(self, project, typename):
+    # also used by openqabot
+    def ids_project(self, project, typename):
         url = osc.core.makeurl(self.apiurl, ('search', 'request'),
                                { 'match': "(state/@name='review' or 
state/@name='new') and (action/target/@project='%s' and action/@type='%s')" % 
(project, typename),
                                  'withfullhistory': 1 })
         root = ET.parse(osc.core.http_GET(url)).getroot()
 
-        self.requests = []
+        ret = []
 
         for request in root.findall('request'):
             req = osc.core.Request()
             req.read(request)
-            self.requests.append(req)
+            ret.append(req)
+        return ret
+
+    def set_request_ids_project(self, project, typename):
+        self.requests = self.ids_project(project, typename)
 
     def comment_handler_add(self, level=logging.INFO):
         """Add handler to start recording log messages for comment."""
@@ -720,4 +725,3 @@
 if __name__ == "__main__":
     app = CommandLineInterface()
     sys.exit( app.main() )
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180424.855f660/data/incidents.json 
new/openSUSE-release-tools-20180425.8bb627d/data/incidents.json
--- old/openSUSE-release-tools-20180424.855f660/data/incidents.json     
2018-04-24 18:31:28.000000000 +0200
+++ new/openSUSE-release-tools-20180425.8bb627d/data/incidents.json     
2018-04-25 11:44:55.000000000 +0200
@@ -17,20 +17,6 @@
       "FLAVOR" : "Server-DVD-Incidents",
       "VERSION" : "12-SP1"
    },
-   "openSUSE:Leap:42.3:Update" : {
-      "FLAVOR" : "Maintenance",
-      "VERSION" : "42.3",
-      "DISTRI" : "opensuse",
-      "ARCH" : "x86_64",
-      "ISO" : "openSUSE-Leap-42.3-DVD-x86_64.iso"
-   },
-   "openSUSE:Leap:15.0:Update" : {
-      "FLAVOR" : "Maintenance",
-      "VERSION" : "15.0",
-      "DISTRI" : "opensuse",
-      "ARCH" : "x86_64",
-      "ISO" : "openSUSE-Leap-15.0-DVD-x86_64.iso"
-   },
    "SUSE:Updates:SLE-DESKTOP:12-SP3:x86_64" : {
       "FLAVOR" : "Desktop-DVD-Incidents",
       "VERSION" : "12-SP3",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180424.855f660/data/repos.json 
new/openSUSE-release-tools-20180425.8bb627d/data/repos.json
--- old/openSUSE-release-tools-20180424.855f660/data/repos.json 2018-04-24 
18:31:28.000000000 +0200
+++ new/openSUSE-release-tools-20180425.8bb627d/data/repos.json 2018-04-25 
11:44:55.000000000 +0200
@@ -41,17 +41,11 @@
          },
          "repos" : [
             
"http://download.suse.de/ibs/SUSE/Updates/SLE-SERVER/12-SP3/x86_64/update/";,
-            
"http://download.suse.de/ibs/SUSE:/Maintenance:/Test:/SLE-SERVER:/12-SP3:/x86_64/update/";,
             
"http://download.suse.de/ibs/SUSE/Updates/SLE-SDK/12-SP3/x86_64/update/";,
-            
"http://download.suse.de/ibs/SUSE:/Maintenance:/Test:/SLE-SDK:/12-SP3:/x86_64/update/";,
             
"http://download.suse.de/ibs/SUSE/Updates/SLE-WE/12-SP3/x86_64/update/";,
-            
"http://download.suse.de/ibs/SUSE:/Maintenance:/Test:/SLE-WE:/12-SP3:/x86_64/update/";,
             
"http://download.suse.de/ibs/SUSE/Updates/SLE-Module-Web-Scripting/12/x86_64/update/";,
-            
"http://download.suse.de/ibs/SUSE:/Maintenance:/Test:/SLE-Module-Web-Scripting:/12:/x86_64/update/";,
             
"http://download.suse.de/ibs/SUSE/Updates/SLE-Module-Toolchain/12/x86_64/update/";,
-            
"http://download.suse.de/ibs/SUSE:/Maintenance:/Test:/SLE-Module-Toolchain:/12:/x86_64/update/";,
-            
"http://download.suse.de/ibs/SUSE/Updates/SLE-Module-HPC/12/x86_64/update/";,
-            
"http://download.suse.de/ibs/SUSE:/Maintenance:/Test:/SLE-Module-HPC:/12:/x86_64/update/";
+            
"http://download.suse.de/ibs/SUSE/Updates/SLE-Module-HPC/12/x86_64/update/";
          ],
          "settings" : {
             "VERSION" : "12-SP3",
@@ -71,8 +65,6 @@
          "test" : "qam-gnome",
          "repos" : [
             
"http://download.suse.de/ibs/SUSE/Updates/SLE-DESKTOP/12-SP3/x86_64/update/";,
-            
"http://download.suse.de/ibs/SUSE:/Maintenance:/Test:/SLE-DESKTOP:/12-SP3:/x86_64/update/";,
-            
"http://download.suse.de/ibs/SUSE:/Maintenance:/Test:/SLE-SDK:/12-SP3:/x86_64/update/";,
             
"http://download.suse.de/ibs/SUSE/Updates/SLE-SDK/12-SP3/x86_64/update/";
          ],
          "incidents" : {
@@ -89,8 +81,7 @@
          },
          "test" : "qam-gnome",
          "repos" : [
-            
"http://download.suse.de/ibs/SUSE/Updates/SLE-SERVER/12-SP1-LTSS/x86_64/update/";,
-            
"http://download.suse.de/ibs/SUSE:/Maintenance:/Test:/SLE-SERVER:/12-SP1-LTSS:/x86_64/update/";
+            
"http://download.suse.de/ibs/SUSE/Updates/SLE-SERVER/12-SP1-LTSS/x86_64/update/";
          ],
          "incidents" : {
             "OS" : "SUSE:Maintenance:Test:SLE-SERVER:12-SP1-LTSS:x86_64"
@@ -108,8 +99,7 @@
             "OS" : "SUSE:Maintenance:Test:SLE-SERVER:12-SP2-LTSS:x86_64"
          },
          "repos" : [
-            
"http://download.suse.de/ibs/SUSE/Updates/SLE-SERVER/12-SP2-LTSS/x86_64/update/";,
-            
"http://download.suse.de/ibs/SUSE:/Maintenance:/Test:/SLE-SERVER:/12-SP2-LTSS:/x86_64/update/";
+            
"http://download.suse.de/ibs/SUSE/Updates/SLE-SERVER/12-SP2-LTSS/x86_64/update/";
          ]
       },
       "SUSE:Updates:SLE-SERVER:12-LTSS:x86_64" : {
@@ -117,8 +107,7 @@
             "OS" : "SUSE:Maintenance:Test:SLE-SERVER:12-LTSS:x86_64"
          },
          "repos" : [
-            
"http://download.suse.de/ibs/SUSE/Updates/SLE-SERVER/12-LTSS/x86_64/update/";,
-            
"http://download.suse.de/ibs/SUSE:/Maintenance:/Test:/SLE-SERVER:/12-LTSS:/x86_64/update/";
+            
"http://download.suse.de/ibs/SUSE/Updates/SLE-SERVER/12-LTSS/x86_64/update/";
          ],
          "settings" : {
             "DISTRI" : "sle",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180424.855f660/oqamaint/openqabot.py 
new/openSUSE-release-tools-20180425.8bb627d/oqamaint/openqabot.py
--- old/openSUSE-release-tools-20180424.855f660/oqamaint/openqabot.py   
2018-04-24 18:31:28.000000000 +0200
+++ new/openSUSE-release-tools-20180425.8bb627d/oqamaint/openqabot.py   
2018-04-25 11:44:55.000000000 +0200
@@ -46,9 +46,6 @@
         self.force = False
         self.openqa = None
         self.commentapi = CommentAPI(self.apiurl)
-        self.update_test_builds = {}
-        self.pending_target_repos = set()
-        self.openqa_jobs = {}
 
     def gather_test_builds(self):
         for prj, u in self.tgt_repo[self.openqa.baseurl].items():
@@ -69,6 +66,12 @@
     # reimplemention from baseclass
     def check_requests(self):
 
+        # to be filled by repos of active
+        self.incident_repos = dict()
+        self.update_test_builds = {}
+        self.pending_target_repos = set()
+        self.openqa_jobs = {}
+
         if self.ibs:
             self.check_suse_incidents()
         else:
@@ -77,39 +80,18 @@
         # first calculate the latest build number for current jobs
         self.gather_test_builds()
 
-        started = []
-        # then check progress on running incidents
-        for req in self.requests:
-            jobs = self.request_get_openqa_jobs(req, incident=True, 
test_repo=True)
-            ret = self.calculate_qa_status(jobs)
-            if ret != QA_UNKNOWN:
-                started.append(req)
-
-        all_requests = self.requests
-        self.requests = started
-        self.logger.debug("check started requests")
         super(OpenQABot, self).check_requests()
 
-        self.requests = all_requests
-
-        skipped_one = False
         # now make sure the jobs are for current repo
         for prj, u in self.tgt_repo[self.openqa.baseurl].items():
             if prj in self.pending_target_repos:
-                skipped_one = True
+                self.logger.debug("Do not trigger for " + prj)
                 continue
             self.trigger_build_for_target(prj, u)
 
-        # do not schedule new incidents unless we finished
-        # last wave
-        if skipped_one:
-            return
-        self.logger.debug("Check all requests")
-        super(OpenQABot, self).check_requests()
-
     # check a set of repos for their primary checksums
     @staticmethod
-    def calculate_repo_hash(repos):
+    def calculate_repo_hash(repos, incidents):
         m = md5.new()
         # if you want to force it, increase this number
         m.update('b')
@@ -122,6 +104,8 @@
             cs = root.find(
                 
'.//{http://linux.duke.edu/metadata/repo}data[@type="primary"]/{http://linux.duke.edu/metadata/repo}checksum')
             m.update(cs.text)
+        # now add the open incidents
+        m.update(json.dumps(incidents, sort_keys=True))
         return m.hexdigest()
 
     def is_incident_in_testing(self, incident):
@@ -192,9 +176,9 @@
         today = date.today().strftime("%Y%m%d")
 
         try:
-            repohash = self.calculate_repo_hash(data['repos'])
+            repohash = self.calculate_repo_hash(data['repos'], 
self.incident_repos.get(prj, {}))
         except HTTPError as e:
-            self.logger.debug("REPOHAS not calculated with response 
{}".format(e))
+            self.logger.debug("REPOHASH not calculated with response 
{}".format(e))
             return
 
         buildnr = None
@@ -241,25 +225,41 @@
                 self.logger.error(e)
         self.update_test_builds[prj] = buildnr
 
-    def request_get_openqa_jobs(self, req, incident=True, test_repo=False):
-        ret = None
+    def request_get_openqa_status(self, req):
         types = {a.type for a in req.actions}
-        if 'maintenance_release' in types:
-            src_prjs = {a.src_project for a in req.actions}
-            if len(src_prjs) != 1:
-                raise Exception("can't handle maintenance_release from 
different incidents")
-            build = src_prjs.pop()
-            tgt_prjs = {a.tgt_project for a in req.actions}
-            ret = []
-            if incident:
-                ret += self.openqa_jobs.get(build, [])
-            for prj in sorted(tgt_prjs):
-                repo_settings = self.tgt_repo.get(self.openqa.baseurl, {})
-                if test_repo and prj in repo_settings:
-                    repo_jobs = self.openqa_jobs[prj]
-                    ret += repo_jobs
+        if not 'maintenance_release' in types:
+            return [], QA_UNKNOWN
 
-        return ret
+        src_prjs = {a.src_project for a in req.actions}
+        if len(src_prjs) != 1:
+            raise Exception("can't handle maintenance_release from different 
incidents")
+        build = src_prjs.pop()
+        incident_id = build.split(':')[-1]
+        tgt_prjs = {a.tgt_project for a in req.actions}
+        jobs = self.openqa_jobs.get(build, [])
+        qa_status = self.calculate_qa_status(jobs)
+        if qa_status == QA_UNKNOWN or qa_status == QA_INPROGRESS:
+            return jobs, qa_status
+
+        # check if the repo jobs include the incident
+        repo_jobs = []
+        for prj in sorted(tgt_prjs):
+            repo_settings = self.tgt_repo.get(self.openqa.baseurl, {})
+            if prj in repo_settings:
+                repo_jobs += self.openqa_jobs[prj]
+        for job in repo_jobs:
+            foundissue = False
+            for key, value in job['settings'].items():
+                if key.endswith('_TEST_ISSUES'):
+                    if incident_id in value.split(','):
+                        foundissue = True
+            if not foundissue:
+                self.logger.info("Repo job {} not for {} - 
ignoring".format(job['id'], incident_id))
+                return jobs, QA_INPROGRESS
+            #print(foundissue, incident_id, json.dumps(job['settings'], 
indent=4))
+
+        jobs += repo_jobs
+        return jobs, self.calculate_qa_status(jobs)
 
     def calculate_qa_status(self, jobs=None):
         if not jobs:
@@ -378,39 +378,15 @@
         ret = None
 
         try:
-            jobs = self.request_get_openqa_jobs(req)
-            qa_state = self.calculate_qa_status(jobs)
+            jobs, qa_state = self.request_get_openqa_status(req)
             self.logger.debug("request %s state %s", req.reqid, qa_state)
             msg = None
-            if self.force or qa_state == QA_UNKNOWN:
-                ret = super(OpenQABot, self).check_one_request(req)
-                jobs = self.request_get_openqa_jobs(req)
-
-                if self.force:
-                    # make sure to delete previous comments if we're forcing
-                    info = self.find_obs_request_comment(request_id=req.reqid)
-                    if 'id' in info:
-                        self.logger.debug("deleting old comment %s", 
info['id'])
-                        if not self.dryrun:
-                            self.commentapi.delete(info['id'])
-
-                if jobs:
-                    # no notification until the result is done
-                    osc.core.change_review_state(self.apiurl, req.reqid, 
newstate='new',
-                                                 by_group=self.review_group, 
by_user=self.review_user,
-                                                 message='now testing in 
openQA')
-                else:
+            if qa_state == QA_UNKNOWN:
+                if not jobs:
                     msg = "no openQA tests defined"
                     self.comment_write(state='done', message=msg, request=req, 
result='accepted')
-                    ret = True
+                    return True
             elif qa_state == QA_FAILED or qa_state == QA_PASSED:
-                # don't take test repo results into the calculation of total
-                # this is for humans to decide which incident broke the test 
repo
-                jobs += self.request_get_openqa_jobs(req, incident=False, 
test_repo=True)
-                if self.calculate_qa_status(jobs) == QA_INPROGRESS:
-                    self.logger.info(
-                        "incident tests for request %s are done, but need to 
wait for test repo", req.reqid)
-                    return
                 if qa_state == QA_PASSED:
                     msg = "openQA tests passed\n"
                     result = 'accepted'
@@ -431,7 +407,7 @@
             import traceback
             self.logger.error("unhandled exception in openQA Bot")
             self.logger.error(traceback.format_exc())
-            ret = None
+            return None
 
         return ret
 
@@ -449,12 +425,12 @@
         need = False
         settings = {'VERSION': pmap['version']}
         settings['ARCH'] = arch if arch else 'x86_64'
-        settings['DISTRI'] = 'sle' if 'distri' not in pmap else pmap['distri']
+        settings['DISTRI'] = pmap.get('distri', 'sle')
         issues = pmap.get('issues', {})
         issues['OS_TEST_ISSUES'] = issues.get('OS_TEST_ISSUES', product_prefix)
         required_issue = pmap.get('required_issue', False)
         for key, prefix in issues.items():
-            self.logger.debug("KP {} {}".format(key, prefix) + str(job))
+            #self.logger.debug("KP {} {}".format(key, prefix) + str(job))
             channel = prefix
             if arch:
                 channel += arch
@@ -482,6 +458,8 @@
                 job['openqa_build'] = update.get_max_revision(job)
             if not job.get('openqa_build'):
                 return []
+            self.incident_repos.setdefault(product_prefix, dict())[
+                str(job['id'])] = job.get('openqa_build')
             j['BUILD'] += '.' + str(job['openqa_build'])
             j.update(settings)
             # kGraft jobs can have different version
@@ -518,7 +496,13 @@
 
     # for SUSE we use mesh for openSUSE we limit the jobs to open release 
requests
     def check_opensuse_incidents(self):
-        for req in self.requests:
+        requests = []
+        for prj in self.tgt_repo[self.openqa.baseurl].keys():
+            requests += self.ids_project(prj, 'maintenance_release')
+
+        # to be stored in settings
+        issues = dict()
+        for req in requests:
             types = set([a.type for a in req.actions])
             if not 'maintenance_release' in types:
                 continue
@@ -536,13 +520,11 @@
 
                 incident_id = build.split(':')[-1]
                 self.test_job({'project': build, 'id': incident_id, 
'channels': [prj]})
-                issues = 
self.tgt_repo[self.openqa.baseurl][prj]['settings']['OS_TEST_ISSUES'].split(
-                    ',')
-                # filter empty values
-                issues = filter(None, issues)
-                issues.append(incident_id)
-                
self.tgt_repo[self.openqa.baseurl][prj]['settings']['OS_TEST_ISSUES'] = 
','.join(
-                    issues)
+                issues.setdefault(prj, set()).add(incident_id)
+
+        for prj in self.tgt_repo[self.openqa.baseurl].keys():
+            s = self.tgt_repo[self.openqa.baseurl][prj]['settings']
+            s['OS_TEST_ISSUES'] = ','.join(sorted(issues.get(prj, set())))
 
     def check_suse_incidents(self):
         for inc in 
requests.get('https://maintenance.suse.de/api/incident/active/').json():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20180424.855f660/osclib/accept_command.py 
new/openSUSE-release-tools-20180425.8bb627d/osclib/accept_command.py
--- old/openSUSE-release-tools-20180424.855f660/osclib/accept_command.py        
2018-04-24 18:31:28.000000000 +0200
+++ new/openSUSE-release-tools-20180425.8bb627d/osclib/accept_command.py        
2018-04-25 11:44:55.000000000 +0200
@@ -67,13 +67,11 @@
         return rqs
 
     def reset_rebuild_data(self, project):
-        url = self.api.makeurl(['source', self.api.cstaging, 'dashboard', 
'support_pkg_rebuild?expand=1'])
-        try:
-            data = http_GET(url)
-        except urllib2.HTTPError:
+        data = self.api.dashboard_content_load('support_pkg_rebuild')
+        if data is None:
             return
-        tree = ET.parse(data)
-        root = tree.getroot()
+
+        root = ET.fromstring(data)
         for stg in root.findall('staging'):
             if stg.get('name') == project:
                 stg.find('rebuild').text = 'unknown'
@@ -81,9 +79,9 @@
 
         # reset accpted staging project rebuild state to unknown and clean up
         # supportpkg list
-        url = self.api.makeurl(['source', self.api.cstaging, 'dashboard', 
'support_pkg_rebuild'])
         content = ET.tostring(root)
-        http_PUT(url + '?comment=accept+command+update', data=content)
+        if content != data:
+            self.api.dashboard_content_save('support_pkg_rebuild', content, 
'accept command update')
 
     def virtually_accept_delete(self, request_id, package):
         self.api.add_review(request_id, by_group=self.api.cdelreq_review, 
msg='Request accepted. Cleanup in progress - DO NOT REVOKE!')

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.AIXwCk/_old  2018-04-26 13:38:40.050681198 +0200
+++ /var/tmp/diff_new_pack.AIXwCk/_new  2018-04-26 13:38:40.054681052 +0200
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20180424.855f660
-mtime: 1524587488
-commit: 855f660bf4af3e275c86933c3420663d2fb53385
+version: 20180425.8bb627d
+mtime: 1524649495
+commit: 8bb627d9bfe07dc22af6910b73564eef7cb0f53d
 


Reply via email to