chore(ci): upgrade golang to 1.19.2 and linter to 1.50.1 (#2526)

Lack of generics support is blocking various dependency upgrades,
so this unblocks that.

Temporarily disabled `checklocks` linter until it is fixed upstream.
This commit is contained in:
Jarek Kowalski
2022-10-28 11:02:47 -07:00
committed by GitHub
parent ec5fe211cf
commit f69424961f
51 changed files with 80 additions and 60 deletions

View File

@@ -14,7 +14,7 @@ jobs:
- name: Set up Go.
uses: actions/setup-go@v3
with:
go-version: '1.18'
go-version: '1.19'
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v3

View File

@@ -16,7 +16,7 @@ jobs:
- name: Set up Go.
uses: actions/setup-go@v3
with:
go-version: '1.18'
go-version: '1.19'
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v3

View File

@@ -21,7 +21,7 @@ jobs:
- name: Set up Go.
uses: actions/setup-go@v3
with:
go-version: '1.18'
go-version: '1.19'
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v3

View File

@@ -29,7 +29,7 @@ jobs:
- name: Set up Go.
uses: actions/setup-go@v3
with:
go-version: '1.18'
go-version: '1.19'
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v3

View File

@@ -14,7 +14,7 @@ jobs:
- name: Set up Go.
uses: actions/setup-go@v3
with:
go-version: '1.18'
go-version: '1.19'
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v3

View File

@@ -42,11 +42,11 @@ jobs:
- name: Set up Go.
uses: actions/setup-go@v3
with:
go-version: '1.18'
go-version: '1.19'
id: go
if: ${{ !contains(matrix.os, 'ARMHF') }}
- name: Install GoLang for ARMHF
run: "echo /usr/local/go/bin >> $GITHUB_PATH; rm -rf /usr/local/go && mkdir -p /usr/local/go && curl -s -L https://go.dev/dl/go1.18.2.linux-armv6l.tar.gz | tar -C /usr/local -xz"
run: "echo /usr/local/go/bin >> $GITHUB_PATH; rm -rf /usr/local/go && mkdir -p /usr/local/go && curl -s -L https://go.dev/dl/go1.19.2.linux-armv6l.tar.gz | tar -C /usr/local -xz"
if: ${{ contains(matrix.os, 'ARMHF') }}
- name: Install Windows-specific packages
run: "choco install --no-progress -y make zip unzip curl"

View File

@@ -19,7 +19,7 @@ jobs:
- name: Set up Go.
uses: actions/setup-go@v3
with:
go-version: '1.18'
go-version: '1.19'
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v3

View File

@@ -14,7 +14,7 @@ jobs:
- name: Set up Go.
uses: actions/setup-go@v3
with:
go-version: '1.18'
go-version: '1.19'
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v3

View File

@@ -20,7 +20,7 @@ jobs:
- name: Set up Go.
uses: actions/setup-go@v3
with:
go-version: '1.18'
go-version: '1.19'
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v3

View File

@@ -40,11 +40,11 @@ jobs:
- name: Set up Go.
uses: actions/setup-go@v3
with:
go-version: '1.18'
go-version: '1.19'
id: go
if: ${{ !contains(matrix.os, 'ARMHF') }}
- name: Install GoLang for ARMHF
run: "echo /usr/local/go/bin >> $GITHUB_PATH; rm -rf /usr/local/go && mkdir -p /usr/local/go && curl -s -L https://go.dev/dl/go1.18.2.linux-armv6l.tar.gz | tar -C /usr/local -xz"
run: "echo /usr/local/go/bin >> $GITHUB_PATH; rm -rf /usr/local/go && mkdir -p /usr/local/go && curl -s -L https://go.dev/dl/go1.19.2.linux-armv6l.tar.gz | tar -C /usr/local -xz"
if: ${{ contains(matrix.os, 'ARMHF') }}
- name: Install Windows-specific packages
run: "choco install --no-progress -y make zip unzip curl"

View File

@@ -1,5 +1,5 @@
run:
go: '1.17'
go: '1.19'
skip-dirs:
- test/testdata_etc
@@ -70,6 +70,7 @@ linters-settings:
linters:
enable-all: true
disable:
- deadcode
- exhaustivestruct
- exhaustruct
- gochecknoinits
@@ -85,16 +86,24 @@ linters:
- nosnakecase
- paralleltest
- prealloc
- rowserrcheck
- scopelint
- sqlclosecheck
- structcheck
- tagliatelle
- testpackage
- tparallel
- varcheck
- varnamelen # this one may be interesting, but too much churn
- wastedassign
- whitespace
issues:
exclude-use-default: false
exclude-rules:
- path: \.pb\.go
linters:
- gofmt
- path: _test\.go|testing|tests|test_env|fshasher|fault
linters:
- contextcheck
@@ -107,6 +116,7 @@ issues:
- gomnd
- gosec
- nestif
- revive
- nolintlint
- wrapcheck
- text: "log is a global variable"
@@ -133,6 +143,9 @@ issues:
- text: "Line contains TODO"
linters:
- godox
- text: timeCmpSimplify
linters:
- gocritic
- text: ".*Magic number\\: [01],"
linters:
- gomnd

View File

@@ -69,7 +69,7 @@ ifneq ($(GOOS)/$(GOARCH),linux/arm)
endif
endif
lint: $(linter) check-locks
lint: $(linter)
ifneq ($(GOOS)/$(GOARCH),linux/arm64)
ifneq ($(GOOS)/$(GOARCH),linux/arm)
$(linter) --deadline $(LINTER_DEADLINE) run $(linter_flags)

View File

@@ -71,6 +71,8 @@ func (o *textOutput) printStderr(msg string, args ...interface{}) {
}
// appServices are the methods of *App that command handles are allowed to call.
//
//nolint:interfacebloat
type appServices interface {
noRepositoryAction(act func(ctx context.Context) error) func(ctx *kingpin.ParseContext) error
serverAction(sf *serverClientFlags, act func(ctx context.Context, cli *apiclient.KopiaAPIClient) error) func(ctx *kingpin.ParseContext) error
@@ -93,6 +95,7 @@ type appServices interface {
EnvName(s string) string
}
//nolint:interfacebloat
type advancedAppServices interface {
appServices
StorageProviderServices

View File

@@ -65,7 +65,6 @@ func(b blob.Metadata) error {
sizeToString := units.BytesString
if c.raw {
sizeToString = func(l int64) string {
//nolint:gomnd
return strconv.FormatInt(l, 10)
}
}

View File

@@ -51,7 +51,7 @@ func (c *commandContentStats) run(ctx context.Context, rep repo.DirectRepository
sizeToString := units.BytesString
if c.raw {
sizeToString = func(l int64) string {
return strconv.FormatInt(l, 10) //nolint:gomnd
return strconv.FormatInt(l, 10)
}
}

View File

@@ -81,7 +81,6 @@ func getLogSessions(ctx context.Context, st blob.Reader) ([]*logSessionInfo, err
id := parts[2] + "_" + parts[3]
//nolint:gomnd
startTime, err := strconv.ParseInt(parts[4], 10, 64)
if err != nil {
log(ctx).Errorf("invalid start time - skipping unrecognized log: %v", bm.BlobID)
@@ -90,7 +89,6 @@ func getLogSessions(ctx context.Context, st blob.Reader) ([]*logSessionInfo, err
return nil
}
//nolint:gomnd
endTime, err := strconv.ParseInt(parts[5], 10, 64)
if err != nil {
log(ctx).Errorf("invalid end time - skipping unrecognized log: %v", bm.BlobID)

View File

@@ -187,7 +187,6 @@ func applyOptionalInt(ctx context.Context, desc string, val **policy.OptionalInt
return nil
}
//nolint:gomnd
v, err := strconv.ParseInt(str, 10, 32)
if err != nil {
return errors.Wrapf(err, "can't parse the %v %q", desc, str)
@@ -218,7 +217,6 @@ func applyOptionalInt64MiB(ctx context.Context, desc string, val **policy.Option
return nil
}
//nolint:gomnd
v, err := strconv.ParseInt(str, 10, 32)
if err != nil {
return errors.Wrapf(err, "can't parse the %v %q", desc, str)
@@ -253,7 +251,6 @@ func applyPolicyNumber64(ctx context.Context, desc string, val *int64, str strin
return nil
}
//nolint:gomnd
v, err := strconv.ParseInt(str, 10, 64)
if err != nil {
return errors.Wrapf(err, "can't parse the %q %q", desc, str)

View File

@@ -212,7 +212,7 @@ func (c *commandRestore) constructTargetPairs(rep repo.Repository) error {
return nil
case tplen == 0 && restpslen == 2:
// This means that none of the restoreTargetPaths are placeholders and we
// we have two args: a sourceID and a destination directory.
// have two args: a sourceID and a destination directory.
absp, err := filepath.Abs(c.restoreTargetPaths[1])
if err != nil {
return errors.Wrapf(err, "restore can't resolve path for %q", c.restoreTargetPaths[1])
@@ -261,7 +261,7 @@ func (c *commandRestore) restoreOutput(ctx context.Context, rep repo.Repository)
WriteSparseFiles: c.restoreWriteSparseFiles,
}
if err := o.Init(); err != nil {
if err := o.Init(ctx); err != nil {
return nil, errors.Wrap(err, "unable to create output file")
}

View File

@@ -93,7 +93,7 @@ func (c *observabilityFlags) startMetrics(ctx context.Context) error {
log(ctx).Infof("starting prometheus metrics on %v", c.metricsListenAddr)
go http.ListenAndServe(c.metricsListenAddr, m) //nolint:errcheck
go http.ListenAndServe(c.metricsListenAddr, m) //nolint:errcheck,gosec
}
if c.metricsPushAddr != "" {

View File

@@ -82,7 +82,6 @@ func initialDirectoryShards(flat bool, formatVersion int) []int {
}
func getIntPtrValue(value string, base int) *int {
//nolint:gomnd
if int64Val, err := strconv.ParseInt(value, base, 32); err == nil {
intVal := int(int64Val)
return &intVal
@@ -92,7 +91,6 @@ func getIntPtrValue(value string, base int) *int {
}
func getFileModeValue(value string, def os.FileMode) os.FileMode {
//nolint:gomnd
if uint32Val, err := strconv.ParseUint(value, 8, 32); err == nil {
return os.FileMode(uint32Val)
}

View File

@@ -45,5 +45,5 @@ func (c *commonThrottleGet) printValueOrUnlimited(label string, v float64, conve
}
func (c *commonThrottleGet) floatToString(v float64) string {
return strconv.FormatFloat(v, 'f', 0, 64) //nolint:gomnd
return strconv.FormatFloat(v, 'f', 0, 64)
}

View File

@@ -79,7 +79,6 @@ func (c *commonThrottleSet) setThrottleFloat64(ctx context.Context, desc string,
return nil
}
//nolint:gomnd
v, err := strconv.ParseFloat(str, 64)
if err != nil {
return errors.Wrapf(err, "can't parse the %v %q", desc, str)
@@ -114,7 +113,6 @@ func (c *commonThrottleSet) setThrottleInt(ctx context.Context, desc string, val
return nil
}
//nolint:gomnd
v, err := strconv.ParseInt(str, 10, 64)
if err != nil {
return errors.Wrapf(err, "can't parse the %v %q", desc, str)

2
go.mod
View File

@@ -1,6 +1,6 @@
module github.com/kopia/kopia
go 1.17
go 1.19
require (
cloud.google.com/go/storage v1.27.0

View File

@@ -1,3 +1,4 @@
// Command bigmapbench provides a benchmark for the bigmap implementation.
package main
import (

View File

@@ -84,7 +84,7 @@ func groupByEpochRanges(bms []blob.Metadata) map[int]map[int][]blob.Metadata {
func deletionWatermarkFromBlobID(blobID blob.ID) (time.Time, bool) {
str := strings.TrimPrefix(string(blobID), string(DeletionWatermarkBlobPrefix))
unixSeconds, err := strconv.ParseInt(str, 10, 64) //nolint:gomnd
unixSeconds, err := strconv.ParseInt(str, 10, 64)
if err != nil {
return time.Time{}, false
}

View File

@@ -24,7 +24,7 @@ func LogsDir() string {
return filepath.Join(userLogsDir, "kopia")
}
// IsAbs determines if a given path is absolute, in particular treating treating \\hostname\share as absolute on Windows.
// IsAbs determines if a given path is absolute, in particular treating \\hostname\share as absolute on Windows.
func IsAbs(s string) bool {
//nolint:forbidigo
if filepath.IsAbs(s) {

View File

@@ -76,7 +76,6 @@ func handleContentPut(ctx context.Context, rc requestContext) (interface{}, *api
var comp compression.HeaderID
if c := rc.queryParam("compression"); c != "" {
//nolint:gomnd
v, err := strconv.ParseInt(c, 16, 32)
if err != nil {
return nil, requestError(serverapi.ErrorMalformedRequest, "malformed compression ID")

View File

@@ -51,7 +51,7 @@ func handleRestore(ctx context.Context, rc requestContext) (interface{}, *apiErr
switch {
case req.Filesystem != nil:
if err := req.Filesystem.Init(); err != nil {
if err := req.Filesystem.Init(ctx); err != nil {
return nil, internalServerError(err)
}

View File

@@ -15,6 +15,7 @@
"github.com/kopia/kopia/snapshot"
)
//nolint:interfacebloat
type serverInterface interface {
deleteSourceManager(ctx context.Context, src snapshot.SourceInfo) bool
generateShortTermAuthCookie(username string, now time.Time) (string, error)

View File

@@ -42,7 +42,7 @@
sleepOnMaintenanceError = 30 * time.Minute
// retry initialization of repository starting at 1s doubling delay each time up to max 5 minutes
// (1s, 2s, 4s, 8s, 16s, 32s, 64s, 128s, 256s, 300s, 300s, 300s, ...)
// (1s, 2s, 4s, 8s, 16s, 32s, 64s, 128s, 256s, 300s, which then stays at 300s...)
retryInitRepositorySleepOnError = 1 * time.Second
maxRetryInitRepositorySleepOnError = 5 * time.Minute
@@ -288,6 +288,7 @@ func (s *Server) requireAuth(checkCSRFToken csrfTokenOption, f func(ctx context.
return func(w http.ResponseWriter, r *http.Request) {
rc := s.captureRequestContext(w, r)
//nolint:contextcheck
if !isAuthenticated(rc) {
return
}
@@ -813,10 +814,12 @@ func (s *Server) ServeStaticFiles(m *mux.Router, fs http.FileSystem) {
rc := s.captureRequestContext(w, r)
//nolint:contextcheck
if !isAuthenticated(rc) {
return
}
//nolint:contextcheck
if !requireUIUser(rc.req.Context(), rc) {
http.Error(w, `UI Access denied. See https://github.com/kopia/kopia/issues/880#issuecomment-798421751 for more information.`, http.StatusForbidden)
return

View File

@@ -15,13 +15,13 @@ func ToMap(t time.Time, mapKey string) map[string]string {
}
return map[string]string{
mapKey: strconv.FormatInt(t.UnixNano(), 10), //nolint:gomnd
mapKey: strconv.FormatInt(t.UnixNano(), 10),
}
}
// FromValue attempts to convert the provided value stored in metadata into time.Time.
func FromValue(v string) (t time.Time, ok bool) {
nanos, err := strconv.ParseInt(v, 10, 64) //nolint:gomnd
nanos, err := strconv.ParseInt(v, 10, 64)
if err != nil {
return time.Time{}, false
}

View File

@@ -124,6 +124,7 @@ func (d *webdavDir) Readdir(n int) ([]os.FileInfo, error) {
if _, isSymlink := e.(fs.Symlink); isSymlink {
if atomic.AddInt32(symlinksAreUnsupportedLogged, 1) == 1 {
//nolint:contextcheck
log(d.ctx).Errorf("Mounting directories containing symbolic links using WebDAV is not supported. The link entries will be skipped.")
}

View File

@@ -102,7 +102,7 @@ func (fs *fsImpl) GetBlobFromPath(ctx context.Context, dirPath, path string, off
if st, err := f.Stat(); err == nil && st.Size() == 0 {
// this sometimes fails on macOS for unknown reasons, likely a bug in the filesystem
// retry deals with this transient state.
// see see https://github.com/kopia/kopia/issues/299
// see https://github.com/kopia/kopia/issues/299
return errRetriableInvalidLength
}
}

View File

@@ -8,6 +8,8 @@
)
// osInterface is an operating system file interface, used by filesystemStorage to support mocking.
//
//nolint:interfacebloat
type osInterface interface {
Open(fname string) (osReadFile, error)
IsNotExist(err error) bool

View File

@@ -102,7 +102,7 @@ func newestAtUnlessDeleted(vs []versionMetadata, t time.Time) (v versionMetadata
return v, !v.IsDeleteMarker
}
// Removes versions that are newer than t. The filtering is done in place and
// Removes versions that are newer than t. The filtering is done in place
// and uses the same slice storage as vs. Assumes entries in vs are in descending
// timestamp order.
func getOlderThan(vs []versionMetadata, t time.Time) []versionMetadata {

View File

@@ -74,7 +74,7 @@ type Volume interface {
// Reader defines read access API to blob storage.
type Reader interface {
// GetBlob returns full or partial contents of a blob with given ID.
// If length>0, the the function retrieves a range of bytes [offset,offset+length)
// If length>0, the function retrieves a range of bytes [offset,offset+length)
// If length<0, the entire blob must be fetched.
// Returns ErrInvalidRange if the fetched blob length is invalid.
GetBlob(ctx context.Context, blobID ID, offset, length int64, output OutputBuffer) error

View File

@@ -1455,7 +1455,7 @@ func (s *contentManagerSuite) TestRewriteDeleted(t *testing.T) {
func (s *contentManagerSuite) TestDeleteAndRecreate(t *testing.T) {
ctx := testlogging.Context(t)
// simulate race between delete/recreate and delete
// simulate race between delete/recreate and
// delete happens at t0+10, recreate at t0+20 and second delete time is parameterized.
// depending on it, the second delete results will be visible.
cases := []struct {

View File

@@ -8,6 +8,8 @@
)
// Info is an information about a single piece of content managed by Manager.
//
//nolint:interfacebloat
type Info interface {
GetContentID() ID
GetPackBlobID() blob.ID

View File

@@ -683,7 +683,7 @@ func getAllFakeContentsInternal(ctx context.Context, t *testing.T, m *indexBlobM
return nil, nil, errors.Wrap(err, "error unmarshaling")
}
// merge contents based based on time
// merge contents based on time
for k, v := range indexData.Entries {
old, ok := allContents[k]

View File

@@ -44,7 +44,7 @@ func loggerFactoryFromContext(ctx context.Context) LoggerFactory {
return v.(*loggerCache).getLogger //nolint:forcetypeassert
}
// AlsoLogTo returns a context where all logging is emitted the the original output plus the provided loggers.
// AlsoLogTo returns a context where all logging is emitted the original output plus the provided loggers.
func AlsoLogTo(ctx context.Context, loggers ...Logger) context.Context {
originalLogFactory := loggerFactoryFromContext(ctx)

View File

@@ -21,6 +21,8 @@
var tracer = otel.Tracer("kopia/repository")
// Repository exposes public API of Kopia repository, including objects and manifests.
//
//nolint:interfacebloat
type Repository interface {
OpenObject(ctx context.Context, id object.ID) (object.Reader, error)
VerifyObject(ctx context.Context, id object.ID) ([]content.ID, error)
@@ -49,6 +51,8 @@ type RepositoryWriter interface {
}
// DirectRepository provides additional low-level repository functionality.
//
//nolint:interfacebloat
type DirectRepository interface {
Repository

View File

@@ -1,3 +1,4 @@
// Command cli2md generates documentation pages from CLI flags.
package main
import (

View File

@@ -92,7 +92,6 @@ func (p Permissions) MarshalJSON() ([]byte, error) {
return nil, nil
}
//nolint:gomnd
s := "0" + strconv.FormatInt(int64(p), 8)
//nolint:wrapcheck
@@ -107,7 +106,6 @@ func (p *Permissions) UnmarshalJSON(b []byte) error {
return errors.Wrap(err, "unable to unmarshal JSON")
}
//nolint:gomnd
v, err := strconv.ParseInt(s, 0, 32)
if err != nil {
return errors.Wrap(err, "unable to parse permission string")

View File

@@ -98,8 +98,8 @@ type FilesystemOutput struct {
// Init initializes the internal members of the filesystem writer output.
// This method must be called before FilesystemOutput can be used.
func (o *FilesystemOutput) Init() error {
c, err := getStreamCopier(context.TODO(), o.TargetPath, o.WriteSparseFiles)
func (o *FilesystemOutput) Init(ctx context.Context) error {
c, err := getStreamCopier(ctx, o.TargetPath, o.WriteSparseFiles)
if err != nil {
return errors.Wrap(err, "unable to get stream copier")
}

View File

@@ -126,7 +126,7 @@ type VerifierOptions struct {
BlobMap map[blob.ID]blob.Metadata
}
// InParallel starts parallel verification and invokes the provided function which can call
// InParallel starts parallel verification and invokes the provided function which can
// call Process() on in the provided TreeWalker.
func (v *Verifier) InParallel(ctx context.Context, enqueue func(tw *TreeWalker) error) error {
tw, twerr := NewTreeWalker(ctx, TreeWalkerOptions{

View File

@@ -7,7 +7,9 @@
"github.com/kopia/kopia/internal/uitask"
)
// UploadProgress is invoked by by uploader to report status of file and directory uploads.
// UploadProgress is invoked by uploader to report status of file and directory uploads.
//
//nolint:interfacebloat
type UploadProgress interface {
// UploadStarted is emitted once at the start of an upload
UploadStarted()

View File

@@ -1,7 +1,7 @@
//go:build darwin || (linux && amd64)
// +build darwin linux,amd64
// Package robustness contains tests that that validate data stability over time.
// Package robustness contains tests that validate data stability over time.
// The package, while designed for Kopia, is written with abstractions that
// can be used to test other environments.
package robustness

View File

@@ -1,7 +1,7 @@
//go:build darwin || (linux && amd64)
// +build darwin linux,amd64
// Package reporter wraps calls to the the fswalker Reporter
// Package reporter wraps calls to the fswalker Reporter
package reporter
import (

View File

@@ -1,7 +1,7 @@
//go:build darwin || (linux && amd64)
// +build darwin linux,amd64
// Package walker wraps calls to the the fswalker Walker
// Package walker wraps calls to the fswalker Walker
package walker
import (

View File

@@ -8,12 +8,12 @@ https://github.com/gohugoio/hugo/releases/download/v0.89.2/hugo_extended_0.89.2_
https://github.com/gohugoio/hugo/releases/download/v0.89.2/hugo_extended_0.89.2_macOS-64bit.tar.gz: f9185f6d14eb84d9029d59cdd8a977f2f0be334c4f9d38f2099e56a0c0734731
https://github.com/gohugoio/hugo/releases/download/v0.89.2/hugo_extended_0.89.2_macOS-ARM64.tar.gz: 99a5b4738528d4858a0237199eabc7aee77674c8c7edcfe269efb4b515566cec
https://github.com/gohugoio/hugo/releases/download/v0.89.2/hugo_extended_0.89.2_windows-64bit.zip: 8d79db4f24fbf023c64862c37d09291ac216875dad91e71dd8753cb5883e4274
https://github.com/golangci/golangci-lint/releases/download/v1.48.0/golangci-lint-1.48.0-darwin-amd64.tar.gz: ec2e1c3bb3d34268cd57baba6b631127beb185bbe8cfde8ac40ba9b4c8615784
https://github.com/golangci/golangci-lint/releases/download/v1.48.0/golangci-lint-1.48.0-darwin-arm64.tar.gz: ce69d7b94940c197ee3d293cfae7530191c094f76f9aecca97554058b12725ac
https://github.com/golangci/golangci-lint/releases/download/v1.48.0/golangci-lint-1.48.0-linux-amd64.tar.gz: 127c5c9d47cf3a3cf4128815dea1d9623d57a83a22005e91b986b0cbceb09233
https://github.com/golangci/golangci-lint/releases/download/v1.48.0/golangci-lint-1.48.0-linux-arm64.tar.gz: b772408fdda4957edfe93526c7654b787695ac345d76cdf2bdc4470995f62a81
https://github.com/golangci/golangci-lint/releases/download/v1.48.0/golangci-lint-1.48.0-linux-armv6.tar.gz: 65032d81a57660b802485c7043b030f6942c8f0b5f4e3616e79f22533cafa6f7
https://github.com/golangci/golangci-lint/releases/download/v1.48.0/golangci-lint-1.48.0-windows-amd64.zip: 12cbd4c975a7a0c59f28f2f19324490bdca1d530279637467d918ad811de17d2
https://github.com/golangci/golangci-lint/releases/download/v1.50.1/golangci-lint-1.50.1-darwin-amd64.tar.gz: 0f615fb8c364f6e4a213f2ed2ff7aa1fc2b208addf29511e89c03534067bbf57
https://github.com/golangci/golangci-lint/releases/download/v1.50.1/golangci-lint-1.50.1-darwin-arm64.tar.gz: 3ca9753d7804b34f9165427fbe339dbea69bd80be8a10e3f02c6037393b2e1c4
https://github.com/golangci/golangci-lint/releases/download/v1.50.1/golangci-lint-1.50.1-linux-amd64.tar.gz: 4ba1dc9dbdf05b7bdc6f0e04bdfe6f63aa70576f51817be1b2540bbce017b69a
https://github.com/golangci/golangci-lint/releases/download/v1.50.1/golangci-lint-1.50.1-linux-arm64.tar.gz: 3ea0a6d5946340f6831646e2c67a317dd9b35bdc4e09b2df953a86f09ba05d74
https://github.com/golangci/golangci-lint/releases/download/v1.50.1/golangci-lint-1.50.1-linux-armv6.tar.gz: 980832f12fbdd0a8e636666839b168c2bbf0ca573ff50b042d3977f65c4987d7
https://github.com/golangci/golangci-lint/releases/download/v1.50.1/golangci-lint-1.50.1-windows-amd64.zip: 8c2da214884db02fb7f3d929672c515ae3b9d10defad4dd661c4ab365a316d68
https://github.com/goreleaser/goreleaser/releases/download/v0.176.0/goreleaser_Darwin_arm64.tar.gz: 1f95e6561974f4766d8833438b646b06930563ca9867447ea03edb623d876c75
https://github.com/goreleaser/goreleaser/releases/download/v0.176.0/goreleaser_Darwin_x86_64.tar.gz: 17ecad881a50e32f033da5a200c8417d37cae70f09e925645452937998aca506
https://github.com/goreleaser/goreleaser/releases/download/v0.176.0/goreleaser_Linux_arm64.tar.gz: 8bf2a9b9e84498bfa239f2fe91b2d555642c87ab9d3f5d37f29e6e97116910a3

View File

@@ -102,8 +102,8 @@ retry:=
endif
# tool versions
GOLANGCI_LINT_VERSION=1.48.0
CHECKLOCKS_VERSION=release-20220314.0
GOLANGCI_LINT_VERSION=1.50.1
CHECKLOCKS_VERSION=release-20221026.0
NODE_VERSION=16.13.0
HUGO_VERSION=0.89.2
GOTESTSUM_VERSION=1.7.0