diff --git a/src/pkgchk-cli/Commands.fs b/src/pkgchk-cli/Commands.fs index 9a2afed1..8e9ef923 100644 --- a/src/pkgchk-cli/Commands.fs +++ b/src/pkgchk-cli/Commands.fs @@ -79,6 +79,16 @@ type PackageCheckCommandSettings() = [] member val GithubPrId = "" with get, set + [] + [] + [] + member val GoodImageUri = "" with get, set + + [] + [] + [] + member val BadImageUri = "" with get, set + [] type PackageCheckCommand(nuget: Tk.Nuget.INugetClient) = inherit Command() @@ -145,9 +155,9 @@ type PackageCheckCommand(nuget: Tk.Nuget.INugetClient) = let getHits = liftHits >> sortHits >> List.ofSeq - let rec genComment trace (settings: PackageCheckCommandSettings, hits, errorHits, hitCounts) attempt = + let rec genComment trace (settings: PackageCheckCommandSettings, hits, errorHits, hitCounts, imageUri) attempt = let markdown = - (hits, errorHits, hitCounts, settings.SeverityLevels) + (hits, errorHits, hitCounts, settings.SeverityLevels, imageUri) |> Markdown.generate |> String.joinLines @@ -159,16 +169,25 @@ type PackageCheckCommand(nuget: Tk.Nuget.INugetClient) = if attempt >= 1 then GithubComment.create settings.GithubSummaryTitle "_The report's too big for Github - Please check logs_" else - genComment trace (settings, [], errorHits, hitCounts) (attempt + 1) + genComment trace (settings, [], errorHits, hitCounts, imageUri) (attempt + 1) - let returnCode (hits: ScaHit list) = + let isSuccessScan (hits: ScaHit list) = match hits with - | [] -> ReturnCodes.validationOk + | [] -> true + | _ -> false + + let returnCode (hits: ScaHit list) = + match isSuccessScan hits with + | true -> ReturnCodes.validationOk | _ -> ReturnCodes.validationFailed let reportFile outDir = outDir |> Io.toFullPath |> Io.combine "pkgchk.md" |> Io.normalise + let cleanSettings (settings: PackageCheckCommandSettings) = + settings.SeverityLevels <- settings.SeverityLevels |> Array.filter String.isNotEmpty + settings + let validateSettings (settings: PackageCheckCommandSettings) = if String.isNotEmpty settings.GithubPrId then if String.isEmpty settings.GithubToken then @@ -191,7 +210,7 @@ type PackageCheckCommand(nuget: Tk.Nuget.INugetClient) = override _.Execute(context, settings) = let trace = trace settings.TraceLogging - settings.SeverityLevels <- settings.SeverityLevels |> Array.filter String.isNotEmpty + let settings = cleanSettings settings if settings.NoBanner |> not then nuget |> App.banner |> console @@ -240,11 +259,16 @@ type PackageCheckCommand(nuget: Tk.Nuget.INugetClient) = renderables |> renderTables + let reportImg = + match isSuccessScan errorHits with + | true -> settings.GoodImageUri + | false -> settings.BadImageUri + if settings.OutputDirectory <> "" then trace "Building reports..." let reportFile = - (hits, errorHits, hitCounts, settings.SeverityLevels) + (hits, errorHits, hitCounts, settings.SeverityLevels, reportImg) |> Markdown.generate |> Io.writeFile (reportFile settings.OutputDirectory) @@ -262,7 +286,7 @@ type PackageCheckCommand(nuget: Tk.Nuget.INugetClient) = let repo = Github.repo settings.GithubRepo let client = Github.client settings.GithubToken - let comment = genComment trace (settings, hits, errorHits, hitCounts) 0 + let comment = genComment trace (settings, hits, errorHits, hitCounts, reportImg) 0 trace $"Posting {comment.title} report to Github repo {repo}..." let _ = (comment |> Github.setPrComment client repo prId).Result diff --git a/src/pkgchk-cli/Markdown.fs b/src/pkgchk-cli/Markdown.fs index c4464bb4..8763a4d2 100644 --- a/src/pkgchk-cli/Markdown.fs +++ b/src/pkgchk-cli/Markdown.fs @@ -11,6 +11,8 @@ module Markdown = let formatSeverity value = $"{Rendering.severityEmote value} {formatSeverityColour value}" + let imgLink uri = $"![image]({uri})" + let nugetLinkPkgVsn package version = $"[{package}]({Rendering.nugetLink (package, version)})" @@ -138,9 +140,13 @@ module Markdown = |> Seq.sortBy fst |> Seq.collect formatHitGroup - let generate (hits, errorHits, countSummary, severities) = + let generate (hits, errorHits, countSummary, severities, imageUri) = seq { yield! title errorHits + + if String.isNotEmpty imageUri then + yield imgLink imageUri + yield! formatHitCounts (severities, countSummary) yield! formatHits hits yield! footer