From 5ad0c5586085ba32e810c4974eaee09209160206 Mon Sep 17 00:00:00 2001 From: Kamil Páral Date: Aug 16 2017 14:30:26 +0000 Subject: don't fail when a releases doesn't exist in Bodhi This happens regularly during Branched before the Bodhi activation point. Related: https://pagure.io/taskotron/libtaskotron/issue/328 Related: https://github.com/fedora-infra/bodhi/issues/794 --- diff --git a/upgradepath.py b/upgradepath.py index b69c22c..f28fe7c 100755 --- a/upgradepath.py +++ b/upgradepath.py @@ -23,6 +23,8 @@ import operator import sys import argparse import os +import urllib2 +import json from libtaskotron import check from libtaskotron.ext.fedora import koji_utils @@ -56,6 +58,34 @@ class Upgradepath(object): self.repoinfo = yumrepoinfo.get_yumrepoinfo() self.bodhi = bodhi_utils.BodhiUtils() + # list of Fedora releases that exist in Bodhi, e.g. ['F25','F26'] + # this is to workaround: + # https://pagure.io/taskotron/libtaskotron/issue/328 + # https://github.com/fedora-infra/bodhi/issues/794 + self.bodhi_releases = [] + + + def bodhi_release_exists(self, release_tag): + '''Check whether a Fedora release is present in Bodhi or not. + + :param str release_tag: Fedora release tag (Bodhi variant with + uppercase letters), e.g. ``F25`` + :return: bool whether the release is in Bodhi or not + ''' + # populate on first use + if not self.bodhi_releases: + # TODO: use self.bodhi.client.get_releases() once this is fixed: + # https://github.com/fedora-infra/bodhi/issues/784 + releases_url = self.bodhi.client.base_url + '/releases' + logger.debug('Getting list of bodhi releases from: %s', + releases_url) + releases_json = urllib2.urlopen(releases_url).read() + releases = json.loads(releases_json) + assert releases, 'Bodhi claims to know no releases' + self.bodhi_releases = [rel['name'] for rel in releases['releases']] + + return release_tag in self.bodhi_releases + def store_logs(self): '''Take ``self.build2detail`` and save it as @@ -246,6 +276,13 @@ class Upgradepath(object): # bodhi uses names in format 'F19', 'F20', let's convert it bodhi_tag = tag.upper() + # bodhi might not know the release yet, happens for Branched before + # Bodhi activation point + if not self.bodhi_release_exists(bodhi_tag): + logger.debug("Bodhi doesn't know %s release, skipping check", + bodhi_tag) + return None + # query bodhi for the last update of this package that just requests # going into main or stable updates repo requests = self.bodhi.client.query(packages=pkgname, request='stable',