From c0e92a1514d6dbc4e7663cad4095d5cce26506f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Molakvo=C3=A6=20=28skjnldsv=29?= Date: Sat, 14 Sep 2024 19:33:49 +0200 Subject: [PATCH 1/2] perf: fast cypress MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: John Molakvoæ (skjnldsv) --- .github/workflows/cypress.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml index 5d167a515..63f8d219d 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/cypress.yml @@ -25,11 +25,20 @@ env: BRANCH: ${{ github.base_ref || github.ref_name }} jobs: - init: + cypress: runs-on: ubuntu-latest - outputs: - nodeVersion: ${{ steps.versions.outputs.nodeVersion }} - npmVersion: ${{ steps.versions.outputs.npmVersion }} + + 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 }} env: PUPPETEER_SKIP_DOWNLOAD: true @@ -52,8 +61,8 @@ 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 @@ -65,7 +74,8 @@ jobs: - name: Install node dependencies & build app run: | - npm ci + # We'll install cypress in the cypress job + CYPRESS_INSTALL_BINARY=0 npm ci npm run build --if-present - name: Save context @@ -107,7 +117,7 @@ jobs: run: npm i -g 'npm@${{ needs.init.outputs.npmVersion }}' - name: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} cypress tests - uses: cypress-io/github-action@8d3918616d8ac34caa2b49afc8b408b6a872a6f5 # v6.7.1 + uses: cypress-io/github-action@496e7dc0edc421a9de8a36a31c793340e00c61bf # v6.7.5 with: record: ${{ secrets.CYPRESS_RECORD_KEY && true }} parallel: ${{ secrets.CYPRESS_RECORD_KEY && true }} @@ -137,7 +147,7 @@ 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 @@ -148,7 +158,7 @@ jobs: summary: runs-on: ubuntu-latest-low - needs: [init, cypress] + needs: [cypress] if: always() @@ -156,4 +166,4 @@ jobs: steps: - name: Summary status - run: if ${{ needs.init.result != 'success' || ( needs.cypress.result != 'success' && needs.cypress.result != 'skipped' ) }}; then exit 1; fi + run: if ${{ needs.cypress.result != 'success' && needs.cypress.result != 'skipped' }}; then exit 1; fi From df9666206c33a390633d0a8fbd7d204bec45cde0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Molakvo=C3=A6=20=28skjnldsv=29?= Date: Sat, 14 Sep 2024 19:51:09 +0200 Subject: [PATCH 2/2] chore: update @nextcloud/cypress MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: John Molakvoæ (skjnldsv) --- .github/workflows/cypress.yml | 56 ++++++++--------------------------- package-lock.json | 30 +++++++++++++++---- package.json | 2 +- 3 files changed, 37 insertions(+), 51 deletions(-) diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml index 63f8d219d..6d0ef6099 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/cypress.yml @@ -44,6 +44,12 @@ jobs: PUPPETEER_SKIP_DOWNLOAD: true steps: + - 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 + - name: Checkout app uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 @@ -78,55 +84,18 @@ jobs: CYPRESS_INSTALL_BINARY=0 npm ci npm run build --if-present - - name: Save context - uses: buildjet/cache/save@e376f15c6ec6dc595375c78633174c7e5f92dc0e # v3 - 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 (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 aling this number with the total of e2e runners (max. index + 1) - total-containers: [8] - - name: runner ${{ matrix.containers }} - - steps: - - name: Restore context - uses: buildjet/cache/restore@e376f15c6ec6dc595375c78633174c7e5f92dc0e # v3 - 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@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 - with: - node-version: ${{ needs.init.outputs.nodeVersion }} - - - name: Set up npm ${{ needs.init.outputs.npmVersion }} - run: npm i -g 'npm@${{ needs.init.outputs.npmVersion }}' + - name: Install cypress + run: ./node_modules/cypress/bin/cypress install - name: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} cypress tests uses: cypress-io/github-action@496e7dc0edc421a9de8a36a31c793340e00c61bf # v6.7.5 with: - record: ${{ secrets.CYPRESS_RECORD_KEY && true }} - parallel: ${{ secrets.CYPRESS_RECORD_KEY && true }} + # We already installed the dependencies in the init job + install: false # cypress run type component: ${{ matrix.containers == 'component' }} - 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 }} + # Do not add Cypress record key config as this conflicts with cypress-split + # Cypress again tries to force users to buy there dashboard... env: # Needs to be prefixed with CYPRESS_ CYPRESS_BRANCH: ${{ env.BRANCH }} @@ -134,7 +103,6 @@ jobs: COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }} # Needed for some specific code workarounds GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} SPLIT: ${{ matrix.total-containers }} SPLIT_INDEX: ${{ matrix.containers == 'component' && 0 || matrix.containers }} diff --git a/package-lock.json b/package-lock.json index 5725452bc..b66c14004 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ }, "devDependencies": { "@nextcloud/browserslist-config": "^3.0.1", - "@nextcloud/cypress": "^1.0.0-beta.8", + "@nextcloud/cypress": "^1.0.0-beta.9", "@nextcloud/eslint-config": "^8.4.1", "@nextcloud/sharing": "^0.2.3", "@nextcloud/stylelint-config": "^3.0.1", @@ -1681,15 +1681,14 @@ } }, "node_modules/@nextcloud/cypress": { - "version": "1.0.0-beta.8", - "resolved": "https://registry.npmjs.org/@nextcloud/cypress/-/cypress-1.0.0-beta.8.tgz", - "integrity": "sha512-VK3RyXj2HJISx0wUEs1yBBJ3fkDX5C1CAM92Px4Brf9IPz5YfCZAICvxjM8HIXPACR0yb5MUCtGz7E9hv1H/wA==", + "version": "1.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@nextcloud/cypress/-/cypress-1.0.0-beta.9.tgz", + "integrity": "sha512-i43skZoCkrr5H1L1PsYddzz/SjDlSNcTCrEcMJFRwoHiJo5giUNCz0b2lKEQBMtudP8J+BGfG+AIFA0LJ/oD2A==", "dev": true, - "license": "AGPL-3.0-or-later", "dependencies": { "dockerode": "^4.0.2", "fast-xml-parser": "^4.3.6", - "wait-on": "^7.2.0" + "wait-on": "^8.0.0" }, "engines": { "node": "^20.0.0", @@ -1699,6 +1698,25 @@ "cypress": "^13.2.0" } }, + "node_modules/@nextcloud/cypress/node_modules/wait-on": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.1.tgz", + "integrity": "sha512-1wWQOyR2LVVtaqrcIL2+OM+x7bkpmzVROa0Nf6FryXkS+er5Sa1kzFGjzZRqLnHa3n1rACFLeTwUqE1ETL9Mig==", + "dev": true, + "dependencies": { + "axios": "^1.7.7", + "joi": "^17.13.3", + "lodash": "^4.17.21", + "minimist": "^1.2.8", + "rxjs": "^7.8.1" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/@nextcloud/dialogs": { "version": "5.3.7", "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-5.3.7.tgz", diff --git a/package.json b/package.json index d2a6f015c..a82af6753 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ }, "devDependencies": { "@nextcloud/browserslist-config": "^3.0.1", - "@nextcloud/cypress": "^1.0.0-beta.8", + "@nextcloud/cypress": "^1.0.0-beta.9", "@nextcloud/eslint-config": "^8.4.1", "@nextcloud/sharing": "^0.2.3", "@nextcloud/stylelint-config": "^3.0.1",