From 0971a0dfea2ca097ead3a552978283289c3451f7 Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Thu, 12 Mar 2020 13:04:27 -0500 Subject: [PATCH] Add script for getting URLs of coverage runs Signed-off-by: Rick Elrod --- hacking/shippable/README.md | 6 ++ hacking/shippable/get_recent_coverage_runs.py | 68 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100755 hacking/shippable/get_recent_coverage_runs.py diff --git a/hacking/shippable/README.md b/hacking/shippable/README.md index 1f48d65d809..deb8b41b3a0 100644 --- a/hacking/shippable/README.md +++ b/hacking/shippable/README.md @@ -5,6 +5,7 @@ This directory contains the following scripts: - download.py - Download results from Shippable. +- get_recent_coverage_runs.py - Retrieve Shippable URLs of recent coverage test runs. - incidental.py - Report on incidental code coverage using data from Shippable. - run.py - Start new runs on Shippable. @@ -32,6 +33,11 @@ Reducing incidental test coverage, and eventually removing incidental tests invo 1. Run the entire test suite with code coverage enabled. This is done automatically each day on Shippable. + The URLs and statuses of the most recent such test runs can be found with: + ```shell + hacking/shippable/get_recent_coverage_runs.py + ``` + For now the branch name defaults to `temp-2.10-devel`. 2. Download code coverage data from Shippable for local analysis. Example: ```shell diff --git a/hacking/shippable/get_recent_coverage_runs.py b/hacking/shippable/get_recent_coverage_runs.py new file mode 100755 index 00000000000..88f5b3a9858 --- /dev/null +++ b/hacking/shippable/get_recent_coverage_runs.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python + +# (c) 2020 Red Hat, Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . + +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import requests +import sys + +BRANCH = 'temp-2.10-devel' + +if len(sys.argv) > 1: + BRANCH = sys.argv[1] + + +def get_coverage_runs(): + response = requests.get( + 'https://api.shippable.com/runs?projectIds=573f79d02a8192902e20e34b' + '&branch=%s&limit=1000' % BRANCH) + + if response.status_code != 200: + raise Exception(response.content) + + runs = response.json() + + coverage_runs = [] + criteria = ['COMPLETE="yes"', 'COVERAGE="yes"'] + + for run in runs: + injected_vars = run.get('cleanRunYml', {}).get('env', {}).get('injected') + if not injected_vars: + continue + if all(criterion in injected_vars for criterion in criteria): + coverage_runs.append(run) + + return coverage_runs + + +def pretty_coverage_runs(runs): + for run in sorted(runs, key=lambda x: x['endedAt']): + if run['statusCode'] == 30: + print('🙂 [PASS] https://app.shippable.com/github/ansible/ansible/runs/%s (%s)' % (run['runNumber'], run['endedAt'])) + else: + print('😢 [FAIL] https://app.shippable.com/github/ansible/ansible/runs/%s (%s)' % (run['runNumber'], run['endedAt'])) + + +def main(): + pretty_coverage_runs(get_coverage_runs()) + + +if __name__ == '__main__': + main()