summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels De Graef <nielsdegraef@gmail.com>2021-09-30 18:00:31 +0200
committerNiels De Graef <nielsdegraef@gmail.com>2022-06-28 14:22:01 +0200
commit02f25f84f86db676a72d62885bd1feafbeb3b0cd (patch)
tree283a21d23a8386f049fdfb87bfcbb1881bfba71b
parentf21dc95081162f2a83fa4c9aefa1dc571c28f61e (diff)
downloadgcr-02f25f84f86db676a72d62885bd1feafbeb3b0cd.tar.gz
ci: Expose meson's Junit test results to gitlab
Meson has been generating Junit XML files of its test results since 0.55, so no need for us to maintain a custom script anymore.
-rw-r--r--.gitlab-ci.yml7
-rwxr-xr-x.gitlab-ci/meson-junit-report.py109
-rwxr-xr-x.gitlab-ci/run-tests.sh15
3 files changed, 3 insertions, 128 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 572a23e..1049863 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -14,17 +14,16 @@ fedora:Werror:
- dnf builddep -y gcr
script:
- meson _build -Dwerror=true -Dc_args=-Wno-error=deprecated-declarations
- - ninja -C _build
- - dbus-run-session -- bash +x ./.gitlab-ci/run-tests.sh
+ - meson compile -C _build
+ - dbus-run-session -- meson test -C _build
artifacts:
reports:
- junit: "_build/${CI_JOB_NAME}-report.xml"
+ junit: "_build/meson-logs/testlog.junit.xml"
name: "gcr-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
when: always
paths:
- "_build/config.h"
- "_build/meson-logs"
- - "_build/${CI_JOB_NAME}-report.xml"
fedora:asan:
image: fedora:latest
diff --git a/.gitlab-ci/meson-junit-report.py b/.gitlab-ci/meson-junit-report.py
deleted file mode 100755
index 248ef6e..0000000
--- a/.gitlab-ci/meson-junit-report.py
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/env python3
-
-# Turns a Meson testlog.json file into a JUnit XML report
-#
-# Copyright 2019 GNOME Foundation
-#
-# SPDX-License-Identifier: LGPL-2.1-or-later
-#
-# Original author: Emmanuele Bassi
-
-import argparse
-import datetime
-import json
-import os
-import sys
-import xml.etree.ElementTree as ET
-
-aparser = argparse.ArgumentParser(description='Turns a Meson test log into a JUnit report')
-aparser.add_argument('--project-name', metavar='NAME',
- help='The project name',
- default='unknown')
-aparser.add_argument('--job-id', metavar='ID',
- help='The job ID for the report',
- default='Unknown')
-aparser.add_argument('--branch', metavar='NAME',
- help='Branch of the project being tested',
- default='master')
-aparser.add_argument('--output', metavar='FILE',
- help='The output file, stdout by default',
- type=argparse.FileType('w', encoding='UTF-8'),
- default=sys.stdout)
-aparser.add_argument('infile', metavar='FILE',
- help='The input testlog.json, stdin by default',
- type=argparse.FileType('r', encoding='UTF-8'),
- default=sys.stdin)
-
-args = aparser.parse_args()
-
-outfile = args.output
-
-testsuites = ET.Element('testsuites')
-testsuites.set('id', '{}/{}'.format(args.job_id, args.branch))
-testsuites.set('package', args.project_name)
-testsuites.set('timestamp', datetime.datetime.utcnow().isoformat(timespec='minutes'))
-
-suites = {}
-for line in args.infile:
- data = json.loads(line)
- (full_suite, unit_name) = data['name'].split(' / ')
- (project_name, suite_name) = full_suite.split(':')
-
- duration = data['duration']
- return_code = data['returncode']
- log = data['stdout']
-
- unit = {
- 'suite': suite_name,
- 'name': unit_name,
- 'duration': duration,
- 'returncode': return_code,
- 'stdout': log,
- }
-
- units = suites.setdefault(suite_name, [])
- units.append(unit)
-
-for name, units in suites.items():
- print('Processing suite {} (units: {})'.format(name, len(units)))
-
- def if_failed(unit):
- if unit['returncode'] != 0:
- return True
- return False
-
- def if_succeded(unit):
- if unit['returncode'] == 0:
- return True
- return False
-
- successes = list(filter(if_succeded, units))
- failures = list(filter(if_failed, units))
- print(' - {}: {} pass, {} fail'.format(name, len(successes), len(failures)))
-
- testsuite = ET.SubElement(testsuites, 'testsuite')
- testsuite.set('name', '{}/{}'.format(args.project_name, name))
- testsuite.set('tests', str(len(units)))
- testsuite.set('errors', str(len(failures)))
- testsuite.set('failures', str(len(failures)))
-
- for unit in successes:
- testcase = ET.SubElement(testsuite, 'testcase')
- testcase.set('classname', '{}/{}'.format(args.project_name, unit['suite']))
- testcase.set('name', unit['name'])
- testcase.set('time', str(unit['duration']))
-
- for unit in failures:
- testcase = ET.SubElement(testsuite, 'testcase')
- testcase.set('classname', '{}/{}'.format(args.project_name, unit['suite']))
- testcase.set('name', unit['name'])
- testcase.set('time', str(unit['duration']))
-
- failure = ET.SubElement(testcase, 'failure')
- failure.set('classname', '{}/{}'.format(args.project_name, unit['suite']))
- failure.set('name', unit['name'])
- failure.set('type', 'error')
- failure.text = unit['stdout']
-
-output = ET.tostring(testsuites, encoding='unicode')
-outfile.write(output)
diff --git a/.gitlab-ci/run-tests.sh b/.gitlab-ci/run-tests.sh
deleted file mode 100755
index f6b7dba..0000000
--- a/.gitlab-ci/run-tests.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-set +e
-
-meson test -C _build
-
-exit_code=$?
-
-python3 .gitlab-ci/meson-junit-report.py \
- --project-name=gcr \
- --job-id "${CI_JOB_NAME}" \
- --output "_build/${CI_JOB_NAME}-report.xml" \
- _build/meson-logs/testlog.json
-
-exit $exit_code