From 84d51feed0b9772f9b804da9253f58ffc4b0e680 Mon Sep 17 00:00:00 2001 From: cx-rui-gomes <71653902+cx-rui-gomes@users.noreply.github.com> Date: Wed, 10 Sep 2025 11:29:22 +0100 Subject: [PATCH 1/6] remove scs feature flag due to deprecation --- internal/commands/result.go | 66 +++++++++++----------------- internal/commands/result_test.go | 34 +++++--------- internal/wrappers/feature-flags.go | 1 - internal/wrappers/results-summary.go | 15 +++---- 4 files changed, 41 insertions(+), 75 deletions(-) diff --git a/internal/commands/result.go b/internal/commands/result.go index 585e8f384..a2d6e25a2 100644 --- a/internal/commands/result.go +++ b/internal/commands/result.go @@ -602,11 +602,10 @@ func convertScanToResultsSummary(scanInfo *wrappers.ScanResponseModel, resultsWr *containersIssues = 0 enginesStatusCode[commonParams.ContainersType] = 0 } - if wrappers.IsSCSEnabled { - scsIssues = new(int) - *scsIssues = 0 - enginesStatusCode[commonParams.ScsType] = 0 - } + + scsIssues = new(int) + *scsIssues = 0 + enginesStatusCode[commonParams.ScsType] = 0 if len(scanInfo.StatusDetails) > 0 { for _, statusDetailItem := range scanInfo.StatusDetails { @@ -617,7 +616,7 @@ func convertScanToResultsSummary(scanInfo *wrappers.ScanResponseModel, resultsWr scaIssues = notAvailableNumber } else if statusDetailItem.Name == commonParams.KicsType { kicsIssues = notAvailableNumber - } else if statusDetailItem.Name == commonParams.ScsType && wrappers.IsSCSEnabled { + } else if statusDetailItem.Name == commonParams.ScsType { *scsIssues = notAvailableNumber } else if statusDetailItem.Name == commonParams.ContainersType && wrappers.IsContainersEnabled { *containersIssues = notAvailableNumber @@ -663,9 +662,9 @@ func convertScanToResultsSummary(scanInfo *wrappers.ScanResponseModel, resultsWr if wrappers.IsContainersEnabled { summary.EnginesResult[commonParams.ContainersType] = &wrappers.EngineResultSummary{StatusCode: enginesStatusCode[commonParams.ContainersType]} } - if wrappers.IsSCSEnabled { - summary.EnginesResult[commonParams.ScsType] = &wrappers.EngineResultSummary{StatusCode: enginesStatusCode[commonParams.ScsType]} - } + + summary.EnginesResult[commonParams.ScsType] = &wrappers.EngineResultSummary{StatusCode: enginesStatusCode[commonParams.ScsType]} + baseURI, err := resultsWrapper.GetResultsURL(summary.ProjectID) if err != nil { return nil, err @@ -702,7 +701,7 @@ func summaryReport( summary.APISecurity = *apiSecRisks } - if summary.HasSCS() && wrappers.IsSCSEnabled { + if summary.HasSCS() { // Getting the base SCS overview. Results counts are overwritten in enhanceWithScanSummary->countResult SCSOverview, err := getScanOverviewForSCSScanner(scsScanOverviewWrapper, summary.ScanID) if err != nil { @@ -720,12 +719,12 @@ func summaryReport( setNotAvailableNumberIfZero(summary, &summary.SastIssues, commonParams.SastType) setNotAvailableNumberIfZero(summary, &summary.ScaIssues, commonParams.ScaType) setNotAvailableNumberIfZero(summary, &summary.KicsIssues, commonParams.KicsType) + setNotAvailableNumberIfZero(summary, summary.ScsIssues, commonParams.ScsType) + if wrappers.IsContainersEnabled { setNotAvailableNumberIfZero(summary, summary.ContainersIssues, commonParams.ContainersType) } - if wrappers.IsSCSEnabled { - setNotAvailableNumberIfZero(summary, summary.ScsIssues, commonParams.ScsType) - } + setRiskMsgAndStyle(summary) setNotAvailableEnginesStatusCode(summary) @@ -782,7 +781,7 @@ func enhanceWithScanSummary(summary *wrappers.ResultSummary, results *wrappers.S summary.TotalIssues = summary.SastIssues + summary.ScaIssues + summary.KicsIssues + summary.GetAPISecurityDocumentationTotal() - if summary.HasSCS() && wrappers.IsSCSEnabled { + if summary.HasSCS() { // Special case for SCS where status is partial if any microengines failed if summary.SCSOverview.Status == scanPartialString { summary.EnginesResult[commonParams.ScsType].StatusCode = scanPartialNumber @@ -875,7 +874,7 @@ func writeConsoleSummary(summary *wrappers.ResultSummary, featureFlagsWrapper wr printAPIsSecuritySummary(summary) } - if summary.HasSCS() && wrappers.IsSCSEnabled { + if summary.HasSCS() { printSCSSummary(summary.SCSOverview.MicroEngineOverviews, featureFlagsWrapper) } @@ -990,9 +989,8 @@ func printResultsSummaryTable(summary *wrappers.ResultSummary) { printTableRow("IAC", summary.EnginesResult[commonParams.KicsType], summary.EnginesResult[commonParams.KicsType].StatusCode) printTableRow("SAST", summary.EnginesResult[commonParams.SastType], summary.EnginesResult[commonParams.SastType].StatusCode) printTableRow("SCA", summary.EnginesResult[commonParams.ScaType], summary.EnginesResult[commonParams.ScaType].StatusCode) - if wrappers.IsSCSEnabled { - printTableRow("SCS", summary.EnginesResult[commonParams.ScsType], summary.EnginesResult[commonParams.ScsType].StatusCode) - } + printTableRow("SCS", summary.EnginesResult[commonParams.ScsType], summary.EnginesResult[commonParams.ScsType].StatusCode) + if wrappers.IsContainersEnabled { printTableRow("CONTAINERS", summary.EnginesResult[commonParams.ContainersType], summary.EnginesResult[commonParams.ContainersType].StatusCode) } @@ -1132,11 +1130,6 @@ func runGetCodeBashingCommand( } } -func setIsSCSEnabled(featureFlagsWrapper wrappers.FeatureFlagsWrapper) { - scsEngineCLIEnabled, _ := wrappers.GetSpecificFeatureFlag(featureFlagsWrapper, wrappers.SCSEngineCLIEnabled) - wrappers.IsSCSEnabled = scsEngineCLIEnabled.Status -} - func setIsContainersEnabled(agent string) { wrappers.IsContainersEnabled = !containsIgnoreCase(containerEngineUnsupportedAgents, agent) } @@ -1198,7 +1191,6 @@ func CreateScanReport( ) (*wrappers.ScanResultsCollection, error) { reportList := strings.Split(reportTypes, ",") results := &wrappers.ScanResultsCollection{} - setIsSCSEnabled(featureFlagsWrapper) setIsContainersEnabled(agent) summary, err := convertScanToResultsSummary(scan, resultsWrapper) if err != nil { @@ -1254,14 +1246,10 @@ func countResult(summary *wrappers.ResultSummary, result *wrappers.ScanResult) { return } } else if strings.HasPrefix(engineType, commonParams.SscsType) { - if wrappers.IsSCSEnabled { - addResultToSCSOverview(summary, result) - engineType = commonParams.ScsType - *summary.ScsIssues++ - summary.TotalIssues++ - } else { - return - } + addResultToSCSOverview(summary, result) + engineType = commonParams.ScsType + *summary.ScsIssues++ + summary.TotalIssues++ } else { return } @@ -1528,11 +1516,7 @@ func ReadResults( } if slices.Contains(scan.Engines, commonParams.ScsType) { - if !wrappers.IsSCSEnabled { - resultsModel = removeResultsByType(resultsModel, commonParams.SscsType) - } else { - resultsModel = filterScsResultsByAgent(resultsModel, agent) - } + resultsModel = filterScsResultsByAgent(resultsModel, agent) } resultsModel.ScanID = scan.ID @@ -2265,7 +2249,7 @@ func parseSonar(results *wrappers.ScanResultsCollection) ([]wrappers.SonarIssues } else if wrappers.IsContainersEnabled && engineType == commonParams.ContainersType { auxIssue.PrimaryLocation = parseContainersSonar(result) sonarIssues = append(sonarIssues, auxIssue) - } else if wrappers.IsSCSEnabled && strings.HasPrefix(engineType, commonParams.SscsType) { + } else if strings.HasPrefix(engineType, commonParams.SscsType) { sscsSonarIssue := parseSscsSonar(result, &auxIssue) sonarIssues = append(sonarIssues, sscsSonarIssue) } @@ -2310,7 +2294,7 @@ func initSonarIssue(result *wrappers.ScanResult) wrappers.SonarIssues { sonarIssue.RuleID = result.ID } else if wrappers.IsContainersEnabled && engineType == commonParams.ContainersType { sonarIssue.RuleID = result.ID - } else if wrappers.IsSCSEnabled && strings.HasPrefix(engineType, commonParams.SscsType) { + } else if strings.HasPrefix(engineType, commonParams.SscsType) { sonarIssue.RuleID = result.ID } @@ -2347,7 +2331,7 @@ func initSonarRules(result *wrappers.ScanResult) wrappers.SonarRules { sonarRules.Name = result.ScanResultData.ImageTag sonarRules.Description = html.UnescapeString(result.Description) sonarRules.ID = result.ID - } else if wrappers.IsSCSEnabled && strings.HasPrefix(engineType, commonParams.SscsType) { + } else if strings.HasPrefix(engineType, commonParams.SscsType) { sonarRules.Name = result.ScanResultData.RuleName sonarRules.Description = html.UnescapeString(result.ScanResultData.RuleDescription) sonarRules.ID = result.ID @@ -2585,7 +2569,7 @@ func findResult(result *wrappers.ScanResult) []wrappers.SarifScanResult { scanResults = parseSarifResultsSca(result, scanResults) } else if result.Type == commonParams.ContainersType && wrappers.IsContainersEnabled { scanResults = parseSarifResultsContainers(result, scanResults) - } else if strings.HasPrefix(result.Type, commonParams.SscsType) && wrappers.IsSCSEnabled { + } else if strings.HasPrefix(result.Type, commonParams.SscsType) { scanResults = parseSarifResultsSscs(result, scanResults) } diff --git a/internal/commands/result_test.go b/internal/commands/result_test.go index 5558e7153..29df8ad1e 100644 --- a/internal/commands/result_test.go +++ b/internal/commands/result_test.go @@ -139,7 +139,6 @@ func TestResultsExitCode_OnPartialScan_PrintOnlyFailedScannersInfoToConsole(t *t func runScanCommand(t *testing.T, agent, scanID string) *wrappers.ScanResultsCollection { clearFlags() - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} _, err := executeRedirectedOsStdoutTestCommand(createASTTestCommand(), "results", "show", "--scan-id", scanID, "--report-format", "json", "--agent", agent) @@ -170,7 +169,6 @@ func TestRunScsResultsShow_ASTCLI_AgentShouldShowAllResults(t *testing.T) { mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} execCmdNilAssertion(t, "results", "show", "--scan-id", "SCS_ONLY", "--report-format", "json", "--agent", params.DefaultAgent) assertTypePresentJSON(t, params.SCSScorecardType, 1) @@ -186,7 +184,6 @@ func TestRunScsResultsShow_VSCode_AgentShouldNotShowScorecardResults(t *testing. mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} execCmdNilAssertion(t, "results", "show", "--scan-id", "SCS_ONLY", "--report-format", "json", "--agent", params.VSCodeAgent) assertTypePresentJSON(t, params.SCSScorecardType, 0) @@ -202,7 +199,6 @@ func TestRunScsResultsShow_Other_AgentsShouldNotShowScsResults(t *testing.T) { mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} execCmdNilAssertion(t, "results", "show", "--scan-id", "SCS_ONLY", "--report-format", "json", "--agent", params.JetbrainsAgent) assertTypePresentJSON(t, params.SCSScorecardType, 0) @@ -218,7 +214,6 @@ func TestRunWithoutScsResults_Other_AgentsShouldNotShowScsResults(t *testing.T) mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} execCmdNilAssertion(t, "results", "show", "--scan-id", "SAST_ONLY", "--report-format", "json", "--agent", params.EclipseAgent) assertTypePresentJSON(t, params.SCSScorecardType, 0) @@ -231,7 +226,6 @@ func TestRunWithoutScsResults_Other_AgentsShouldNotShowScsResults(t *testing.T) func TestRunNilResults_Other_AgentsShouldNotShowAnyResults(t *testing.T) { clearFlags() - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK_NO_VULNERABILITIES", "--report-format", "json", "--agent", params.VisualStudioAgent) assertTypePresentJSON(t, params.SCSScorecardType, 0) @@ -1047,7 +1041,7 @@ func TestRunGetResultsByScanIdSummaryConsoleFormat_ScsNotScanned_ScsMissingInRep mock.HasScs = false mock.ScsScanPartial = false mock.ScorecardScanned = false - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} + buffer, err := executeRedirectedOsStdoutTestCommand(createASTTestCommand(), "results", "show", "--scan-id", "MOCK", "--report-format", "summaryConsole") assert.NilError(t, err) @@ -1073,7 +1067,6 @@ func TestRunGetResultsByScanIdSummaryConsoleFormat_ScsCompleted_ScsCompletedInRe mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} buffer, err := executeRedirectedOsStdoutTestCommand(createASTTestCommand(), "results", "show", "--scan-id", "MOCK", "--report-format", "summaryConsole") @@ -1108,7 +1101,6 @@ func TestRunGetResultsByScanIdSummaryConsoleFormat_ScsPartial_ScsPartialInReport mock.HasScs = true mock.ScsScanPartial = true mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} buffer, err := executeRedirectedOsStdoutTestCommand(createASTTestCommand(), "results", "show", "--scan-id", "MOCK", "--report-format", "summaryConsole") @@ -1143,7 +1135,6 @@ func TestRunGetResultsByScanIdSummaryConsoleFormat_ScsScorecardNotScanned_Scorec mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = false - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} buffer, err := executeRedirectedOsStdoutTestCommand(createASTTestCommand(), "results", "show", "--scan-id", "MOCK", "--report-format", "summaryConsole") @@ -1170,7 +1161,6 @@ func TestRunGetResultsByScanIdSummaryConsoleFormat_SCSFlagNotEnabled_SCSMissingI mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: false} buffer, err := executeRedirectedOsStdoutTestCommand(createASTTestCommand(), "results", "show", "--scan-id", "MOCK", "--report-format", "summaryConsole,summaryJSON") @@ -1332,7 +1322,7 @@ func TestRunGetResultsByScanIdJSONFormat_SCSFlagNotEnabled_SCSMissingInReport(t mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: false} + execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "json") assertTypePresentJSON(t, params.SCSScorecardType, 0) assertTypePresentJSON(t, params.SCSSecretDetectionType, 0) @@ -1346,7 +1336,7 @@ func TestRunGetResultsByScanIdJSONFormat_SCSFlagEnabled_SCSPresentInReport(t *te mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} + execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "json") assertTypePresentJSON(t, params.SCSScorecardType, 1) assertTypePresentJSON(t, params.SCSSecretDetectionType, 2) @@ -1360,7 +1350,7 @@ func TestRunGetResultsByScanIdSonarFormat_SCSFlagNotEnabled_SCSMissingInReport(t mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: false} + execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "sonar") assertTypePresentSonar(t, params.SCSScorecardType, 0) assertTypePresentSonar(t, params.SCSSecretDetectionType, 0) @@ -1374,7 +1364,7 @@ func TestRunGetResultsByScanIdSonarFormat_SCSFlagEnabled_SCSPresentInReport(t *t mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} + execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "sonar") assertTypePresentSonar(t, params.SCSScorecardType, 1) assertTypePresentSonar(t, params.SCSSecretDetectionType, 2) @@ -1388,7 +1378,7 @@ func TestRunGetResultsByScanIdSarifFormat_SCSFlagEnabled_SCSPresentInReport(t *t mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} + execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "sarif") assertTypePresentSarif(t, params.SCSScorecardType, 1) assertTypePresentSarif(t, params.SCSSecretDetectionType, 2) @@ -1402,7 +1392,7 @@ func TestRunGetResultsByScanIdSarifFormat_SCSFlagEnabled_SCSMissingInReport(t *t mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: false} + execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "sarif") assertTypePresentSarif(t, params.SCSScorecardType, 0) assertTypePresentSarif(t, params.SCSSecretDetectionType, 0) @@ -1417,7 +1407,6 @@ func TestRunGetResultsByScanIdSummaryJSONFormat_SCSFlagNotEnabled_SCSMissingInRe mock.ScsScanPartial = false mock.ScorecardScanned = true ScsFlagValue := false - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: ScsFlagValue} execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "summaryJSON") @@ -1434,7 +1423,6 @@ func TestRunGetResultsByScanIdSummaryJSONFormat_SCSFlagEnabled_SCSPresentInRepor mock.ScorecardScanned = true ScsFlagValue := true expectedScsIssues := 3 - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: ScsFlagValue} execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "summaryJSON") @@ -1447,7 +1435,7 @@ func TestRunGetResultsByScanIdSummaryJSONFormat_SCSFlagEnabled_SCSPresentInRepor func TestRunGetResultsByScanIdSummaryMarkdownFormat_SCSFlagEnabled_SCSPresentInReport(t *testing.T) { clearFlags() mock.HasScs = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} + execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "markdown") // Read the contents of the file markdownBytes, err := os.ReadFile(fmt.Sprintf("%s.%s", fileName, "md")) @@ -1464,7 +1452,7 @@ func TestRunGetResultsByScanIdSummaryMarkdownFormat_SCSFlagEnabled_SCSPresentInR func TestRunGetResultsByScanIdSummaryMarkdownFormat_SCSFlagNotEnabled_SCSNotPresentInReport(t *testing.T) { clearFlags() mock.HasScs = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: false} + execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "markdown") // Read the contents of the file markdownBytes, err := os.ReadFile(fmt.Sprintf("%s.%s", fileName, "md")) @@ -1481,7 +1469,7 @@ func TestRunGetResultsByScanIdSummaryMarkdownFormat_SCSFlagNotEnabled_SCSNotPres func TestRunGetResultsByScanIdSummaryHtmlFormat_SCSFlagEnabled_SCSPresentInReport(t *testing.T) { clearFlags() mock.HasScs = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} + execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "summaryHTML") // Read the contents of the file htmlBytes, err := os.ReadFile(fmt.Sprintf("%s.%s", fileName, "html")) @@ -1498,7 +1486,7 @@ func TestRunGetResultsByScanIdSummaryHtmlFormat_SCSFlagEnabled_SCSPresentInRepor func TestRunGetResultsByScanIdSummaryHtmlFormat_SCSFlagNotEnabled_SCSNotPresentInReport(t *testing.T) { clearFlags() mock.HasScs = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: false} + execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "summaryHTML") // Read the contents of the file htmlBytes, err := os.ReadFile(fmt.Sprintf("%s.%s", fileName, "html")) diff --git a/internal/wrappers/feature-flags.go b/internal/wrappers/feature-flags.go index a243db0f9..47923e183 100644 --- a/internal/wrappers/feature-flags.go +++ b/internal/wrappers/feature-flags.go @@ -12,7 +12,6 @@ const PackageEnforcementEnabled = "PACKAGE_ENFORCEMENT_ENABLED" const CVSSV3Enabled = "CVSS_V3_ENABLED" const MinioEnabled = "MINIO_ENABLED" const SastCustomStateEnabled = "SAST_CUSTOM_STATES_ENABLED" -const SCSEngineCLIEnabled = "NEW_2MS_SCORECARD_RESULTS_CLI_ENABLED" const RiskManagementEnabled = "RISK_MANAGEMENT_IDES_PROJECT_RESULTS_SCORES_API_ENABLED" const OssRealtimeEnabled = "OSS_REALTIME_ENABLED" const ScsLicensingV2Enabled = "SSCS_NEW_LICENSING_ENABLED" diff --git a/internal/wrappers/results-summary.go b/internal/wrappers/results-summary.go index a08e83d64..61a90d620 100644 --- a/internal/wrappers/results-summary.go +++ b/internal/wrappers/results-summary.go @@ -79,8 +79,6 @@ type EngineResultSummary struct { type EnginesResultsSummary map[string]*EngineResultSummary -var IsSCSEnabled bool - var IsContainersEnabled bool func (engineSummary *EnginesResultsSummary) GetCriticalIssues() int { @@ -161,9 +159,6 @@ func (r *ResultSummary) ContainersIssuesValue() int { return *r.ContainersIssues } -func (r *ResultSummary) SCSEnabled() bool { - return IsSCSEnabled -} func (r *ResultSummary) HasSCS() bool { return r.HasEngine(params.ScsType) } @@ -786,7 +781,7 @@ const nonAsyncSummary = `
{{if .ContainersEnabled}}
Containers
{{end}} - {{if .SCSEnabled}}
SCS +
SCS
{{end}}
@@ -797,7 +792,7 @@ const nonAsyncSummary = `
{{if lt .KicsIssues 0}}N/A{{else}}{{.KicsIssues}}{{end}}
{{if lt .ScaIssues 0}}N/A{{else}}{{.ScaIssues}}{{end}}
{{if .ContainersEnabled}}
{{if lt .ContainersIssuesValue 0}}N/A{{else}}{{.ContainersIssuesValue}}{{end}}
{{end}} - {{if .SCSEnabled}}
{{if lt .SCSIssuesValue 0}}N/A{{else}}{{.SCSIssuesValue}}{{end}}
{{end}} +
{{if lt .SCSIssuesValue 0}}N/A{{else}}{{.SCSIssuesValue}}{{end}}
{{end}}
@@ -871,9 +866,9 @@ const SummaryMarkdownCompletedTemplate = ` ### Vulnerabilities per Scan Type -| SAST | IaC Security | SCA |{{if .SCSEnabled}} SCS |{{end}}{{if .ContainersEnabled}} Containers |{{end}} -|:----------:|:----------:|:---------:|{{if .SCSEnabled}} :----------:|{{end}}{{if .ContainersEnabled}} :----------:|{{end}} -| {{if lt .SastIssues 0}}N/A{{else}}{{.SastIssues}}{{end}} | {{if lt .KicsIssues 0}}N/A{{else}}{{.KicsIssues}}{{end}} | {{if lt .ScaIssues 0}}N/A{{else}}{{.ScaIssues}}{{end}} | {{if .SCSEnabled}}{{if lt .SCSIssuesValue 0}}N/A{{else}}{{.SCSIssuesValue}}{{end}} | {{end}} {{if .ContainersEnabled}}{{if lt .ContainersIssuesValue 0}}N/A{{else}}{{.ContainersIssuesValue}}{{end}} | {{end}} +| SAST | IaC Security | SCA | SCS |{{end}}{{if .ContainersEnabled}} Containers |{{end}} +|:----------:|:----------:|:---------:| :----------:|{{end}}{{if .ContainersEnabled}} :----------:|{{end}} +| {{if lt .SastIssues 0}}N/A{{else}}{{.SastIssues}}{{end}} | {{if lt .KicsIssues 0}}N/A{{else}}{{.KicsIssues}}{{end}} | {{if lt .ScaIssues 0}}N/A{{else}}{{.ScaIssues}}{{end}} | {{if lt .SCSIssuesValue 0}}N/A{{else}}{{.SCSIssuesValue}}{{end}} | {{end}} {{if .ContainersEnabled}}{{if lt .ContainersIssuesValue 0}}N/A{{else}}{{.ContainersIssuesValue}}{{end}} | {{end}} {{if .HasAPISecurity}} ### API Security From a2d36e8b5edfbacf06c712c948308234d94e55fb Mon Sep 17 00:00:00 2001 From: cx-rui-gomes <71653902+cx-rui-gomes@users.noreply.github.com> Date: Wed, 10 Sep 2025 11:41:12 +0100 Subject: [PATCH 2/6] remove no longer relevant tests for scs --- internal/commands/result_test.go | 103 ------------------------------- 1 file changed, 103 deletions(-) diff --git a/internal/commands/result_test.go b/internal/commands/result_test.go index 29df8ad1e..d10dde29a 100644 --- a/internal/commands/result_test.go +++ b/internal/commands/result_test.go @@ -1156,32 +1156,6 @@ func TestRunGetResultsByScanIdSummaryConsoleFormat_ScsScorecardNotScanned_Scorec mock.SetScsMockVarsToDefault() } -func TestRunGetResultsByScanIdSummaryConsoleFormat_SCSFlagNotEnabled_SCSMissingInReport(t *testing.T) { - clearFlags() - mock.HasScs = true - mock.ScsScanPartial = false - mock.ScorecardScanned = true - - buffer, err := executeRedirectedOsStdoutTestCommand(createASTTestCommand(), - "results", "show", "--scan-id", "MOCK", "--report-format", "summaryConsole,summaryJSON") - assert.NilError(t, err) - - stdoutString := buffer.String() - fmt.Print(stdoutString) - - scsSummary := "| SCS" - assert.Equal(t, !strings.Contains(stdoutString, scsSummary), true, - "Expected SCS summary to be missing:"+scsSummary) - secretDetectionSummary := "Secret Detection" - assert.Equal(t, !strings.Contains(stdoutString, secretDetectionSummary), true, - "Expected Secret Detection summary to be missing:"+secretDetectionSummary) - scorecardSummary := "Scorecard" - assert.Equal(t, !strings.Contains(stdoutString, scorecardSummary), true, - "Expected Scorecard summary to be missing:"+scorecardSummary) - - mock.SetScsMockVarsToDefault() -} - func TestGetResultsSummaryConsoleFormatWithCriticalDisabled(t *testing.T) { clearFlags() mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.CVSSV3Enabled, Status: false} @@ -1317,20 +1291,6 @@ func TestPrintPoliciesSummary_WhenNoRolViolated_ShouldNotContainPolicyViolation( assert.Assert(t, !strings.Contains(output, "Policy Management Violation "), "Output should not contain 'Policy Management Violation'") } -func TestRunGetResultsByScanIdJSONFormat_SCSFlagNotEnabled_SCSMissingInReport(t *testing.T) { - clearFlags() - mock.HasScs = true - mock.ScsScanPartial = false - mock.ScorecardScanned = true - - execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "json") - assertTypePresentJSON(t, params.SCSScorecardType, 0) - assertTypePresentJSON(t, params.SCSSecretDetectionType, 0) - - removeFileBySuffix(t, printer.FormatJSON) - mock.SetScsMockVarsToDefault() -} - func TestRunGetResultsByScanIdJSONFormat_SCSFlagEnabled_SCSPresentInReport(t *testing.T) { clearFlags() mock.HasScs = true @@ -1345,20 +1305,6 @@ func TestRunGetResultsByScanIdJSONFormat_SCSFlagEnabled_SCSPresentInReport(t *te mock.SetScsMockVarsToDefault() } -func TestRunGetResultsByScanIdSonarFormat_SCSFlagNotEnabled_SCSMissingInReport(t *testing.T) { - clearFlags() - mock.HasScs = true - mock.ScsScanPartial = false - mock.ScorecardScanned = true - - execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "sonar") - assertTypePresentSonar(t, params.SCSScorecardType, 0) - assertTypePresentSonar(t, params.SCSSecretDetectionType, 0) - - removeFileBySuffix(t, printer.FormatSonar) - mock.SetScsMockVarsToDefault() -} - func TestRunGetResultsByScanIdSonarFormat_SCSFlagEnabled_SCSPresentInReport(t *testing.T) { clearFlags() mock.HasScs = true @@ -1401,21 +1347,6 @@ func TestRunGetResultsByScanIdSarifFormat_SCSFlagEnabled_SCSMissingInReport(t *t mock.SetScsMockVarsToDefault() } -func TestRunGetResultsByScanIdSummaryJSONFormat_SCSFlagNotEnabled_SCSMissingInReport(t *testing.T) { - clearFlags() - mock.HasScs = true - mock.ScsScanPartial = false - mock.ScorecardScanned = true - ScsFlagValue := false - - execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "summaryJSON") - - assertResultsPresentSummaryJSON(t, ScsFlagValue, params.ScsType, nil) - - removeFileBySuffix(t, printer.FormatJSON) - mock.SetScsMockVarsToDefault() -} - func TestRunGetResultsByScanIdSummaryJSONFormat_SCSFlagEnabled_SCSPresentInReport(t *testing.T) { clearFlags() mock.HasScs = true @@ -1449,23 +1380,6 @@ func TestRunGetResultsByScanIdSummaryMarkdownFormat_SCSFlagEnabled_SCSPresentInR mock.SetScsMockVarsToDefault() } -func TestRunGetResultsByScanIdSummaryMarkdownFormat_SCSFlagNotEnabled_SCSNotPresentInReport(t *testing.T) { - clearFlags() - mock.HasScs = true - - execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "markdown") - // Read the contents of the file - markdownBytes, err := os.ReadFile(fmt.Sprintf("%s.%s", fileName, "md")) - assert.NilError(t, err, "Error reading file") - - markdownString := string(markdownBytes) - assert.Equal(t, strings.Contains(markdownString, "SCS"), false, "SCS should not be present in the markdown file") - - // Remove generated md file - removeFileBySuffix(t, "md") - mock.SetScsMockVarsToDefault() -} - func TestRunGetResultsByScanIdSummaryHtmlFormat_SCSFlagEnabled_SCSPresentInReport(t *testing.T) { clearFlags() mock.HasScs = true @@ -1483,23 +1397,6 @@ func TestRunGetResultsByScanIdSummaryHtmlFormat_SCSFlagEnabled_SCSPresentInRepor mock.SetScsMockVarsToDefault() } -func TestRunGetResultsByScanIdSummaryHtmlFormat_SCSFlagNotEnabled_SCSNotPresentInReport(t *testing.T) { - clearFlags() - mock.HasScs = true - - execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "summaryHTML") - // Read the contents of the file - htmlBytes, err := os.ReadFile(fmt.Sprintf("%s.%s", fileName, "html")) - assert.NilError(t, err, "Error reading file") - - htmlString := string(htmlBytes) - assert.Equal(t, strings.Contains(htmlString, "SCS"), false, "SCS should not be present in the html file") - - // Remove generated md file - removeFileBySuffix(t, "html") - mock.SetScsMockVarsToDefault() -} - func TestFilterScsResultsByAgent_ShouldExcludeSCSAndContainers(t *testing.T) { results := &wrappers.ScanResultsCollection{ Results: []*wrappers.ScanResult{ From 1f7119b86d59dcec15d54f2f2986552d60f39062 Mon Sep 17 00:00:00 2001 From: cx-rui-gomes <71653902+cx-rui-gomes@users.noreply.github.com> Date: Mon, 29 Sep 2025 14:56:12 +0100 Subject: [PATCH 3/6] fix missing line --- internal/commands/result_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/commands/result_test.go b/internal/commands/result_test.go index 38e3e3ac1..e1c5b41fe 100644 --- a/internal/commands/result_test.go +++ b/internal/commands/result_test.go @@ -241,7 +241,6 @@ func TestRunScsResultsShow_Other_AgentShouldShowSCSResults(t *testing.T) { mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true - mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.SCSEngineCLIEnabled, Status: true} execCmdNilAssertion(t, "results", "show", "--scan-id", "SCS_ONLY", "--report-format", "json", "--agent", params.VisualStudioAgent) assertTypePresentJSON(t, params.SCSScorecardType, 0) From 5c7f168c0937bf11e84b60e9fd10de77feeffbca Mon Sep 17 00:00:00 2001 From: cx-rui-gomes <71653902+cx-rui-gomes@users.noreply.github.com> Date: Thu, 2 Oct 2025 12:04:28 +0100 Subject: [PATCH 4/6] fixing results printing issue --- internal/wrappers/results-summary.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/wrappers/results-summary.go b/internal/wrappers/results-summary.go index 61a90d620..d7cf67798 100644 --- a/internal/wrappers/results-summary.go +++ b/internal/wrappers/results-summary.go @@ -783,7 +783,7 @@ const nonAsyncSummary = `
{{end}}
SCS
-
{{end}} +
@@ -792,7 +792,7 @@ const nonAsyncSummary = `
{{if lt .KicsIssues 0}}N/A{{else}}{{.KicsIssues}}{{end}}
{{if lt .ScaIssues 0}}N/A{{else}}{{.ScaIssues}}{{end}}
{{if .ContainersEnabled}}
{{if lt .ContainersIssuesValue 0}}N/A{{else}}{{.ContainersIssuesValue}}{{end}}
{{end}} -
{{if lt .SCSIssuesValue 0}}N/A{{else}}{{.SCSIssuesValue}}{{end}}
{{end}} +
{{if lt .SCSIssuesValue 0}}N/A{{else}}{{.SCSIssuesValue}}{{end}}
@@ -866,9 +866,9 @@ const SummaryMarkdownCompletedTemplate = ` ### Vulnerabilities per Scan Type -| SAST | IaC Security | SCA | SCS |{{end}}{{if .ContainersEnabled}} Containers |{{end}} -|:----------:|:----------:|:---------:| :----------:|{{end}}{{if .ContainersEnabled}} :----------:|{{end}} -| {{if lt .SastIssues 0}}N/A{{else}}{{.SastIssues}}{{end}} | {{if lt .KicsIssues 0}}N/A{{else}}{{.KicsIssues}}{{end}} | {{if lt .ScaIssues 0}}N/A{{else}}{{.ScaIssues}}{{end}} | {{if lt .SCSIssuesValue 0}}N/A{{else}}{{.SCSIssuesValue}}{{end}} | {{end}} {{if .ContainersEnabled}}{{if lt .ContainersIssuesValue 0}}N/A{{else}}{{.ContainersIssuesValue}}{{end}} | {{end}} +| SAST | IaC Security | SCA | SCS |{{if .ContainersEnabled}} Containers |{{end}} +|:----------:|:----------:|:---------:|:----------:|{{if .ContainersEnabled}} :----------:|{{end}} +| {{if lt .SastIssues 0}}N/A{{else}}{{.SastIssues}}{{end}} | {{if lt .KicsIssues 0}}N/A{{else}}{{.KicsIssues}}{{end}} | {{if lt .ScaIssues 0}}N/A{{else}}{{.ScaIssues}}{{end}} | {{if lt .SCSIssuesValue 0}}N/A{{else}}{{.SCSIssuesValue}}{{end}} | {{if .ContainersEnabled}}{{if lt .ContainersIssuesValue 0}}N/A{{else}}{{.ContainersIssuesValue}}{{end}} | {{end}} {{if .HasAPISecurity}} ### API Security From e1745e9c4a209a1ccced3e9b6bd10b3d0da4f173 Mon Sep 17 00:00:00 2001 From: cx-rui-gomes <71653902+cx-rui-gomes@users.noreply.github.com> Date: Thu, 2 Oct 2025 15:40:02 +0100 Subject: [PATCH 5/6] fix failing unit tests --- internal/commands/result_test.go | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/internal/commands/result_test.go b/internal/commands/result_test.go index e1c5b41fe..e83c78a04 100644 --- a/internal/commands/result_test.go +++ b/internal/commands/result_test.go @@ -1124,6 +1124,7 @@ func TestRunGetResultsByScanIdSummaryConsoleFormat_ScsCompleted_ScsCompletedInRe mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = true + mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.CVSSV3Enabled, Status: true} buffer, err := executeRedirectedOsStdoutTestCommand(createASTTestCommand(), "results", "show", "--scan-id", "MOCK", "--report-format", "summaryConsole") @@ -1158,6 +1159,7 @@ func TestRunGetResultsByScanIdSummaryConsoleFormat_ScsPartial_ScsPartialInReport mock.HasScs = true mock.ScsScanPartial = true mock.ScorecardScanned = true + mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.CVSSV3Enabled, Status: true} buffer, err := executeRedirectedOsStdoutTestCommand(createASTTestCommand(), "results", "show", "--scan-id", "MOCK", "--report-format", "summaryConsole") @@ -1192,6 +1194,7 @@ func TestRunGetResultsByScanIdSummaryConsoleFormat_ScsScorecardNotScanned_Scorec mock.HasScs = true mock.ScsScanPartial = false mock.ScorecardScanned = false + mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.CVSSV3Enabled, Status: true} buffer, err := executeRedirectedOsStdoutTestCommand(createASTTestCommand(), "results", "show", "--scan-id", "MOCK", "--report-format", "summaryConsole") @@ -1390,20 +1393,6 @@ func TestRunGetResultsByScanIdSarifFormat_SCSFlagEnabled_SCSNonEmpty_URI_Present mock.SetScsMockVarsToDefault() } -func TestRunGetResultsByScanIdSarifFormat_SCSFlagEnabled_SCSMissingInReport(t *testing.T) { - clearFlags() - mock.HasScs = true - mock.ScsScanPartial = false - mock.ScorecardScanned = true - - execCmdNilAssertion(t, "results", "show", "--scan-id", "MOCK", "--report-format", "sarif") - assertTypePresentSarif(t, params.SCSScorecardType, 0) - assertTypePresentSarif(t, params.SCSSecretDetectionType, 0) - - removeFileBySuffix(t, printer.FormatSarif) - mock.SetScsMockVarsToDefault() -} - func TestRunGetResultsByScanIdSummaryJSONFormat_SCSFlagEnabled_SCSPresentInReport(t *testing.T) { clearFlags() mock.HasScs = true From 9495157dbe65e85650cb0ff6b99458d8ec494441 Mon Sep 17 00:00:00 2001 From: cx-rui-gomes <71653902+cx-rui-gomes@users.noreply.github.com> Date: Thu, 9 Oct 2025 09:15:51 +0100 Subject: [PATCH 6/6] trigger ci