mirror of
https://github.com/cloud-shuttle/leptos-shadcn-ui.git
synced 2025-12-22 22:00:00 +00:00
- Disable ci.yml, comprehensive-testing.yml, component-testing.yml - Disable performance-testing.yml, e2e-tests.yml, comprehensive-quality-gates.yml - Keep only demo-deploy.yml and essential workflows active - This prevents multiple workflows from running simultaneously and failing
383 lines
11 KiB
Plaintext
383 lines
11 KiB
Plaintext
name: E2E Tests
|
|
|
|
on:
|
|
push:
|
|
branches: [ main, develop ]
|
|
pull_request:
|
|
branches: [ main, develop ]
|
|
schedule:
|
|
# Run tests daily at 2 AM UTC
|
|
- cron: '0 2 * * *'
|
|
|
|
env:
|
|
NODE_VERSION: '18'
|
|
RUST_VERSION: 'stable'
|
|
|
|
jobs:
|
|
e2e-tests:
|
|
name: E2E Tests
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 60
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
browser: [chromium, firefox, webkit]
|
|
include:
|
|
- browser: chromium
|
|
display: ':99'
|
|
- browser: firefox
|
|
display: ':99'
|
|
- browser: webkit
|
|
display: ':99'
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Setup Rust
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.RUST_VERSION }}
|
|
target: wasm32-unknown-unknown
|
|
override: true
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: ${{ env.NODE_VERSION }}
|
|
cache: 'npm'
|
|
|
|
- name: Install system dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
libasound2-dev \
|
|
libatk-bridge2.0-dev \
|
|
libdrm2 \
|
|
libxcomposite1 \
|
|
libxdamage1 \
|
|
libxrandr2 \
|
|
libgbm1 \
|
|
libxss1 \
|
|
libnss3-dev \
|
|
libgconf-2-4
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
pnpm install
|
|
pnpm playwright install --with-deps ${{ matrix.browser }}
|
|
|
|
- name: Build WASM target
|
|
run: |
|
|
rustup target add wasm32-unknown-unknown
|
|
cargo build --workspace --target wasm32-unknown-unknown
|
|
|
|
- name: Build test application
|
|
run: |
|
|
cd minimal-wasm-test
|
|
wasm-pack build --target web --out-dir pkg
|
|
cd ..
|
|
|
|
- name: Start test server
|
|
run: |
|
|
cd examples/leptos
|
|
trunk serve --port 8082 &
|
|
sleep 10
|
|
env:
|
|
DISPLAY: ${{ matrix.display }}
|
|
|
|
- name: Run E2E tests
|
|
run: |
|
|
pnpm playwright test \
|
|
--project=${{ matrix.browser }} \
|
|
--reporter=html,json,junit \
|
|
--output-dir=test-results/${{ matrix.browser }} \
|
|
--timeout=30000
|
|
env:
|
|
DISPLAY: ${{ matrix.display }}
|
|
CI: true
|
|
|
|
- name: Upload test results
|
|
uses: actions/upload-artifact@v4
|
|
if: always()
|
|
with:
|
|
name: e2e-test-results-${{ matrix.browser }}
|
|
path: |
|
|
test-results/${{ matrix.browser }}/
|
|
test-results/
|
|
retention-days: 30
|
|
|
|
- name: Upload screenshots
|
|
uses: actions/upload-artifact@v4
|
|
if: failure()
|
|
with:
|
|
name: e2e-screenshots-${{ matrix.browser }}
|
|
path: test-results/${{ matrix.browser }}/screenshots/
|
|
retention-days: 7
|
|
|
|
- name: Upload videos
|
|
uses: actions/upload-artifact@v4
|
|
if: failure()
|
|
with:
|
|
name: e2e-videos-${{ matrix.browser }}
|
|
path: test-results/${{ matrix.browser }}/videos/
|
|
retention-days: 7
|
|
|
|
- name: Upload traces
|
|
uses: actions/upload-artifact@v4
|
|
if: failure()
|
|
with:
|
|
name: e2e-traces-${{ matrix.browser }}
|
|
path: test-results/${{ matrix.browser }}/traces/
|
|
retention-days: 7
|
|
|
|
wasm-tests:
|
|
name: WASM Browser Tests
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 45
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
browser: [chromium, firefox, webkit, "Mobile Chrome", "Mobile Safari"]
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Rust
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
target: wasm32-unknown-unknown
|
|
override: true
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '18'
|
|
cache: 'npm'
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
pnpm install
|
|
pnpm playwright install --with-deps
|
|
|
|
- name: Build WASM application
|
|
run: |
|
|
cd minimal-wasm-test
|
|
wasm-pack build --target web --out-dir pkg
|
|
cd ..
|
|
|
|
- name: Start test server
|
|
run: |
|
|
cd examples/leptos
|
|
trunk serve --port 8082 &
|
|
sleep 10
|
|
|
|
- name: Run WASM tests
|
|
run: |
|
|
./scripts/run-wasm-tests.sh -b "${{ matrix.browser }}" -v
|
|
env:
|
|
CI: true
|
|
WASM_MAX_INIT_TIME: 8000
|
|
WASM_MAX_FIRST_PAINT: 4000
|
|
WASM_MAX_FCP: 5000
|
|
|
|
- name: Upload WASM test results
|
|
uses: actions/upload-artifact@v4
|
|
if: always()
|
|
with:
|
|
name: wasm-test-results-${{ matrix.browser }}
|
|
path: test-results/wasm-tests/
|
|
retention-days: 30
|
|
|
|
performance-tests:
|
|
name: Performance Tests
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Rust
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
target: wasm32-unknown-unknown
|
|
override: true
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '18'
|
|
cache: 'npm'
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
pnpm install
|
|
pnpm playwright install --with-deps chromium
|
|
|
|
- name: Build application
|
|
run: |
|
|
cd minimal-wasm-test
|
|
wasm-pack build --target web --out-dir pkg
|
|
cd ..
|
|
|
|
- name: Start test server
|
|
run: |
|
|
cd examples/leptos
|
|
trunk serve --port 8082 &
|
|
sleep 10
|
|
|
|
- name: Run performance tests
|
|
run: |
|
|
pnpm playwright test tests/e2e/performance.spec.ts \
|
|
--project=chromium \
|
|
--reporter=json \
|
|
--output-dir=test-results/performance
|
|
env:
|
|
CI: true
|
|
|
|
- name: Upload performance results
|
|
uses: actions/upload-artifact@v4
|
|
if: always()
|
|
with:
|
|
name: performance-test-results
|
|
path: test-results/performance/
|
|
retention-days: 30
|
|
|
|
accessibility-tests:
|
|
name: Accessibility Tests
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '18'
|
|
cache: 'npm'
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
pnpm install
|
|
pnpm playwright install --with-deps chromium
|
|
|
|
- name: Start test server
|
|
run: |
|
|
cd examples/leptos
|
|
trunk serve --port 8082 &
|
|
sleep 10
|
|
|
|
- name: Run accessibility tests
|
|
run: |
|
|
pnpm playwright test tests/e2e/accessibility.spec.ts \
|
|
--project=chromium \
|
|
--reporter=json \
|
|
--output-dir=test-results/accessibility
|
|
env:
|
|
CI: true
|
|
|
|
- name: Upload accessibility results
|
|
uses: actions/upload-artifact@v4
|
|
if: always()
|
|
with:
|
|
name: accessibility-test-results
|
|
path: test-results/accessibility/
|
|
retention-days: 30
|
|
|
|
test-summary:
|
|
name: Test Summary
|
|
runs-on: ubuntu-latest
|
|
needs: [e2e-tests, wasm-tests, performance-tests, accessibility-tests]
|
|
if: always()
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Download all artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: all-results/
|
|
|
|
- name: Generate test summary
|
|
run: |
|
|
echo "# Test Summary" > test-summary.md
|
|
echo "" >> test-summary.md
|
|
echo "## E2E Tests" >> test-summary.md
|
|
echo "- Status: ${{ needs.e2e-tests.result }}" >> test-summary.md
|
|
echo "" >> test-summary.md
|
|
echo "## WASM Tests" >> test-summary.md
|
|
echo "- Status: ${{ needs.wasm-tests.result }}" >> test-summary.md
|
|
echo "" >> test-summary.md
|
|
echo "## Performance Tests" >> test-summary.md
|
|
echo "- Status: ${{ needs.performance-tests.result }}" >> test-summary.md
|
|
echo "" >> test-summary.md
|
|
echo "## Accessibility Tests" >> test-summary.md
|
|
echo "- Status: ${{ needs.accessibility-tests.result }}" >> test-summary.md
|
|
echo "" >> test-summary.md
|
|
echo "## Overall Status" >> test-summary.md
|
|
if [[ "${{ needs.e2e-tests.result }}" == "success" && "${{ needs.wasm-tests.result }}" == "success" && "${{ needs.performance-tests.result }}" == "success" && "${{ needs.accessibility-tests.result }}" == "success" ]]; then
|
|
echo "✅ All tests passed!" >> test-summary.md
|
|
else
|
|
echo "❌ Some tests failed!" >> test-summary.md
|
|
fi
|
|
|
|
- name: Upload test summary
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: test-summary
|
|
path: test-summary.md
|
|
retention-days: 30
|
|
|
|
- name: Comment on PR
|
|
if: github.event_name == 'pull_request'
|
|
uses: actions/github-script@v7
|
|
with:
|
|
script: |
|
|
const fs = require('fs');
|
|
const summary = fs.readFileSync('test-summary.md', 'utf8');
|
|
|
|
github.rest.issues.createComment({
|
|
issue_number: context.issue.number,
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
body: summary
|
|
});
|
|
|
|
notify-failure:
|
|
name: Notify on Failure
|
|
runs-on: ubuntu-latest
|
|
needs: [e2e-tests, wasm-tests, performance-tests, accessibility-tests]
|
|
if: failure()
|
|
|
|
steps:
|
|
- name: Notify Slack
|
|
if: env.SLACK_WEBHOOK_URL
|
|
uses: 8398a7/action-slack@v3
|
|
with:
|
|
status: failure
|
|
text: 'E2E tests failed on ${{ github.ref }}'
|
|
webhook_url: ${{ secrets.SLACK_WEBHOOK_URL }}
|
|
|
|
- name: Notify Email
|
|
if: env.EMAIL_RECIPIENTS
|
|
uses: dawidd6/action-send-mail@v3
|
|
with:
|
|
server_address: smtp.gmail.com
|
|
server_port: 587
|
|
username: ${{ secrets.EMAIL_USERNAME }}
|
|
password: ${{ secrets.EMAIL_PASSWORD }}
|
|
subject: 'E2E Tests Failed - ${{ github.repository }}'
|
|
body: 'E2E tests failed on branch ${{ github.ref }}. Please check the test results.'
|
|
to: ${{ env.EMAIL_RECIPIENTS }}
|