[CI] Standardize job timeouts to 15 minutes#18693
Conversation
WalkthroughThis PR adjusts GitHub Actions workflow job timeouts across 11 CI workflow files. Most jobs converge to standardized 15-minute timeouts, with some increased from shorter durations (5–10 minutes) and others reduced from longer durations (25–45 minutes). Changes
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~5 minutes All changes are uniform timeout-minutes adjustments with no logic modifications, control-flow changes, or behavioral impacts. Verification should simply confirm that adjusted timeouts are appropriate for their respective jobs. Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
❌ Preview Environment deleted from BunnyshellAvailable commands:
|
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (2)
.github/workflows/upmerge_pr.yaml (1)
18-18: Set job-specific timeouts instead of standardizing all workflows to 15 minutes.While a 15-minute timeout is reasonable for the upmerge job's Git operations (checkout, fetch, reset, diff check), applying the same limit uniformly across all workflow types creates risk:
- E2E tests have longer execution times compared to unit tests, and a 15-minute limit may cause false failures in comprehensive test suites
- Overly aggressive timeouts may cause legitimate tasks to fail, so chosen values should balance reliability and cost control
- The ideal timeout depends on the individual workflow, not a single standardized value
Configure timeouts based on each job's actual requirements rather than applying a uniform value across all workflows.
.github/workflows/ci_e2e-unstable.yaml (1)
186-186: Consider whether 15 minutes is sufficient for Panther-based JavaScript tests.Panther uses real browser automation via WebDriver protocol, which is inherently more time-consuming than non-JS tests. The same 15-minute timeout is applied uniformly to both Panther and Chromedriver jobs. Verify that this timeout consistently allows the test suite to complete reliably without false failures due to timeout pressure.
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (12)
.github/workflows/ci__full_1_14.yaml(1 hunks).github/workflows/ci__full_2_1.yaml(1 hunks).github/workflows/ci__full_2_2.yaml(1 hunks).github/workflows/ci_e2e-mariadb.yaml(2 hunks).github/workflows/ci_e2e-mysql.yaml(2 hunks).github/workflows/ci_e2e-pgsql.yaml(2 hunks).github/workflows/ci_e2e-unstable.yaml(3 hunks).github/workflows/ci_js.yaml(2 hunks).github/workflows/ci_packages-unstable.yaml(1 hunks).github/workflows/ci_packages.yaml(1 hunks).github/workflows/refactor.yaml(1 hunks).github/workflows/upmerge_pr.yaml(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Static checks / PHP 8.4, Symfony ~7.4.0
- GitHub Check: Static checks / PHP 8.3, Symfony ~6.4.0
- GitHub Check: Static checks / PHP 8.5, Symfony ~7.4.0
🔇 Additional comments (13)
.github/workflows/ci_packages-unstable.yaml (1)
24-24: Verify that 15 minutes is sufficient for unstable dependency tests.This job tests with unstable Symfony beta packages (
^7.4@beta) andUNSTABLE: "yes", which typically require more time due to slower Composer resolution and lack of optimizations. Reducing the timeout from 25 to 15 minutes (a 40% reduction) may cause legitimate test runs to timeout, introducing CI flakiness.Before merging, confirm that recent job runs consistently complete within 15 minutes, or consider a slightly longer timeout (e.g., 20–22 minutes) for this specific unstable test job.
.github/workflows/ci_js.yaml (2)
56-56: LGTM - Timeout increase provides additional buffer.Increasing the timeout from 10 to 15 minutes for the
behat-jsjob aligns with the PR's standardization goal and provides a reasonable buffer for the test execution with retry logic.
139-139: LGTM - Appropriate timeout for browser automation tests.Increasing the timeout to 15 minutes for the
behat-pantherjob is sensible, as browser automation tests with Panther can have additional overhead from Chrome initialization and DOM interactions..github/workflows/ci_packages.yaml (1)
48-48: This is a new workflow file, not a reduction from a previous timeout setting.The
.github/workflows/ci_packages.yamlfile was created fresh in commit bcf0643 withtimeout-minutes: 15as the initial value—there is no previous 25-minute timeout to reduce from. The claim about a 40% reduction is therefore incorrect. While the underlying concern about whether 15 minutes adequately covers package testing across multiple PHP/Symfony version combinations could merit investigation, it must be based on actual job runtime data rather than an inaccurate premise about prior timeouts.Likely an incorrect or invalid review comment.
.github/workflows/refactor.yaml (1)
19-19: 15-minute timeout is appropriate for this coding standard refactor job, but verify broader standardization strategy.This job performs checkout, PHP setup, composer update, and ECS checks—all operations where 15 minutes provides adequate buffer. The timeout change is part of a broader effort to standardize job timeouts across workflows.
However, ensure that this 15-minute standard is appropriate for all affected job types, especially longer-running jobs like e2e tests. Monitor recent job execution times to confirm the standardized timeout doesn't cause premature failures.
.github/workflows/ci__full_2_2.yaml (1)
91-91: LGTM! Timeout increase is appropriate for notification job.The increase from 5 to 15 minutes provides adequate buffer for the notification job, which only processes branch/commit data and sends a Slack webhook. This aligns with the PR's standardization objective.
.github/workflows/ci__full_2_1.yaml (1)
91-91: LGTM! Consistent timeout standardization.The timeout increase from 5 to 15 minutes is appropriate for this notification job and consistent with the changes in other workflow files.
.github/workflows/ci__full_1_14.yaml (1)
81-81: Verify historical e2e test execution times to confirm 15-minute timeout is sufficient.The timeout reductions have been confirmed (notification job: 5→15 minutes, e2e tests: 45→15 minutes). To ensure the new 15-minute timeout prevents premature job failures, check recent workflow run data to confirm that e2e test executions consistently complete within this window.
.github/workflows/ci_e2e-pgsql.yaml (2)
48-48: Verify that 15 minutes is sufficient for PostgreSQL E2E tests.PostgreSQL and MySQL have different performance characteristics depending on query complexity. The reduction from 45 to 15 minutes for the
phpunit-cli-apijob should be validated against recent workflow run durations to ensure PostgreSQL tests consistently complete within this window.
137-137: Verify that 15 minutes is sufficient for PostgreSQL UI E2E tests.The same timeout concern applies to the
behat-uijob. With Docker setup consuming 6-7 minutes and typical UI Behat tests running 10-15 minutes, the current 15-minute timeout may be too tight. Monitor test execution times to ensure consistent completion..github/workflows/ci_e2e-unstable.yaml (1)
20-20: The timeout concern cannot be validated against historical data.The
ci_e2e-unstable.yamlworkflow file was created today as part of a standardization commit that set all e2e workflows to 15 minutes. This is not a reduction from 45 minutes—the file did not exist previously. Since there is no prior run history for this workflow, the claim about a timeout reduction is factually incorrect.If you want to verify whether 15 minutes is appropriate for unstable dependency tests going forward, monitor actual workflow run durations after the first few runs execute.
Likely an incorrect or invalid review comment.
.github/workflows/ci_e2e-mariadb.yaml (2)
163-163: Verify actual timeout adequacy for this UI E2E job.The 15-minute timeout may be tight for UI Behat tests involving full app builds with database setup, Node, and Chrome initialization, but the actual matrix complexity is limited to 2 combinations with no API Platform variations in the minimal build type, unlike the comment suggests.
48-48: Verify timeout sufficiency with recent job duration data.The timeout reduction from 45 to 15 minutes for the
phpunit-cli-apijob is confirmed. With the matrix complexity including PHP versions (8.3, 8.4, 8.5), Symfony versions (2 options), state machine adapters (symfony_workflow, winzou_state_machine), and optional API Platform variations, the full build matrix generates 12+ job combinations. Before merging, confirm that recent workflow runs consistently complete within 15 minutes by checking recent job durations in GitHub Actions.
| runs-on: ubuntu-latest | ||
| name: "PHPUnit, CLI, API, PHP ${{ matrix.php }}, Symfony ${{ matrix.symfony }}, MySQL ${{ matrix.mysql }}" | ||
| timeout-minutes: 45 | ||
| timeout-minutes: 15 |
There was a problem hiding this comment.
❓ Verification inconclusive
🏁 Script executed:
find . -name "ci_e2e-mysql.yaml" -type f 2>/dev/null | head -5Repository: Sylius/Sylius
Length of output: 94
🏁 Script executed:
#!/bin/bash
# Find and examine the e2e-mysql workflow file
find . -path "./.github/workflows/ci_e2e-mysql.yaml" -type f 2>/dev/null
if [ $? -eq 0 ]; then
echo "=== Found ci_e2e-mysql.yaml ==="
cat ./.github/workflows/ci_e2e-mysql.yaml | head -100
else
echo "File not found, searching with alternate paths..."
find . -name "*e2e*mysql*" -o -name "*mysql*e2e*" 2>/dev/null | grep -i yaml
fiRepository: Sylius/Sylius
Length of output: 3693
🏁 Script executed:
cat ./.github/workflows/ci_e2e-mysql.yaml | tail -n +40Repository: Sylius/Sylius
Length of output: 8469
🏁 Script executed:
wc -l ./.github/workflows/ci_e2e-mysql.yamlRepository: Sylius/Sylius
Length of output: 98
🏁 Script executed:
sed -n '40,150p' ./.github/workflows/ci_e2e-mysql.yamlRepository: Sylius/Sylius
Length of output: 4973
Confirm that the 15-minute timeout is sufficient for recent phpunit-cli-api job runs.
The job runs multiple sequential test suites (PHPUnit all tests, PHPUnit Sylius Test Suite, CLI Behat, API Behat) plus application setup and installation. While BuildTestAppAction includes caching to reduce overhead, these are time-consuming operations. Verify that recent runs consistently complete well within 15 minutes; otherwise consider a more conservative timeout (20-25 minutes) to prevent flaky CI failures.
🤖 Prompt for AI Agents
.github/workflows/ci_e2e-mysql.yaml around line 48: the workflow timeout is set
to 15 minutes which may be too low for the sequential heavy tasks (PHPUnit
suites, two Behat suites, app setup/install); review recent GitHub Actions run
durations for the phpunit-cli-api job (check the Actions tab for the last 10–20
runs and note max durations including setup/caching variance) and if any runs
approach or exceed ~75–80% of 15 minutes, increase timeout-minutes to a
conservative value (recommend 20–25 minutes) to prevent flaky timeouts; update
the timeout-minutes value accordingly and commit.
| runs-on: ubuntu-latest | ||
| name: "UI, PHP ${{ matrix.php }}, Symfony ${{ matrix.symfony }}, MySQL ${{ matrix.mysql }}" | ||
| timeout-minutes: 45 | ||
| timeout-minutes: 15 |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cat -n .github/workflows/ci_e2e-mysql.yaml | sed -n '140,160p'Repository: Sylius/Sylius
Length of output: 1073
🏁 Script executed:
find . -name "ci_e2e-mysql.yaml" -type f 2>/dev/null | head -5Repository: Sylius/Sylius
Length of output: 94
🏁 Script executed:
grep -n "timeout-minutes" .github/workflows/ci_e2e-mysql.yamlRepository: Sylius/Sylius
Length of output: 119
🏁 Script executed:
head -n 200 .github/workflows/ci_e2e-mysql.yaml | grep -A 5 -B 5 "^[a-z-]*:" | grep -E "^(--| [a-z-]*:)" | head -30Repository: Sylius/Sylius
Length of output: 59
🏁 Script executed:
cat -n .github/workflows/ci_e2e-mysql.yaml | sed -n '40,60p'Repository: Sylius/Sylius
Length of output: 1123
🏁 Script executed:
cat -n .github/workflows/ci_e2e-mysql.yaml | sed -n '144,170p'Repository: Sylius/Sylius
Length of output: 1351
🏁 Script executed:
git log --oneline --all -S "timeout-minutes: 15" -- .github/workflows/ci_e2e-mysql.yaml | head -5Repository: Sylius/Sylius
Length of output: 111
🏁 Script executed:
git show bcf064385c --statRepository: Sylius/Sylius
Length of output: 50370
🏁 Script executed:
git show bcf064385c -- .github/workflows/ci_e2e-mysql.yaml | head -100Repository: Sylius/Sylius
Length of output: 3523
🏁 Script executed:
find .github/workflows -name "ci_e2e*.yaml" -type f | xargs grep -l "timeout-minutes"Repository: Sylius/Sylius
Length of output: 205
🏁 Script executed:
for file in .github/workflows/ci_e2e-*.yaml; do echo "=== $file ==="; grep "timeout-minutes" "$file"; doneRepository: Sylius/Sylius
Length of output: 489
🏁 Script executed:
git log --oneline --all -- .github/workflows/ci_e2e-mysql.yaml | head -10Repository: Sylius/Sylius
Length of output: 714
🏁 Script executed:
git log --all --oneline -- .github/workflows/ci_e2e-mysql.yaml | grep -i "timeout\|reduce\|change"Repository: Sylius/Sylius
Length of output: 301
🏁 Script executed:
git show c86f28704a:.github/workflows/ci_e2e-mysql.yaml 2>/dev/null | grep -A 5 -B 5 "timeout-minutes" | head -20Repository: Sylius/Sylius
Length of output: 658
🏁 Script executed:
git log --all --grep="timeout" --oneline | head -5Repository: Sylius/Sylius
Length of output: 459
🏁 Script executed:
git show bcf064385c --stat | grep -E "workflow|yaml"Repository: Sylius/Sylius
Length of output: 25194
Verify that 15 minutes is sufficient for the behat-ui job and similar UI E2E jobs across all database workflows.
This timeout was recently reduced from 45 to 15 minutes as part of a standardization effort (commit bcf0643). UI Behat tests are sensitive to environment conditions and may be prone to timeout failures with the new 15-minute limit. The same timeout concern applies to the behat-ui jobs in the MariaDB, PostgreSQL, and unstable E2E workflows.
🤖 Prompt for AI Agents
.github/workflows/ci_e2e-mysql.yaml around line 148: the behat-ui job timeout
was reduced to 15 minutes which may be insufficient and causes flaky failures;
restore a safer timeout (e.g., 45 minutes or at least 30) for this job and
ensure the same change is applied to the behat-ui jobs in the MariaDB,
PostgreSQL, and unstable E2E workflow files; after updating, run the pipeline to
verify stable completion and only lower the timeout later if empirical job
timings show consistent safety.
| runs-on: ubuntu-latest | ||
| name: "JS with Chromedriver, PHP ${{ matrix.php }}, Symfony ${{ matrix.symfony }} (${{ matrix.env || 'test_cached' }}), MySQL ${{ matrix.mysql }} (Unstable Dependencies)" | ||
| timeout-minutes: 45 | ||
| timeout-minutes: 15 |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cat -n .github/workflows/ci_e2e-unstable.yaml | sed -n '90,115p'Repository: Sylius/Sylius
Length of output: 1391
🏁 Script executed:
# Find other timeout-minutes in the same file for context
grep -n "timeout-minutes" .github/workflows/ci_e2e-unstable.yamlRepository: Sylius/Sylius
Length of output: 151
🏁 Script executed:
# Check git history for this file to find previous timeout value
git log --oneline -p .github/workflows/ci_e2e-unstable.yaml | grep -A 5 -B 5 "timeout-minutes" | head -50Repository: Sylius/Sylius
Length of output: 1285
🏁 Script executed:
# Check if there are other workflow files with chromedriver configuration
find .github/workflows -name "*.yaml" -o -name "*.yml" | xargs grep -l "chromedriver" 2>/dev/nullRepository: Sylius/Sylius
Length of output: 205
🏁 Script executed:
# Check timeout settings in the other workflow files for chromedriver jobs
for file in .github/workflows/ci_e2e-mariadb.yaml .github/workflows/ci_e2e-mysql.yaml .github/workflows/ci_e2e-pgsql.yaml; do
echo "=== $file ==="
grep -B 5 "timeout-minutes" "$file" | grep -A 5 "chromedriver\|behat-ui-js"
doneRepository: Sylius/Sylius
Length of output: 190
🏁 Script executed:
# Check the timeout values in the other workflow files
for file in .github/workflows/ci_e2e-mariadb.yaml .github/workflows/ci_e2e-mysql.yaml .github/workflows/ci_e2e-pgsql.yaml; do
echo "=== $file ==="
grep -n "timeout-minutes" "$file"
doneRepository: Sylius/Sylius
Length of output: 379
🏁 Script executed:
# Check full git history for any timeout-minutes changes
git log --all --oneline --grep="timeout" | head -20Repository: Sylius/Sylius
Length of output: 1336
🏁 Script executed:
# Check the commit that standardized timeouts
git show bcf064385c --statRepository: Sylius/Sylius
Length of output: 50370
🏁 Script executed:
# Get just the diff for the workflow files from that commit
git show bcf064385c -- .github/workflows/ci_e2e-unstable.yaml | head -100Repository: Sylius/Sylius
Length of output: 4205
🏁 Script executed:
# Check if this file existed before this commit
git log --oneline --all -- .github/workflows/ci_e2e-unstable.yaml | head -5Repository: Sylius/Sylius
Length of output: 379
🏁 Script executed:
# Check the previous version before the standardization commit
git show c86f28704a:.github/workflows/ci_e2e-unstable.yaml | grep -A 5 "behat-ui-js-chromedriver-unstable"Repository: Sylius/Sylius
Length of output: 380
🏁 Script executed:
# Check if there's any documentation about test durations or behat configuration
find . -name "behat.yml*" -o -name "behat.dist" | head -5Repository: Sylius/Sylius
Length of output: 73
🏁 Script executed:
# Check behat configuration for timeout settings
grep -i "timeout\|chromedriver\|javascript" behat.yml.dist | head -30Repository: Sylius/Sylius
Length of output: 367
🏁 Script executed:
# Check if there are any recent failures or issues related to timeouts
git log --oneline --all --grep="timeout\|chromedriver.*fail\|JS.*timeout" -- .github/workflows/ | head -10Repository: Sylius/Sylius
Length of output: 223
🏁 Script executed:
# Check the standardization commit message and see if there's an explanation
git show bcf064385c --format=fuller | head -50Repository: Sylius/Sylius
Length of output: 1356
🏁 Script executed:
# Check the commit to see all workflow file changes for timeout
git show bcf064385c -- .github/workflows/*.yaml | grep -A 1 "timeout-minutes" | head -20Repository: Sylius/Sylius
Length of output: 359
Verify if 15 minutes is sufficient for JS tests with Chromedriver given the 66% timeout reduction from 45 minutes.
The timeout was reduced from 45 minutes to 15 minutes as part of a blanket standardization. Browser-based JavaScript tests using Chromedriver are typically slower and more resource-intensive than non-JS tests, and CI environments often have variable performance. This aggressive reduction could cause premature failures, especially since the previous 45-minute allowance suggests test suites previously required substantial time to complete.
🤖 Prompt for AI Agents
.github/workflows/ci_e2e-unstable.yaml around line 103: the CI job timeout was
changed to 15 minutes which is likely too low for browser-based JS tests using
Chromedriver; verify by running the full JS test suite in CI or locally under
similar resource constraints and if runs approach or exceed 15 minutes restore a
higher timeout (restore to 45m or a safer middle ground like 30m), or split JS
Chromedriver tests into a separate job with its own increased timeout, and
parameterize the timeout value so non-JS jobs keep the shorter 15m while
Chromedriver jobs get the longer limit.
Increases `timeout-minutes` from 15 to 20 minutes across all CI workflow files to reduce job cancellations. Ref: #18693 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Extended timeout limits for continuous integration and deployment jobs from 15 to 20 minutes across multiple workflow configurations to allow additional execution time. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Standardizes
timeout-minutesacross all CI workflow files to 15 minutes. Previously values ranged from 5 to 45 minutes.Affected workflows:
ci__full_*.yaml- notification jobs (5 -> 15)ci_e2e-*.yaml- e2e tests (45 -> 15)ci_js.yaml- JS tests (10 -> 15)ci_packages*.yaml- package tests (25 -> 15)refactor.yaml,upmerge_pr.yaml- utility jobs (5 -> 15)Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.