diff --git a/checks/evaluation/pinned_dependencies.go b/checks/evaluation/pinned_dependencies.go index d9133d76da4..a8e98be8e17 100644 --- a/checks/evaluation/pinned_dependencies.go +++ b/checks/evaluation/pinned_dependencies.go @@ -127,15 +127,22 @@ func PinningDependencies(name string, c *checker.CheckRequest, return checker.CreateRuntimeErrorResult(name, err) } + // Npm installs. + npmScore, err := createReturnForIsNpmInstallPinned(pr, dl) + if err != nil { + return checker.CreateRuntimeErrorResult(name, err) + } + // Scores may be inconclusive. actionScore = maxScore(0, actionScore) dockerFromScore = maxScore(0, dockerFromScore) dockerDownloadScore = maxScore(0, dockerDownloadScore) scriptScore = maxScore(0, scriptScore) pipScore = maxScore(0, pipScore) + npmScore = maxScore(0, npmScore) score := checker.AggregateScores(actionScore, dockerFromScore, - dockerDownloadScore, scriptScore, pipScore) + dockerDownloadScore, scriptScore, pipScore, npmScore) if score == checker.MaxResultScore { return checker.CreateMaxScoreResult(name, "all dependencies are pinned") @@ -260,6 +267,15 @@ func createReturnForIsPipInstallPinned(pr map[checker.DependencyUseType]pinnedRe dl) } +// Create the result for npm install commands. +func createReturnForIsNpmInstallPinned(pr map[checker.DependencyUseType]pinnedResult, + dl checker.DetailLogger, +) (int, error) { + return createReturnValues(pr, checker.DependencyUseTypeNpmCommand, + "npm installs are pinned", + dl) +} + func createReturnValues(pr map[checker.DependencyUseType]pinnedResult, t checker.DependencyUseType, infoMsg string, dl checker.DetailLogger, diff --git a/checks/evaluation/pinned_dependencies_test.go b/checks/evaluation/pinned_dependencies_test.go index cd497a6cfbf..5e3e369a314 100644 --- a/checks/evaluation/pinned_dependencies_test.go +++ b/checks/evaluation/pinned_dependencies_test.go @@ -111,7 +111,7 @@ func Test_PinningDependencies(t *testing.T) { Error: nil, Score: checker.MaxResultScore, NumberOfWarn: 0, - NumberOfInfo: 6, + NumberOfInfo: 7, NumberOfDebug: 1, }, }, @@ -132,12 +132,12 @@ func Test_PinningDependencies(t *testing.T) { Error: nil, Score: 6, NumberOfWarn: 1, - NumberOfInfo: 4, + NumberOfInfo: 5, NumberOfDebug: 1, }, }, { - name: "various wanrings", + name: "various warnings", dependencies: []checker.Dependency{ { Location: &checker.File{}, @@ -158,9 +158,9 @@ func Test_PinningDependencies(t *testing.T) { }, expected: scut.TestReturn{ Error: nil, - Score: 2, + Score: 3, NumberOfWarn: 3, - NumberOfInfo: 2, + NumberOfInfo: 3, NumberOfDebug: 1, }, }, @@ -176,7 +176,7 @@ func Test_PinningDependencies(t *testing.T) { Error: nil, Score: 8, NumberOfWarn: 1, - NumberOfInfo: 5, + NumberOfInfo: 6, NumberOfDebug: 0, }, }, @@ -193,7 +193,7 @@ func Test_PinningDependencies(t *testing.T) { Error: nil, Score: 10, NumberOfWarn: 0, - NumberOfInfo: 6, + NumberOfInfo: 7, NumberOfDebug: 1, }, }, @@ -203,12 +203,12 @@ func Test_PinningDependencies(t *testing.T) { Error: nil, Score: 10, NumberOfWarn: 0, - NumberOfInfo: 6, + NumberOfInfo: 7, NumberOfDebug: 0, }, }, { - name: "Validate various wanrings and info", + name: "Validate various warnings and info", dependencies: []checker.Dependency{ { Location: &checker.File{}, @@ -229,12 +229,28 @@ func Test_PinningDependencies(t *testing.T) { }, expected: scut.TestReturn{ Error: nil, - Score: 2, + Score: 3, NumberOfWarn: 3, - NumberOfInfo: 2, + NumberOfInfo: 3, NumberOfDebug: 1, }, }, + { + name: "unpinned npm install", + dependencies: []checker.Dependency{ + { + Location: &checker.File{}, + Type: checker.DependencyUseTypeNpmCommand, + }, + }, + expected: scut.TestReturn{ + Error: nil, + Score: 8, + NumberOfWarn: 1, + NumberOfInfo: 6, + NumberOfDebug: 0, + }, + }, } for _, tt := range tests { diff --git a/e2e/pinned_dependencies_test.go b/e2e/pinned_dependencies_test.go index aaec45dda63..8253abf49cc 100644 --- a/e2e/pinned_dependencies_test.go +++ b/e2e/pinned_dependencies_test.go @@ -49,9 +49,9 @@ var _ = Describe("E2E TEST:"+checks.CheckPinnedDependencies, func() { } expected := scut.TestReturn{ Error: nil, - Score: 1, + Score: 3, NumberOfWarn: 139, - NumberOfInfo: 1, + NumberOfInfo: 2, NumberOfDebug: 0, } result := checks.PinningDependencies(&req) @@ -74,9 +74,9 @@ var _ = Describe("E2E TEST:"+checks.CheckPinnedDependencies, func() { } expected := scut.TestReturn{ Error: nil, - Score: 1, + Score: 3, NumberOfWarn: 139, - NumberOfInfo: 1, + NumberOfInfo: 2, NumberOfDebug: 0, } result := checks.PinningDependencies(&req) @@ -110,9 +110,9 @@ var _ = Describe("E2E TEST:"+checks.CheckPinnedDependencies, func() { } expected := scut.TestReturn{ Error: nil, - Score: 1, + Score: 3, NumberOfWarn: 139, - NumberOfInfo: 1, + NumberOfInfo: 2, NumberOfDebug: 0, } result := checks.PinningDependencies(&req)