diff --git a/buildbot_nix/__init__.py b/buildbot_nix/__init__.py index 90dd947..1fe77d8 100644 --- a/buildbot_nix/__init__.py +++ b/buildbot_nix/__init__.py @@ -173,7 +173,7 @@ class BuildTrigger(steps.BuildStep): done = [] scheduled = [] - failed = [] + failed = {} all_results = SUCCESS ss_for_trigger = self.prepareSourcestampListForTrigger() while not self.ended and (len(build_schedule_order) > 0 or len(scheduled) > 0): @@ -234,10 +234,15 @@ class BuildTrigger(steps.BuildStep): failed_paths.append(build.get("drvPath")) build_schedule_order.remove(build) removed.append(build.get("attr")) + failed[build.get("attr")] = (f"dependency {job.get('attr')} failed", []) break if old_paths == failed_paths: break + failed[job.get("attr")] = ( + "failed", + [ getURLForBuildrequest(self.master, brid) for brid in brids.values() ] + ) print(' Removed jobs: ' + ', '.join(removed)) all_results = worst_status(result, all_results) print(f' New result: {util.Results[all_results].upper()}') @@ -245,6 +250,7 @@ class BuildTrigger(steps.BuildStep): if job.get("drvPath") in self.all_deps[dep]: self.all_deps[dep].remove(job.get("drvPath")) print('Done!') + build_props.setProperty("failed_builds", failed, "nix-eval-lix") if self.ended: return util.CANCELLED return all_results @@ -647,62 +653,22 @@ def gerritReviewCB(builderName, build, result, master, arg): if builderName != 'lix/nix-eval': return dict() - all_checks = {} - for step in build['steps']: - if step['name'] != 'build flake': - continue + failed = build['properties'].get('failed_builds', [{}])[0] - for url in step['urls']: - if url['name'].startswith('success: hydraJobs.'): - path = url['name'].split(' ')[1] - all_checks[path] = (True, url['url']) - elif url['name'].startswith('failure: hydraJobs.'): - path = url['name'].split(' ')[1] - all_checks[path] = (False, url['url']) - - collected_oses = {} - for check in all_checks: - arch = check.split('.')[-1] - if not arch.endswith('-linux') and not arch.endswith('-darwin'): - # Not an architecture-specific job, just a test - os = "test" - else: - os = arch.split('-')[1] - (success, failure) = collected_oses.get(os, (0, 0)) - if all_checks[check][0]: - success += 1 - else: - failure += 1 - - collected_oses[os] = (success, failure) - labels = {} - - if 'linux' in collected_oses: - (success, failure) = collected_oses['linux'] - if success > 0 and failure == 0: - labels['Verified-On-Linux'] = 1 - elif failure > 0: - labels['Verified-On-Linux'] = -1 - - if 'darwin' in collected_oses: - (success, failure) = collected_oses['darwin'] - if success > 0 and failure == 0: - labels['Verified-On-Darwin'] = 1 - elif failure > 0: - labels['Verified-On-Darwin'] = -1 + labels = { + 'Verified': -1 if failed else 1, + } message = "Buildbot finished compiling your patchset!\n" message += "The result is: %s\n" % util.Results[result].upper() if result != util.SUCCESS: - successful_checks = [] - failed_checks = [] - for check in all_checks: - if not all_checks[check][0]: - failed_checks.append(f" - {check} (see {all_checks[check][1]})") - - if len(failed_checks) > 0: - message += "Failed checks:\n" + "\n".join(failed_checks) + "\n" - + message += "\nFailed checks:\n" + for check, context in sorted(failed.items()): + how, urls = context + message += f" - {check}: {how}" + if urls: + message += f" (see {', '.join(urls)})" + message += "\n" if arg: message += "\nFor more details visit:\n"