Skip to content

MPT-25021 Keep the E2E step on tests/e2e and raise the E2E job timeout to 180 minutes - #427

Merged
jentyk merged 1 commit into
mainfrom
bugfix/MPT-25021/e2e-suite-on-main-never-completes-every-push-run-hits-90-minute-job-timeout
Sep 17, 2026
Merged

jentyk merged 1 commit into
mainfrom
bugfix/MPT-25021/e2e-suite-on-main-never-completes-every-push-run-hits-90-minute-job-timeout

Conversation

@jentyk

@jentyk jentyk commented Sep 16, 2026 •

Copy link
Copy Markdown
Member

🤖 AI-generated PR — Please review carefully.

What

Two CI fixes for MPT-25021, where the E2E step on main has hit the 90-minute job timeout on every push and cron run since 2026-06-25.

  • make e2e always passes the suite path. The target used $(if $(args),$(args), tests/e2e), so whenever CI passed Report Portal options through args the tests/e2e path was dropped and pytest fell back to testpaths = "tests". The E2E step therefore re-ran the 2310 unit tests, with coverage, after the e2e suite (June launches show 3613 items for that reason). The target now runs tests/e2e (or path=... for a subset) plus args, and adds --no-cov so an e2e run does not overwrite the unit coverage.xml that SonarCloud reads.
  • E2E job timeout raised from 90 to 180 minutes in push-release-branch.yml, cron-main-e2e.yml and release.yml.
  • Docs: docs/e2e_tests.md and docs/testing.md document the new path/args split.

Why 180

The whole suite was run locally against TEST on 2026-09-16 in CI order (-p no:randomly, no Report Portal): 1h52m wall for 1324 tests, 1187 passed, 33 skipped, 104 setup errors.

Piece Minutes Basis
Fixed overhead (checkout, build, check-all) 3 step times of run 34338053536
Full e2e suite, local run 112 wall time 13:46 to 15:38 UTC
Helpdesk tests that errored at setup (102, see below) at their June pace ~4 June launch #267
Clean run on a day like today ~120
Scaled to the slowest day observed (first 656 tests took 86 min in launch #329 vs 70 locally, x1.23) ~146

The heavy areas today: catalog/product 32 min (the 16 term-variant tests alone are 30 min, up to 159 s each), program/program 19.5 min (120 tests, ~1 s each in June, ~10 s now), accounts/accounts_users 13 min (unchanged), commerce/asset 7 min and commerce/subscription 6.5 min (both roughly doubled). The 20 streaming tests, which no CI launch had ever reached, take 75 s in total.

150 would have left about 4 minutes on the slowest observed day. 180 leaves ~34 minutes there and ~60 on a day like today, while staying bounded; a per-test pytest-timeout is the right follow-up for genuine hangs and is not part of this PR.

Found on the way: 102 helpdesk tests (chats, cases, queues) now fail at setup with 400 longDescription: Property is required, so the TEST API has started requiring that field on case creation. That is the block of 107 failures visible in Report Portal launch #333 and needs its own ticket.

Why not more

The latency itself is on the TEST environment (api.s1.show) and is being escalated separately. The concurrency guard and the Sonar-before-E2E move belong to MPT-25022 (#420), which touches the same workflow file and will need a small rebase after this merges.

Testing

  • make -n e2e ... dry runs confirm the rendered pytest command for the CI invocation, path=tests/e2e/catalog, and the bare target.
  • pytest tests/e2e --collect-only --no-cov collects 1324 tests and writes no coverage.xml.
  • ruff format --check, ruff check, flake8, mypy, uv lock --check and the 2858 unit tests pass locally via uv run (Docker make check-all could not build here: the Docker disk is full). Workflow YAML parses; pre-commit check-yaml passed on commit.
  • The real proof is the first push run on main after merge finishing an E2E launch in Report Portal.

🤖 Generated with Claude Code

Closes MPT-25021

  • Update make e2e to use tests/e2e by default.
  • Support targeted runs with path=....
  • Pass additional pytest options through args.
  • Disable coverage with --no-cov during E2E runs.
  • Increase E2E workflow timeouts from 90 to 180 minutes.
  • Document the updated E2E commands and options.

@jentyk
jentyk requested a review from a team as a code owner September 16, 2026 12:35
@github-actions

github-actions Bot commented Sep 16, 2026 •

Copy link
Copy Markdown

✅ Found Jira issue key in the title: MPT-25021

Generated by 🚫 dangerJS against 38eaa72

@coderabbitai

coderabbitai Bot commented Sep 16, 2026 •

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Essentials

Run ID: 6e21f490-5c79-447a-a513-5087b1b7cb41

📥 Commits

Reviewing files that changed from the base of the PR and between e28a3a6 and 38eaa72.

📒 Files selected for processing (6)
  • .github/workflows/cron-main-e2e.yml
  • .github/workflows/push-release-branch.yml
  • .github/workflows/release.yml
  • docs/e2e_tests.md
  • docs/testing.md
  • make/repo.mk
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • softwareone-platform/mpt-extension-skills (manual)

Included review availability: 3 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 5 reviews per hour.

📜 Recent review details
⏰ Context from checks skipped due to timeout. (1)
  • GitHub Check: build
🧰 Additional context used
📓 Path-based instructions (7)
Review documentation changes against `docs/documentation.md` and the linked repository's `standards/documentation.md`.

⚙️ CodeRabbit configuration file

Files:

  • docs/testing.md
  • docs/e2e_tests.md
Review changes in `make/` against `docs/contributing.md` and the linked repository's `standards/makefiles.md`.

⚙️ CodeRabbit configuration file

Files:

  • make/repo.mk
For each subsequent commit in this PR, explicitly verify if previous review comments have been resolved

⚙️ CodeRabbit configuration file

Files:

  • docs/testing.md
  • make/repo.mk
  • docs/e2e_tests.md
Topic-specific documentation must live in the matching file under [`docs/`](.).

📄 CodeRabbit inference engine (docs/documentation.md)

Files:

  • docs/testing.md
  • docs/e2e_tests.md
When applicable, read the repository documentation in this order: `docs/e2e_tests.md` — end-to-end test setup and execution Put topic-specific documentation under `docs/` instead of expanding `README.md`.

📄 CodeRabbit inference engine (AGENTS.md)

Files:

  • docs/e2e_tests.md
When applicable, read the repository documentation in this order: `docs/testing.md` — repository-specific testing strategy and command mapping Put topic-specific documentation under `docs/` instead of expanding `README.md`.

📄 CodeRabbit inference engine (AGENTS.md)

Files:

  • docs/testing.md
When repository behavior changes, update the narrowest relevant document under `docs/`

📄 CodeRabbit inference engine (docs/contributing.md)

Files:

  • docs/testing.md
  • docs/e2e_tests.md
🔇 Additional comments (6)
make/repo.mk (1)

3-3: LGTM!

docs/e2e_tests.md (1)

40-42: LGTM!

Also applies to: 45-48

docs/testing.md (1)

24-25: LGTM!

.github/workflows/cron-main-e2e.yml (1)

10-10: LGTM!

.github/workflows/push-release-branch.yml (1)

16-16: LGTM!

.github/workflows/release.yml (1)

43-43: LGTM!


📝 Walkthrough

Walkthrough

The PR updates the E2E Make target and documentation. It separates test paths from pytest options, disables E2E coverage output, and increases three workflow job timeouts from 90 to 180 minutes.

Changes

E2E execution

Layer / File(s) Summary
E2E command contract
make/repo.mk, docs/e2e_tests.md, docs/testing.md
The e2e target defaults to tests/e2e, accepts subsets through path, passes args to pytest, and uses --no-cov. Documentation reflects the updated commands.
E2E workflow timeout configuration
.github/workflows/cron-main-e2e.yml, .github/workflows/push-release-branch.yml, .github/workflows/release.yml
The affected build and release job timeouts increase from 90 to 180 minutes.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 38eaa

The E2E execution and timeout changes introduce no identified merge-blocking risk.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Documentation Up To Date ✅ Passed The PR changes the make e2e behavior and E2E test workflow. It updates docs/e2e_tests.md with the path, args, and --no-cov behavior, and updates docs/testing.md with the correct E2E comman…

Comment @coderabbitai help to get the list of available commands.

@jentyk
jentyk force-pushed the bugfix/MPT-25021/e2e-suite-on-main-never-completes-every-push-run-hits-90-minute-job-timeout branch from d6eda08 to e28a3a6 Compare September 16, 2026 13:23
@jentyk jentyk changed the title MPT-25021 Keep the E2E step on tests/e2e and raise the E2E job timeout to 150 minutes MPT-25021 Keep the E2E step on tests/e2e and raise the E2E job timeout to 180 minutes Sep 16, 2026
@jentyk
jentyk marked this pull request as draft September 16, 2026 14:13
@jentyk
jentyk marked this pull request as ready for review September 17, 2026 08:10
`make e2e` dropped the `tests/e2e` path whenever `args` carried pytest
options, so the CI step fell back to `testpaths = "tests"` and re-ran the
2310 unit tests, with coverage, after the e2e suite. The target now always
passes the suite path (`path` overrides it) and runs with `--no-cov`, so
the unit `coverage.xml` that SonarCloud reads is left intact.

The e2e suite has exceeded the 90-minute job timeout on every `main` push
and cron run since 2026-06-25 because of TEST-environment latency on the
term-variants and assets endpoints, so no launch has finished since.
Report Portal puts the full suite at 103 to 120 minutes today, with the
first half swinging by 17 minutes between launches. Raise the timeout on
the push, cron and release workflows to 180 minutes so the suite can
complete again with headroom while the latency is escalated.

Refs: MPT-25021

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@jentyk
jentyk force-pushed the bugfix/MPT-25021/e2e-suite-on-main-never-completes-every-push-run-hits-90-minute-job-timeout branch from e28a3a6 to 38eaa72 Compare September 17, 2026 08:37
@sonarqubecloud

Copy link
Copy Markdown

@jentyk
jentyk merged commit bd0ec12 into main Sep 17, 2026
6 checks passed
@jentyk
jentyk deleted the bugfix/MPT-25021/e2e-suite-on-main-never-completes-every-push-run-hits-90-minute-job-timeout branch September 17, 2026 08:43
jentyk added a commit that referenced this pull request Sep 17, 2026
Pushes to main and release/** run an E2E step that takes hours, but the
workflow had no concurrency guard. Every merge started another run while
the previous one was still going, so several E2E suites executed at once
against the shared TEST environment.

Put every E2E entry point in one concurrency group with
cancel-in-progress, so only one suite is ever in flight. The group name
is the same literal in push-release-branch.yml and cron-main-e2e.yml
because the constraint is the TEST environment rather than the branch: a
merge to main, a push to a release branch and the twice-weekly scheduled
run all contend for the same resource.

Cancelling a run that is already hours in is safe here. Over the last 61
active days the final push to main had at least 180 minutes of clear
runway on 59 of them, usually overnight, so each working day still ends
with one completed suite on that day's tip, and the runs that get
cancelled are on commits that were superseded anyway. Release branches
see three pushes in five months.

Move the SonarCloud scan ahead of the E2E step. Until #427 raised the
job timeout, every push run on main reached it while still inside E2E,
so the scan that followed was reported as skipped and main was never
scanned - only pull requests were. Running the scan first makes it
independent of how long E2E takes.

Refs MPT-25022.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
jentyk added a commit that referenced this pull request Sep 17, 2026
Pushes to main and release/** run an E2E step that takes hours, but the
workflow had no concurrency guard. Every merge started another run while
the previous one was still going, so several E2E suites executed at once
against the shared TEST environment.

Split push-release-branch.yml into a validation job and an E2E job, and
put the concurrency group on the E2E job alone. The group name is the
same literal there and in cron-main-e2e.yml, because the contended
resource is the TEST environment rather than the branch: a merge to
main, a push to a release branch and the twice-weekly scheduled run all
want the same deployment, so one E2E cancels another wherever it came
from.

Scoping the group to the E2E job is what keeps make check-all and the
SonarCloud scan out of it. Held at workflow level, the shared group let
a scheduled or dispatched E2E run cancel a push run mid-validation, and
the cancelling workflow repeats neither - main would have lost the lint,
unit-test and scan signal it is the only place to get. The validation
job carries no group at all, so nothing cancels it; E2E still waits on
it through needs, the same ordering the single job had.

Cancelling a running suite is safe here. Over the last 61 active days
the final push to main had at least 180 minutes of clear runway on 59 of
them, usually overnight, so each working day still ends with one
completed suite on that day's tip, and the runs that get cancelled are
on commits that were superseded anyway. Release branches see three
pushes in five months.

The SonarCloud scan also moves ahead of E2E within the validation job.
Until #427 raised the job timeout, every push run on main reached it
while still inside E2E, so the scan that followed was reported as
skipped and main was never scanned - only pull requests were.

release.yml can still run the suite outside this group; isolating it
needs its own job there so serialization never covers the irreversible
publish steps, tracked in MPT-25395.

Refs MPT-25022.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
jentyk added a commit that referenced this pull request Sep 18, 2026
Pushes to main and release/** run an E2E step that takes hours, but the
workflow had no concurrency guard. Every merge started another run while
the previous one was still going, so several E2E suites executed at once
against the shared TEST environment.

Split push-release-branch.yml into a validation job and an E2E job, and
put the concurrency group on the E2E job alone. The group name is the
same literal there and in cron-main-e2e.yml, because the contended
resource is the TEST environment rather than the branch: a merge to
main, a push to a release branch and the twice-weekly scheduled run all
want the same deployment, so one E2E cancels another wherever it came
from.

Scoping the group to the E2E job is what keeps make check-all and the
SonarCloud scan out of it. Held at workflow level, the shared group let
a scheduled or dispatched E2E run cancel a push run mid-validation, and
the cancelling workflow repeats neither - main would have lost the lint,
unit-test and scan signal it is the only place to get. The validation
job carries no group at all, so nothing cancels it; E2E still waits on
it through needs, the same ordering the single job had.

Cancelling a running suite is safe here. Over the last 61 active days
the final push to main had at least 180 minutes of clear runway on 59 of
them, usually overnight, so each working day still ends with one
completed suite on that day's tip, and the runs that get cancelled are
on commits that were superseded anyway. Release branches see three
pushes in five months.

The SonarCloud scan also moves ahead of E2E within the validation job.
Until #427 raised the job timeout, every push run on main reached it
while still inside E2E, so the scan that followed was reported as
skipped and main was never scanned - only pull requests were.

release.yml can still run the suite outside this group; isolating it
needs its own job there so serialization never covers the irreversible
publish steps, tracked in MPT-25395.

Refs MPT-25022.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants