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