feat(pressure reconciler): Support no planner integration#759
Merged
Conversation
Base automatically changed from
chore/prepare-tests-for-legacy-removal-ISD-4104
to
main
March 20, 2026 11:43
aa7d274 to
ddd61be
Compare
Contributor
There was a problem hiding this comment.
Pull request overview
This PR extends the pressure reconciler to operate without a planner integration (using a configured minimum runner count as fallback/static pressure), and refactors the HTTP server endpoints to use RunnerManager directly.
Changes:
- Add
RunnerInfo+RunnerManager.get_runner_info()for aggregated runner status reporting. - Allow
PressureReconcilerto be built/run withplanner_client=Noneand update unit tests accordingly. - Refactor
/runner/checkand/runner/flushHTTP endpoints to callRunnerManagerinstead ofRunnerScaler; bump package version and update changelog.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| github-runner-manager/src/github_runner_manager/manager/pressure_reconciler.py | Makes planner optional, adds no-planner branch in create loop, and exposes build_runner_manager. |
| github-runner-manager/src/github_runner_manager/manager/runner_manager.py | Introduces RunnerInfo and get_runner_info() aggregation on RunnerManager. |
| github-runner-manager/src/github_runner_manager/http_server.py | Switches HTTP endpoints from RunnerScaler to RunnerManager and adjusts response serialization. |
| github-runner-manager/src/github_runner_manager/cli.py | Builds a RunnerManager for the HTTP server and wires pressure reconciler threads conditionally. |
| github-runner-manager/tests/unit/test_http_server.py | Updates tests to mock/use RunnerManager directly. |
| github-runner-manager/tests/unit/manager/test_runner_manager.py | Adds unit tests for RunnerManager.get_runner_info(). |
| github-runner-manager/tests/unit/manager/test_pressure_reconciler.py | Adds tests for no-planner behavior and build function behavior. |
| github-runner-manager/pyproject.toml | Bumps application version to 0.16.0. |
| docs/changelog.md | Documents no-planner support and HTTP endpoint refactor. |
github-runner-manager/src/github_runner_manager/manager/pressure_reconciler.py
Show resolved
Hide resolved
github-runner-manager/src/github_runner_manager/manager/pressure_reconciler.py
Outdated
Show resolved
Hide resolved
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (1)
github-runner-manager/src/github_runner_manager/cli.py:106
- The
main()docstring still says "Start the reconcile service", but the CLI now always starts the pressure reconciler loops (and no longer supports the legacy reconcile service). Updating the docstring to reflect the new behavior will prevent confusion for future maintainers.
"""Start the reconcile service.
github-runner-manager/src/github_runner_manager/manager/pressure_reconciler.py
Show resolved
Hide resolved
…ner-ISD-4104' into feat/pressure-reconciler-no-planner-ISD-4104
cbartz
commented
Mar 23, 2026
github-runner-manager/src/github_runner_manager/manager/runner_manager.py
Show resolved
Hide resolved
github-runner-manager/src/github_runner_manager/manager/pressure_reconciler.py
Show resolved
Hide resolved
yanksyoon
approved these changes
Mar 24, 2026
Member
yanksyoon
left a comment
There was a problem hiding this comment.
Nice! Thanks for the changes :)
yhaliaw
approved these changes
Mar 24, 2026
The _wait_for_runner_ready and _wait_for_no_runners helpers call juju.run() in a retry loop but don't catch TimeoutError. When the unit is busy (e.g. spawning a VM after config change), the action times out and jubilant raises TimeoutError, killing the test immediately instead of retrying on the next iteration.
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.
Applicable spec: ISD-244
Overview
Support using no planner in the pressure reconciler.
Rationale
Currently we need one planner deployment per Github organisation. For some organisations, that only require a fixed pool of runners, a dedicated planner deployment is overkill. As we are going to drop the legacy reconcile in a future PR, we need to let the pressure reconciler support no planner integration.
Checklist
urgent,trivial,complex).github-runner-manager/pyproject.toml.