From 12a623b6646d4390af40f9a5fd5e479ee7a14413 Mon Sep 17 00:00:00 2001 From: Mallepally Lokeshwar Reddy Date: Fri, 7 Jun 2024 19:04:14 +0530 Subject: [PATCH] Implement Cypress-recommended workflow by replacing test.yml with cypress.yml for enhanced E2E testing setup --- .github/workflows/cypress.yml | 112 ++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 .github/workflows/cypress.yml diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml new file mode 100644 index 00000000..8e758afc --- /dev/null +++ b/.github/workflows/cypress.yml @@ -0,0 +1,112 @@ +name: Cypress End-to-End Tests + +on: push + +jobs: + cypress-tests: + name: Run Cypress Tests + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + node: [18] + containers: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + + env: + CI: false + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Setup Node.js Environment + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + + - name: Cache Node.js modules + uses: actions/cache@v4 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ matrix.node }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node-${{ matrix.node }}- + + - name: Create .env File + run: | + echo "VITE_APP_FIREBASE_API_KEY=${{ secrets.VITE_APP_FIREBASE_API_KEY }}" >> .env + echo "VITE_APP_FIREBASE_PROJECT_ID=${{ secrets.VITE_APP_FIREBASE_PROJECT_ID }}" >> .env + echo "VITE_APP_FIREBASE_MESSAGING_SENDER_ID=${{ secrets.VITE_APP_FIREBASE_MESSAGING_SENDER_ID }}" >> .env + echo "VITE_APP_FIREBASE_APP_ID=${{ secrets.VITE_APP_FIREBASE_APP_ID }}" >> .env + echo "VITE_APP_FIREBASE_MEASUREMENTID=${{ secrets.VITE_APP_FIREBASE_MEASUREMENTID }}" >> .env + echo "VITE_APP_FIREBASE_FCM_VAPID_KEY=${{ secrets.VITE_APP_FIREBASE_FCM_VAPID_KEY }}" >> .env + echo "VITE_APP_AUTH_DOMAIN=${{ secrets.VITE_APP_AUTH_DOMAIN }}" >> .env + echo "VITE_APP_DATABASE_URL=${{ secrets.VITE_APP_DATABASE_URL }}" >> .env + echo "VITE_APP_USE_EMULATOR=true" >> .env + echo "SKIP_PREFLIGHT_CHECK=true" >> .env + echo "CI=false" >> .env + echo "CYPRESS_PROJECT_ID=${{ secrets.CYPRESS_PROJECT_ID }}" >> .env + + - name: Prepare Firebase Service Account + run: | + mkdir -p functions/private + echo "${{ secrets.FIREBASE_SERVICE_ACCOUNT }}" > functions/private/cl-dev-pk.json + + - name: Install Functions Dependencies + run: cd functions && npm install --legacy-peer-deps + + - name: Install Firebase CLI + run: npm install -g firebase-tools + + - name: Start Firebase Emulators + run: | + firebase emulators:start --import=./testdata --project ${{ secrets.VITE_APP_FIREBASE_PROJECT_ID }} & + sleep 15 + + - name: Run Cypress Tests + uses: cypress-io/github-action@v6 + with: + browser: chrome + record: true + tag: node-${{ matrix.node }} + parallel: true + config-file: cypress.config.js + group: "GitHub Actions" + install-command: npm install --legacy-peer-deps + build: npm run build + start: npm run dev + wait-on: "http://localhost:5173" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }} + COMMIT_INFO_BRANCH: ${{ github.ref_name }} + + print-results: + name: Print Cypress Cloud URL + needs: cypress-tests + runs-on: ubuntu-latest + if: always() + steps: + - name: Print Cypress Cloud URL + run: | + echo Cypress finished with: ${{ needs.cypress-tests.outcome }} + echo See results at ${{ needs.cypress-tests.outputs.resultsUrl }} + + handle-failure: + name: Handle Failure + if: ${{ failure() }} + runs-on: ubuntu-latest + steps: + - name: Upload Cypress Artifacts + uses: actions/upload-artifact@v4 + with: + name: Cypress Artifacts + path: | + cypress/screenshots + cypress/videos + if-no-files-found: ignore + + - name: Notify on Failure + run: echo "The workflow has failed!"