129 lines
2.9 KiB
YAML
129 lines
2.9 KiB
YAML
# GitLab CI/CD Pipeline for Test Execution
|
|
# Generated by BMad TEA Agent - Test Architect Module
|
|
# Optimized for: Playwright/Cypress, Parallel Sharding, Burn-In Loop
|
|
|
|
stages:
|
|
- lint
|
|
- test
|
|
- burn-in
|
|
- report
|
|
|
|
variables:
|
|
# Disable git depth for accurate change detection
|
|
GIT_DEPTH: 0
|
|
# Use npm ci for faster, deterministic installs
|
|
npm_config_cache: "$CI_PROJECT_DIR/.npm"
|
|
# Playwright browser cache
|
|
PLAYWRIGHT_BROWSERS_PATH: "$CI_PROJECT_DIR/.cache/ms-playwright"
|
|
|
|
# Caching configuration
|
|
cache:
|
|
key:
|
|
files:
|
|
- package-lock.json
|
|
paths:
|
|
- .npm/
|
|
- .cache/ms-playwright/
|
|
- node_modules/
|
|
|
|
# Lint stage - Code quality checks
|
|
lint:
|
|
stage: lint
|
|
image: node:20
|
|
script:
|
|
- npm ci
|
|
- npm run lint
|
|
timeout: 5 minutes
|
|
|
|
# Test stage - Parallel execution with sharding
|
|
.test-template: &test-template
|
|
stage: test
|
|
image: node:20
|
|
needs:
|
|
- lint
|
|
before_script:
|
|
- npm ci
|
|
- npx playwright install --with-deps chromium
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- test-results/
|
|
- playwright-report/
|
|
expire_in: 30 days
|
|
timeout: 30 minutes
|
|
|
|
test:shard-1:
|
|
<<: *test-template
|
|
script:
|
|
- npm run test:e2e -- --shard=1/4
|
|
|
|
test:shard-2:
|
|
<<: *test-template
|
|
script:
|
|
- npm run test:e2e -- --shard=2/4
|
|
|
|
test:shard-3:
|
|
<<: *test-template
|
|
script:
|
|
- npm run test:e2e -- --shard=3/4
|
|
|
|
test:shard-4:
|
|
<<: *test-template
|
|
script:
|
|
- npm run test:e2e -- --shard=4/4
|
|
|
|
# Burn-in stage - Flaky test detection
|
|
burn-in:
|
|
stage: burn-in
|
|
image: node:20
|
|
needs:
|
|
- test:shard-1
|
|
- test:shard-2
|
|
- test:shard-3
|
|
- test:shard-4
|
|
# Only run burn-in on merge requests to main/develop or on schedule
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
- if: '$CI_PIPELINE_SOURCE == "schedule"'
|
|
before_script:
|
|
- npm ci
|
|
- npx playwright install --with-deps chromium
|
|
script:
|
|
- |
|
|
echo "🔥 Starting burn-in loop - detecting flaky tests"
|
|
for i in {1..10}; do
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "🔥 Burn-in iteration $i/10"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
npm run test:e2e || exit 1
|
|
done
|
|
echo "✅ Burn-in complete - no flaky tests detected"
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- test-results/
|
|
- playwright-report/
|
|
expire_in: 30 days
|
|
timeout: 60 minutes
|
|
|
|
# Report stage - Aggregate results
|
|
report:
|
|
stage: report
|
|
image: alpine:latest
|
|
needs:
|
|
- test:shard-1
|
|
- test:shard-2
|
|
- test:shard-3
|
|
- test:shard-4
|
|
- burn-in
|
|
when: always
|
|
script:
|
|
- |
|
|
echo "## Test Execution Summary"
|
|
echo ""
|
|
echo "- Pipeline: $CI_PIPELINE_ID"
|
|
echo "- Shards: 4"
|
|
echo "- Branch: $CI_COMMIT_REF_NAME"
|
|
echo ""
|
|
echo "View detailed results in job artifacts"
|