150 lines
5.3 KiB
YAML
150 lines
5.3 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
pull_request:
|
|
types: [opened, synchronize, reopened]
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
jobs:
|
|
test:
|
|
# Why Mac and Windows?
|
|
# I can't run electron playwright on ubuntu-latest and
|
|
# Linux support for Dyad is experimental so not as important
|
|
# as Mac + Windows
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [
|
|
# npm install is very slow
|
|
# { name: "windows-arm", image: "windows-11-arm" },
|
|
{ name: "windows", image: "windows-latest" },
|
|
{ name: "macos", image: "macos-latest" },
|
|
]
|
|
shard: [1, 2, 3, 4]
|
|
shardTotal: [4]
|
|
runs-on: ${{ matrix.os.image }}
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
- name: Initialize environment
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version-file: package.json
|
|
cache: npm
|
|
cache-dependency-path: package-lock.json
|
|
- name: Install node modules
|
|
run: npm ci --no-audit --no-fund --progress=false
|
|
- name: Presubmit check (e.g. lint, format)
|
|
# do not run this on Windows (it fails and not necessary)
|
|
# Only run on shard 1 to avoid redundant execution
|
|
if: contains(matrix.os.name, 'macos') && matrix.shard == 1
|
|
run: npm run presubmit
|
|
- name: Type-checking
|
|
# do not run this on windows (it's redunant)
|
|
# Only run on shard 1 to avoid redundant execution
|
|
if: contains(matrix.os.name, 'macos') && matrix.shard == 1
|
|
run: npm run ts
|
|
- name: Unit tests
|
|
# do not run this on windows (it's redunant)
|
|
# Only run on shard 1 to avoid redundant execution
|
|
if: contains(matrix.os.name, 'macos') && matrix.shard == 1
|
|
run: npm run test
|
|
- name: Setup pnpm
|
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
|
with:
|
|
version: latest
|
|
- name: Clone nextjs-template
|
|
run: git clone --depth 1 https://github.com/dyad-sh/nextjs-template.git nextjs-template
|
|
- name: Get pnpm store directory
|
|
id: pnpm-cache
|
|
shell: bash
|
|
run: |
|
|
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
|
- name: Setup pnpm cache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
|
|
key: ${{ matrix.os.name }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
|
restore-keys: |
|
|
${{ matrix.os.name }}-pnpm-store-
|
|
# Not strictly needed but makes the e2e tests faster (and less flaky)
|
|
- name: Install scaffold dependencies
|
|
run: cd scaffold && pnpm install
|
|
- name: Install nextjs-template dependencies
|
|
run: cd nextjs-template && pnpm install
|
|
- name: Install Chromium browser for Playwright
|
|
run: npx playwright install chromium --with-deps
|
|
- name: Build
|
|
env:
|
|
NODE_OPTIONS: "--max-old-space-size=4096"
|
|
run: npm run pre:e2e
|
|
- name: Prep test server
|
|
run: cd testing/fake-llm-server && npm install && npm run build && cd -
|
|
- name: E2E tests (Shard ${{ matrix.shard }}/4)
|
|
# You can add debug logging to make it easier to see what's failing
|
|
# by adding "DEBUG=pw:browser" in front.
|
|
# Use blob reporter for sharding and merge capabilities
|
|
run: DEBUG=pw:browser npx playwright test --shard=${{ matrix.shard }}/${{ matrix.shardTotal }}
|
|
- name: Upload shard results
|
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
if: ${{ !cancelled() }}
|
|
with:
|
|
name: blob-report-${{ matrix.os.name }}-shard-${{ matrix.shard }}
|
|
path: blob-report
|
|
retention-days: 1
|
|
|
|
merge-reports:
|
|
# Merge reports after playwright-tests, even if some shards have failed
|
|
if: ${{ !cancelled() }}
|
|
needs: [test]
|
|
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: lts/*
|
|
- name: Install dependencies
|
|
run: npm ci --no-audit --no-fund --progress=false
|
|
|
|
- name: Download blob reports from GitHub Actions Artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: all-blob-reports
|
|
pattern: blob-report-*
|
|
merge-multiple: true
|
|
|
|
- name: Debug - List downloaded blob reports
|
|
run: |
|
|
echo "Contents of all-blob-reports directory:"
|
|
ls -la all-blob-reports/
|
|
echo "File sizes and details:"
|
|
find all-blob-reports/ -type f -exec ls -lh {} \; || echo "No files found"
|
|
|
|
- name: Merge into HTML Report
|
|
run: PLAYWRIGHT_HTML_OUTPUT_DIR=playwright-report npx playwright merge-reports --config=merge.config.ts ./all-blob-reports
|
|
|
|
- name: Debug - List playwright-report contents
|
|
run: |
|
|
echo "Contents of playwright-report directory:"
|
|
ls -la playwright-report/ || echo "playwright-report directory does not exist"
|
|
echo "Current directory contents:"
|
|
ls -la
|
|
|
|
- name: Upload HTML report
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: html-report--attempt-${{ github.run_attempt }}
|
|
path: playwright-report
|
|
retention-days: 3
|