diff --git a/src/commands/sbom/renderer.ts b/src/commands/sbom/renderer.ts index 9fef7c969..0cd1976dc 100644 --- a/src/commands/sbom/renderer.ts +++ b/src/commands/sbom/renderer.ts @@ -51,6 +51,18 @@ export const renderDuplicateUpload = (sha: string, env: string, service: string) return fullStr } +export const renderNoDefaultBranch = (repositoryUrl: string) => { + let fullStr = '' + + fullStr += chalk.red(`Default branch not found for repository ${repositoryUrl}\n`) + fullStr += chalk.red(`Fix this issue by either:\n`) + fullStr += chalk.red(` - define a default branch in the repository settings on Datadog\n`) + fullStr += chalk.red(` - push result from your default branch first\n\n`) + fullStr += chalk.red(`Run an analysis once the issue is resolved\n`) + + return fullStr +} + export const renderFailedUpload = (sbomReport: string, error: any) => { const reportPath = `[${chalk.bold.dim(sbomReport)}]` diff --git a/src/commands/sbom/upload.ts b/src/commands/sbom/upload.ts index 8f2c7c9e6..77303b426 100644 --- a/src/commands/sbom/upload.ts +++ b/src/commands/sbom/upload.ts @@ -5,7 +5,7 @@ import Ajv from 'ajv' import {AxiosPromise, AxiosResponse, isAxiosError} from 'axios' import {Command, Option} from 'clipanion' -import {GIT_SHA, getSpanTags, mandatoryGitFields} from '../../helpers/tags' +import {GIT_SHA, getSpanTags, mandatoryGitFields, GIT_REPOSITORY_URL} from '../../helpers/tags' import {getApiHelper} from './api' import {generatePayload} from './payload' @@ -15,6 +15,7 @@ import { renderInvalidFile, renderInvalidPayload, renderMissingSpan, + renderNoDefaultBranch, renderSuccessfulCommand, renderUploading, } from './renderer' @@ -135,6 +136,13 @@ export class UploadSbomCommand extends Command { return 0 } + + if (error.response?.status === 412) { + const repositoryUrl = tags[GIT_REPOSITORY_URL] || 'url-not-found' + this.context.stderr.write(renderNoDefaultBranch(repositoryUrl)) + + return 1 + } } this.context.stderr.write(renderFailedUpload(basePath, error))