From 4171f032147b6affcc0b20ff3688ac2ac21d97b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Go=CC=81mez=20Bachiller?= Date: Thu, 28 Mar 2024 12:58:06 +0100 Subject: [PATCH] ci: add e2e test sharding --- .github/workflows/e2e.yaml | 6 +-- .github/workflows/shard-e2e.yaml | 66 ++++++++++++++++++++++++++++++++ package.json | 36 ++++++++--------- playwright.config.ts | 3 +- 4 files changed, 89 insertions(+), 22 deletions(-) create mode 100644 .github/workflows/shard-e2e.yaml diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index bb276da..bafeb9c 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -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: diff --git a/.github/workflows/shard-e2e.yaml b/.github/workflows/shard-e2e.yaml new file mode 100644 index 0000000..08ff031 --- /dev/null +++ b/.github/workflows/shard-e2e.yaml @@ -0,0 +1,66 @@ +name: Run e2e tests + +on: + push: + branches: + - 'test-ci' + pull_request: + branches: + - 'test-ci' + +env: + MAILER_SECRET: E2E + AUTH_SECRET: E2E + +jobs: + e2e: + 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 tests on Node ${{ matrix.node-version }} + env: + DATABASE_URL: postgres://postgres@localhost/codex_test_${{ matrix.shardIndex}} + 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: Run e2e tests + run: yarn test:e2e --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 diff --git a/package.json b/package.json index 29f4cf2..8095163 100644 --- a/package.json +++ b/package.json @@ -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", @@ -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", @@ -55,14 +55,14 @@ "@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", @@ -70,11 +70,11 @@ "@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", @@ -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", @@ -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", diff --git a/playwright.config.ts b/playwright.config.ts index 510e18d..10476bb 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -8,6 +8,7 @@ dotenv.config({ path: '.env.test', }) +// eslint-disable-next-line import/no-default-export export default defineConfig({ fullyParallel: false, projects: [ @@ -22,7 +23,7 @@ export default defineConfig({ }, }, ], - reporter: 'html', + reporter: process.env.CI ? 'blob' : 'html', retries: 3, testDir: './e2e', use: {