Skip to content

Commit 5093d75

Browse files
Merge branch 'main' into patch-1
2 parents 68ec174 + 0d76dea commit 5093d75

File tree

22 files changed

+359
-148
lines changed

22 files changed

+359
-148
lines changed

checks/binary_artifact_test.go

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
// Copyright 2021 Security Scorecard Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package checks
16+
17+
import (
18+
"context"
19+
"errors"
20+
"testing"
21+
22+
"github.com/golang/mock/gomock"
23+
24+
"github.com/ossf/scorecard/v4/checker"
25+
"github.com/ossf/scorecard/v4/clients/githubrepo"
26+
"github.com/ossf/scorecard/v4/clients/localdir"
27+
"github.com/ossf/scorecard/v4/log"
28+
scut "github.com/ossf/scorecard/v4/utests"
29+
)
30+
31+
func TestBinaryArtifacts(t *testing.T) {
32+
t.Parallel()
33+
tests := []struct {
34+
name string
35+
inputFolder string
36+
err error
37+
expected checker.CheckResult
38+
}{
39+
{
40+
name: "Jar file",
41+
inputFolder: "file://testdata/binaryartifacts/jars",
42+
err: nil,
43+
expected: checker.CheckResult{
44+
Score: 9,
45+
Pass: true,
46+
},
47+
},
48+
{
49+
name: "non binary file",
50+
inputFolder: "file://testdata/licensedir/withlicense",
51+
err: nil,
52+
expected: checker.CheckResult{
53+
Score: 10,
54+
Pass: true,
55+
},
56+
},
57+
}
58+
for _, tt := range tests {
59+
tt := tt // Re-initializing variable so it is not changed while executing the closure below
60+
t.Run(tt.name, func(t *testing.T) {
61+
t.Parallel()
62+
63+
logger, err := githubrepo.NewLogger(log.DebugLevel)
64+
if err != nil {
65+
t.Errorf("githubrepo.NewLogger: %v", err)
66+
}
67+
68+
// nolint
69+
defer logger.Zap.Sync()
70+
71+
ctrl := gomock.NewController(t)
72+
repo, err := localdir.MakeLocalDirRepo(tt.inputFolder)
73+
74+
if !errors.Is(err, tt.err) {
75+
t.Errorf("MakeLocalDirRepo: %v, expected %v", err, tt.err)
76+
}
77+
78+
ctx := context.Background()
79+
80+
client := localdir.CreateLocalDirClient(ctx, logger)
81+
if err := client.InitRepo(repo); err != nil {
82+
t.Errorf("InitRepo: %v", err)
83+
}
84+
85+
dl := scut.TestDetailLogger{}
86+
87+
req := checker.CheckRequest{
88+
Ctx: ctx,
89+
RepoClient: client,
90+
Dlogger: &dl,
91+
}
92+
93+
result := BinaryArtifacts(&req)
94+
if result.Score != tt.expected.Score {
95+
t.Errorf("BinaryArtifacts: %v, expected %v for tests %v", result.Score, tt.expected.Score, tt.name)
96+
}
97+
if result.Pass != tt.expected.Pass {
98+
t.Errorf("BinaryArtifacts: %v, expected %v for tests %v", result.Pass, tt.expected.Pass, tt.name)
99+
}
100+
101+
ctrl.Finish()
102+
})
103+
}
104+
}

checks/license_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ import (
2020
"testing"
2121

2222
"github.com/golang/mock/gomock"
23-
"go.uber.org/zap/zapcore"
2423

2524
"github.com/ossf/scorecard/v4/checker"
2625
"github.com/ossf/scorecard/v4/clients/githubrepo"
2726
"github.com/ossf/scorecard/v4/clients/localdir"
27+
"github.com/ossf/scorecard/v4/log"
2828
scut "github.com/ossf/scorecard/v4/utests"
2929
)
3030

@@ -142,13 +142,13 @@ func TestLicenseFileSubdirectory(t *testing.T) {
142142
t.Run(tt.name, func(t *testing.T) {
143143
t.Parallel()
144144

145-
logger, err := githubrepo.NewLogger(zapcore.DebugLevel)
145+
logger, err := githubrepo.NewLogger(log.DebugLevel)
146146
if err != nil {
147147
t.Errorf("githubrepo.NewLogger: %v", err)
148148
}
149149

150150
// nolint
151-
defer logger.Sync()
151+
defer logger.Zap.Sync()
152152

153153
ctrl := gomock.NewController(t)
154154
repo, err := localdir.MakeLocalDirRepo(tt.inputFolder)

checks/raw/security_policy.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,11 @@ import (
1919
"fmt"
2020
"strings"
2121

22-
"go.uber.org/zap"
23-
2422
"github.com/ossf/scorecard/v4/checker"
2523
"github.com/ossf/scorecard/v4/checks/fileparser"
2624
"github.com/ossf/scorecard/v4/clients/githubrepo"
2725
sce "github.com/ossf/scorecard/v4/errors"
26+
"github.com/ossf/scorecard/v4/log"
2827
)
2928

3029
// SecurityPolicy checks for presence of security policy.
@@ -71,7 +70,7 @@ func SecurityPolicy(c *checker.CheckRequest) (checker.SecurityPolicyData, error)
7170
}
7271

7372
// https://docs.github.com/en/github/building-a-strong-community/creating-a-default-community-health-file.
74-
logger, err := githubrepo.NewLogger(zap.InfoLevel)
73+
logger, err := githubrepo.NewLogger(log.InfoLevel)
7574
if err != nil {
7675
return checker.SecurityPolicyData{}, fmt.Errorf("%w", err)
7776
}
Binary file not shown.

clients/githubrepo/client.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,11 @@ import (
2323

2424
"github.com/google/go-github/v38/github"
2525
"github.com/shurcooL/githubv4"
26-
"go.uber.org/zap"
27-
"go.uber.org/zap/zapcore"
2826

2927
"github.com/ossf/scorecard/v4/clients"
3028
"github.com/ossf/scorecard/v4/clients/githubrepo/roundtripper"
3129
sce "github.com/ossf/scorecard/v4/errors"
30+
"github.com/ossf/scorecard/v4/log"
3231
)
3332

3433
var errInputRepoType = errors.New("input repo should be of type repoURL")
@@ -180,9 +179,9 @@ func (client *Client) Close() error {
180179
}
181180

182181
// CreateGithubRepoClient returns a Client which implements RepoClient interface.
183-
func CreateGithubRepoClient(ctx context.Context, logger *zap.Logger) clients.RepoClient {
182+
func CreateGithubRepoClient(ctx context.Context, logger *log.Logger) clients.RepoClient {
184183
// Use our custom roundtripper
185-
rt := roundtripper.NewTransport(ctx, logger.Sugar())
184+
rt := roundtripper.NewTransport(ctx, logger.Zap.Sugar())
186185
httpClient := &http.Client{
187186
Transport: rt,
188187
}
@@ -220,20 +219,21 @@ func CreateGithubRepoClient(ctx context.Context, logger *zap.Logger) clients.Rep
220219
}
221220
}
222221

223-
// NewLogger creates an instance of *zap.Logger.
224-
func NewLogger(logLevel zapcore.Level) (*zap.Logger, error) {
225-
cfg := zap.NewProductionConfig()
226-
cfg.Level.SetLevel(logLevel)
227-
logger, err := cfg.Build()
222+
// NewLogger creates an instance of *log.Logger.
223+
// TODO(log): Consider removing this function, as it only serves to wrap
224+
// `log.NewLogger` for convenience.
225+
func NewLogger(logLevel log.Level) (*log.Logger, error) {
226+
logger, err := log.NewLogger(logLevel)
228227
if err != nil {
229-
return nil, fmt.Errorf("cfg.Build: %w", err)
228+
return nil, fmt.Errorf("creating GitHub repo client logger: %w", err)
230229
}
230+
231231
return logger, nil
232232
}
233233

234234
// CreateOssFuzzRepoClient returns a RepoClient implementation
235235
// intialized to `google/oss-fuzz` GitHub repository.
236-
func CreateOssFuzzRepoClient(ctx context.Context, logger *zap.Logger) (clients.RepoClient, error) {
236+
func CreateOssFuzzRepoClient(ctx context.Context, logger *log.Logger) (clients.RepoClient, error) {
237237
ossFuzzRepo, err := MakeGithubRepo("google/oss-fuzz")
238238
if err != nil {
239239
return nil, fmt.Errorf("error during githubrepo.MakeGithubRepo: %w", err)

clients/localdir/client.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,15 @@ import (
2727
"strings"
2828
"sync"
2929

30-
"go.uber.org/zap"
31-
3230
clients "github.com/ossf/scorecard/v4/clients"
31+
"github.com/ossf/scorecard/v4/log"
3332
)
3433

3534
var errInputRepoType = errors.New("input repo should be of type repoLocal")
3635

3736
//nolint:govet
3837
type localDirClient struct {
39-
logger *zap.Logger
38+
logger *log.Logger
4039
ctx context.Context
4140
path string
4241
once sync.Once
@@ -214,7 +213,7 @@ func (client *localDirClient) Close() error {
214213
}
215214

216215
// CreateLocalDirClient returns a client which implements RepoClient interface.
217-
func CreateLocalDirClient(ctx context.Context, logger *zap.Logger) clients.RepoClient {
216+
func CreateLocalDirClient(ctx context.Context, logger *log.Logger) clients.RepoClient {
218217
return &localDirClient{
219218
ctx: ctx,
220219
logger: logger,

clients/localdir/client_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ import (
2323

2424
"github.com/google/go-cmp/cmp"
2525
"github.com/google/go-cmp/cmp/cmpopts"
26-
"go.uber.org/zap/zapcore"
2726

2827
"github.com/ossf/scorecard/v4/clients/githubrepo"
28+
"github.com/ossf/scorecard/v4/log"
2929
)
3030

3131
func TestClient_CreationAndCaching(t *testing.T) {
@@ -63,12 +63,12 @@ func TestClient_CreationAndCaching(t *testing.T) {
6363
t.Parallel()
6464

6565
ctx := context.Background()
66-
logger, err := githubrepo.NewLogger(zapcore.DebugLevel)
66+
logger, err := githubrepo.NewLogger(log.DebugLevel)
6767
if err != nil {
6868
t.Errorf("githubrepo.NewLogger: %v", err)
6969
}
7070
// nolint
71-
defer logger.Sync() // Flushes buffer, if any.
71+
defer logger.Zap.Sync() // Flushes buffer, if any.
7272

7373
// Create repo.
7474
repo, err := MakeLocalDirRepo(tt.inputFolder)

cmd/root.go

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package cmd
1818
import (
1919
"context"
2020
"encoding/json"
21-
goflag "flag"
2221
"fmt"
2322
"log"
2423
"net/http"
@@ -28,7 +27,6 @@ import (
2827
"time"
2928

3029
"github.com/spf13/cobra"
31-
"go.uber.org/zap"
3230

3331
"github.com/ossf/scorecard/v4/checker"
3432
"github.com/ossf/scorecard/v4/checks"
@@ -37,6 +35,7 @@ import (
3735
"github.com/ossf/scorecard/v4/clients/localdir"
3836
docs "github.com/ossf/scorecard/v4/docs/checks"
3937
sce "github.com/ossf/scorecard/v4/errors"
38+
sclog "github.com/ossf/scorecard/v4/log"
4039
"github.com/ossf/scorecard/v4/pkg"
4140
spol "github.com/ossf/scorecard/v4/policy"
4241
)
@@ -47,8 +46,7 @@ var (
4746
local string
4847
checksToRun []string
4948
metaData []string
50-
// This one has to use goflag instead of pflag because it's defined by zap.
51-
logLevel = zap.LevelFlag("verbosity", zap.InfoLevel, "override the default log level")
49+
logLevel string
5250
format string
5351
npm string
5452
pypi string
@@ -84,10 +82,14 @@ const cliEnableSarif = "ENABLE_SARIF"
8482

8583
//nolint:gochecknoinits
8684
func init() {
87-
// Add the zap flag manually
88-
rootCmd.PersistentFlags().AddGoFlagSet(goflag.CommandLine)
8985
rootCmd.Flags().StringVar(&repo, "repo", "", "repository to check")
9086
rootCmd.Flags().StringVar(&local, "local", "", "local folder to check")
87+
rootCmd.Flags().StringVar(
88+
&logLevel,
89+
"verbosity",
90+
sclog.DefaultLevel.String(),
91+
"set the log level",
92+
)
9193
rootCmd.Flags().StringVar(
9294
&npm, "npm", "",
9395
"npm package to check, given that the npm package has a GitHub repository")
@@ -186,12 +188,12 @@ func scorecardCmd(cmd *cobra.Command, args []string) {
186188
}
187189

188190
ctx := context.Background()
189-
logger, err := githubrepo.NewLogger(*logLevel)
191+
logger, err := githubrepo.NewLogger(sclog.Level(logLevel))
190192
if err != nil {
191193
log.Panic(err)
192194
}
193195
// nolint: errcheck
194-
defer logger.Sync() // Flushes buffer, if any.
196+
defer logger.Zap.Sync() // Flushes buffer, if any.
195197

196198
repoURI, repoClient, ossFuzzRepoClient, ciiClient, vulnsClient, repoType, err := getRepoAccessors(ctx, uri, logger)
197199
if err != nil {
@@ -249,15 +251,15 @@ func scorecardCmd(cmd *cobra.Command, args []string) {
249251

250252
switch format {
251253
case formatDefault:
252-
err = repoResult.AsString(showDetails, *logLevel, checkDocs, os.Stdout)
254+
err = repoResult.AsString(showDetails, sclog.Level(logLevel), checkDocs, os.Stdout)
253255
case formatSarif:
254256
// TODO: support config files and update checker.MaxResultScore.
255-
err = repoResult.AsSARIF(showDetails, *logLevel, os.Stdout, checkDocs, policy)
257+
err = repoResult.AsSARIF(showDetails, sclog.Level(logLevel), os.Stdout, checkDocs, policy)
256258
case formatJSON:
257259
if raw {
258260
err = repoResult.AsRawJSON(os.Stdout)
259261
} else {
260-
err = repoResult.AsJSON2(showDetails, *logLevel, checkDocs, os.Stdout)
262+
err = repoResult.AsJSON2(showDetails, sclog.Level(logLevel), checkDocs, os.Stdout)
261263
}
262264

263265
default:
@@ -413,7 +415,7 @@ func validateFormat(format string) bool {
413415
}
414416
}
415417

416-
func getRepoAccessors(ctx context.Context, uri string, logger *zap.Logger) (
418+
func getRepoAccessors(ctx context.Context, uri string, logger *sclog.Logger) (
417419
repo clients.Repo,
418420
repoClient clients.RepoClient,
419421
ossFuzzRepoClient clients.RepoClient,

cmd/serve.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"github.com/ossf/scorecard/v4/checks"
2828
"github.com/ossf/scorecard/v4/clients"
2929
"github.com/ossf/scorecard/v4/clients/githubrepo"
30+
sclog "github.com/ossf/scorecard/v4/log"
3031
"github.com/ossf/scorecard/v4/pkg"
3132
)
3233

@@ -40,13 +41,13 @@ var serveCmd = &cobra.Command{
4041
Short: "Serve the scorecard program over http",
4142
Long: ``,
4243
Run: func(cmd *cobra.Command, args []string) {
43-
logger, err := githubrepo.NewLogger(*logLevel)
44+
logger, err := githubrepo.NewLogger(sclog.Level(logLevel))
4445
if err != nil {
4546
log.Fatalf("unable to construct logger: %v", err)
4647
}
4748
//nolint
48-
defer logger.Sync() // flushes buffer, if any
49-
sugar := logger.Sugar()
49+
defer logger.Zap.Sync() // flushes buffer, if any
50+
sugar := logger.Zap.Sugar()
5051
t, err := template.New("webpage").Parse(tpl)
5152
if err != nil {
5253
sugar.Panic(err)
@@ -81,7 +82,7 @@ var serveCmd = &cobra.Command{
8182
}
8283

8384
if r.Header.Get("Content-Type") == "application/json" {
84-
if err := repoResult.AsJSON(showDetails, *logLevel, rw); err != nil {
85+
if err := repoResult.AsJSON(showDetails, sclog.Level(logLevel), rw); err != nil {
8586
sugar.Error(err)
8687
rw.WriteHeader(http.StatusInternalServerError)
8788
}

0 commit comments

Comments
 (0)