summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRick Elrod <rick@elrod.me>2020-03-12 13:04:27 -0500
committerMatt Clay <matt@mystile.com>2020-03-12 13:37:50 -0700
commit0971a0dfea2ca097ead3a552978283289c3451f7 (patch)
tree8686a361367c396ae9d20814516b7bd9a7e010a1
parentabc7402f3f4c6ba023efff818dccef511eae1e8d (diff)
downloadansible-0971a0dfea2ca097ead3a552978283289c3451f7.tar.gz
Add script for getting URLs of coverage runs
Signed-off-by: Rick Elrod <rick@elrod.me>
-rw-r--r--hacking/shippable/README.md6
-rwxr-xr-xhacking/shippable/get_recent_coverage_runs.py68
2 files changed, 74 insertions, 0 deletions
diff --git a/hacking/shippable/README.md b/hacking/shippable/README.md
index 1f48d65d80..deb8b41b3a 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 <optional branch name>
+ ```
+ 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 0000000000..88f5b3a985
--- /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 <http://www.gnu.org/licenses/>.
+
+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()