hydra-eval-faliures: Print Dependency failures as well as direct failures and update to Python3 (#29760)

* Print Dependency failures as well as direct failures and update to Python3

some package fail due to non-exposed dependencies and would thus not appear in the list, for example gcj

* hydra-eval-failures: simpler hashbang

berdario 595efb96 29dc27c5

Changed files
+19 -14
maintainers
+19 -14
maintainers/scripts/hydra-eval-failures.py
···
#!/usr/bin/env nix-shell
-
#!nix-shell -i python -p pythonFull pythonPackages.requests pythonPackages.pyquery pythonPackages.click
+
#!nix-shell -i python3 -p 'python3.withPackages(ps: with ps; [ requests pyquery click ])'
# To use, just execute this script with --help to display help.
···
'nix-instantiate', '-E', 'import ./maintainers/maintainer-list.nix {}', '--eval', '--json'
])
maintainers = json.loads(maintainers_json)
-
MAINTAINERS = {v: k for k, v in maintainers.iteritems()}
+
MAINTAINERS = {v: k for k, v in maintainers.items()}
def get_response_text(url):
···
except:
return []
+
def print_build(table_row):
+
a = pq(table_row)('a')[1]
+
print("- [ ] [{}]({})".format(a.text, a.get('href')), flush=True)
+
+
maintainers = get_maintainers(a.text)
+
if maintainers:
+
print(" - maintainers: {}".format(", ".join(map(lambda u: '@' + u, maintainers))))
+
# TODO: print last three persons that touched this file
+
# TODO: pinpoint the diff that broke this build, or maybe it's transient or maybe it never worked?
+
+
sys.stdout.flush()
@click.command()
@click.option(
···
# TODO: aborted evaluations
# TODO: dependency failed without propagated builds
+
print('\nFailures:')
for tr in d('img[alt="Failed"]').parents('tr'):
-
a = pq(tr)('a')[1]
-
print("- [ ] [{}]({})".format(a.text, a.get('href')))
+
print_build(tr)
-
sys.stdout.flush()
-
-
maintainers = get_maintainers(a.text)
-
if maintainers:
-
print(" - maintainers: {}".format(", ".join(map(lambda u: '@' + u, maintainers))))
-
# TODO: print last three persons that touched this file
-
# TODO: pinpoint the diff that broke this build, or maybe it's transient or maybe it never worked?
-
-
sys.stdout.flush()
+
print('\nDependency failures:')
+
for tr in d('img[alt="Dependency failed"]').parents('tr'):
+
print_build(tr)
if __name__ == "__main__":
try:
cli()
-
except:
+
except Exception as e:
import pdb;pdb.post_mortem()