From 64ffd7ecc365094094b6981d1f5223d1141cfb4d Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sun, 15 Sep 2024 09:49:39 +0000 Subject: [PATCH] chore(CI): Updating cypress.yml workflow from template Signed-off-by: Nextcloud bot --- .github/workflows/cypress.yml | 98 ++++++++++++++++++++++------------- 1 file changed, 62 insertions(+), 36 deletions(-) diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml index 6d0ef6099..cab1b67f1 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/cypress.yml @@ -25,20 +25,11 @@ env: BRANCH: ${{ github.base_ref || github.ref_name }} jobs: - cypress: - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - # Run multiple copies of the current job in parallel - # Please increase the number or runners as your tests suite grows (0 based index for e2e tests) - containers: [0, 1, 2, 3, 4, 5, 6, 7] - # Hack as strategy.job-total includes the component and GitHub does not allow math expressions - # Always align this number with the total of e2e runners (max. index + 1) - total-containers: [8] - - name: runner ${{ matrix.containers }} + init: + runs-on: ubuntu-latest-low + outputs: + nodeVersion: ${{ steps.versions.outputs.nodeVersion }} + npmVersion: ${{ steps.versions.outputs.npmVersion }} env: PUPPETEER_SKIP_DOWNLOAD: true @@ -47,8 +38,8 @@ jobs: - name: Disabled on forks if: ${{ github.event.pull_request.head.repo.full_name != github.repository }} run: | - echo 'Can not approve PRs from forks' - exit 1 + echo 'Can not run cypress on forks' + exit 1 - name: Checkout app uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 @@ -67,11 +58,11 @@ jobs: uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 id: versions with: - fallbackNode: '^20' - fallbackNpm: '^10' + fallbackNode: "^20" + fallbackNpm: "^10" - name: Set up node ${{ steps.versions.outputs.nodeVersion }} - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 with: node-version: ${{ steps.versions.outputs.nodeVersion }} @@ -80,34 +71,69 @@ jobs: - name: Install node dependencies & build app run: | - # We'll install cypress in the cypress job - CYPRESS_INSTALL_BINARY=0 npm ci - npm run build --if-present + npm ci + TESTING=true npm run build --if-present + + - name: Save context + uses: buildjet/cache/save@v4 + with: + key: cypress-context-${{ github.run_id }} + path: ./ + + cypress: + runs-on: ubuntu-latest + needs: init + + strategy: + fail-fast: false + matrix: + # Run multiple copies of the current job in parallel + # Please increase the number or runners as your tests suite grows + containers: ['component', '1', '2', '3'] + + name: runner ${{ matrix.containers }} + + steps: + - name: Restore context + uses: buildjet/cache/save@v4 + with: + fail-on-cache-miss: true + key: cypress-context-${{ github.run_id }} + path: ./ + + - name: Set up node ${{ needs.init.outputs.nodeVersion }} + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + with: + node-version: ${{ needs.init.outputs.nodeVersion }} - - name: Install cypress - run: ./node_modules/cypress/bin/cypress install + - name: Set up npm ${{ needs.init.outputs.npmVersion }} + run: npm i -g 'npm@${{ needs.init.outputs.npmVersion }}' - name: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} cypress tests - uses: cypress-io/github-action@496e7dc0edc421a9de8a36a31c793340e00c61bf # v6.7.5 + uses: cypress-io/github-action@0da3c06ed8217b912deea9d8ee69630baed1737e # v6.7.6 with: - # We already installed the dependencies in the init job - install: false + record: ${{ secrets.CYPRESS_RECORD_KEY && true }} + parallel: ${{ secrets.CYPRESS_RECORD_KEY && true }} # cypress run type component: ${{ matrix.containers == 'component' }} - # Do not add Cypress record key config as this conflicts with cypress-split - # Cypress again tries to force users to buy there dashboard... + group: ${{ secrets.CYPRESS_RECORD_KEY && env.CYPRESS_GROUP }} + # cypress env + ci-build-id: ${{ secrets.CYPRESS_RECORD_KEY && env.CYPRESS_BUILD_ID }} + tag: ${{ secrets.CYPRESS_RECORD_KEY && github.event_name }} env: # Needs to be prefixed with CYPRESS_ CYPRESS_BRANCH: ${{ env.BRANCH }} # https://github.com/cypress-io/github-action/issues/124 COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }} # Needed for some specific code workarounds + TESTING: true GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SPLIT: ${{ matrix.total-containers }} - SPLIT_INDEX: ${{ matrix.containers == 'component' && 0 || matrix.containers }} + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + CYPRESS_BUILD_ID: ${{ github.sha }}-${{ github.run_number }} + CYPRESS_GROUP: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} - name: Upload snapshots - uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 + uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 if: always() with: name: snapshots_${{ matrix.containers }} @@ -115,10 +141,10 @@ jobs: - name: Extract NC logs if: failure() && matrix.containers != 'component' - run: docker logs nextcloud-cypress-tests_${{ env.APP_NAME }} > nextcloud.log + run: docker logs nextcloud-cypress-tests-${{ env.APP_NAME }} > nextcloud.log - name: Upload NC logs - uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 + uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 if: failure() && matrix.containers != 'component' with: name: nc_logs_${{ matrix.containers }} @@ -126,7 +152,7 @@ jobs: summary: runs-on: ubuntu-latest-low - needs: [cypress] + needs: [init, cypress] if: always() @@ -134,4 +160,4 @@ jobs: steps: - name: Summary status - run: if ${{ needs.cypress.result != 'success' && needs.cypress.result != 'skipped' }}; then exit 1; fi + run: if ${{ needs.init.result != 'success' || ( needs.cypress.result != 'success' && needs.cypress.result != 'skipped' ) }}; then exit 1; fi