diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b179159f4dfd..7a0d64822d13 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -271,6 +271,9 @@ jobs: ${{needs.job_get_metadata.outputs.is_develop == 'false' && env.NX_CACHE_RESTORE_KEYS || 'nx-never-restore'}} - name: Build packages + # Set the CODECOV_TOKEN for Bundle Analysis + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} run: yarn build outputs: # this needs to be passed on, because the `needs` context only looks at direct ancestors (so steps which depend on diff --git a/dev-packages/e2e-tests/Dockerfile.publish-packages b/dev-packages/e2e-tests/Dockerfile.publish-packages index 907f6655ca3d..4d5b2ba3abf3 100644 --- a/dev-packages/e2e-tests/Dockerfile.publish-packages +++ b/dev-packages/e2e-tests/Dockerfile.publish-packages @@ -1,5 +1,5 @@ # This Dockerfile exists for the purpose of using a specific node/npm version (ie. the same we use in CI) to run npm publish with -ARG NODE_VERSION=18.17.1 +ARG NODE_VERSION=18.18.0 FROM node:${NODE_VERSION} WORKDIR /sentry-javascript/dev-packages/e2e-tests diff --git a/dev-packages/e2e-tests/package.json b/dev-packages/e2e-tests/package.json index fe582ce20418..5054482ed6ad 100644 --- a/dev-packages/e2e-tests/package.json +++ b/dev-packages/e2e-tests/package.json @@ -26,7 +26,7 @@ "yaml": "2.2.2" }, "volta": { - "node": "18.17.1", + "node": "18.18.0", "yarn": "1.22.19" } } diff --git a/dev-packages/rollup-utils/npmHelpers.mjs b/dev-packages/rollup-utils/npmHelpers.mjs index 36ff6143936b..86941fc8db29 100644 --- a/dev-packages/rollup-utils/npmHelpers.mjs +++ b/dev-packages/rollup-utils/npmHelpers.mjs @@ -10,6 +10,7 @@ import deepMerge from 'deepmerge'; import { makeCleanupPlugin, + makeCodeCovPlugin, makeDebugBuildStatementReplacePlugin, makeExtractPolyfillsPlugin, makeNodeResolvePlugin, @@ -43,6 +44,8 @@ export function makeBaseNPMConfig(options = {}) { excludeIframe: undefined, }); + const codecovPlugin = makeCodeCovPlugin(); + const defaultBaseConfig = { input: entrypoints, @@ -103,6 +106,7 @@ export function makeBaseNPMConfig(options = {}) { debugBuildStatementReplacePlugin, rrwebBuildPlugin, cleanupPlugin, + codecovPlugin, ], // don't include imported modules from outside the package in the final output diff --git a/dev-packages/rollup-utils/plugins/npmPlugins.mjs b/dev-packages/rollup-utils/plugins/npmPlugins.mjs index 7138964a919b..1c6f929c751c 100644 --- a/dev-packages/rollup-utils/plugins/npmPlugins.mjs +++ b/dev-packages/rollup-utils/plugins/npmPlugins.mjs @@ -7,6 +7,10 @@ * Sucrase plugin docs: https://github.com/rollup/plugins/tree/master/packages/sucrase */ +import * as fs from 'fs'; +import * as path from 'path'; + +import { codecovRollupPlugin } from '@codecov/rollup-plugin'; import json from '@rollup/plugin-json'; import replace from '@rollup/plugin-replace'; import sucrase from '@rollup/plugin-sucrase'; @@ -138,4 +142,19 @@ export function makeRrwebBuildPlugin({ excludeShadowDom, excludeIframe } = {}) { }); } +/** + * Plugin that uploads bundle analysis to codecov. + * + * @param type The type of bundle being uploaded. + * @param prefix The prefix for the codecov bundle name. Defaults to 'npm'. + */ +export function makeCodeCovPlugin() { + const packageJson = JSON.parse(fs.readFileSync(path.resolve(process.cwd(), './package.json'), { encoding: 'utf8' })); + return codecovRollupPlugin({ + enableBundleAnalysis: process.env.CODECOV_TOKEN !== undefined, + bundleName: packageJson.name, + uploadToken: process.env.CODECOV_TOKEN, + }); +} + export { makeExtractPolyfillsPlugin } from './extractPolyfillsPlugin.mjs'; diff --git a/package.json b/package.json index 1b2ad37340ea..2d627a68b721 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "yalc:publish": "lerna run yalc:publish" }, "volta": { - "node": "18.17.0", + "node": "18.18.0", "yarn": "1.22.19" }, "workspaces": [ @@ -86,6 +86,7 @@ ], "devDependencies": { "@biomejs/biome": "^1.4.0", + "@codecov/rollup-plugin": "0.0.1-beta.5", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-esm-shim": "^0.1.5", "@rollup/plugin-json": "^6.1.0", diff --git a/yarn.lock b/yarn.lock index 5064a198aea8..117c6a367bcb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2316,6 +2316,23 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@codecov/bundler-plugin-core@^0.0.1-beta.5": + version "0.0.1-beta.5" + resolved "https://registry.yarnpkg.com/@codecov/bundler-plugin-core/-/bundler-plugin-core-0.0.1-beta.5.tgz#f516c080abe4c99fb5cfdc7d39513b277fac2bae" + integrity sha512-eltwv1aRJdwonlTD47jQ2GYdKZfMv3jCviDui32JOu12ZAiI3WdJCtjWF9zxpmnHEZ30pn0WbeZir+sXSFLJHw== + dependencies: + chalk "4.1.2" + semver "^7.5.4" + unplugin "^1.6.0" + zod "^3.22.4" + +"@codecov/rollup-plugin@0.0.1-beta.5": + version "0.0.1-beta.5" + resolved "https://registry.yarnpkg.com/@codecov/rollup-plugin/-/rollup-plugin-0.0.1-beta.5.tgz#cca4c68989efbcf4e2dbe3db5e9a5bf5b7501fe2" + integrity sha512-3x6vmt59Hgfpr8jroB7LYa2XX+kFds8HaWsUTBX08sJ2bCw+BzlW1Mnc+IdxBdMtjo1jkYEceRvfwQ0X2LK4ZQ== + dependencies: + "@codecov/bundler-plugin-core" "^0.0.1-beta.5" + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -11337,6 +11354,14 @@ chalk@4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -11348,14 +11373,6 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^5.0.0, chalk@^5.2.0, chalk@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" @@ -29331,6 +29348,16 @@ unplugin@1.0.1: webpack-sources "^3.2.3" webpack-virtual-modules "^0.5.0" +unplugin@^1.6.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.10.0.tgz#9cb8140f61e3fbcf27c7c38d305e9d62d5dbbf0b" + integrity sha512-CuZtvvO8ua2Wl+9q2jEaqH6m3DoQ38N7pvBYQbbaeNlWGvK2l6GHiKi29aIHDPoSxdUzQ7Unevf1/ugil5X6Pg== + dependencies: + acorn "^8.11.3" + chokidar "^3.6.0" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.6.1" + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -30112,6 +30139,11 @@ webpack-virtual-modules@^0.5.0: resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== +webpack-virtual-modules@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f" + integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== + webpack@5.76.1: version "5.76.1" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.1.tgz#7773de017e988bccb0f13c7d75ec245f377d295c"