diff --git a/scripts/find_failures.py b/scripts/find_failures.py index 0a0ef8f..a286447 100755 --- a/scripts/find_failures.py +++ b/scripts/find_failures.py @@ -17,11 +17,7 @@ import datetime # Set some variables # Some of these could arguably be passed in as args. -buildtag = 'f27-binutils-rebuild' # tag to check -desttag = 'f27' # Tag where fixed builds go -epoch = '2017-07-31 11:20:00.000000' # Date to check for failures from -failures = {} # dict of owners to lists of packages that failed. -failed = [] # raw list of failed packages +epoch = '2017-08-30 01:20:00.000000' # Date to check for failures from def get_failed_builds(kojisession, epoch, buildtag, desttag): @@ -48,26 +44,26 @@ def get_failed_builds(kojisession, epoch, buildtag, desttag): if build['creation_time'] > epoch: goodbuilds.append(build) - pkgs = kojisession.listPackages(desttag, inherited=True) - - # get the list of packages that are blocked - pkgs = sorted([pkg for pkg in pkgs if pkg['blocked']], - key=operator.itemgetter('package_id')) - # Check if newer build exists for package failbuilds = [] + list_goodbuild = [goodbuild['package_id'] for goodbuild in goodbuilds] + #print list_goodbuild for build in failtasks: - if ((not build['package_id'] in [goodbuild['package_id'] for goodbuild in goodbuilds]) and (not build['package_id'] in [pkg['package_id'] for pkg in pkgs])): + if not (build['package_id'] in list_goodbuild): + #print build['package_id'] failbuilds.append(build) + #print failbuilds # Generate taskinfo for each failed build kojisession.multicall = True for build in failbuilds: kojisession.getTaskInfo(build['task_id'], request=True) taskinfos = kojisession.multiCall() + #print "taskinfos %s" % taskinfos for build, [taskinfo] in zip(failbuilds, taskinfos): build['taskinfo'] = taskinfo + # Get owners of the packages with failures kojisession.multicall = True for build in failbuilds: @@ -75,32 +71,57 @@ def get_failed_builds(kojisession, epoch, buildtag, desttag): pkgID=build['package_id'], inherited=True) pkginfo = kojisession.multiCall() + #print "pkginfo %s" % pkginfo for build, [pkg] in zip(failbuilds, pkginfo): if len(pkg) > 0: build['package_owner'] = pkg[0]['owner_name'] else: continue + #print failbuilds return failbuilds if __name__ == '__main__': # Create a koji session - kojisession = koji.ClientSession('https://koji.fedoraproject.org/kojihub') + kojisession = koji.ClientSession('http://koji.rpmfusion.org/kojihub') + buildtag = 'f27-free-build' # tag to check + desttag = 'f27-free' # Tag where fixed builds go failbuilds = get_failed_builds(kojisession, epoch, buildtag, desttag) + failures = {} # dict of owners to lists of packages that failed. + failed = [] # raw list of failed packages + + # Generate the dict with the failures and urls + for build in failbuilds: + if not build['taskinfo']['request'][1] == desttag: + #print "%s %s" % (build['package_name'], build['taskinfo']['request'][1]) + continue + taskurl = 'http://koji.rpmfusion.org/koji/taskinfo?taskID=%s' % build['task_id'] + owner = build.get('package_owner') + pkg = build['package_name'] + tag = build['taskinfo']['request'][1] + if not pkg in failed: + failed.append(pkg) + failures.setdefault(owner, {})[pkg] = (taskurl, tag) + + buildtag = 'f27-nonfree-build' # tag to check + desttag = 'f27-nonfree' # Tag where fixed builds go + failbuilds = get_failed_builds(kojisession, epoch, buildtag, desttag) # Generate the dict with the failures and urls for build in failbuilds: - if not build['taskinfo']['request'][1] == buildtag: + if not build['taskinfo']['request'][1] == desttag: + #print build['package_name'] continue - taskurl = 'https://koji.fedoraproject.org/koji/taskinfo?taskID=%s' % build['task_id'] + taskurl = 'http://koji.rpmfusion.org/koji/taskinfo?taskID=%s' % build['task_id'] owner = build['package_owner'] pkg = build['package_name'] + tag = build['taskinfo']['request'][1] if not pkg in failed: failed.append(pkg) - failures.setdefault(owner, {})[pkg] = taskurl + failures.setdefault(owner, {})[pkg] = (taskurl, tag) now = datetime.datetime.now() now_str = "%s UTC" % str(now.utcnow()) @@ -118,7 +139,7 @@ if __name__ == '__main__': for owner in sorted(failures.keys()): print '
%s (%s):
' % (owner, len(failures[owner])) for pkg in sorted(failures[owner].keys()): - print '
%s
' % (failures[owner][pkg], pkg) + print '
%s%s
' % (failures[owner][pkg][0], pkg, failures[owner][pkg][1]) print '' print '' print ''