From 66daf69a5d7680ee11e524243d5c4d56f8ca5632 Mon Sep 17 00:00:00 2001 From: Marie <51697796+ijreilly@users.noreply.github.com> Date: Wed, 24 Dec 2025 16:30:48 +0100 Subject: [PATCH] [Tests E2E] Attempt to improve speed (#16755) This PR presents an attempt to increase the speed of the tests to run, by using the same front-end built for Front and E2E CIs. It implied merging front and E2E in one CI, but allowed to still have two different status, and to have E2E run even if no front files have changed. Also now using depot to build FE. image --- .github/workflows/ci-e2e.yaml | 136 -------------------------------- .github/workflows/ci-front.yaml | 134 ++++++++++++++++++++++++++++++- 2 files changed, 132 insertions(+), 138 deletions(-) delete mode 100644 .github/workflows/ci-e2e.yaml diff --git a/.github/workflows/ci-e2e.yaml b/.github/workflows/ci-e2e.yaml deleted file mode 100644 index 65a561d7ab..0000000000 --- a/.github/workflows/ci-e2e.yaml +++ /dev/null @@ -1,136 +0,0 @@ -name: CI E2E - -on: - push: - branches: - - main - pull_request: - types: [opened, synchronize, reopened, labeled] - -permissions: - contents: read - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} - -jobs: - changed-files-check: - uses: ./.github/workflows/changed-files.yaml - with: - files: | - packages/** - playwright.config.ts - .github/workflows/ci-e2e.yaml - test: - runs-on: ubuntu-latest - needs: changed-files-check - if: needs.changed-files-check.outputs.any_changed == 'true' && ( github.event_name == 'push' || (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'run-e2e'))) - timeout-minutes: 30 - env: - # https://github.com/actions/runner-images/issues/70#issuecomment-589562148 - NODE_OPTIONS: "--max-old-space-size=10240" - services: - postgres: - image: twentycrm/twenty-postgres-spilo - env: - PGUSER_SUPERUSER: postgres - PGPASSWORD_SUPERUSER: postgres - ALLOW_NOSSL: "true" - SPILO_PROVIDER: "local" - ports: - - 5432:5432 - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - redis: - image: redis - ports: - - 6379:6379 - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - uses: actions/setup-node@v4 - with: - node-version: lts/* - - - name: Check system resources - run: | - echo "Available memory:" - free -h - echo "Available disk space:" - df -h - echo "CPU info:" - lscpu - - - name: Install dependencies - uses: ./.github/actions/yarn-install - - - name: Build twenty-shared - run: npx nx build twenty-shared - - - name: Install Playwright Browsers - run: npx nx setup twenty-e2e-testing - - - name: Setup environment files - run: | - cp packages/twenty-front/.env.example packages/twenty-front/.env - npx nx reset:env:e2e-testing-server twenty-server - - - name: Build frontend - run: NODE_ENV=production NODE_OPTIONS="--max-old-space-size=10240" npx nx build twenty-front - - - name: Build server - run: npx nx build twenty-server - - - name: Create and setup database - run: | - PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d postgres -c 'CREATE DATABASE "default";' - PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d postgres -c 'CREATE DATABASE "test";' - npx nx run twenty-server:database:reset - - - name: Start server - run: | - npx nx start twenty-server & - echo "Waiting for server to be ready..." - timeout 60 bash -c 'until curl -s http://localhost:3000/health; do sleep 2; done' - - - name: Start frontend - run: | - npm_config_yes=true npx serve -s packages/twenty-front/build -l 3001 & - echo "Waiting for frontend to be ready..." - timeout 60 bash -c 'until curl -s http://localhost:3001; do sleep 2; done' - - - name: Start worker - run: | - npx nx run twenty-server:worker & - echo "Worker started" - - - name: Run Playwright tests - run: npx nx test twenty-e2e-testing - - - uses: actions/upload-artifact@v4 - if: always() - with: - name: playwright-report - path: packages/twenty-e2e-testing/run_results/ - retention-days: 30 - - - uses: actions/upload-artifact@v4 - if: always() - with: - name: playwright-report - path: packages/twenty-e2e-testing/playwright-report/ - retention-days: 30 - ci-e2e-status-check: - if: always() && !cancelled() - timeout-minutes: 5 - runs-on: ubuntu-latest - needs: [changed-files-check, test] - steps: - - name: Fail job if any needs failed - if: contains(needs.*.result, 'failure') - run: exit 1 diff --git a/.github/workflows/ci-front.yaml b/.github/workflows/ci-front.yaml index ea9fc1c5dc..ecd7dbc2e4 100644 --- a/.github/workflows/ci-front.yaml +++ b/.github/workflows/ci-front.yaml @@ -1,4 +1,4 @@ -name: CI Front +name: CI Front and E2E on: push: @@ -28,6 +28,13 @@ jobs: packages/twenty-front/** packages/twenty-ui/** packages/twenty-shared/** + changed-files-check-e2e: + uses: ./.github/workflows/changed-files.yaml + with: + files: | + packages/** + playwright.config.ts + .github/workflows/ci-front.yaml front-sb-build: needs: changed-files-check if: needs.changed-files-check.outputs.any_changed == 'true' @@ -189,7 +196,7 @@ jobs: needs: changed-files-check if: needs.changed-files-check.outputs.any_changed == 'true' timeout-minutes: 30 - runs-on: ubuntu-latest + runs-on: depot-ubuntu-24.04-8 env: NODE_OPTIONS: "--max-old-space-size=10240" steps: @@ -207,6 +214,120 @@ jobs: run: npx nx reset:env twenty-front - name: Build frontend run: npx nx build twenty-front + - name: Upload frontend build artifact + uses: actions/upload-artifact@v4 + with: + name: frontend-build + path: packages/twenty-front/build + retention-days: 1 + e2e-test: + runs-on: ubuntu-latest + needs: [changed-files-check-e2e, front-build] + if: | + always() && + needs.changed-files-check-e2e.outputs.any_changed == 'true' && + (needs.front-build.result == 'success' || needs.front-build.result == 'skipped') && + (github.event_name == 'push' || (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'run-e2e'))) + timeout-minutes: 30 + env: + NODE_OPTIONS: "--max-old-space-size=10240" + services: + postgres: + image: twentycrm/twenty-postgres-spilo + env: + PGUSER_SUPERUSER: postgres + PGPASSWORD_SUPERUSER: postgres + ALLOW_NOSSL: "true" + SPILO_PROVIDER: "local" + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + redis: + image: redis + ports: + - 6379:6379 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-node@v4 + with: + node-version: lts/* + + - name: Check system resources + run: | + echo "Available memory:" + free -h + echo "Available disk space:" + df -h + echo "CPU info:" + lscpu + + - name: Install dependencies + uses: ./.github/actions/yarn-install + + - name: Build twenty-shared + run: npx nx build twenty-shared + + - name: Install Playwright Browsers + run: npx nx setup twenty-e2e-testing + + - name: Setup environment files + run: | + cp packages/twenty-front/.env.example packages/twenty-front/.env + npx nx reset:env:e2e-testing-server twenty-server + + - name: Download frontend build artifact + if: needs.front-build.result == 'success' + uses: actions/download-artifact@v4 + with: + name: frontend-build + path: packages/twenty-front/build + + - name: Build frontend (if not available from front-build) + if: needs.front-build.result == 'skipped' + run: NODE_ENV=production NODE_OPTIONS="--max-old-space-size=10240" npx nx build twenty-front + + - name: Build server + run: npx nx build twenty-server + + - name: Create and setup database + run: | + PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d postgres -c 'CREATE DATABASE "default";' + PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d postgres -c 'CREATE DATABASE "test";' + npx nx run twenty-server:database:reset + + - name: Start server + run: | + npx nx start twenty-server & + echo "Waiting for server to be ready..." + timeout 60 bash -c 'until curl -s http://localhost:3000/health; do sleep 2; done' + + - name: Start frontend + run: | + npm_config_yes=true npx serve -s packages/twenty-front/build -l 3001 & + echo "Waiting for frontend to be ready..." + timeout 60 bash -c 'until curl -s http://localhost:3001; do sleep 2; done' + + - name: Start worker + run: | + npx nx run twenty-server:worker & + echo "Worker started" + + - name: Run Playwright tests + run: npx nx test twenty-e2e-testing + + - uses: actions/upload-artifact@v4 + if: always() + with: + name: playwright-report + path: packages/twenty-e2e-testing/run_results/ + retention-days: 30 + ci-front-status-check: if: always() && !cancelled() timeout-minutes: 5 @@ -225,3 +346,12 @@ jobs: - name: Fail job if any needs failed if: contains(needs.*.result, 'failure') run: exit 1 + ci-e2e-status-check: + if: always() && !cancelled() + timeout-minutes: 5 + runs-on: ubuntu-latest + needs: [changed-files-check-e2e, e2e-test] + steps: + - name: Fail job if any needs failed + if: contains(needs.*.result, 'failure') + run: exit 1