Skip to content

Commit

Permalink
ci: add e2e test sharding
Browse files Browse the repository at this point in the history
  • Loading branch information
sgomez committed Mar 28, 2024
1 parent dfcc65a commit 17d5231
Show file tree
Hide file tree
Showing 8 changed files with 15,585 additions and 13,684 deletions.
31 changes: 31 additions & 0 deletions .github/workflows/cache-tests.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Run unit and integration tests

on:
push:
branches:
- 'test-ci'
pull_request:
branches:
- 'test-ci'

jobs:
tests:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [ 20.x ]
name: Run tests on Node ${{ matrix.node-version }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Enable Corepack
run: corepack enable
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile --prefer-offline
- name: Run tests
run: pnpm run test:ci
6 changes: 3 additions & 3 deletions .github/workflows/e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ jobs:
if: github.event_name == 'push' && github.repository == 'aulasoftwarelibre/codex' && (startsWith(github.ref, 'refs/heads/releases/') || startsWith(github.ref, 'refs/tags/v') )
services:
smtp:
image: "corpusops/mailhog:v1.0.1"
image: "inbucket/inbucket"
ports:
- 1025:1025
- 8025:8025
- 1025:2500
- 8025:9000
db:
image: "postgres:12"
env:
Expand Down
110 changes: 110 additions & 0 deletions .github/workflows/shard-e2e.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: Run e2e tests

on:
workflow_call:

#on:
# push:
# branches:
# - 'test-ci'
# pull_request:
# branches:
# - 'test-ci'

env:
MAILER_SECRET: E2E
AUTH_SECRET: E2E

jobs:
run-tests:
runs-on: ubuntu-latest
if: always()
services:
smtp:
image: "inbucket/inbucket"
ports:
- 1025:2500
- 8025:9000
db:
image: "postgres:12"
env:
POSTGRES_HOST_AUTH_METHOD: trust
POSTGRES_DB: codex_test
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
strategy:
fail-fast: false
matrix:
node-version: [ 20.x ]
shardIndex: [ 1, 2 ]
shardTotal: [ 2 ]
name: Run e2e shard ${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
env:
DATABASE_URL: postgres://postgres@localhost/codex_test_${{ matrix.shardIndex}}
NODE_ENV: test
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'yarn'
- name: Install dependencies
run: yarn install --frozen-lockfile
- name: Run database migrations
run: npx prisma migrate reset --force
- name: Store Playwright's Version
run: |
PLAYWRIGHT_VERSION=$(npm ls @playwright/test | grep @playwright | sed 's/.*@//')
echo "Playwright's Version: $PLAYWRIGHT_VERSION"
echo "PLAYWRIGHT_VERSION=$PLAYWRIGHT_VERSION" >> $GITHUB_ENV
- name: Cache Playwright Browsers for Playwright's Version
id: cache-playwright-browsers
uses: actions/cache@v3
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ env.PLAYWRIGHT_VERSION }}
- name: Setup Playwright
if: steps.cache-playwright-browsers.outputs.cache-hit != 'true'
run: npx playwright install chromium --with-deps
- name: Run e2e tests
run: npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
- name: Upload test report
uses: actions/upload-artifact@v4
if: always()
with:
name: blob-report-${{ matrix.shardIndex }}
path: blob-report/
retention-days: 1

merge-reports:
if: always()
needs: [run-tests]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node-version: [ 20.x ]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- 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: Merge into HTML Report
run: npx playwright merge-reports --reporter html ./all-blob-reports
- name: Upload HTML report
uses: actions/upload-artifact@v4
with:
name: html-report--attempt-${{ github.run_attempt }}
path: playwright-report
retention-days: 7
10 changes: 10 additions & 0 deletions .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,16 @@ jobs:
with:
node-version: ${{ matrix.node-version }}
cache: 'yarn'
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install dependencies
run: yarn install --frozen-lockfile
- name: Run tests
Expand Down
36 changes: 18 additions & 18 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
"coverage": "vitest run --coverage",
"test:ci": "NODE_ENV=test vitest --watch=false",
"test:ui": "NODE_ENV=test vitest --ui --coverage.enabled=true",
"pretest:e2e": "playwright install",
"pretest:e2e": "playwright install chromium --with-deps",
"test:e2e": "rimraf playwright && NODE_ENV=test playwright test",
"pretest:e2e:ui": "playwright install",
"pretest:e2e:ui": "playwright install chromium --with-deps",
"test:e2e:ui": "rimraf playwright && NODE_ENV=test playwright test --ui",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build",
Expand All @@ -28,13 +28,13 @@
},
"dependencies": {
"@aulasoftwarelibre/next-auth-firewall": "1.2.0",
"@auth/prisma-adapter": "^1.5.0",
"@auth/prisma-adapter": "^1.5.1",
"@heroicons/react": "^2.1.3",
"@nextui-org/react": "2.2.9",
"@opentelemetry/api": "^1.8.0",
"@prisma/client": "^5.11.0",
"date-fns": "^3.6.0",
"framer-motion": "^11.0.20",
"framer-motion": "^11.0.22",
"neverthrow": "^6.1.0",
"next": "14.1.4",
"next-auth": "5.0.0-beta.9",
Expand All @@ -55,26 +55,26 @@
"@commitlint/cli": "^19.2.1",
"@commitlint/config-conventional": "19.1.0",
"@playwright/test": "^1.42.1",
"@storybook/addon-essentials": "^8.0.4",
"@storybook/addon-interactions": "^8.0.4",
"@storybook/addon-links": "^8.0.4",
"@storybook/addon-onboarding": "^8.0.4",
"@storybook/addon-themes": "^8.0.4",
"@storybook/blocks": "^8.0.4",
"@storybook/nextjs": "^8.0.4",
"@storybook/react": "^8.0.4",
"@storybook/addon-essentials": "^8.0.5",
"@storybook/addon-interactions": "^8.0.5",
"@storybook/addon-links": "^8.0.5",
"@storybook/addon-onboarding": "^8.0.5",
"@storybook/addon-themes": "^8.0.5",
"@storybook/blocks": "^8.0.5",
"@storybook/nextjs": "^8.0.5",
"@storybook/react": "^8.0.5",
"@storybook/testing-library": "^0.2.2",
"@testcontainers/postgresql": "^10.7.2",
"@testing-library/jest-dom": "^6.4.2",
"@testing-library/react": "^14.2.2",
"@types/lodash.clonedeep": "^4.5.9",
"@types/node": "^20.11.30",
"@types/nodemailer": "^6.4.14",
"@types/react": "^18.2.69",
"@types/react": "^18.2.73",
"@types/react-dom": "^18.2.22",
"@types/uuid": "^9.0.8",
"@typescript-eslint/eslint-plugin": "^7.3.1",
"@typescript-eslint/parser": "^7.3.1",
"@typescript-eslint/eslint-plugin": "^7.4.0",
"@typescript-eslint/parser": "^7.4.0",
"@vitejs/plugin-react": "^4.2.1",
"@vitest/coverage-v8": "1.4.0",
"@vitest/ui": "1.4.0",
Expand All @@ -85,7 +85,7 @@
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-simple-import-sort": "^12.0.0",
"eslint-plugin-sort": "^3.0.1",
"eslint-plugin-sort": "^3.0.2",
"eslint-plugin-storybook": "^0.8.0",
"eslint-plugin-unicorn": "^51.0.1",
"eslint-plugin-unused-imports": "^3.1.0",
Expand All @@ -96,8 +96,8 @@
"postcss": "^8.4.38",
"prettier": "^3.2.5",
"prisma": "^5.11.0",
"storybook": "^8.0.4",
"tailwindcss": "^3.4.1",
"storybook": "^8.0.5",
"tailwindcss": "^3.4.3",
"testcontainers": "^10.7.2",
"tsx": "^4.7.1",
"typescript": "^5.4.3",
Expand Down
3 changes: 2 additions & 1 deletion playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ dotenv.config({
path: '.env.test',
})

// eslint-disable-next-line import/no-default-export
export default defineConfig({
fullyParallel: false,
projects: [
Expand All @@ -22,7 +23,7 @@ export default defineConfig({
},
},
],
reporter: 'html',
reporter: process.env.CI ? 'blob' : 'html',
retries: 3,
testDir: './e2e',
use: {
Expand Down
Loading

0 comments on commit 17d5231

Please sign in to comment.