Skip to content

Split root Pipfile per test suite for true CI path-filter isolation - #199

Merged
diemol merged 4 commits into
mainfrom
ci-path-filters-per-suite
Jul 27, 2026
Merged

Split root Pipfile per test suite for true CI path-filter isolation#199
diemol merged 4 commits into
mainfrom
ci-path-filters-per-suite

Conversation

@diemol

@diemol diemol commented Jul 27, 2026

Copy link
Copy Markdown
Member

Summary

  • Follow-up to the path filters added in aecc573: those still listed the shared root Pipfile/Pipfile.lock (and best_practice/conftest.py) in every workflow's paths:, so any dependency bump or shared-fixture edit still triggered every workflow - not real per-directory isolation.
  • Gives each test suite its own Pipfile/Pipfile.lock (direct dependencies only, derived from each suite's actual import statements, not copied wholesale from the old root Pipfile) and, where fixtures were shared, its own conftest.py:
    • best_practice/desktop_web/, best_practice/mobile_native/ (android+ios), best_practice/mobile_web/ (vdc+rdc) - each gets a split-off conftest.py with only its own fixtures
    • examples/selenium/, examples/playwright/ - already had their own conftest.py, just get a Pipfile now
    • examples/robotframework/desktop_web/, examples/robotframework/native_mobile/ - no CI coverage for the latter either way, but it gets a minimal Pipfile so its existing pipenv run robot-android-us/robot-ios-us scripts keep working locally
  • Every workflow now sets working-directory: to its own suite's directory and its paths: filter is scoped to just that directory + the workflow file itself - no more cross-directory triggering.
  • python.yml is removed: its best-practice-desktop-us leg was already fully redundant with desktop_web.yml (both ran the identical script against the same directory), and its demo leg moves to a new selenium_demo.yml.
  • Root Pipfile/Pipfile.lock are deleted entirely - no dual-maintenance duplication between a root file and per-suite ones. requirements.txt/.gitpod.yml are untouched (confirmed to be a separate, independent mechanism used only by the Gitpod cloud environment, not by any GitHub Actions workflow).
  • sauceclient and sa11y are dropped - confirmed unused by any .py file, workflow, or script anywhere in the repo, so they simply don't appear in any of the new per-suite dependency lists.
  • Updated root README.md and best_practice/README.md for the new per-directory cd && pipenv install && pipenv run <script> workflow; also fixed a pre-existing best_practice/README.md bug (missing run in pipenv <script>, and script names that didn't match the real Pipfile, e.g. best-practice-mobile-web-us vs. the actual best-practice-mobile-web-vdc-us).

Test plan

  • All 5 workflow YAML files parse cleanly.
  • Every new suite's Pipfile.lock was generated via real pipenv lock (not hand-written), each with PIPENV_PIPFILE pinned explicitly so it resolved into the correct directory rather than the (now-deleted) root Pipfile.
  • pytest --collect-only passes cleanly for every pytest-based suite (best_practice/desktop_web, best_practice/mobile_native/{android,ios}, best_practice/mobile_web/{vdc,rdc}, examples/selenium, examples/playwright) using each suite's own new conftest.py.
  • Verified Robot Framework config/test paths (chrome_config.txt, Tests/, android/android_config.txt, etc.) still resolve correctly relative to each workflow's new working-directory.
  • Confirmed no leftover references to the deleted root Pipfile anywhere in workflows or docs.
  • Full Sauce-hosted runs weren't exercised for every suite (would require credentials/real device access for all of them) - collection-level verification only.

🤖 Generated with Claude Code

diemol and others added 4 commits July 27, 2026 23:37
The path filters added in aecc573 still listed the shared root Pipfile/
Pipfile.lock (and best_practice/conftest.py) in every workflow, so any
dependency bump or shared-fixture edit still triggered every workflow -
not the isolation intended. Fixes it by giving each suite its own
Pipfile/Pipfile.lock (direct deps only, built from actual imports) and,
where fixtures were shared, its own conftest.py:

- best_practice/{desktop_web,mobile_native,mobile_web}
- examples/{selenium,playwright}
- examples/robotframework/{desktop_web,native_mobile}

Workflows now use per-suite working-directory and paths scoped to just
their own directory. python.yml is removed (its best-practice-desktop-us
leg was already redundant with desktop_web.yml; its demo leg moves to
the new selenium_demo.yml). Root Pipfile/Pipfile.lock are removed;
requirements.txt/.gitpod.yml are untouched (separate, unrelated
mechanism). sauceclient/sa11y are dropped as unused by any suite.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
examples/gitpod/ and .gitpod.yml drove a separate, pipenv-independent
test path (pip install -r requirements.txt + pytest -n8 \$TEST_PATH)
that's no longer needed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Only consumer was .gitpod.yml, removed in the previous commit. Updated
examples/robotframework/desktop_web/README.md's install instructions,
which pointed at this file too (already broken pre-existing - the file
never actually lived in that directory), to use its Pipfile instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Follow-up to 6c644a9 - this edit was made but never staged, so it
didn't actually make it into that commit despite the commit message
saying otherwise.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@diemol
diemol merged commit 612cc7b into main Jul 27, 2026
5 of 7 checks passed
@diemol
diemol deleted the ci-path-filters-per-suite branch July 27, 2026 21:47
diemol added a commit that referenced this pull request Jul 27, 2026
Resolves the root Pipfile modify/delete conflict from #199's per-suite
Pipfile split: the root Pipfile is gone, and this branch's only real
delta (playwright-tests' --dist=loadfile flag) is ported into the new
examples/playwright/Pipfile instead. Verified the suite still passes
with GROUPING=module reuse working correctly post-merge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant