name: CI - E2E - Web browser on: workflow_dispatch: workflow_run: workflows: ['CI - Node.js'] types: - completed # TODO: refactor with a workflow_call pull_request: paths-ignore: - 'docs/**' branches: - 'main' - 'next-**' - 'e2e-**' jobs: build-client: name: Build Client runs-on: ubuntu-22.04 strategy: matrix: node-version: [20.x] steps: - name: Checkout Source Files uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 - name: Checkout client-config uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 with: repository: freeCodeCamp/client-config path: client-config - name: Setup pnpm uses: pnpm/action-setup@v2 with: version: 8 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@1a4442cacd436585916779262731d5b162bc6ec7 # v3 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@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 with: name: client-artifact path: client-artifact.tar - name: Upload Webpack Stats uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3 with: name: webpack-stats path: client/public/stats.json cypress-run: name: Test runs-on: ubuntu-22.04 needs: build-client strategy: fail-fast: false matrix: browsers: [chrome, firefox, electron] node-version: [20.x] include: - browsers: electron spec: cypress/e2e/default/learn/challenges/projects.ts services: mongodb: image: mongo:4.4 ports: - 27017:27017 # We need mailhog to catch any emails the api tries to send. mailhog: image: mailhog/mailhog ports: - 1025:1025 steps: - name: Set Action Environment Variables run: | echo "CYPRESS_RECORD_KEY=${{ secrets.CYPRESS_RECORD_KEY }}" >> $GITHUB_ENV echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> $GITHUB_ENV - name: Checkout Source Files uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3 with: name: client-artifact - name: Unpack Client Artifact run: | tar -xf client-artifact.tar rm client-artifact.tar - name: Setup pnpm uses: pnpm/action-setup@v2 with: version: 8 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@1a4442cacd436585916779262731d5b162bc6ec7 # v3 with: node-version: ${{ matrix.node-version }} # cypress-io/github-action caches the store, so we should not cache it # here. - name: Set freeCodeCamp Environment Variables run: cp sample.env .env - name: Install and Build run: | pnpm install pnpm run create:shared pnpm run build:curriculum pnpm run build:server - name: Seed Database run: pnpm run seed # start-ci uses pm2, so it needs to be installed globally - name: Install pm2 run: npm i -g pm2 - name: Cypress run uses: cypress-io/github-action@v6 with: record: ${{ env.CYPRESS_RECORD_KEY != 0 }} start: pnpm run start-ci wait-on: http://localhost:8000 wait-on-timeout: 1200 config: baseUrl=http://localhost:8000 browser: ${{ matrix.browsers }} spec: ${{ matrix.spec }}