mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-09-10 02:25:56 +00:00
Stabilize release preflight scheduling
This commit is contained in:
@@ -42,6 +42,14 @@ upgrade must recover those values from both split and `--key=value` service
|
||||
arguments and reproduce them in the generated systemd command without
|
||||
discarding existing explicit disk exclusions.
|
||||
|
||||
The accelerated exact-SHA release worker must preserve release-gate fidelity
|
||||
under its own resource envelope. Bounded frontend static checks and integration
|
||||
image preparation may overlap, but the full frontend test suite and the
|
||||
race-enabled backend release suite must run serially. Both suites saturate the
|
||||
dedicated worker when combined; concurrent execution can stretch otherwise
|
||||
passing monitoring tests into load-induced failures and must not be used as a
|
||||
release-latency optimization.
|
||||
|
||||
## Canonical Files
|
||||
|
||||
1. `internal/updates/`
|
||||
|
||||
@@ -135,11 +135,14 @@ phase frontend-build npm --prefix frontend-modern run build
|
||||
rm -rf internal/api/frontend-modern
|
||||
mkdir -p internal/api/frontend-modern
|
||||
cp -R frontend-modern/dist internal/api/frontend-modern/
|
||||
run_frontend_quality() {
|
||||
run_frontend_static_quality() {
|
||||
phase frontend-lint npm --prefix frontend-modern run lint
|
||||
phase frontend-headers npm --prefix frontend-modern run lint:headers
|
||||
phase frontend-duplication npm --prefix frontend-modern run lint:cpd
|
||||
phase frontend-types npm --prefix frontend-modern run type-check
|
||||
}
|
||||
|
||||
run_frontend_tests() {
|
||||
phase frontend-tests npm --prefix frontend-modern test
|
||||
}
|
||||
|
||||
@@ -163,12 +166,12 @@ run_integration_prep() {
|
||||
phase mock-github-image docker build --tag pulse-mock-github:test tests/integration/mock-github-server
|
||||
}
|
||||
|
||||
# These lanes have no output dependency on one another. Running them together
|
||||
# makes the critical path the slowest lane instead of their sum.
|
||||
# Static frontend checks and integration preparation are bounded enough to
|
||||
# overlap safely. Keep the full frontend and race-enabled backend test suites
|
||||
# serial: both saturate this worker, and concurrent execution can turn healthy
|
||||
# monitoring tests into load-induced release-gate failures.
|
||||
parallel_pids=()
|
||||
run_frontend_quality &
|
||||
parallel_pids+=("$!")
|
||||
run_backend &
|
||||
run_frontend_static_quality &
|
||||
parallel_pids+=("$!")
|
||||
run_integration_prep &
|
||||
parallel_pids+=("$!")
|
||||
@@ -185,6 +188,9 @@ while [ "$remaining" -gt 0 ]; do
|
||||
fi
|
||||
done
|
||||
|
||||
run_frontend_tests
|
||||
run_backend
|
||||
|
||||
PLAYWRIGHT_VERSION="$(node -p "require('./tests/integration/node_modules/@playwright/test/package.json').version")"
|
||||
PLAYWRIGHT_IMAGE="mcr.microsoft.com/playwright:v${PLAYWRIGHT_VERSION}-noble"
|
||||
|
||||
|
||||
@@ -217,6 +217,23 @@ class ReleasePreflightTest(unittest.TestCase):
|
||||
)
|
||||
self.assertIn("is not reachable from a fetched origin branch", runner)
|
||||
|
||||
def test_worker_serializes_resource_intensive_test_suites(self) -> None:
|
||||
worker = (ROOT / "scripts/release-preflight-worker.sh").read_text()
|
||||
scheduling_block = re.search(
|
||||
r"# Static frontend checks.*?run_backend\n",
|
||||
worker,
|
||||
flags=re.DOTALL,
|
||||
)
|
||||
self.assertIsNotNone(scheduling_block)
|
||||
block = scheduling_block.group(0)
|
||||
|
||||
self.assertIn("run_frontend_static_quality &", block)
|
||||
self.assertIn("run_integration_prep &", block)
|
||||
self.assertNotIn("run_frontend_tests &", block)
|
||||
self.assertNotIn("run_backend &", block)
|
||||
self.assertLess(block.index("done\n"), block.index("run_frontend_tests\n"))
|
||||
self.assertLess(block.index("run_frontend_tests\n"), block.index("run_backend\n"))
|
||||
|
||||
def test_api_shard_plan_is_deterministic_complete_and_disjoint(self) -> None:
|
||||
test_names = [
|
||||
f"TestReleaseCase{index:04d}"
|
||||
|
||||
Reference in New Issue
Block a user