From 937c883c416549d8ee592e4c418bb7fcff013498 Mon Sep 17 00:00:00 2001 From: RaresKeY <158580472+RaresKeY@users.noreply.github.com> Date: Wed, 12 Aug 2026 03:35:09 +0100 Subject: [PATCH] ci: make Python validation authoritative (#5940) Co-authored-by: Alexandre Teixeira <111787685+alteixeira20@users.noreply.github.com> --- .github/workflows/ci.yml | 7 ++--- tests/test_ci_authoritative_validation.py | 35 +++++++++++++++++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 tests/test_ci_authoritative_validation.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f7d3659e8..e42c1a5d0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,7 +2,7 @@ name: CI on: push: - branches: [main] + branches: [main, dev] pull_request: # Least privilege: none of the jobs write to the repo. @@ -103,10 +103,7 @@ jobs: python-tests: name: Python tests (pytest) runs-on: ubuntu-latest - # Informational for now: the suite has known flaky / environment-dependent - # failures (test isolation + embedding-model assertions). Tracked under the - # ROADMAP "fresh install smoke tests" item; make this required once green. - continue-on-error: true + # Make Python test validation authoritative for the configured scope. steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: diff --git a/tests/test_ci_authoritative_validation.py b/tests/test_ci_authoritative_validation.py new file mode 100644 index 000000000..6de26817d --- /dev/null +++ b/tests/test_ci_authoritative_validation.py @@ -0,0 +1,35 @@ +"""Regression coverage for authoritative Python CI validation.""" + +import re +from pathlib import Path + + +_WORKFLOW = ( + Path(__file__).resolve().parent.parent / ".github" / "workflows" / "ci.yml" +) + + +def _indented_block(text: str, heading: str, indent: int) -> str: + pattern = re.compile( + rf"(?ms)^{' ' * indent}{re.escape(heading)}:\n" + rf"(?P(?:(?:{' ' * (indent + 2)}.*|\s*)\n)*)" + ) + match = pattern.search(text) + assert match is not None, f"missing {heading!r} block" + return match.group(0) + + +def test_ci_runs_on_integrated_dev_pushes(): + workflow = _WORKFLOW.read_text() + push = _indented_block(workflow, "push", 2) + + assert re.search(r"(?m)^ branches:\s*\[main,\s*dev\]\s*$", push) + assert "paths-ignore:" not in push + + +def test_python_tests_are_authoritative(): + workflow = _WORKFLOW.read_text() + python_tests = _indented_block(workflow, "python-tests", 2) + + assert "python -m pytest -q" in python_tests + assert "continue-on-error:" not in python_tests