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