Files
Clintchiz d402256547
Deploy to Production / Build & Verify (push) Failing after 5m56s
Ping Search Engines / Notify Search Engines (push) Successful in 2s
Deploy to Production / Pre-Deploy Tests (push) Has been skipped
Deploy to Production / Deploy to Railway (push) Has been skipped
Deploy to Production / Deploy to Render (push) Has been skipped
Deploy to Production / Deploy to VPS (PM2) (push) Has been skipped
Deploy to Production / Deploy to Fly.io (push) Has been skipped
Deploy to Production / Post-Deploy Verification (push) Has been skipped
Deploy to Production / Notify on Failure (push) Successful in 2s
E2E Test Suite / Critical User Journeys (push) Has been skipped
E2E Test Suite / API Integration Tests (push) Has been skipped
E2E Test Suite / Smoke Tests (P0) (push) Failing after 11m26s
E2E Test Suite / Form Interaction Tests (push) Failing after 11m42s
E2E Test Suite / Destructive & Chaos Tests (push) Failing after 12m2s
E2E Test Suite / Cross-Browser Regression (chromium) (push) Failing after 16m14s
E2E Test Suite / Cross-Browser Regression (webkit) (push) Failing after 17m45s
E2E Test Suite / Cross-Browser Regression (firefox) (push) Failing after 25m23s
E2E Test Suite / Security Header Tests (push) Failing after 7m55s
E2E Test Suite / Test Report Summary (push) Failing after 20s
E2E Test Suite / Mobile Device Tests (push) Failing after 2h49m9s
Uptime Monitor / Health & Response Time (push) Failing after 2s
Uptime Monitor / SSL Certificate (push) Successful in 2s
Uptime Monitor / Send Alerts (push) Failing after 3s
Uptime Monitor / Record Uptime Success (push) Has been skipped
First Init
2026-03-21 16:46:46 +05:30

455 lines
13 KiB
YAML

name: E2E Test Suite
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
schedule:
# Nightly regression at 2:00 AM UTC
- cron: '0 2 * * *'
workflow_dispatch:
inputs:
suite:
description: 'Test suite to run'
required: false
default: 'all'
type: choice
options:
- all
- smoke
- critical
- api
- chaos
# Cancel in-progress runs for the same branch
concurrency:
group: e2e-${{ github.ref }}
cancel-in-progress: true
env:
NODE_VERSION: '20'
PORT: 10000
jobs:
# ============================================================
# Job 1: Smoke Tests (P0) - Every push, fast
# ============================================================
smoke:
name: Smoke Tests (P0)
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Install Playwright browsers (Chromium only for smoke)
run: npx playwright install chromium --with-deps
- name: Build application
run: npm run build
- name: Start server
run: npm run start &
env:
NODE_ENV: production
- name: Wait for server to be ready
run: npx wait-on http://localhost:${{ env.PORT }} --timeout 60000
- name: Run smoke tests (Chromium only)
run: npx playwright test tests/e2e-smoke-suite.spec.ts --project=chromium --reporter=list
- name: Upload smoke test results
uses: actions/upload-artifact@v4
if: always()
with:
name: smoke-test-results-${{ github.run_number }}
path: |
playwright-report/
test-results/
retention-days: 7
# ============================================================
# Job 2: Critical User Journeys (P0) - Every push
# ============================================================
critical-paths:
name: Critical User Journeys
runs-on: ubuntu-latest
timeout-minutes: 20
needs: smoke
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Install Playwright browsers
run: npx playwright install chromium firefox --with-deps
- name: Build application
run: npm run build
- name: Start server
run: npm run start &
env:
NODE_ENV: production
- name: Wait for server to be ready
run: npx wait-on http://localhost:${{ env.PORT }} --timeout 60000
- name: Run critical path tests
run: npx playwright test tests/e2e-critical-paths.spec.ts --project=chromium --project=firefox
- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: critical-paths-results-${{ github.run_number }}
path: playwright-report/
retention-days: 14
# ============================================================
# Job 3: API Integration Tests - Every push
# ============================================================
api-tests:
name: API Integration Tests
runs-on: ubuntu-latest
timeout-minutes: 10
needs: smoke
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Install Playwright (for API testing)
run: npx playwright install chromium --with-deps
- name: Build application
run: npm run build
- name: Start server
run: npm run start &
env:
NODE_ENV: production
- name: Wait for server
run: npx wait-on http://localhost:${{ env.PORT }} --timeout 60000
- name: Run API integration tests
run: npx playwright test tests/api-integration.spec.ts --project=chromium
- name: Upload API test results
uses: actions/upload-artifact@v4
if: always()
with:
name: api-test-results-${{ github.run_number }}
path: playwright-report/
retention-days: 14
# ============================================================
# Job 4: Form Tests - PR and nightly
# ============================================================
form-tests:
name: Form Interaction Tests
runs-on: ubuntu-latest
timeout-minutes: 20
if: github.event_name == 'pull_request' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Install Playwright browsers
run: npx playwright install chromium --with-deps
- name: Build application
run: npm run build
- name: Start server
run: npm run start &
env:
NODE_ENV: production
- name: Wait for server
run: npx wait-on http://localhost:${{ env.PORT }} --timeout 60000
- name: Run contact form tests
run: npx playwright test tests/contact-form.spec.ts tests/e2e-form-interactions.spec.ts --project=chromium
- name: Run newsletter subscription tests
run: npx playwright test tests/newsletter-subscription.spec.ts --project=chromium
- name: Upload form test results
uses: actions/upload-artifact@v4
if: always()
with:
name: form-test-results-${{ github.run_number }}
path: playwright-report/
retention-days: 14
# ============================================================
# Job 5: Chaos / Destructive Tests - Nightly and manual
# ============================================================
chaos-tests:
name: Destructive & Chaos Tests
runs-on: ubuntu-latest
timeout-minutes: 30
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Install Playwright browsers
run: npx playwright install chromium --with-deps
- name: Build application
run: npm run build
- name: Start server
run: npm run start &
env:
NODE_ENV: production
- name: Wait for server
run: npx wait-on http://localhost:${{ env.PORT }} --timeout 60000
- name: Run destructive/chaos tests
run: npx playwright test tests/destructive-chaos.spec.ts --project=chromium
continue-on-error: true # Chaos tests may find real bugs
- name: Upload chaos test results
uses: actions/upload-artifact@v4
if: always()
with:
name: chaos-test-results-${{ github.run_number }}
path: playwright-report/
retention-days: 30
# ============================================================
# Job 6: Cross-Browser Regression - Nightly and manual
# ============================================================
cross-browser:
name: Cross-Browser Regression
runs-on: ubuntu-latest
timeout-minutes: 45
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
strategy:
matrix:
browser: [chromium, firefox, webkit]
fail-fast: false # Continue testing other browsers even if one fails
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Install Playwright browser (${{ matrix.browser }})
run: npx playwright install ${{ matrix.browser }} --with-deps
- name: Build application
run: npm run build
- name: Start server
run: npm run start &
env:
NODE_ENV: production
- name: Wait for server
run: npx wait-on http://localhost:${{ env.PORT }} --timeout 60000
- name: Run regression suite (${{ matrix.browser }})
run: |
npx playwright test \
tests/e2e-smoke-suite.spec.ts \
tests/navigation.spec.ts \
tests/blog.spec.ts \
tests/portfolio.spec.ts \
--project=${{ matrix.browser }}
- name: Upload cross-browser results
uses: actions/upload-artifact@v4
if: always()
with:
name: cross-browser-${{ matrix.browser }}-${{ github.run_number }}
path: playwright-report/
retention-days: 30
# ============================================================
# Job 7: Mobile Testing - Nightly
# ============================================================
mobile-tests:
name: Mobile Device Tests
runs-on: ubuntu-latest
timeout-minutes: 30
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Install Playwright browsers
run: npx playwright install chromium webkit --with-deps
- name: Build application
run: npm run build
- name: Start server
run: npm run start &
env:
NODE_ENV: production
- name: Wait for server
run: npx wait-on http://localhost:${{ env.PORT }} --timeout 60000
- name: Run mobile tests
run: npx playwright test --project='Mobile Chrome' --project='Mobile Safari'
- name: Upload mobile test results
uses: actions/upload-artifact@v4
if: always()
with:
name: mobile-test-results-${{ github.run_number }}
path: playwright-report/
retention-days: 14
# ============================================================
# Job 8: Security Header Tests - PR and nightly
# ============================================================
security-tests:
name: Security Header Tests
runs-on: ubuntu-latest
timeout-minutes: 10
if: github.event_name == 'pull_request' || github.event_name == 'schedule'
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Install Playwright
run: npx playwright install chromium --with-deps
- name: Build application
run: npm run build
- name: Start server
run: npm run start &
env:
NODE_ENV: production
- name: Wait for server
run: npx wait-on http://localhost:${{ env.PORT }} --timeout 60000
- name: Run security header tests
run: npx playwright test tests/security-headers.test.ts --project=chromium
- name: Upload security test results
uses: actions/upload-artifact@v4
if: always()
with:
name: security-test-results-${{ github.run_number }}
path: playwright-report/
retention-days: 30
# ============================================================
# Job 9: Test Report Summary
# ============================================================
report:
name: Test Report Summary
runs-on: ubuntu-latest
needs: [smoke, critical-paths, api-tests]
if: always()
steps:
- name: Download all test artifacts
uses: actions/download-artifact@v4
with:
path: all-results/
- name: Generate test summary
run: |
echo "## E2E Test Results Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Suite | Status |" >> $GITHUB_STEP_SUMMARY
echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Smoke Tests | ${{ needs.smoke.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| Critical Paths | ${{ needs.critical-paths.result }} |" >> $GITHUB_STEP_SUMMARY
echo "| API Integration | ${{ needs.api-tests.result }} |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Run:** #${{ github.run_number }}" >> $GITHUB_STEP_SUMMARY
echo "**Branch:** ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
echo "**Commit:** ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY