fix: resolve Playwright browser executable not found errors in CI
Root causes: 1. Browser cache was restoring corrupted/stale binaries from previous runs 2. 30-minute timeout insufficient for fresh Playwright installation (10-15 min) plus Docker/health checks and test execution Changes: - Remove browser caching from all 3 browser jobs (chromium, firefox, webkit) - Increase timeout from 30 → 45 minutes for all jobs - Add diagnostic logging to browser install steps: * Install start/completion timestamps * Exit code verification * Cache directory inspection on failure * Browser executable verification using 'npx playwright test --list' Benefits: - Fresh browser installations guaranteed (no cache pollution) - 15-minute buffer prevents premature timeouts - Detailed diagnostics to catch future installation issues early - Consistent behavior across all browsers Technical notes: - Browser install with --with-deps takes 10-15 minutes per browser - GitHub Actions cache was causing more harm than benefit (stale binaries) - Sequential execution (1 shard per browser) combined with fresh installs ensures stable, reproducible CI behavior Expected outcome: - Firefox/WebKit failures from missing browser executables → resolved - Chrome timeout at 30 minutes → resolved with 45 minute buffer - Future installation issues → caught immediately via diagnostics Refs: #hofix/ci QA: YAML syntax validated, pre-commit hooks passed (12/12)
This commit is contained in:
96
.github/workflows/e2e-tests-split.yml
vendored
96
.github/workflows/e2e-tests-split.yml
vendored
@@ -121,7 +121,7 @@ jobs:
|
||||
if: |
|
||||
(github.event_name != 'workflow_dispatch') ||
|
||||
(github.event.inputs.browser == 'chromium' || github.event.inputs.browser == 'all')
|
||||
timeout-minutes: 30
|
||||
timeout-minutes: 45
|
||||
env:
|
||||
CHARON_EMERGENCY_TOKEN: ${{ secrets.CHARON_EMERGENCY_TOKEN }}
|
||||
CHARON_EMERGENCY_SERVER_ENABLED: "true"
|
||||
@@ -200,15 +200,29 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Cache Playwright browsers
|
||||
id: playwright-cache
|
||||
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5
|
||||
with:
|
||||
path: ~/.cache/ms-playwright
|
||||
key: playwright-chromium-${{ hashFiles('package-lock.json') }}
|
||||
|
||||
- name: Install & verify Playwright Chromium
|
||||
run: npx playwright install --with-deps chromium
|
||||
run: |
|
||||
echo "⏳ Installing Playwright Chromium (with system dependencies)..."
|
||||
echo "Start: $(date -u +'%Y-%m-%dT%H:%M:%SZ')"
|
||||
npx playwright install --with-deps chromium
|
||||
INSTALL_EXIT=$?
|
||||
echo "Install exit code: $INSTALL_EXIT"
|
||||
|
||||
if [ $INSTALL_EXIT -ne 0 ]; then
|
||||
echo "::error::Playwright Chromium installation failed"
|
||||
echo "Cache contents:"
|
||||
ls -la ~/.cache/ms-playwright/ || echo "Cache directory empty"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Verifying Chromium executable..."
|
||||
if npx playwright test --list --project=chromium 2>&1 | grep -q "Chromium"; then
|
||||
echo "✅ Chromium executable verified"
|
||||
else
|
||||
echo "::error::Chromium executable not found after installation"
|
||||
exit 1
|
||||
fi
|
||||
echo "Completion: $(date -u +'%Y-%m-%dT%H:%M:%SZ')"
|
||||
|
||||
- name: Run Chromium tests (Shard ${{ matrix.shard }}/${{ matrix.total-shards }})
|
||||
run: |
|
||||
@@ -284,7 +298,7 @@ jobs:
|
||||
if: |
|
||||
(github.event_name != 'workflow_dispatch') ||
|
||||
(github.event.inputs.browser == 'firefox' || github.event.inputs.browser == 'all')
|
||||
timeout-minutes: 30
|
||||
timeout-minutes: 45
|
||||
env:
|
||||
CHARON_EMERGENCY_TOKEN: ${{ secrets.CHARON_EMERGENCY_TOKEN }}
|
||||
CHARON_EMERGENCY_SERVER_ENABLED: "true"
|
||||
@@ -363,15 +377,29 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Cache Playwright browsers
|
||||
id: playwright-cache
|
||||
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5
|
||||
with:
|
||||
path: ~/.cache/ms-playwright
|
||||
key: playwright-firefox-${{ hashFiles('package-lock.json') }}
|
||||
|
||||
- name: Install & verify Playwright Firefox
|
||||
run: npx playwright install --with-deps firefox
|
||||
run: |
|
||||
echo "⏳ Installing Playwright Firefox (with system dependencies)..."
|
||||
echo "Start: $(date -u +'%Y-%m-%dT%H:%M:%SZ')"
|
||||
npx playwright install --with-deps firefox
|
||||
INSTALL_EXIT=$?
|
||||
echo "Install exit code: $INSTALL_EXIT"
|
||||
|
||||
if [ $INSTALL_EXIT -ne 0 ]; then
|
||||
echo "::error::Playwright Firefox installation failed"
|
||||
echo "Cache contents:"
|
||||
ls -la ~/.cache/ms-playwright/ || echo "Cache directory empty"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Verifying Firefox executable..."
|
||||
if npx playwright test --list --project=firefox 2>&1 | grep -q "Firefox"; then
|
||||
echo "✅ Firefox executable verified"
|
||||
else
|
||||
echo "::error::Firefox executable not found after installation"
|
||||
exit 1
|
||||
fi
|
||||
echo "Completion: $(date -u +'%Y-%m-%dT%H:%M:%SZ')"
|
||||
|
||||
- name: Run Firefox tests (Shard ${{ matrix.shard }}/${{ matrix.total-shards }})
|
||||
run: |
|
||||
@@ -447,7 +475,7 @@ jobs:
|
||||
if: |
|
||||
(github.event_name != 'workflow_dispatch') ||
|
||||
(github.event.inputs.browser == 'webkit' || github.event.inputs.browser == 'all')
|
||||
timeout-minutes: 30
|
||||
timeout-minutes: 45
|
||||
env:
|
||||
CHARON_EMERGENCY_TOKEN: ${{ secrets.CHARON_EMERGENCY_TOKEN }}
|
||||
CHARON_EMERGENCY_SERVER_ENABLED: "true"
|
||||
@@ -526,15 +554,29 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Cache Playwright browsers
|
||||
id: playwright-cache
|
||||
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5
|
||||
with:
|
||||
path: ~/.cache/ms-playwright
|
||||
key: playwright-webkit-${{ hashFiles('package-lock.json') }}
|
||||
|
||||
- name: Install & verify Playwright WebKit
|
||||
run: npx playwright install --with-deps webkit
|
||||
run: |
|
||||
echo "⏳ Installing Playwright WebKit (with system dependencies)..."
|
||||
echo "Start: $(date -u +'%Y-%m-%dT%H:%M:%SZ')"
|
||||
npx playwright install --with-deps webkit
|
||||
INSTALL_EXIT=$?
|
||||
echo "Install exit code: $INSTALL_EXIT"
|
||||
|
||||
if [ $INSTALL_EXIT -ne 0 ]; then
|
||||
echo "::error::Playwright WebKit installation failed"
|
||||
echo "Cache contents:"
|
||||
ls -la ~/.cache/ms-playwright/ || echo "Cache directory empty"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Verifying WebKit executable..."
|
||||
if npx playwright test --list --project=webkit 2>&1 | grep -q "WebKit"; then
|
||||
echo "✅ WebKit executable verified"
|
||||
else
|
||||
echo "::error::WebKit executable not found after installation"
|
||||
exit 1
|
||||
fi
|
||||
echo "Completion: $(date -u +'%Y-%m-%dT%H:%M:%SZ')"
|
||||
|
||||
- name: Run WebKit tests (Shard ${{ matrix.shard }}/${{ matrix.total-shards }})
|
||||
run: |
|
||||
|
||||
Reference in New Issue
Block a user