diff --git a/.buildkite/pipeline.py b/.buildkite/pipeline.py index d3018c75..5c2ac491 100644 --- a/.buildkite/pipeline.py +++ b/.buildkite/pipeline.py @@ -15,7 +15,7 @@ import sys from pathlib import Path -from buildkite_sdk import Pipeline, GroupStep +from buildkite_sdk import CommandStep, Pipeline, GroupStep sys.path.insert(0, str(Path(__file__).parent / "tools")) from qdb_pipeline import ( @@ -136,11 +136,13 @@ def generate_pipeline() -> Pipeline: pipeline = Pipeline() git_ref = get_git_ref() group_steps = {} + variants = [] for p in PLATFORMS: for bt in BUILD_TYPES: for py in PYTHON_VERSIONS: slug = p.slug(bt.lower(), f"py{py.replace('.', '')}") + variants.append(slug) # We want to use Release QuasarDB binaries when building Python API (debug and release) dependency_slug = p.slug("release") @@ -187,6 +189,12 @@ def generate_pipeline() -> Pipeline: for group, steps in group_steps.items(): group_step = GroupStep(group=group, steps=steps) pipeline.add_step(group_step) + + # Aggregate all test reports + step = load_template(STEPS_DIR / "_test_report.yml", **tvars) + step["depends_on"] = [f"build-{variant}" for variant in variants] + pipeline.add_step(CommandStep.from_dict(step)) + return pipeline diff --git a/.buildkite/steps/_build.yml b/.buildkite/steps/_build.yml index 12b3ea19..125db643 100644 --- a/.buildkite/steps/_build.yml +++ b/.buildkite/steps/_build.yml @@ -34,3 +34,8 @@ plugins: - "dist/doc.tar.gz" base_dir: "dist" promote: {} + - bureau14/qdb-test-report#master: + title: "Test report {slug}" + job: + variant: {slug} + junit_input_path: "tests/build/test/*.xml" diff --git a/.buildkite/steps/_test_report.yml b/.buildkite/steps/_test_report.yml new file mode 100644 index 00000000..d1082ed1 --- /dev/null +++ b/.buildkite/steps/_test_report.yml @@ -0,0 +1,18 @@ +agents: + queue: "default-debian-amd64" + +label: ":bar_chart: Aggregate test report" +key: "full-test-report" + +command: "true" + +allow_dependency_failure: true + +depends_on: + +plugins: + - bureau14/qdb-test-report#master: + title: "Full test report" + # Volume of tests is huge - 20k test * 48 variants = ~1M test results, over 150mb html report, we report only failed tests in this case + only_failures: true + aggregate: {}