From eb840459f5f52aec91f56ce5286d5a6b7e085cc4 Mon Sep 17 00:00:00 2001 From: Lucas Daniel <94806303+NoodleLDS@users.noreply.github.com> Date: Sat, 6 Jun 2026 12:00:46 -0300 Subject: [PATCH] ci: skip pytest smoke on documentation-only changes (#2768) * ci: skip pytest smoke on documentation-only changes Adding paths-ignore for **.md and docs/** so that PRs that touch only markdown files do not trigger the full pytest suite. Runner minutes are spent only when Python or config files change. Closes #2646. * ci: detect docs-only changes inside the job instead of paths-ignore Previously paths-ignore on the pull_request trigger caused the entire workflow to be skipped, which can leave required checks pending and block merging. Instead, keep the workflow always-triggered and detect docs-only changes inside python-tests with a git diff step; if every changed file is a .md or docs/ path, the step reports success without running pytest. The syntax jobs (python-syntax, node-syntax) are cheap enough to always run. Co-Authored-By: Claude Sonnet 4.6 --------- Co-authored-by: Claude Sonnet 4.6 --- .github/workflows/ci.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3978ef5f7..b75f96b96 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,10 +51,39 @@ jobs: continue-on-error: true steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 0 + + # Detect whether this PR only touches documentation files. + # If so, skip the expensive pytest run while still reporting a passing check. + - name: Check for docs-only changes + id: docs-check + run: | + if [ "${{ github.event_name }}" = "pull_request" ]; then + BASE="${{ github.event.pull_request.base.sha }}" + HEAD="${{ github.event.pull_request.head.sha }}" + else + BASE="${{ github.event.before }}" + HEAD="${{ github.sha }}" + fi + # List all changed files; if every file matches docs/markdown patterns, skip pytest. + changed=$(git diff --name-only "$BASE" "$HEAD" 2>/dev/null || git diff --name-only HEAD~1 HEAD) + non_docs=$(echo "$changed" | grep -Ev '^(docs/|.*\.md$|\.github/[^/]+\.md$)' || true) + if [ -z "$non_docs" ]; then + echo "docs_only=true" >> "$GITHUB_OUTPUT" + echo "Docs-only change detected — skipping pytest." + else + echo "docs_only=false" >> "$GITHUB_OUTPUT" + fi + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + if: steps.docs-check.outputs.docs_only != 'true' with: python-version: "3.11" cache: pip - run: pip install -r requirements.txt + if: steps.docs-check.outputs.docs_only != 'true' - run: mkdir -p data # sqlite DB lives at ./data/app.db + if: steps.docs-check.outputs.docs_only != 'true' - run: python -m pytest -q + if: steps.docs-check.outputs.docs_only != 'true'