diff --git a/.github/workflows/e2e-playwright.yml b/.github/workflows/e2e-playwright.yml index 5563e0e9fd9..71988af629a 100644 --- a/.github/workflows/e2e-playwright.yml +++ b/.github/workflows/e2e-playwright.yml @@ -75,7 +75,32 @@ jobs: name: webpack-stats path: client/public/stats.json - playwright-run: + build-new-api: + name: Build New Api (Container) + runs-on: ubuntu-22.04 + + steps: + - name: Checkout Source Files + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + submodules: 'recursive' + + - name: Create Image + run: | + docker build \ + -t fcc-api \ + -f docker/api/Dockerfile . + + - name: Save Image + run: docker save fcc-api > api-artifact.tar + + - name: Upload Api Artifact + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + with: + name: api-artifact + path: api-artifact.tar + + playwright-run-old-api: name: E2E Test runs-on: ubuntu-22.04 needs: build-client @@ -156,13 +181,87 @@ jobs: - uses: actions/upload-artifact@v4 if: ${{ !cancelled() }} with: - name: playwright-report-${{ matrix.browsers }} + name: playwright-report-old-api-${{ matrix.browsers }} path: playwright/reporter retention-days: 30 - name: Upload screenshots if: failure() uses: actions/upload-artifact@v4 with: - name: screenshots-${{ matrix.browsers }} + name: screenshots-old-api-${{ matrix.browsers }} path: playwright/test-results retention-days: 14 + + playwright-run-new-api: + name: Run Playwright Tests (with new Api) + runs-on: ubuntu-22.04 + needs: [build-client, build-new-api] + strategy: + fail-fast: false + matrix: + # Extend this to include firefox and webkit once chromium is working. + browsers: [chromium] + node-version: [20] + + steps: + - name: Set Action Environment Variables + run: | + echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> $GITHUB_ENV + + - name: Checkout Source Files + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + - uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 + + - name: Unpack Client Artifact + run: | + tar -xf client-artifact/client-artifact.tar + rm client-artifact/client-artifact.tar + + - name: Load Api Image + run: | + docker load < api-artifact/api-artifact.tar + rm api-artifact/api-artifact.tar + + - name: Setup pnpm + uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d #v3.0.0 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + with: + node-version: ${{ matrix.node-version }} + + - name: Install Dependencies + run: pnpm install + + - name: Set freeCodeCamp Environment Variables (needed by api) + run: | + cp sample.env .env + + - name: Install playwright dependencies + run: npx playwright install --with-deps + + - name: Install and Build + run: | + pnpm install + pnpm run create:shared + pnpm run build:curriculum + + - name: Start apps + run: | + docker compose up -d + pnpm run serve:client-ci & + sleep 10 + + - name: Seed Database with Certified User + run: pnpm run seed:certified-user + + - name: Run playwright tests + run: npx playwright test --project=${{ matrix.browsers }} --grep-invert 'third-party-donation.spec.ts' + + - uses: actions/upload-artifact@v4 + if: ${{ !cancelled() }} + with: + name: playwright-report-${{ matrix.browsers }} + path: playwright/reporter + retention-days: 30 diff --git a/.github/workflows/e2e-with-new-api.yml b/.github/workflows/e2e-with-new-api.yml deleted file mode 100644 index c62b8ae23a8..00000000000 --- a/.github/workflows/e2e-with-new-api.yml +++ /dev/null @@ -1,174 +0,0 @@ -name: CI - E2E - Containers -on: - workflow_dispatch: - workflow_run: - workflows: ['CI - Node.js'] - types: - - completed - pull_request: - paths-ignore: - - 'docs/**' - branches: - - 'main' - - 'next-**' - - 'e2e-**' - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - build-client: - name: Build Client - runs-on: ubuntu-22.04 - strategy: - matrix: - node-version: [20] - - steps: - - name: Checkout Source Files - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - with: - submodules: 'recursive' - - - name: Checkout client-config - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - with: - repository: freeCodeCamp/client-config - path: client-config - - - name: Setup pnpm - uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d #v3.0.0 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 - with: - node-version: ${{ matrix.node-version }} - cache: pnpm - - - name: Set freeCodeCamp Environment Variables - run: cp sample.env .env - - - name: Install and Build - run: | - pnpm install - pnpm run build - - - name: Move serve.json to Public Folder - run: cp client-config/serve.json client/public/serve.json - - # We tar them for performance reasons - uploading a lot of files is slow. - - name: Tar Files - run: tar -cf client-artifact.tar client/public - - - name: Upload Client Artifact - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - name: client-artifact - path: client-artifact.tar - - - name: Upload Webpack Stats - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - name: webpack-stats - path: client/public/stats.json - - build-new-api: - name: Build New Api (Container) - runs-on: ubuntu-22.04 - - steps: - - name: Checkout Source Files - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - with: - submodules: 'recursive' - - - name: Create Image - run: | - docker build \ - -t fcc-api \ - -f docker/api/Dockerfile . - - - name: Save Image - run: docker save fcc-api > api-artifact.tar - - - name: Upload Api Artifact - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 - with: - name: api-artifact - path: api-artifact.tar - - playwright-run: - name: Run Playwright Tests (with new Api) - runs-on: ubuntu-22.04 - needs: [build-client, build-new-api] - strategy: - fail-fast: false - matrix: - # Extend this to include firefox and webkit once chromium is working. - browsers: [chromium] - node-version: [20] - - steps: - - name: Set Action Environment Variables - run: | - echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> $GITHUB_ENV - - - name: Checkout Source Files - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - - uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 - - - name: Unpack Client Artifact - run: | - tar -xf client-artifact/client-artifact.tar - rm client-artifact/client-artifact.tar - - - name: Load Api Image - run: | - docker load < api-artifact/api-artifact.tar - rm api-artifact/api-artifact.tar - - # Cypress calls some pnpm scripts, so we need to install pnpm. - - name: Setup pnpm - uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d #v3.0.0 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 - with: - node-version: ${{ matrix.node-version }} - - - name: Install Dependencies - run: pnpm install - - - name: Set freeCodeCamp Environment Variables (needed by api) - run: | - cp sample.env .env - - - name: Install playwright dependencies - run: npx playwright install --with-deps - - - name: Install and Build - run: | - pnpm install - pnpm run create:shared - pnpm run build:curriculum - - - name: Start apps - run: | - docker compose up -d - pnpm run serve:client-ci & - sleep 10 - - - name: Seed Database with Certified User - run: pnpm run seed:certified-user - - - name: Run playwright tests - run: npx playwright test --project=${{ matrix.browsers }} --grep-invert 'third-party-donation.spec.ts' - - - uses: actions/upload-artifact@v4 - if: ${{ !cancelled() }} - with: - name: playwright-report-${{ matrix.browsers }} - path: playwright/reporter - retention-days: 30