Skip to content

Commit e2f1c13

Browse files
Excluded directory '.pipeline' for detectExecuteScan step (#4955)
* Excluded directory './pipeline' for detectExecuteScan step * fixed unit-tests * changed config path from "pipeline/*" to ".pipeline/*" * Refactor exclude handling --------- Co-authored-by: Vijayan T <[email protected]>
1 parent fe2e4e7 commit e2f1c13

File tree

2 files changed

+49
-7
lines changed

2 files changed

+49
-7
lines changed

cmd/detectExecuteScan.go

+34-3
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ func newBlackduckSystem(config detectExecuteScanOptions) *blackduckSystem {
142142
return &sys
143143
}
144144

145+
const configPath = ".pipeline/*"
146+
145147
func detectExecuteScan(config detectExecuteScanOptions, _ *telemetry.CustomData, influx *detectExecuteScanInflux) {
146148
influx.step_data.fields.detect = false
147149

@@ -454,9 +456,8 @@ func addDetectArgs(args []string, config detectExecuteScanOptions, utils detectU
454456

455457
}
456458

457-
if len(config.ExcludedDirectories) != 0 && !checkIfArgumentIsInScanProperties(config, "detect.excluded.directories") {
458-
args = append(args, fmt.Sprintf("--detect.excluded.directories=%s", strings.Join(config.ExcludedDirectories, ",")))
459-
}
459+
// Handle excluded directories
460+
handleExcludedDirectories(&args, &config)
460461

461462
if config.Unmap {
462463
if !piperutils.ContainsString(config.ScanProperties, "--detect.project.codelocation.unmap=true") {
@@ -1121,3 +1122,33 @@ func logConfigInVerboseMode(config detectExecuteScanOptions) {
11211122
debugLog, _ := json.Marshal(config)
11221123
log.Entry().Debugf("Detect configuration: %v", string(debugLog))
11231124
}
1125+
1126+
func handleExcludedDirectories(args *[]string, config *detectExecuteScanOptions) {
1127+
index := findItemInStringSlice(config.ScanProperties, "detect.excluded.directories")
1128+
if index != -1 && !strings.Contains(config.ScanProperties[index], configPath) {
1129+
config.ScanProperties[index] += "," + configPath
1130+
} else {
1131+
config.ExcludedDirectories = excludeConfigDirectory(config.ExcludedDirectories)
1132+
*args = append(*args, fmt.Sprintf("--detect.excluded.directories=%s", strings.Join(config.ExcludedDirectories, ",")))
1133+
}
1134+
}
1135+
1136+
func excludeConfigDirectory(directories []string) []string {
1137+
configDirectory := configPath
1138+
for i := range directories {
1139+
if directories[i] == configDirectory {
1140+
return directories
1141+
}
1142+
}
1143+
directories = append(directories, configDirectory)
1144+
return directories
1145+
}
1146+
1147+
func findItemInStringSlice(slice []string, item string) int {
1148+
for i := range slice {
1149+
if strings.Contains(slice[i], item) {
1150+
return i
1151+
}
1152+
}
1153+
return -1
1154+
}

cmd/detectExecuteScan_test.go

+15-4
Original file line numberDiff line numberDiff line change
@@ -315,15 +315,15 @@ func TestRunDetect(t *testing.T) {
315315
assert.NoError(t, err)
316316
assert.Equal(t, ".", utilsMock.Dir, "Wrong execution directory used")
317317
assert.Equal(t, "/bin/bash", utilsMock.Shell[0], "Bash shell expected")
318-
expectedScript := "./detect.sh --blackduck.url= --blackduck.api.token= \"--detect.project.name=\" \"--detect.project.version.name=\" \"--detect.code.location.name=\" \"--detect.force.success.on.skip=true\" --detect.source.path='.'"
318+
expectedScript := "./detect.sh --detect.excluded.directories=.pipeline/* --blackduck.url= --blackduck.api.token= \"--detect.project.name=\" \"--detect.project.version.name=\" \"--detect.code.location.name=\" \"--detect.force.success.on.skip=true\" --detect.source.path='.'"
319319
assert.Equal(t, expectedScript, utilsMock.Calls[0])
320320
})
321321

322322
t.Run("failure case", func(t *testing.T) {
323323
t.Parallel()
324324
ctx := context.Background()
325325
utilsMock := newDetectTestUtilsBundle(false)
326-
utilsMock.ShouldFailOnCommand = map[string]error{"./detect.sh --blackduck.url= --blackduck.api.token= \"--detect.project.name=\" \"--detect.project.version.name=\" \"--detect.code.location.name=\" \"--detect.force.success.on.skip=true\" --detect.source.path='.'": fmt.Errorf("")}
326+
utilsMock.ShouldFailOnCommand = map[string]error{"./detect.sh --detect.excluded.directories=.pipeline/* --blackduck.url= --blackduck.api.token= \"--detect.project.name=\" \"--detect.project.version.name=\" \"--detect.code.location.name=\" \"--detect.force.success.on.skip=true\" --detect.source.path='.'": fmt.Errorf("")}
327327
utilsMock.ExitCode = 3
328328
utilsMock.AddFile("detect.sh", []byte(""))
329329
err := runDetect(ctx, detectExecuteScanOptions{FailOnSevereVulnerabilities: true}, utilsMock, &detectExecuteScanInflux{})
@@ -405,7 +405,7 @@ func TestAddDetectArgs(t *testing.T) {
405405
"--testProp1=1",
406406
"--detect.detector.search.depth=100",
407407
"--detect.detector.search.continue=true",
408-
"--detect.excluded.directories=dir1,dir2",
408+
"--detect.excluded.directories=dir1,dir2,.pipeline/*",
409409
"--scan1=1",
410410
"--scan2=2",
411411
"--blackduck.url=https://server.url",
@@ -434,6 +434,7 @@ func TestAddDetectArgs(t *testing.T) {
434434
},
435435
expected: []string{
436436
"--testProp1=1",
437+
"--detect.excluded.directories=.pipeline/*",
437438
"--blackduck.url=https://server.url",
438439
"--blackduck.api.token=apiToken",
439440
"\"--detect.project.name=testName\"",
@@ -462,6 +463,7 @@ func TestAddDetectArgs(t *testing.T) {
462463
},
463464
expected: []string{
464465
"--testProp1=1",
466+
"--detect.excluded.directories=.pipeline/*",
465467
"--blackduck.url=https://server.url",
466468
"--blackduck.api.token=apiToken",
467469
"\"--detect.project.name=testName\"",
@@ -491,6 +493,7 @@ func TestAddDetectArgs(t *testing.T) {
491493
},
492494
expected: []string{
493495
"--testProp1=1",
496+
"--detect.excluded.directories=.pipeline/*",
494497
"--blackduck.url=https://server.url",
495498
"--blackduck.api.token=apiToken",
496499
"\"--detect.project.name=testName\"",
@@ -521,6 +524,7 @@ func TestAddDetectArgs(t *testing.T) {
521524
},
522525
expected: []string{
523526
"--testProp1=1",
527+
"--detect.excluded.directories=.pipeline/*",
524528
"--detect.project.codelocation.unmap=true",
525529
"--blackduck.url=https://server.url",
526530
"--blackduck.api.token=apiToken",
@@ -556,6 +560,7 @@ func TestAddDetectArgs(t *testing.T) {
556560
},
557561
expected: []string{
558562
"--testProp1=1",
563+
"--detect.excluded.directories=.pipeline/*",
559564
"--detect.project.codelocation.unmap=true",
560565
"--blackduck.url=https://server.url",
561566
"--blackduck.api.token=apiToken",
@@ -595,6 +600,7 @@ func TestAddDetectArgs(t *testing.T) {
595600
},
596601
expected: []string{
597602
"--testProp1=1",
603+
"--detect.excluded.directories=.pipeline/*",
598604
"--detect.project.codelocation.unmap=true",
599605
"--blackduck.url=https://server.url",
600606
"--blackduck.api.token=apiToken",
@@ -634,6 +640,7 @@ func TestAddDetectArgs(t *testing.T) {
634640
},
635641
expected: []string{
636642
"--testProp1=1",
643+
"--detect.excluded.directories=.pipeline/*",
637644
"--detect.project.codelocation.unmap=true",
638645
"--blackduck.url=https://server.url",
639646
"--blackduck.api.token=apiToken",
@@ -674,6 +681,7 @@ func TestAddDetectArgs(t *testing.T) {
674681
},
675682
expected: []string{
676683
"--testProp1=1",
684+
"--detect.excluded.directories=.pipeline/*",
677685
"--scan=1",
678686
"--detect.project.codelocation.unmap=true",
679687
"--blackduck.url=https://server.url",
@@ -705,6 +713,7 @@ func TestAddDetectArgs(t *testing.T) {
705713
},
706714
expected: []string{
707715
"--testProp1=1",
716+
"--detect.excluded.directories=.pipeline/*",
708717
"--blackduck.url=https://server.url",
709718
"--blackduck.api.token=apiToken",
710719
"\"--detect.project.name=testName\"",
@@ -730,6 +739,7 @@ func TestAddDetectArgs(t *testing.T) {
730739
isPullRequest: true,
731740
expected: []string{
732741
"--testProp1=1",
742+
"--detect.excluded.directories=.pipeline/*",
733743
"--blackduck.url=https://server.url",
734744
"--blackduck.api.token=apiToken",
735745
"\"--detect.project.name=Rapid_scan_on_PRs\"",
@@ -768,7 +778,7 @@ func TestAddDetectArgs(t *testing.T) {
768778
"--testProp1=1",
769779
"--detect.detector.search.depth=5",
770780
"--detect.detector.search.continue=false",
771-
"--detect.excluded.directories=dir1,dir2",
781+
"--detect.excluded.directories=dir1,dir2,.pipeline/*",
772782
"--blackduck.url=https://server.url",
773783
"--blackduck.api.token=apiToken",
774784
"\"--detect.project.name=Rapid_scan_on_PRs\"",
@@ -803,6 +813,7 @@ func TestAddDetectArgs(t *testing.T) {
803813
isPullRequest: true,
804814
expected: []string{
805815
"--testProp1=1",
816+
"--detect.excluded.directories=.pipeline/*",
806817
"--detect.maven.build.command=",
807818
"--settings",
808819
".pipeline/settings.xml",

0 commit comments

Comments
 (0)