Repository navigation
CI runs the PyAthena suite for pull requests that change no file it uses #911
Description
Use case
The Test workflow skips a pull request that changes only docs/** or **.md through paths-ignore. Any other ready pull request always runs the PyAthena suite (the test job in .github/workflows/test.yaml) against AWS, even when it changes no file the suite uses.
Since 2026-06-01, five pull requests merged into master changed only such files:
- Run benchmark jobs on a fleet of identical hosts #823, Count initialization row validation as API-heavy fleet work #824, Allow Graviton benchmark hosts with an architecture parameter #827: only
benchmarks/(the benchmark harness, which has its ownbenchmarks.yamlworkflow) - Add NOTICE acknowledging PyHive's influence #802: only
NOTICE - Update gh-action-pypi-publish to v1.14.2 for metadata 2.5 support #765: only
.github/workflows/release.yaml
Each Ready run, and each later push to a Ready pull request, spent an Athena run on the PyAthena suite without testing anything those pull requests changed.
Proposed change
After #906, the changes job selects the SQLAlchemy and Spark tests with dorny/paths-filter. Add a third filter, pyathena, as an allowlist of the files the PyAthena suite depends on:
- the existing
sharedfiles:.github/workflows/test.yaml,.github/workflows/test-suite.yaml,justfile,pyproject.toml(including the tox configuration),uv.lock pyathena/**,tests/**,setup.cfg
Run the test job only when that output is true. Every path that sqla or spark selects is also in this list, so the SQLAlchemy and Spark tests are never selected without the PyAthena suite. Schedule, dispatch, and Release runs keep running every suite, as the other outputs already do.
Keep the trigger's paths-ignore as it is, rather than switching the trigger to a paths: allowlist. The lint job in the same workflow runs just lint over the whole repository: ruff and mypy, license headers, and cfn-lint for cloudformation/. It must keep running for pull requests that change only benchmarks/, scripts/, or cloudformation/.
A file missing from the allowlist would skip the suite for a pull request that needs it. The weekly scheduled run and the Release workflow still run every suite, so such a miss surfaces there, the same as for the SQLAlchemy and Spark selection.
Apply the same change to the 3.x branch afterwards, whose workflow matches master's after the #906 backport (#910).
Validation plan (if implementing)
- Extend the local simulation used for ci: run SQLAlchemy and Spark tests when shared core modules change #906 with a
pyathenacolumn. It loads thefiltersblock and matches with picomatchdot: true, as the action does.pyathena/**,tests/**,setup.cfg, and the shared files select the suite.benchmarks/**,scripts/**,cloudformation/**,NOTICE,LICENSE, and.github/workflows/release.yamldo not.- Every path selected by
sqlaorsparkis also selected bypyathena.
- Replay the changed files of the master pull requests merged since 2026-06-01. Only Update gh-action-pypi-publish to v1.14.2 for metadata 2.5 support #765, Add NOTICE acknowledging PyHive's influence #802, Run benchmark jobs on a fleet of identical hosts #823, Count initialization row validation as API-heavy fleet work #824, and Allow Graviton benchmark hosts with an architecture parameter #827 should newly skip the suite.
- On the implementing pull request (which changes
test.yaml, so all suites run), check thechangeslog forpyathena = trueand thattestruns.
Activity
laughingman7743 commentedon Oct 1, 2026
Done on master by #913 (merged as 7e8616f): the
changesjob now has apyathenaoutput, and thetestjob runs only when it is true. The 3.x backport is #915, which applies #913's merge commit without changes and is going through review and CI.