From 41fe042825405995fe1b5613a3594eddfb00176e Mon Sep 17 00:00:00 2001 From: "sentry-junior[bot]" <264270552+sentry-junior[bot]@users.noreply.github.com> Date: Tue, 3 Nov 2026 20:00:52 +0000 Subject: [PATCH] fix(cli): Stop reporting unknown set-commits --commit repositories as CLI errors A `--commit` repository that the org hasn't added to Sentry is a user configuration error, and the error now says how to fix it. Error reporting classifies the "commit.repository" ValidationError as the new `user_config` silence reason, so it is counted in the `cli.error.silenced` metric instead of opening a Sentry issue (CLI-2SK). Co-Authored-By: Miguel Betegon --- packages/cli/src/lib/api/releases.ts | 2 +- packages/cli/src/lib/error-reporting.ts | 8 ++++++++ packages/cli/test/lib/api/releases.test.ts | 1 + packages/cli/test/lib/error-reporting.test.ts | 12 ++++++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/lib/api/releases.ts b/packages/cli/src/lib/api/releases.ts index f1f19d535..45a4c0bbe 100644 --- a/packages/cli/src/lib/api/releases.ts +++ b/packages/cli/src/lib/api/releases.ts @@ -763,7 +763,7 @@ export async function setCommitsWithRefs( /** * Field of the {@link ValidationError} for a `--commit` repository the org - * doesn't have, so this user configuration error can be told apart (CLI-2SK). + * doesn't have. Error reporting treats it as user configuration (CLI-2SK). */ const COMMIT_REPOSITORY_FIELD = "commit.repository"; diff --git a/packages/cli/src/lib/error-reporting.ts b/packages/cli/src/lib/error-reporting.ts index 9191430fc..eec468239 100644 --- a/packages/cli/src/lib/error-reporting.ts +++ b/packages/cli/src/lib/error-reporting.ts @@ -74,6 +74,7 @@ type SilenceReason = | "process_exit" | "user_validation" | "user_input_error" + | "user_config" | "seer_unavailable_self_hosted"; /** @@ -144,6 +145,13 @@ export function classifySilenced(error: unknown): SilenceReason | null { if (error instanceof ValidationError && error.field === "input") { return "user_input_error"; } + // A ValidationError with field "commit.repository" means `release + // set-commits --commit` named a repository the org has not connected to + // Sentry. The fix is in the org's integration settings, which the error + // links to; nothing in the CLI is broken (CLI-2SK). + if (error instanceof ValidationError && error.field === "commit.repository") { + return "user_config"; + } // A ValidationError with field "directory" means the sourcemap directory // the user passed is missing, not a directory, or unreadable. Pure // user-input noise, not a CLI bug — the user sees the path and the diff --git a/packages/cli/test/lib/api/releases.test.ts b/packages/cli/test/lib/api/releases.test.ts index e628bcd5f..d62d837f6 100644 --- a/packages/cli/test/lib/api/releases.test.ts +++ b/packages/cli/test/lib/api/releases.test.ts @@ -1055,6 +1055,7 @@ describe("explainSetCommitsError", () => { expect(message).toMatch( /\/settings\/integrations\/\?category=source%20code%20management/, ); + expect(classifySilenced(error)).toBe("user_config"); }); test("suggests similar repositories and links the repository settings", async () => { diff --git a/packages/cli/test/lib/error-reporting.test.ts b/packages/cli/test/lib/error-reporting.test.ts index 8ae24f937..141056c4d 100644 --- a/packages/cli/test/lib/error-reporting.test.ts +++ b/packages/cli/test/lib/error-reporting.test.ts @@ -355,6 +355,18 @@ describe("classifySilenced", () => { ).toBe("user_input_error"); }); + test("silences ValidationError with field 'commit.repository' (repository not in Sentry)", () => { + // set-commits --commit named a repository the org never connected (CLI-2SK). + expect( + classifySilenced( + new ValidationError( + "Sentry organization 'acme' has no repository named 'acme/web'.", + "commit.repository", + ), + ), + ).toBe("user_config"); + }); + test("silences ValidationError with field 'directory' (bad sourcemap directory)", () => { // A missing sourcemap upload/inject directory is user-input noise (CLI-1FN). expect(