From 35829760d5821310d62bc96931a74a0f267e7301 Mon Sep 17 00:00:00 2001 From: Christian Decker Date: Sun, 27 Aug 2023 15:52:52 +0200 Subject: [PATCH] ci: Add a server to track flakyness in pytest tests --- .github/workflows/ci.yaml | 1 + conftest.py | 60 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 conftest.py diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d043d1fe4dcd..a2a437084e8d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -15,6 +15,7 @@ env: # of a bit of compile time. RUST_PROFILE: release SLOW_MACHINE: 1 + CI_SERVER: "http://35.239.136.52:3170" jobs: prebuild: diff --git a/conftest.py b/conftest.py new file mode 100644 index 000000000000..12d671a0eec6 --- /dev/null +++ b/conftest.py @@ -0,0 +1,60 @@ +import pytest +import subprocess +import urllib3 +import os +import json +from time import time + +server = os.environ.get("CI_SERVER", None) + +github_sha = subprocess.check_output([ + "git", + "rev-parse", + "HEAD" +]).decode('ASCII').strip() + +github_ref_name = subprocess.check_output([ + "git", + "rev-parse", + "--abbrev-ref", + "HEAD" +]).decode('ASCII').strip() + +result = { + "github_sha": os.environ.get("GITHUB_SHA", github_sha), + "github_ref": os.environ.get("GITHUB_REF", None), + "github_ref_name": os.environ.get("GITHUB_REF_NAME", github_ref_name), +} + + +@pytest.hookimpl(hookwrapper=True) +def pytest_pyfunc_call(pyfuncitem): + global result + result = result.copy() + result['testname'] = pyfuncitem.name + result['start_time'] = int(time()) + outcome = yield + result['end_time'] = int(time()) + # outcome.excinfo may be None or a (cls, val, tb) tuple + + if outcome.excinfo is None: + result['outcome'] = "success" + else: + result['outcome'] = "fail" + + print(result) + + if not server: + return + + try: + urllib3.request( + method="POST", + url=f"{server}/hook/test", + body=json.dumps(result), + headers={ + "Content-Type": "application/json", + }, + ) + except Exception as e: + print(f"Could not report testrun: {e}")