Run each Python project's checks as parallel steps - #679
Merged
Conversation
mypy, pyright and pytest each had a job of their own, per project, so the same checkout and cache restore was paid six times to run about 12s of checks. Move each project's three checks into one job of parallel steps, as was done for the root checks. The two projects keep a job each rather than sharing one. They are checked independently: aoc-main's checks do not need solvers/python, and solvers/python's checks do not need aoc-main. Sharing a job would also mean sharing a uv cache entry, so aoc-main would miss cache whenever solvers/python's lockfile changed, and a broken sync in one project would block the other's type checks. With the checks consolidated, ci-python-project holds nothing but a parameter that no longer varies anything, so it is removed along with the mise-uv-task wrapper it was the last caller of. Its remaining jobs move up to ci.yaml: python-run.yaml is called directly, and the uv-cache job becomes a top level job named for its runner like its aoc-main siblings. The conditionals that skipped both of those for aoc-main go with it.
Contributor
There was a problem hiding this comment.
🟢 Approval recommended
The workflow refactor cleanly removes the unused reusable workflow and updates all references while preserving the intended cache separation and job dependencies.
Pull request overview
This PR refactors the GitHub Actions CI configuration to reduce duplicated setup work by consolidating each Python project’s checks (mypy, pyright, pytest) into a single job that runs them as parallel steps, while keeping aoc-main and solvers/python isolated for caching and failure containment.
Changes:
- Replaces the per-project
ci-python-projectreusable workflow with direct calls tochecks-python.yamlplus a dedicatedpython-run.yamljob for the Python solvers. - Adds a dedicated uv cache prepare job for
solvers/pythonon Ubuntu to avoid cache key coupling withaoc-main. - Updates the top-level “alls-green” aggregator to depend on the new job structure.
File summaries
| File | Description |
|---|---|
| .github/workflows/ci.yaml | Rewires CI job graph to use per-project check workflows + separate solver run, and adds a dedicated uv cache job for solvers/python. |
| .github/workflows/ci-python-project.yaml | Removes the now-unnecessary reusable workflow that previously wrapped cache + per-check jobs. |
| .github/workflows/checks-python.yaml | Changes from “single task runner” to a consolidated per-project checks workflow running mypy/pyright/pytest as parallel steps. |
Review details
- Files reviewed: 3/3 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
mypy, pyright and pytest each had a job of their own, per project, so the same checkout and cache restore was paid six times to run about 12s of checks. Move each project's three checks into one job of parallel steps, as was done for the root checks.
The two projects keep a job each rather than sharing one. They are checked independently: aoc-main's checks do not need solvers/python, and solvers/python's checks do not need aoc-main. Sharing a job would also mean sharing a uv cache entry, so aoc-main would miss cache whenever solvers/python's lockfile changed, and a broken sync in one project would block the other's type checks.
With the checks consolidated, ci-python-project holds nothing but a parameter that no longer varies anything, so it is removed along with the mise-uv-task wrapper it was the last caller of. Its remaining jobs move up to ci.yaml: python-run.yaml is called directly, and the uv-cache job becomes a top level job named for its runner like its aoc-main siblings. The conditionals that skipped both of those for aoc-main go with it.