diff --git a/packages/bundler-plugin-core/src/options-mapping.ts b/packages/bundler-plugin-core/src/options-mapping.ts index ba12d3e5..c03ae9e2 100644 --- a/packages/bundler-plugin-core/src/options-mapping.ts +++ b/packages/bundler-plugin-core/src/options-mapping.ts @@ -26,6 +26,7 @@ export function normalizeUserOptions(userOptions: UserOptions) { create: userOptions.release?.create ?? true, finalize: userOptions.release?.finalize ?? true, vcsRemote: userOptions.release?.vcsRemote ?? process.env["SENTRY_VSC_REMOTE"] ?? "origin", + setCommits: userOptions.release?.setCommits, }, bundleSizeOptimizations: userOptions.bundleSizeOptimizations, reactComponentAnnotation: userOptions.reactComponentAnnotation, @@ -39,6 +40,44 @@ export function normalizeUserOptions(userOptions: UserOptions) { _experiments: userOptions._experiments ?? {}, }; + if (options.release.setCommits === undefined) { + if ( + process.env["VERCEL"] && + process.env["VERCEL_GIT_COMMIT_SHA"] && + process.env["VERCEL_GIT_REPO_SLUG"] && + process.env["VERCEL_GIT_REPO_OWNER"] + ) { + options.release.setCommits = { + // @ts-expect-error This is fine + shouldNotThrowOnFailure: true, + commit: process.env["VERCEL_GIT_COMMIT_SHA"], + previousCommit: process.env["VERCEL_GIT_PREVIOUS_SHA"], + repo: `${process.env["VERCEL_GIT_REPO_OWNER"]}/${process.env["VERCEL_GIT_REPO_SLUG"]}`, + ignoreEmpty: true, + ignoreMissing: true, + }; + } else { + options.release.setCommits = { + shouldNotThrowOnFailure: true, + // @ts-expect-error This is fine + auto: true, + ignoreEmpty: true, + ignoreMissing: true, + }; + } + } + + if ( + options.release.deploy === undefined && + process.env["VERCEL"] && + process.env["VERCEL_TARGET_ENV"] + ) { + options.release.deploy = { + env: `vercel-${process.env["VERCEL_TARGET_ENV"]}`, + url: process.env["VERCEL_URL"] ? `https://${process.env["VERCEL_URL"]}` : undefined, + }; + } + return options; } diff --git a/packages/bundler-plugin-core/src/plugins/release-management.ts b/packages/bundler-plugin-core/src/plugins/release-management.ts index 8abac956..6940d530 100644 --- a/packages/bundler-plugin-core/src/plugins/release-management.ts +++ b/packages/bundler-plugin-core/src/plugins/release-management.ts @@ -13,7 +13,7 @@ interface ReleaseManagementPluginOptions { shouldCreateRelease: boolean; shouldFinalizeRelease: boolean; include?: string | IncludeEntry | Array; - setCommitsOption?: SentryCliCommitsOptions; + setCommitsOption: SentryCliCommitsOptions | false | { auto: true; isDefault: true }; deployOptions?: SentryCliNewDeployOptions; dist?: string; handleRecoverableError: HandleRecoverableErrorFn; @@ -37,6 +37,7 @@ interface ReleaseManagementPluginOptions { * Additionally, if legacy upload options are set, it uploads source maps in the legacy (non-debugId) way. */ export function releaseManagementPlugin({ + logger, releaseName, include, dist, @@ -86,8 +87,20 @@ export function releaseManagementPlugin({ }); } - if (setCommitsOption) { - await cliInstance.releases.setCommits(releaseName, setCommitsOption); + if (setCommitsOption !== false) { + try { + await cliInstance.releases.setCommits(releaseName, setCommitsOption); + } catch (e) { + // shouldNotThrowOnFailure being present means that the plugin defaulted to `{ auto: true }` for the setCommitsOptions, meaning that wee should not throw when CLI throws because there is no repo + if (!("shouldNotThrowOnFailure" in setCommitsOption)) { + throw e; + } else { + logger.debug( + "An error occurred setting commits on release (this message can be ignored unless you commits on release are desired):", + e + ); + } + } } if (shouldFinalizeRelease) { diff --git a/packages/bundler-plugin-core/src/types.ts b/packages/bundler-plugin-core/src/types.ts index 61db9049..bc55427e 100644 --- a/packages/bundler-plugin-core/src/types.ts +++ b/packages/bundler-plugin-core/src/types.ts @@ -200,8 +200,10 @@ export interface Options { /** * Associates the release with its commits in Sentry. + * + * Defaults to `{ auto: true }`. Set to `false` to disable commit association. */ - setCommits?: SetCommitsOptions; + setCommits?: SetCommitsOptions | false; /** * Adds deployment information to the release in Sentry. diff --git a/packages/bundler-plugin-core/test/option-mappings.test.ts b/packages/bundler-plugin-core/test/option-mappings.test.ts index 54907571..216b7fd2 100644 --- a/packages/bundler-plugin-core/test/option-mappings.test.ts +++ b/packages/bundler-plugin-core/test/option-mappings.test.ts @@ -23,6 +23,10 @@ describe("normalizeUserOptions()", () => { create: true, vcsRemote: "origin", uploadLegacySourcemaps: "./out", + setCommits: { + auto: true, + shouldNotThrowOnFailure: true, + }, }, silent: false, telemetry: true, @@ -74,6 +78,10 @@ describe("normalizeUserOptions()", () => { sourceMapReference: false, stripCommonPrefix: true, }, + setCommits: { + auto: true, + shouldNotThrowOnFailure: true, + }, }, silent: false, telemetry: true, diff --git a/packages/dev-utils/src/generate-documentation-table.ts b/packages/dev-utils/src/generate-documentation-table.ts index 1d2f3244..bd522fe7 100644 --- a/packages/dev-utils/src/generate-documentation-table.ts +++ b/packages/dev-utils/src/generate-documentation-table.ts @@ -154,7 +154,8 @@ errorHandler: (err) => { }, { name: "setCommits", - fullDescription: "Option to associate the created release with its commits in Sentry.", + fullDescription: + "Option to associate the created release with its commits in Sentry. Defaults to `{ auto: true }`. Set to `false` to disable.", children: [ { name: "previousCommit", diff --git a/packages/integration-tests/fixtures/telemetry/telemetry.test.ts b/packages/integration-tests/fixtures/telemetry/telemetry.test.ts index 5015cfdf..deb289e1 100644 --- a/packages/integration-tests/fixtures/telemetry/telemetry.test.ts +++ b/packages/integration-tests/fixtures/telemetry/telemetry.test.ts @@ -101,7 +101,7 @@ test("rollup bundle telemetry", async () => { "upload-legacy-sourcemaps": false, "module-metadata": false, "inject-build-information": false, - "set-commits": "undefined", + "set-commits": "auto", "finalize-release": true, "deploy-options": false, "custom-error-handler": false,