Hello community,
here is the log from the commit of package openSUSE-release-tools for
openSUSE:Factory checked in at 2020-01-30 22:37:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
and /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openSUSE-release-tools"
Thu Jan 30 22:37:26 2020 rev:272 rq:768827 version:20200130.02d3038b
Changes:
--------
---
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
2020-01-30 09:42:33.773527433 +0100
+++
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.26092/openSUSE-release-tools.changes
2020-01-30 22:37:44.172590145 +0100
@@ -1,0 +2,6 @@
+Thu Jan 30 15:59:35 UTC 2020 - [email protected]
+
+- 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.vYWqr0/_old 2020-01-30 22:37:48.236592098 +0100
+++ /var/tmp/diff_new_pack.vYWqr0/_new 2020-01-30 22:37:48.240592100 +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.vYWqr0/_old 2020-01-30 22:37:48.268592113 +0100
+++ /var/tmp/diff_new_pack.vYWqr0/_new 2020-01-30 22:37:48.268592113 +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/[email protected]/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://[email protected]:11873/factory-dashboard.opensuse.org/
++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.vYWqr0/_old 2020-01-30 22:37:48.892592413 +0100
+++ /var/tmp/diff_new_pack.vYWqr0/_new 2020-01-30 22:37:48.892592413 +0100
@@ -1,5 +1,5 @@
name: openSUSE-release-tools
-version: 20200129.7a3a7a36
-mtime: 1580316056
-commit: 7a3a7a368079b057f67274681f99f8950d71a962
+version: 20200130.02d3038b
+mtime: 1580399847
+commit: 02d3038bf62c7de96e11b86a56b8a8ec4d1487a4