diff --git a/.github/scripts/backend-tests-workflow-contract_test.py b/.github/scripts/backend-tests-workflow-contract_test.py index 396abccc9a..8ca6aa34c0 100644 --- a/.github/scripts/backend-tests-workflow-contract_test.py +++ b/.github/scripts/backend-tests-workflow-contract_test.py @@ -51,6 +51,11 @@ class BackendTestsWorkflowContractTest(unittest.TestCase): self.assertIn('"postgres-18:${POSTGRES_18_RESULT}"', self.workflow) self.assertIn("TestPreviousStableUpgrade", self.workflow) + def test_windows_job_has_headroom_for_hosted_runner_variance(self) -> None: + _, marker, windows_job = self.workflow.partition(" test-windows:\n") + self.assertTrue(marker) + self.assertIn("timeout-minutes: 40", windows_job) + def test_base_image_mirrors_postgres_18_at_the_same_digest(self) -> None: self.assertIn("POSTGRES_18_DIGEST: " + POSTGRES_18_DIGEST, self.base_image_workflow) self.assertIn("POSTGRES_18_SOURCE: docker.io/library/postgres:18@" + POSTGRES_18_DIGEST, self.base_image_workflow) diff --git a/.github/workflows/backend-tests.yml b/.github/workflows/backend-tests.yml index 6898067f99..9f3d8f8f14 100644 --- a/.github/workflows/backend-tests.yml +++ b/.github/workflows/backend-tests.yml @@ -694,9 +694,10 @@ jobs: needs: changes if: needs.changes.outputs.run == 'true' runs-on: windows-latest - # The race-sensitive Windows package suite can approach 20 minutes on a - # busy hosted runner; keep the cap finite while allowing runner variance. - timeout-minutes: 30 + # Dependency hydration, build, vet, and the race-sensitive package suite + # can consume 30 minutes on a cold hosted runner. Keep the cap finite while + # leaving the final targeted regression checks time to run. + timeout-minutes: 40 # Least-privilege: this job only reads source and runs tests, no PR/issue # writes or release operations. Flagged by CodeQL workflow audit + matching # CodeRabbit nitpick.