mirror of
https://github.com/ossf/scorecard.git
synced 2024-09-11 08:55:27 +03:00
🌱 enable the golangci-lint bugs
preset (#3583)
* enable bugs preset Signed-off-by: Spencer Schrock <sschrock@google.com> * fix noctx linter Signed-off-by: Spencer Schrock <sschrock@google.com> * fix bodyclose linter Signed-off-by: Spencer Schrock <sschrock@google.com> * fix contextcheck linter Signed-off-by: Spencer Schrock <sschrock@google.com> * This ignores all existing cases of musttag linter complaints. This analyzer seems useful in the future, but some of this code is old and I don't want to change it for existing code now. Signed-off-by: Spencer Schrock <sschrock@google.com> * ignore existing nilerr lints. This behavior is from the initial commit, and primarily affects metrics. Leaving as is, and hope to benefit from the linter in the future. Signed-off-by: Spencer Schrock <sschrock@google.com> --------- Signed-off-by: Spencer Schrock <sschrock@google.com>
This commit is contained in:
parent
49c0eed3a4
commit
d0cefa519a
@ -62,6 +62,8 @@ linters:
|
|||||||
- unused
|
- unused
|
||||||
- whitespace
|
- whitespace
|
||||||
- wrapcheck
|
- wrapcheck
|
||||||
|
presets:
|
||||||
|
- bugs
|
||||||
linters-settings:
|
linters-settings:
|
||||||
errcheck:
|
errcheck:
|
||||||
check-type-assertions: true
|
check-type-assertions: true
|
||||||
|
@ -29,7 +29,7 @@ import (
|
|||||||
sclog "github.com/ossf/scorecard/v4/log"
|
sclog "github.com/ossf/scorecard/v4/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
//nolint:govet
|
//nolint:govet,musttag // JSON usage is test only
|
||||||
type AttestationPolicy struct {
|
type AttestationPolicy struct {
|
||||||
// PreventBinaryArtifacts : set to true to require that this project's SCM repo is
|
// PreventBinaryArtifacts : set to true to require that this project's SCM repo is
|
||||||
// free of binary artifacts
|
// free of binary artifacts
|
||||||
|
@ -62,6 +62,7 @@ func (gh *rateLimitTransport) RoundTrip(r *http.Request) (*http.Response, error)
|
|||||||
rateLimit := resp.Header.Get("X-RateLimit-Remaining")
|
rateLimit := resp.Header.Get("X-RateLimit-Remaining")
|
||||||
remaining, err := strconv.Atoi(rateLimit)
|
remaining, err := strconv.Atoi(rateLimit)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
//nolint:nilerr // just an error in metadata, response may still be useful?
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
ctx, err := tag.New(r.Context(), tag.Upsert(githubstats.ResourceType, resp.Header.Get("X-RateLimit-Resource")))
|
ctx, err := tag.New(r.Context(), tag.Upsert(githubstats.ResourceType, resp.Header.Get("X-RateLimit-Resource")))
|
||||||
@ -73,6 +74,7 @@ func (gh *rateLimitTransport) RoundTrip(r *http.Request) (*http.Response, error)
|
|||||||
if remaining <= 0 {
|
if remaining <= 0 {
|
||||||
reset, err := strconv.Atoi(resp.Header.Get("X-RateLimit-Reset"))
|
reset, err := strconv.Atoi(resp.Header.Get("X-RateLimit-Reset"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
//nolint:nilerr // just an error in metadata, response may still be useful?
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
package roundtripper
|
package roundtripper
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"testing"
|
"testing"
|
||||||
@ -60,7 +61,7 @@ func TestRoundTrip(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
t.Run("Successful response", func(t *testing.T) {
|
t.Run("Successful response", func(t *testing.T) {
|
||||||
req, err := http.NewRequest(http.MethodGet, ts.URL+"/success", nil)
|
req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, ts.URL+"/success", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Failed to create request: %v", err)
|
t.Fatalf("Failed to create request: %v", err)
|
||||||
}
|
}
|
||||||
@ -69,13 +70,14 @@ func TestRoundTrip(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Unexpected error: %v", err)
|
t.Errorf("Unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
t.Errorf("Expected status code %d, got %d", http.StatusOK, resp.StatusCode)
|
t.Errorf("Expected status code %d, got %d", http.StatusOK, resp.StatusCode)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Retry-After header set", func(t *testing.T) {
|
t.Run("Retry-After header set", func(t *testing.T) {
|
||||||
req, err := http.NewRequest(http.MethodGet, ts.URL+"/retry", nil)
|
req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, ts.URL+"/retry", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Failed to create request: %v", err)
|
t.Fatalf("Failed to create request: %v", err)
|
||||||
}
|
}
|
||||||
@ -84,6 +86,7 @@ func TestRoundTrip(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Unexpected error: %v", err)
|
t.Errorf("Unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
t.Errorf("Expected status code %d, got %d", http.StatusOK, resp.StatusCode)
|
t.Errorf("Expected status code %d, got %d", http.StatusOK, resp.StatusCode)
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ func (handler *graphqlHandler) init(ctx context.Context, repourl *repoURL) {
|
|||||||
src := oauth2.StaticTokenSource(
|
src := oauth2.StaticTokenSource(
|
||||||
&oauth2.Token{AccessToken: os.Getenv("GITLAB_AUTH_TOKEN")},
|
&oauth2.Token{AccessToken: os.Getenv("GITLAB_AUTH_TOKEN")},
|
||||||
)
|
)
|
||||||
handler.client = oauth2.NewClient(context.Background(), src)
|
handler.client = oauth2.NewClient(ctx, src)
|
||||||
handler.graphClient = graphql.NewClient(fmt.Sprintf("%s/api/graphql", repourl.Host()), handler.client)
|
handler.graphClient = graphql.NewClient(fmt.Sprintf("%s/api/graphql", repourl.Host()), handler.client)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type client struct {
|
type client struct {
|
||||||
|
ctx context.Context
|
||||||
err error
|
err error
|
||||||
projects map[string]bool
|
projects map[string]bool
|
||||||
statusURL string
|
statusURL string
|
||||||
@ -54,6 +55,7 @@ type ossFuzzStatus struct {
|
|||||||
// CreateOSSFuzzClient returns a client which implements RepoClient interface.
|
// CreateOSSFuzzClient returns a client which implements RepoClient interface.
|
||||||
func CreateOSSFuzzClient(ossFuzzStatusURL string) clients.RepoClient {
|
func CreateOSSFuzzClient(ossFuzzStatusURL string) clients.RepoClient {
|
||||||
return &client{
|
return &client{
|
||||||
|
ctx: context.Background(),
|
||||||
statusURL: ossFuzzStatusURL,
|
statusURL: ossFuzzStatusURL,
|
||||||
projects: map[string]bool{},
|
projects: map[string]bool{},
|
||||||
}
|
}
|
||||||
@ -62,6 +64,7 @@ func CreateOSSFuzzClient(ossFuzzStatusURL string) clients.RepoClient {
|
|||||||
// CreateOSSFuzzClientEager returns a OSS Fuzz Client which has already fetched and parsed the status file.
|
// CreateOSSFuzzClientEager returns a OSS Fuzz Client which has already fetched and parsed the status file.
|
||||||
func CreateOSSFuzzClientEager(ossFuzzStatusURL string) (clients.RepoClient, error) {
|
func CreateOSSFuzzClientEager(ossFuzzStatusURL string) (clients.RepoClient, error) {
|
||||||
c := client{
|
c := client{
|
||||||
|
ctx: context.Background(),
|
||||||
statusURL: ossFuzzStatusURL,
|
statusURL: ossFuzzStatusURL,
|
||||||
projects: map[string]bool{},
|
projects: map[string]bool{},
|
||||||
}
|
}
|
||||||
@ -91,7 +94,7 @@ func (c *client) Search(request clients.SearchRequest) (clients.SearchResponse,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *client) init() {
|
func (c *client) init() {
|
||||||
b, err := fetchStatusFile(c.statusURL)
|
b, err := fetchStatusFile(c.ctx, c.statusURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.err = err
|
c.err = err
|
||||||
return
|
return
|
||||||
@ -118,9 +121,12 @@ func parseStatusFile(contents []byte, m map[string]bool) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchStatusFile(uri string) ([]byte, error) {
|
func fetchStatusFile(ctx context.Context, uri string) ([]byte, error) {
|
||||||
//nolint:gosec // URI comes from a constant or a test HTTP server, not user input
|
req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
|
||||||
resp, err := http.Get(uri)
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("making status file request: %w", err)
|
||||||
|
}
|
||||||
|
resp, err := http.DefaultClient.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("http.Get: %w", err)
|
return nil, fmt.Errorf("http.Get: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -63,6 +63,7 @@ func Test_GetURI_calls_client_get_with_input(t *testing.T) {
|
|||||||
t.Errorf("Test_GetURI_calls_client_get_with_input() error in Get= %v", err)
|
t.Errorf("Test_GetURI_calls_client_get_with_input() error in Get= %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
defer got.Body.Close()
|
||||||
body, err := io.ReadAll(got.Body)
|
body, err := io.ReadAll(got.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Test_GetURI_calls_client_get_with_input() error in ReadAll= %v", err)
|
t.Errorf("Test_GetURI_calls_client_get_with_input() error in ReadAll= %v", err)
|
||||||
@ -118,6 +119,7 @@ func Test_Get_calls_client_get_with_input(t *testing.T) {
|
|||||||
t.Errorf("Test_Get_calls_client_get_with_input() error in Get = %v", err)
|
t.Errorf("Test_Get_calls_client_get_with_input() error in Get = %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
defer got.Body.Close()
|
||||||
body, err := io.ReadAll(got.Body)
|
body, err := io.ReadAll(got.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Test_Get_calls_client_get_with_input() error in ReadAll = %v", err)
|
t.Errorf("Test_Get_calls_client_get_with_input() error in ReadAll = %v", err)
|
||||||
|
@ -26,7 +26,6 @@ import (
|
|||||||
"github.com/ossf/scorecard/v4/pkg"
|
"github.com/ossf/scorecard/v4/pkg"
|
||||||
)
|
)
|
||||||
|
|
||||||
//nolint
|
|
||||||
type jsonCheckResult struct {
|
type jsonCheckResult struct {
|
||||||
Name string
|
Name string
|
||||||
Details []string
|
Details []string
|
||||||
@ -34,6 +33,7 @@ type jsonCheckResult struct {
|
|||||||
Pass bool
|
Pass bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//nolint:musttag
|
||||||
type jsonScorecardResult struct {
|
type jsonScorecardResult struct {
|
||||||
Repo string
|
Repo string
|
||||||
Date string
|
Date string
|
||||||
@ -47,7 +47,7 @@ type jsonCheckDocumentationV2 struct {
|
|||||||
// Can be extended if needed.
|
// Can be extended if needed.
|
||||||
}
|
}
|
||||||
|
|
||||||
//nolint
|
//nolint:govet
|
||||||
type jsonCheckResultV2 struct {
|
type jsonCheckResultV2 struct {
|
||||||
Details []string `json:"details"`
|
Details []string `json:"details"`
|
||||||
Score int `json:"score"`
|
Score int `json:"score"`
|
||||||
|
@ -55,6 +55,8 @@ type ScorecardResultWithError struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DependencyCheckResult is the dependency structure used in the returned results.
|
// DependencyCheckResult is the dependency structure used in the returned results.
|
||||||
|
//
|
||||||
|
//nolint:musttag // functionality is deprecated anyway
|
||||||
type DependencyCheckResult struct {
|
type DependencyCheckResult struct {
|
||||||
// ChangeType indicates whether the dependency is added, updated, or removed.
|
// ChangeType indicates whether the dependency is added, updated, or removed.
|
||||||
ChangeType *ChangeType
|
ChangeType *ChangeType
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
"github.com/ossf/scorecard/v4/log"
|
"github.com/ossf/scorecard/v4/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
// nolint: govet
|
//nolint:govet
|
||||||
type jsonCheckResult struct {
|
type jsonCheckResult struct {
|
||||||
Name string
|
Name string
|
||||||
Details []string
|
Details []string
|
||||||
@ -35,6 +35,7 @@ type jsonCheckResult struct {
|
|||||||
Pass bool
|
Pass bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//nolint:musttag
|
||||||
type jsonScorecardResult struct {
|
type jsonScorecardResult struct {
|
||||||
Repo string
|
Repo string
|
||||||
Date string
|
Date string
|
||||||
|
Loading…
Reference in New Issue
Block a user