From c2d103d6422562df04ba6e3415500d30d831471b Mon Sep 17 00:00:00 2001
From: Teake Nutma <t.a.nutma@rug.nl>
Date: Wed, 8 Jun 2022 16:38:05 +0200
Subject: [PATCH] Add dockerfile for testbadge

---
 dockerfiles/testbadge/Dockerfile   |  9 +++++++++
 dockerfiles/testbadge/testbadge.py | 29 +++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+)
 create mode 100644 dockerfiles/testbadge/Dockerfile
 create mode 100755 dockerfiles/testbadge/testbadge.py

diff --git a/dockerfiles/testbadge/Dockerfile b/dockerfiles/testbadge/Dockerfile
new file mode 100644
index 0000000..9c03df6
--- /dev/null
+++ b/dockerfiles/testbadge/Dockerfile
@@ -0,0 +1,9 @@
+FROM python:3-slim
+
+# https://github.com/weiwei/junitparser/pull/89 is in junitparser 2.6.0.
+# https://github.com/weiwei/junitparser/pull/90 is not yet merged :(.
+RUN pip install anybadge "junitparser>=2.6"
+
+COPY testbadge.py /usr/local/bin/testbadge
+
+CMD ["/bin/bash"]
diff --git a/dockerfiles/testbadge/testbadge.py b/dockerfiles/testbadge/testbadge.py
new file mode 100755
index 0000000..993c4ff
--- /dev/null
+++ b/dockerfiles/testbadge/testbadge.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python3
+
+import argparse
+
+from anybadge import Badge
+from junitparser import JUnitXml
+
+
+def create_badge(report_path, badge_path):
+    report = JUnitXml.fromfile(report_path)
+    report.update_statistics()
+    total = report.tests - report.skipped
+    passed = total - report.errors - report.failures
+    percentage = 100 * passed / total
+    color = 'green' if passed == total else 'red'
+    badge = Badge(f'tests', f'{percentage:.1f}%', default_color=color)
+    badge.write_badge(badge_path)
+
+
+def main():
+    parser = argparse.ArgumentParser(description='Create a CI badge from a test report.')
+    parser.add_argument('report', metavar='XML', type=str, help='Path of input JUnit XML report file')
+    parser.add_argument('badge', metavar='SVG', type=str, help='Path of output SVG file')
+    args = parser.parse_args()
+    create_badge(args.report, args.badge)
+
+
+if __name__ == '__main__':
+    main()
-- 
GitLab