Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/build-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,10 @@ jobs:
run: |
chmod +x scripts/test-integration.sh
uv run ./scripts/test-integration.sh
timeout-minutes: 30
# Run 39834866538 timed out at 30m with workers still passing at 91%.
# 30 / 0.91 projects roughly 33m; 60m adds setup/tail headroom,
# not a completion guarantee. Keep selection and failure gates intact.
timeout-minutes: 60

# PHASE 3: RELEASE VALIDATION (tag/schedule/dispatch only)
- name: Prepare isolated release-validation environment
Expand Down
10 changes: 7 additions & 3 deletions docs/src/content/docs/contributing/integration-testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -521,9 +521,13 @@ The Linux x64 and macOS Apple Silicon full integration steps have 120-minute
limits and keep `not live` selection with `-n 4 --dist loadgroup` for HOME-mutating
test grouping. Previous 60-minute limits stopped progressing workers at 78% and
77%, respectively; the budgets allow setup and tail headroom without excluding
tests. Linux ARM keeps 60 minutes, Windows 20, and the focused Intel step 30.
Failures and timeouts still block release publication; a larger budget is not
evidence that a failed assertion is fixed.
tests. Linux ARM keeps 60 minutes and Windows 20. The focused Intel step has
60 minutes: its prior 30-minute limit stopped passing workers at 91%.
The rough `30 / 0.91` projection is 33 minutes; 60 adds setup/tail headroom,
not a completion guarantee.
Its `lifecycle_smoke and not live` selection and four `loadgroup` workers are
unchanged. Failures and timeouts still block release publication; a larger
budget is not evidence that a failed assertion is fixed.

The existing unprivileged `PR Binary Smoke (Linux)` job also runs
`tests/integration/test_audit_workspace_identity_lifecycle.py` against its built
Expand Down
20 changes: 19 additions & 1 deletion tests/unit/test_platform_contract_workflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ def _assert_intel_focused_integration(workflow: dict) -> None:
)
assert step["env"].get("PYTEST_MARK_EXPR") == INTEL_FOCUSED_MARK_EXPRESSION
assert step["env"].get("PYTEST_EXTRA_ARGS") == NON_LIVE_UNIX_PYTEST_ARGS
assert step.get("timeout-minutes") == 30
assert step.get("timeout-minutes") == 60
assert_exact_command(
shell_commands(step),
["uv", "run", "./scripts/test-integration.sh"],
Expand Down Expand Up @@ -293,6 +293,24 @@ def test_intel_non_live_corpus_mutation_is_rejected() -> None:
_assert_intel_focused_integration(workflow)


@pytest.mark.parametrize("timeout_minutes", (None, 30, 61))
def test_intel_missing_old_or_oversized_timeout_mutation_is_rejected(
timeout_minutes: int | None,
) -> None:
"""Intel cannot lose its bound or regress to the exhausted 30-minute limit."""
workflow = deepcopy(_workflow())
step = workflow_step(
workflow_job(workflow, "build-and-validate-macos-intel"),
INTEL_FOCUSED_INTEGRATION_STEP,
)
del step["timeout-minutes"]
if timeout_minutes is not None:
step["timeout-minutes"] = timeout_minutes

with pytest.raises(AssertionError):
_assert_intel_focused_integration(workflow)


def test_arm_focused_subset_mutation_is_rejected() -> None:
"""ARM remains the broad non-live macOS release authority."""
workflow = deepcopy(_workflow())
Expand Down
Loading