From 49142779c5d4fa85111a573409870e8c5ea9223e Mon Sep 17 00:00:00 2001 From: Ralf Jung <jung@mpi-sws.org> Date: Tue, 3 Jan 2017 21:36:02 +0100 Subject: [PATCH] update gitlab-extract to handle the double-CI-build (Coq 8.5 and 8.6) --- benchmark/gitlab-extract.py | 39 ++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/benchmark/gitlab-extract.py b/benchmark/gitlab-extract.py index 5e9db68f8..563a06aad 100755 --- a/benchmark/gitlab-extract.py +++ b/benchmark/gitlab-extract.py @@ -51,27 +51,34 @@ if project is None: sys.stderr.write("Project not found.\n") sys.exit(1) +BREAK = False for commit in parse_log.parse_git_commits(args.commits): + if BREAK: + break print("Fetching {}...".format(commit)) commit_data = req("/projects/{}/repository/commits/{}".format(project['id'], commit)) if commit_data.status_code != 200: raise Exception("Commit not found?") builds = req("/projects/{}/repository/commits/{}/builds".format(project['id'], commit)) if builds.status_code != 200: - # no build - continue - build = first(sorted(builds.json(), key = lambda b: -int(b['id']))) - if build is None or build['status'] == 'failed': - # build failed (or missing...??) - continue - if build['status'] == 'running': - # build still running, don't fetch this or any later commit + raise Exception("Build not found?") + # iterate over builds by decreasing ID, and look for the artifact + for build in builds.json(): + if build['status'] in ('created', 'pending', 'running'): + # build still not yet done, don't fetch this or any later commit + BREAK = True + break + if build['status'] != 'success': + # build failed or cancelled, skip to next + continue + # now fetch the build times + build_times = requests.get("{}/builds/{}/artifacts/file/build-time.txt".format(project['web_url'], build['id'])) + if build_times.status_code != 200: + # no artifact at this build, try another one + continue + # Output in the log file format + log_file.write("# {}\n".format(commit)) + log_file.write(build_times.text) + log_file.flush() + # don't fetch another one break - # now fetch the build times - build_times = requests.get("{}/builds/{}/artifacts/file/build-time.txt".format(project['web_url'], build['id'])) - if build_times.status_code != 200: - raise Exception("No artifact at build?") - # Output in the log file format - log_file.write("# {}\n".format(commit)) - log_file.write(build_times.text) - log_file.flush() -- GitLab