Hello community,

here is the log from the commit of package openSUSE-release-tools for 
openSUSE:Leap:15.2 checked in at 2020-02-01 06:10:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Leap:15.2/.openSUSE-release-tools.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Sat Feb  1 06:10:27 2020 rev:294 rq:768943 version:20200130.02d3038b

Changes:
--------
--- 
/work/SRC/openSUSE:Leap:15.2/openSUSE-release-tools/openSUSE-release-tools.changes
  2020-01-30 15:47:36.821303337 +0100
+++ 
/work/SRC/openSUSE:Leap:15.2/.openSUSE-release-tools.new.26092/openSUSE-release-tools.changes
       2020-02-01 06:10:51.730798556 +0100
@@ -1,0 +2,6 @@
+Thu Jan 30 15:59:35 UTC 2020 - opensuse-releaset...@opensuse.org
+
+- Update to version 20200130.02d3038b:
+  * Rapid prototype of a Factory dashboard
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20200129.7a3a7a36.obscpio

New:
----
  openSUSE-release-tools-20200130.02d3038b.obscpio

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

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.ambgPW/_old  2020-02-01 06:10:53.678799528 +0100
+++ /var/tmp/diff_new_pack.ambgPW/_new  2020-02-01 06:10:53.706799542 +0100
@@ -20,7 +20,7 @@
 %define source_dir openSUSE-release-tools
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20200129.7a3a7a36
+Version:        20200130.02d3038b
 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.ambgPW/_old  2020-02-01 06:10:54.046799711 +0100
+++ /var/tmp/diff_new_pack.ambgPW/_new  2020-02-01 06:10:54.058799717 +0100
@@ -1,6 +1,6 @@
 <servicedata>
   <service name="tar_scm">
     <param 
name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param>
-    <param 
name="changesrevision">7a3a7a368079b057f67274681f99f8950d71a962</param>
+    <param 
name="changesrevision">5788e9ce2f17a3db2937177829a41c37bb78e712</param>
   </service>
 </servicedata>

++++++ openSUSE-release-tools-20200129.7a3a7a36.obscpio -> 
openSUSE-release-tools-20200130.02d3038b.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20200129.7a3a7a36/dashboard/generate.py 
new/openSUSE-release-tools-20200130.02d3038b/dashboard/generate.py
--- old/openSUSE-release-tools-20200129.7a3a7a36/dashboard/generate.py  
1970-01-01 01:00:00.000000000 +0100
+++ new/openSUSE-release-tools-20200130.02d3038b/dashboard/generate.py  
2020-01-30 16:57:27.000000000 +0100
@@ -0,0 +1,135 @@
+#!/usr/bin/python3
+
+import argparse
+import logging
+import pika
+import sys
+import json
+import osc
+import re
+from time import sleep
+from osc.core import http_GET, http_POST, makeurl, show_project_meta
+from M2Crypto.SSL import SSLError as SSLError
+from osclib.conf import Config
+from osclib.stagingapi import StagingAPI
+from lxml import etree as ET
+from openqa_client.client import OpenQA_Client
+from openqa_client.exceptions import ConnectionError, RequestError
+from urllib.error import HTTPError, URLError
+from urllib.parse import quote_plus
+
+import requests
+from osclib.PubSubConsumer import PubSubConsumer
+from flask import Flask, render_template
+
+class Fetcher(object):
+    def __init__(self, apiurl, opts):
+        self.projects = []
+        self.opts = opts
+        self.apiurl = apiurl
+        if apiurl.endswith('suse.de'):
+            amqp_prefix = 'suse'
+            openqa_url = 'https://openqa.suse.de'
+        else:
+            amqp_prefix = 'opensuse'
+            openqa_url = 'https://openqa.opensuse.org'
+
+    def add(self, name, nick):
+        # cyclic dependency!
+        self.projects.append(Project(self, name, nick))
+
+    def build_summary(self, project, repository):
+        url = makeurl(self.apiurl, ['build', project, '_result'], { 
'repository': repository, 'view': 'summary' })
+        f = http_GET(url)
+        root = ET.parse(f).getroot()
+        failed = 0
+        unresolvable = 0
+        building = 0
+        succeeded = 0
+        for result in root.findall('.//statuscount'):
+            code = result.get('code')
+            count = int(result.get('count'))
+            if code == 'excluded' or code == 'disabled':
+                continue # ignore
+            if code == 'succeeded':
+                succeeded += count
+                continue
+            if code == "failed":
+                failed += count
+                continue
+            if code == "unresolvable":
+                unresolvable += count
+                continue
+            building += count
+            #print(code, file=sys.stderr)
+        # let's count them as building
+        if building > 0:
+            building += unresolvable
+            unresolvable = 0
+        return { 'building': 1000 - int(building * 1000 / (building + failed + 
succeeded)),
+                 'failed': failed,
+                 'unresolvable': unresolvable }
+
+    def generate_all_archs(self, project):
+        meta = ET.fromstringlist(show_project_meta(self.apiurl, project))
+        archs = set()
+        for arch in meta.findall('.//arch'):
+            archs.add(arch.text)
+        result = []
+        for arch in archs:
+            result.append(f"arch_{arch}=1")
+        return '&'.join(result)
+
+class Project(object):
+    def __init__(self, fetcher, name, nick):
+        self.fetcher = fetcher
+        self.name = name
+        self.nick = nick
+        self.all_archs = fetcher.generate_all_archs(name)
+
+    def standard_progress(self):
+        return fetcher.build_summary(self.name, 'standard')
+
+    def images_progress(self):
+        try:
+            return fetcher.build_summary(self.name, 'images')
+        except HTTPError as e:
+            print(f"failed to fetch images for {self.name}", file=sys.stderr)
+            return {'building': -1}
+
+    def all_archs(self):
+        self.all_archs
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(
+        description='Bot to sync openQA status to OBS')
+    parser.add_argument("--apiurl", '-A', type=str, help='API URL of OBS')
+    parser.add_argument('-p', '--project', type=str, default='Factory',
+                        help='openSUSE version to make the check (Factory, 
15.2)')
+    parser.add_argument('-d', '--debug', action='store_true', default=False,
+                        help='enable debug information')
+
+    args = parser.parse_args()
+
+    osc.conf.get_config(override_apiurl = args.apiurl)
+    osc.conf.config['debug'] = args.debug
+    apiurl = osc.conf.config['apiurl']
+
+    fetcher = Fetcher(apiurl, args)
+    logging.basicConfig(level=logging.INFO)
+
+    app = Flask(__name__)
+
+    fetcher.add('openSUSE:Factory', 'Factory')
+    fetcher.add('openSUSE:Factory:Rings:0-Bootstrap', 'Ring 0')
+    fetcher.add('openSUSE:Factory:Rings:1-MinimalX', 'Ring 1')
+    fetcher.add('openSUSE:Factory:ARM', 'ARM')
+    fetcher.add('openSUSE:Factory:PowerPC', 'Power')
+    fetcher.add('openSUSE:Factory:zSystems', 'System Z')
+    fetcher.add('openSUSE:Factory:RISCV', 'Risc V')
+
+    with app.app_context():
+        rendered = render_template('dashboard.html',
+            projectname = args.project,
+            projects = fetcher.projects)
+        print(rendered)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20200129.7a3a7a36/dashboard/templates/dashboard.html 
new/openSUSE-release-tools-20200130.02d3038b/dashboard/templates/dashboard.html
--- 
old/openSUSE-release-tools-20200129.7a3a7a36/dashboard/templates/dashboard.html 
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20200130.02d3038b/dashboard/templates/dashboard.html 
    2020-01-30 16:57:27.000000000 +0100
@@ -0,0 +1,64 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <!-- Required meta tags -->
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, 
shrink-to-fit=no">
+
+    <link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"; 
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
 crossorigin="anonymous">
+       <title>Dashboard for {{ projectname }}</title>
+  </head>
+  <body>
+       <h1>Dashboard for {{ projectname }}</h1>
+  <table class="table">
+    <thead>
+      <tr>
+        <th scope="col">Part</th>
+        <th scope="col">standard</th>
+        <th scope="col">images</th>
+      </tr>
+    </thead>
+    {% for project in projects %}
+    <tr>
+      <th scope="row"><a href="https://build.opensuse.org/project/show/{{ 
project.name }}">{{project.nick}}</a></th>
+      <td>
+        {% set progress = project.standard_progress() %}
+        {% if progress['building'] < 1000 %}
+          {{ progress['building'] / 10}}% done
+        {% else %}
+          done
+        {% endif %}
+        {% if progress['failed'] > 0 %}
+         , <a href="https://build.opensuse.org/project/monitor/{{ project.name 
}}?failed=1&defaults=0&repo_standard=1&{{project.all_archs}}">{{ 
progress['failed'] }} failed</a>
+        {% endif %}
+        {% if progress['unresolvable'] > 0 %}
+         , <a href="https://build.opensuse.org/project/monitor/{{ project.name 
}}?unresolvable=1&defaults=0&repo_standard=1&{{project.all_archs}}">{{ 
progress['unresolvable'] }} unresolvable</a>
+        {% endif %}
+      </td>
+      <td>
+        {% set progress = project.images_progress() %}
+        {% if progress['building'] >= 0 %}
+          {% if progress['building'] < 1000 %}
+            {{ progress['building'] / 10}}% done
+          {% else %}
+            done
+          {% endif %}
+          {% if progress['failed'] > 0 %}
+            , <a href="https://build.opensuse.org/project/monitor/{{ 
project.name }}?failed=1&defaults=0&repo_images=1&{{project.all_archs}}">{{ 
progress['failed'] }} failed</a>
+          {% endif %}
+          {% if progress['unresolvable'] > 0 %}
+            , <a href="https://build.opensuse.org/project/monitor/{{ 
project.name 
}}?unresolvable=1&defaults=0&repo_images=1&{{project.all_archs}}">{{ 
progress['unresolvable'] }} unresolvable</a>
+          {% endif %}
+        {% else %}
+          N.A.
+        {% endif %}
+      </td>
+    </tr>
+    {% endfor %}
+  </table>
+  <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"; 
integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"
 crossorigin="anonymous"></script>
+  <script 
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"; 
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
 crossorigin="anonymous"></script>
+  <script 
src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"; 
integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"
 crossorigin="anonymous"></script>
+
+  </body>
+</html>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20200129.7a3a7a36/gocd/dashboard.generator.gocd.yaml 
new/openSUSE-release-tools-20200130.02d3038b/gocd/dashboard.generator.gocd.yaml
--- 
old/openSUSE-release-tools-20200129.7a3a7a36/gocd/dashboard.generator.gocd.yaml 
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/openSUSE-release-tools-20200130.02d3038b/gocd/dashboard.generator.gocd.yaml 
    2020-01-30 16:57:27.000000000 +0100
@@ -0,0 +1,25 @@
+format_version: 3
+pipelines:
+  Dashboard.Factory:
+    group: openSUSE.Checkers
+    lock_behavior: unlockWhenFinished
+    environment_variables:
+      OSC_CONFIG: /home/go/config/oscrc-totest-manager
+      RSYNC_PASSWORD: '{{SECRET:[RSYNC_FOR_COOLO][RSYNC_FOR_COOLO]}}'
+    materials:
+      script:
+        git: https://github.com/openSUSE/openSUSE-release-tools.git
+        destination: scripts
+    timer:
+      spec: 0 */5 * ? * *
+      only_on_changes: false
+    stages:
+    - Run:
+        approval: manual
+        resources:
+        - staging-bot
+        tasks:
+        - script: |-
+         set -x
+         PYTHONPATH=$PWD python3 ./dashboard/generate.py -p openSUSE:Factory > 
dashboard/output/index.html
+         rsync -av dashboard/output/ 
rsync://coolo@195.135.221.140:11873/factory-dashboard.opensuse.org/

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.ambgPW/_old  2020-02-01 06:10:54.842800108 +0100
+++ /var/tmp/diff_new_pack.ambgPW/_new  2020-02-01 06:10:54.842800108 +0100
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20200129.7a3a7a36
-mtime: 1580316056
-commit: 7a3a7a368079b057f67274681f99f8950d71a962
+version: 20200130.02d3038b
+mtime: 1580399847
+commit: 02d3038bf62c7de96e11b86a56b8a8ec4d1487a4
 


Reply via email to