diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 6fca08bcd8..8a54eb5f74 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -254,15 +254,6 @@ jobs: npx playwright merge-reports --reporter html ./all-blob-reports npx playwright merge-reports --reporter json ./all-blob-reports > merged_reports.json - # FIXME(serhalp) Once we recover access to the SquidlifyBot Slack App, reenable this. - # - name: Notify Slack - # if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || github.head_ref == 'main' - # run: npx playwright-slack-report -j merged_reports.json -c tests/playwright-slack-conf.json - # env: - # SLACK_BOT_USER_OAUTH_TOKEN: ${{ secrets.SLACK_BOT_USER_OAUTH_TOKEN }} - # RESULTS_VERSION: ${{ matrix.version }} - # RESULTS_URL: ${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}} - - name: Upload HTML report uses: actions/upload-artifact@v4 with: diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml index 39e1d48ee4..90d9bf05f4 100644 --- a/.github/workflows/test-e2e.yml +++ b/.github/workflows/test-e2e.yml @@ -74,19 +74,11 @@ jobs: if [ "${VERSION_SPEC}" != "[" ]; then VERSION_SPEC+="," fi - VERSION_SPEC+="{\"selector\":\"$SELECTOR\"" - - if [ "$SELECTOR" == "latest" ]; then - VERSION_SPEC+=",\"tag\":\"$(curl -s https://api.github.com/repos/vercel/next.js/releases/latest | jq -r .tag_name)\"" - elif [ "$SELECTOR" == "canary" ]; then - VERSION_SPEC+=",\"tag\":\"$(curl -s https://api.github.com/repos/vercel/next.js/releases | jq -r '.[] | select(.prerelease == true) | .tag_name' | head -n 1)\"" - else - VERSION_SPEC+=",\"tag\":\"v$SELECTOR\"" - fi - VERSION_SPEC+=",\"version\":\"$(npm view next@$SELECTOR version)\"" + VERSION=$(npm view next@$SELECTOR version) + TAG="v$VERSION" - VERSION_SPEC+="}" + VERSION_SPEC+="{\"selector\":\"$SELECTOR\",\"tag\":\"$TAG\",\"version\":\"$VERSION\"}" done VERSION_SPEC+="]" echo "version_spec=$VERSION_SPEC" >> $GITHUB_OUTPUT @@ -253,9 +245,6 @@ jobs: id: publish-test-results if: success() || failure() run: | - echo "slackEvent<> $GITHUB_OUTPUT - deno run -A tools/deno/junit2slack.ts --dir artifacts --version ${{matrix.version_spec.selector}} --runUrl ${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}} >> $GITHUB_OUTPUT - echo "NETLIFY_EOF" >> $GITHUB_OUTPUT deno run -A tools/deno/junit2json.ts artifacts ${{ matrix.version_spec.tag }} > report/test-results.json deno run -A tools/deno/generate-md.ts >> $GITHUB_STEP_SUMMARY @@ -267,13 +256,3 @@ jobs: # actual filename. name: ${{matrix.version_spec.selector}}-test-results.json path: report/test-results.json - - # FIXME(serhalp) Once we recover access to the SquidlifyBot Slack App, reenable this. - # - name: Notify Slack - # if: ${{ (success() || failure()) && github.event_name == 'schedule' }} - # uses: slackapi/slack-github-action@v1.26.0 - # env: - # SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} - # SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK - # with: - # payload: ${{ steps.publish-test-results.outputs.slackEvent }} diff --git a/e2e-report/package-lock.json b/e2e-report/package-lock.json index da3b0211dd..a3d21ad1b0 100644 --- a/e2e-report/package-lock.json +++ b/e2e-report/package-lock.json @@ -1582,9 +1582,9 @@ } }, "node_modules/daisyui": { - "version": "4.12.12", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.12.12.tgz", - "integrity": "sha512-xmCZ4piuWOjhNyB0VDKczB5vKFCipTA7UxaZNOzCz6cT8kvWgv5BDtUo+Hk9gOFufByOlfuBdzLpfhY5GsebTQ==", + "version": "4.12.13", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.12.13.tgz", + "integrity": "sha512-BnXyQoOByUF/7wSdIKubyhXxbtL8gxwY3u2cNMkxGP39TSVJqMmlItqtpY903fQnLI/NokC+bc+ZV+PEPsppPw==", "dev": true, "license": "MIT", "dependencies": { @@ -21003,9 +21003,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz", - "integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==", + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", + "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package-lock.json b/package-lock.json index 150347ead9..91599cc6d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,13 +11,13 @@ "devDependencies": { "@fastly/http-compute-js": "1.1.4", "@netlify/blobs": "^8.1.0", - "@netlify/build": "^29.55.2", + "@netlify/build": "^29.55.3", "@netlify/edge-bundler": "^12.2.3", "@netlify/edge-functions": "^2.11.0", "@netlify/eslint-config-node": "^7.0.1", "@netlify/functions": "^2.8.2", "@netlify/serverless-functions-api": "^1.30.1", - "@netlify/zip-it-and-ship-it": "^9.40.2", + "@netlify/zip-it-and-ship-it": "^9.41.0", "@opentelemetry/api": "^1.8.0", "@opentelemetry/exporter-trace-otlp-http": "^0.51.0", "@opentelemetry/resources": "^1.24.0", @@ -3858,16 +3858,16 @@ } }, "node_modules/@mswjs/interceptors": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.29.1.tgz", - "integrity": "sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==", + "version": "0.36.5", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.36.5.tgz", + "integrity": "sha512-aQ8WF5zQwOdcxLsxSEk9Jd01GgGb80xxqCaiDDlewhtwqpSm8MOvUHslwPydVirasdW09++NxDNNftm1vLY8yA==", "dev": true, "dependencies": { "@open-draft/deferred-promise": "^2.2.0", "@open-draft/logger": "^0.3.0", "@open-draft/until": "^2.0.0", "is-node-process": "^1.2.0", - "outvariant": "^1.2.1", + "outvariant": "^1.4.3", "strict-event-emitter": "^0.5.1" }, "engines": { @@ -3890,9 +3890,9 @@ } }, "node_modules/@netlify/build": { - "version": "29.55.2", - "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.55.2.tgz", - "integrity": "sha512-sXWDIeKtRWc6S9+dG3lCdTSNSB9XfhNFk80kG600sI3ytkhF5rPk6ijJw4Y7drhruCrYFpsDwlPxGY9kBjshBw==", + "version": "29.55.3", + "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.55.3.tgz", + "integrity": "sha512-oMLi3GLWpppsUjzkDsWklmkUuTcAAE5trBK1dOydKX6eG+3+5hKHNxLoRWeyzRDCmYduIELZQNiDRv8Q1CCCNQ==", "dev": true, "dependencies": { "@bugsnag/js": "^7.0.0", @@ -3901,12 +3901,12 @@ "@netlify/config": "^20.19.0", "@netlify/edge-bundler": "12.2.3", "@netlify/framework-info": "^9.8.13", - "@netlify/functions-utils": "^5.2.91", + "@netlify/functions-utils": "^5.2.92", "@netlify/git-utils": "^5.1.1", "@netlify/opentelemetry-utils": "^1.2.1", "@netlify/plugins-list": "^6.80.0", "@netlify/run-utils": "^5.1.1", - "@netlify/zip-it-and-ship-it": "9.40.2", + "@netlify/zip-it-and-ship-it": "9.41.0", "@sindresorhus/slugify": "^2.0.0", "ansi-escapes": "^6.0.0", "chalk": "^5.0.0", @@ -4792,12 +4792,12 @@ } }, "node_modules/@netlify/functions-utils": { - "version": "5.2.91", - "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.2.91.tgz", - "integrity": "sha512-PezRTuKzKzIbWu71tykioHS7W2Tk4wiGZqkkYzm92FeLRlubRERC9Dwv3Y5LFFNQsWXs701l7CVTojHrpSiA0w==", + "version": "5.2.92", + "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.2.92.tgz", + "integrity": "sha512-JJd4tPzjccNDYvizmnpYbYJru/Cdx2YxuFA6kvoaTkfGQSBH1N3n2erMq17D2dXqnmG0vLfrpxFHZzZ41SzknA==", "dev": true, "dependencies": { - "@netlify/zip-it-and-ship-it": "9.40.2", + "@netlify/zip-it-and-ship-it": "9.41.0", "cpy": "^9.0.0", "path-exists": "^5.0.0" }, @@ -5042,9 +5042,9 @@ } }, "node_modules/@netlify/zip-it-and-ship-it": { - "version": "9.40.2", - "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.40.2.tgz", - "integrity": "sha512-CkAwLnqFqhV9hNJO8HxMjd+g2HYtGevjo4gP1P84Sf50HBFyBE2cavfXNaBa1TfNq5/92CixnXz4YptU1DIOOw==", + "version": "9.41.0", + "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.41.0.tgz", + "integrity": "sha512-mkrFISaiD7t7Z/HFLR43uXcch/xKxh1tbISoKj5guDjuV8n8+cl48icpTC49DYNr8uK7//PaKoWjD0H2AIUfqw==", "dev": true, "dependencies": { "@babel/parser": "^7.22.5", @@ -7071,9 +7071,9 @@ } }, "node_modules/@types/node": { - "version": "20.16.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.11.tgz", - "integrity": "sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==", + "version": "20.16.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.13.tgz", + "integrity": "sha512-GjQ7im10B0labo8ZGXDGROUl9k0BNyDgzfGpb4g/cl+4yYDWVKcozANF4FGr4/p0O/rAkQClM6Wiwkije++1Tg==", "dev": true, "dependencies": { "undici-types": "~6.19.2" @@ -14459,9 +14459,9 @@ } }, "node_modules/memfs": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.12.0.tgz", - "integrity": "sha512-74wDsex5tQDSClVkeK1vtxqYCAgCoXxx+K4NSHzgU/muYVYByFqa+0RnrPO9NM6naWm1+G9JmZ0p6QHhXmeYfA==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.0.tgz", + "integrity": "sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==", "dev": true, "dependencies": { "@jsonjoy.com/json-pack": "^1.0.3", @@ -15047,9 +15047,9 @@ "dev": true }, "node_modules/msw": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.3.4.tgz", - "integrity": "sha512-sHMlwrajgmZSA2l1o7qRSe+azm/I+x9lvVVcOxAzi4vCtH8uVPJk1K5BQYDkzGl+tt0RvM9huEXXdeGrgcc79g==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.4.12.tgz", + "integrity": "sha512-upQMKZt0fYIB0Gj6gKc5i/PK4JrICTu3ItfXiju3FTdgQLaqARv7+jugPCsOkrWpTzzjo5iLW+4F6L/mGNukbA==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -15057,7 +15057,7 @@ "@bundled-es-modules/statuses": "^1.0.1", "@bundled-es-modules/tough-cookie": "^0.1.6", "@inquirer/confirm": "^3.0.0", - "@mswjs/interceptors": "^0.29.0", + "@mswjs/interceptors": "^0.36.5", "@open-draft/until": "^2.1.0", "@types/cookie": "^0.6.0", "@types/statuses": "^2.0.4", @@ -15065,10 +15065,10 @@ "graphql": "^16.8.1", "headers-polyfill": "^4.0.2", "is-node-process": "^1.2.0", - "outvariant": "^1.4.2", - "path-to-regexp": "^6.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", "strict-event-emitter": "^0.5.1", - "type-fest": "^4.9.0", + "type-fest": "^4.26.1", "yargs": "^17.7.2" }, "bin": { @@ -15081,7 +15081,7 @@ "url": "https://github.com/sponsors/mswjs" }, "peerDependencies": { - "typescript": ">= 4.7.x" + "typescript": ">= 4.8.x" }, "peerDependenciesMeta": { "typescript": { @@ -15151,9 +15151,9 @@ } }, "node_modules/msw/node_modules/type-fest": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.23.0.tgz", - "integrity": "sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==", + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", + "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", "dev": true, "engines": { "node": ">=16" @@ -32017,9 +32017,9 @@ "dev": true }, "node_modules/outvariant": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.2.tgz", - "integrity": "sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", "dev": true }, "node_modules/p-cancelable": { @@ -38872,16 +38872,16 @@ } }, "@mswjs/interceptors": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.29.1.tgz", - "integrity": "sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==", + "version": "0.36.5", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.36.5.tgz", + "integrity": "sha512-aQ8WF5zQwOdcxLsxSEk9Jd01GgGb80xxqCaiDDlewhtwqpSm8MOvUHslwPydVirasdW09++NxDNNftm1vLY8yA==", "dev": true, "requires": { "@open-draft/deferred-promise": "^2.2.0", "@open-draft/logger": "^0.3.0", "@open-draft/until": "^2.0.0", "is-node-process": "^1.2.0", - "outvariant": "^1.2.1", + "outvariant": "^1.4.3", "strict-event-emitter": "^0.5.1" } }, @@ -38898,9 +38898,9 @@ "dev": true }, "@netlify/build": { - "version": "29.55.2", - "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.55.2.tgz", - "integrity": "sha512-sXWDIeKtRWc6S9+dG3lCdTSNSB9XfhNFk80kG600sI3ytkhF5rPk6ijJw4Y7drhruCrYFpsDwlPxGY9kBjshBw==", + "version": "29.55.3", + "resolved": "https://registry.npmjs.org/@netlify/build/-/build-29.55.3.tgz", + "integrity": "sha512-oMLi3GLWpppsUjzkDsWklmkUuTcAAE5trBK1dOydKX6eG+3+5hKHNxLoRWeyzRDCmYduIELZQNiDRv8Q1CCCNQ==", "dev": true, "requires": { "@bugsnag/js": "^7.0.0", @@ -38909,12 +38909,12 @@ "@netlify/config": "^20.19.0", "@netlify/edge-bundler": "12.2.3", "@netlify/framework-info": "^9.8.13", - "@netlify/functions-utils": "^5.2.91", + "@netlify/functions-utils": "^5.2.92", "@netlify/git-utils": "^5.1.1", "@netlify/opentelemetry-utils": "^1.2.1", "@netlify/plugins-list": "^6.80.0", "@netlify/run-utils": "^5.1.1", - "@netlify/zip-it-and-ship-it": "9.40.2", + "@netlify/zip-it-and-ship-it": "9.41.0", "@sindresorhus/slugify": "^2.0.0", "ansi-escapes": "^6.0.0", "chalk": "^5.0.0", @@ -39486,12 +39486,12 @@ } }, "@netlify/functions-utils": { - "version": "5.2.91", - "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.2.91.tgz", - "integrity": "sha512-PezRTuKzKzIbWu71tykioHS7W2Tk4wiGZqkkYzm92FeLRlubRERC9Dwv3Y5LFFNQsWXs701l7CVTojHrpSiA0w==", + "version": "5.2.92", + "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-5.2.92.tgz", + "integrity": "sha512-JJd4tPzjccNDYvizmnpYbYJru/Cdx2YxuFA6kvoaTkfGQSBH1N3n2erMq17D2dXqnmG0vLfrpxFHZzZ41SzknA==", "dev": true, "requires": { - "@netlify/zip-it-and-ship-it": "9.40.2", + "@netlify/zip-it-and-ship-it": "9.41.0", "cpy": "^9.0.0", "path-exists": "^5.0.0" } @@ -39664,9 +39664,9 @@ } }, "@netlify/zip-it-and-ship-it": { - "version": "9.40.2", - "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.40.2.tgz", - "integrity": "sha512-CkAwLnqFqhV9hNJO8HxMjd+g2HYtGevjo4gP1P84Sf50HBFyBE2cavfXNaBa1TfNq5/92CixnXz4YptU1DIOOw==", + "version": "9.41.0", + "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.41.0.tgz", + "integrity": "sha512-mkrFISaiD7t7Z/HFLR43uXcch/xKxh1tbISoKj5guDjuV8n8+cl48icpTC49DYNr8uK7//PaKoWjD0H2AIUfqw==", "dev": true, "requires": { "@babel/parser": "^7.22.5", @@ -41104,9 +41104,9 @@ } }, "@types/node": { - "version": "20.16.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.11.tgz", - "integrity": "sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==", + "version": "20.16.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.13.tgz", + "integrity": "sha512-GjQ7im10B0labo8ZGXDGROUl9k0BNyDgzfGpb4g/cl+4yYDWVKcozANF4FGr4/p0O/rAkQClM6Wiwkije++1Tg==", "dev": true, "requires": { "undici-types": "~6.19.2" @@ -46351,9 +46351,9 @@ "dev": true }, "memfs": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.12.0.tgz", - "integrity": "sha512-74wDsex5tQDSClVkeK1vtxqYCAgCoXxx+K4NSHzgU/muYVYByFqa+0RnrPO9NM6naWm1+G9JmZ0p6QHhXmeYfA==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.0.tgz", + "integrity": "sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==", "dev": true, "requires": { "@jsonjoy.com/json-pack": "^1.0.3", @@ -46790,16 +46790,16 @@ "dev": true }, "msw": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.3.4.tgz", - "integrity": "sha512-sHMlwrajgmZSA2l1o7qRSe+azm/I+x9lvVVcOxAzi4vCtH8uVPJk1K5BQYDkzGl+tt0RvM9huEXXdeGrgcc79g==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.4.12.tgz", + "integrity": "sha512-upQMKZt0fYIB0Gj6gKc5i/PK4JrICTu3ItfXiju3FTdgQLaqARv7+jugPCsOkrWpTzzjo5iLW+4F6L/mGNukbA==", "dev": true, "requires": { "@bundled-es-modules/cookie": "^2.0.0", "@bundled-es-modules/statuses": "^1.0.1", "@bundled-es-modules/tough-cookie": "^0.1.6", "@inquirer/confirm": "^3.0.0", - "@mswjs/interceptors": "^0.29.0", + "@mswjs/interceptors": "^0.36.5", "@open-draft/until": "^2.1.0", "@types/cookie": "^0.6.0", "@types/statuses": "^2.0.4", @@ -46807,10 +46807,10 @@ "graphql": "^16.8.1", "headers-polyfill": "^4.0.2", "is-node-process": "^1.2.0", - "outvariant": "^1.4.2", - "path-to-regexp": "^6.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", "strict-event-emitter": "^0.5.1", - "type-fest": "^4.9.0", + "type-fest": "^4.26.1", "yargs": "^17.7.2" }, "dependencies": { @@ -46858,9 +46858,9 @@ } }, "type-fest": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.23.0.tgz", - "integrity": "sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==", + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", + "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", "dev": true } } @@ -58819,9 +58819,9 @@ "dev": true }, "outvariant": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.2.tgz", - "integrity": "sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", "dev": true }, "p-cancelable": { diff --git a/package.json b/package.json index 278fa31438..d005b57976 100644 --- a/package.json +++ b/package.json @@ -50,13 +50,13 @@ "devDependencies": { "@fastly/http-compute-js": "1.1.4", "@netlify/blobs": "^8.1.0", - "@netlify/build": "^29.55.2", + "@netlify/build": "^29.55.3", "@netlify/edge-bundler": "^12.2.3", "@netlify/edge-functions": "^2.11.0", "@netlify/eslint-config-node": "^7.0.1", "@netlify/functions": "^2.8.2", "@netlify/serverless-functions-api": "^1.30.1", - "@netlify/zip-it-and-ship-it": "^9.40.2", + "@netlify/zip-it-and-ship-it": "^9.41.0", "@opentelemetry/api": "^1.8.0", "@opentelemetry/exporter-trace-otlp-http": "^0.51.0", "@opentelemetry/resources": "^1.24.0", diff --git a/tools/deno/junit2slack.ts b/tools/deno/junit2slack.ts deleted file mode 100644 index b9ef9129ea..0000000000 --- a/tools/deno/junit2slack.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { expandGlob } from 'https://deno.land/std/fs/mod.ts' -import { parse } from 'https://deno.land/x/xml/mod.ts' -import { parseArgs } from 'https://deno.land/std@0.218.2/cli/parse_args.ts' -interface TestCase { - '@classname': string - '@name': string - '@time': number - '@file': string - failure?: string -} - -interface TestSuite { - '@name': string - '@errors': number - '@failures': number - '@skipped': number - '@timestamp': string - '@time': number - '@tests': number - testcase: TestCase[] -} - -interface TestSuites { - '@name': string - '@tests': number - '@failures': number - '@errors': number - '@time': number - testsuite: TestSuite[] -} - -async function parseXMLFile(filePath: string): Promise<{ testsuites: TestSuites }> { - const xmlContent = await Deno.readTextFile(filePath) - return parse(xmlContent) as unknown as { testsuites: TestSuites } -} - -const testCount = { - failed: 0, - passed: 0, - skipped: 0, -} - -const squares: Array = [] - -const icons = { - failed: '🟥', - passed: '🟩', - skipped: '⬜', -} - -function parseJUnit(xmlData: { testsuites: TestSuites }) { - if (!xmlData.testsuites) { - return - } - - const testSuites = Array.isArray(xmlData.testsuites.testsuite) - ? xmlData.testsuites.testsuite - : [xmlData.testsuites.testsuite] - - for (const suite of testSuites) { - const testCases = Array.isArray(suite.testcase) ? suite.testcase : [suite.testcase] - - testCases.forEach((testCase) => { - const status = 'skipped' in testCase ? 'skipped' : testCase.failure ? 'failed' : 'passed' - testCount[status]++ - squares.push(icons[status]) - }) - } -} - -async function processJUnitFiles(directoryPath: string) { - for await (const file of expandGlob(`${directoryPath}/**/*.xml`)) { - const xmlData = await parseXMLFile(file.path) - parseJUnit(xmlData) - } -} - -const { dir, version, runUrl } = parseArgs(Deno.args) - -// Check if the directory path is provided -if (!dir) { - console.error('Please provide a directory path.') - Deno.exit(1) -} - -// Process the JUnit files in the provided directory -await processJUnitFiles(dir) - -const total = testCount['passed'] + testCount['failed'] -let data = '' -data += `*Passed:* ${testCount['passed']} \n` -data += `*Failed:* ${testCount['failed']} \n` -data += `*Skipped:* ${testCount['skipped']}\n\n` - -data += `*${((testCount['passed'] / total) * 100).toFixed(2)}%* passing\n` - -data += `*${testCount['passed']}* passed out of *${total}* Next.js deploy tests. *${testCount['failed']}* still to go.\n\n` - -const result: { blocks: Array> } = { - blocks: [ - { - type: 'header', - text: { - type: 'plain_text', - text: `E2E test results for Next.js ${version}`, - emoji: true, - }, - }, - { - type: 'section', - text: { - type: 'mrkdwn', - text: data, - }, - accessory: { - type: 'image', - image_url: - 'https://emoji.slack-edge.com/T02UKDKNA/old-man-yells-at-vercel/3927e24cc7b0fa8d.png', - alt_text: 'old man yells at Next.js', - }, - }, - ], -} - -if (runUrl) { - result.blocks.push({ - type: 'actions', - elements: [ - { - type: 'button', - text: { - type: 'plain_text', - text: ':github: Show details', - emoji: true, - }, - url: runUrl, - }, - ], - }) -} - -console.log(JSON.stringify(result))