mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-01-24 04:16:27 +02:00
a9c76d7655
The PR fixes lint issues, pins `golangci-lint` to `v1.56.2`, disables `only-new-issues`, and enables `fail-on-issues` in the lint workflow. After this, all new lint issues will fail CI. The full log of fixed lint issues: ```sh ❯ golangci-lint run cmd/docs.go:24:14: unused-parameter: parameter 'cmd' seems to be unused, consider removing or renaming it as _ (revive) RunE: func(cmd *cobra.Command, args []string) error { ^ cmd/man.go:26:14: unused-parameter: parameter 'cmd' seems to be unused, consider removing or renaming it as _ (revive) RunE: func(cmd *cobra.Command, args []string) error { ^ cmd/healthcheck.go:36:14: unused-parameter: parameter 'cmd' seems to be unused, consider removing or renaming it as _ (revive) RunE: func(cmd *cobra.Command, args []string) error { ^ cmd/build.go:72:33: unused-parameter: parameter 'cmd' seems to be unused, consider removing or renaming it as _ (revive) RunE: timedRunE("build", func(cmd *cobra.Command, args []string) error { ^ cmd/schema.go:29:14: unused-parameter: parameter 'cmd' seems to be unused, consider removing or renaming it as _ (revive) RunE: func(cmd *cobra.Command, args []string) error { ^ internal/pipe/nix/nix_test.go:547:5: error-is-as: second argument to require.ErrorAs should not be *error (testifylint) require.ErrorAs(t, err, &tt.expectDefaultErrorIs) ^ internal/pipe/nix/nix_test.go:556:5: error-is-as: second argument to require.ErrorAs should not be *error (testifylint) require.ErrorAs(t, err, &tt.expectRunErrorIs) ^ internal/pipe/nix/nix_test.go:567:5: error-is-as: second argument to require.ErrorAs should not be *error (testifylint) require.ErrorAs(t, err, &tt.expectPublishErrorIs) ^ internal/pipe/winget/winget_test.go:709:5: error-is-as: second argument to require.ErrorAs should not be *error (testifylint) require.ErrorAs(t, err, &tt.expectPublishErrorIs) ^ internal/pipe/winget/winget_test.go:728:5: error-is-as: second argument to require.ErrorAs should not be *error (testifylint) require.ErrorAs(t, err, &tt.expectPublishErrorIs) ^ internal/pipe/docker/docker_test.go:56:29: unused-parameter: parameter 'use' seems to be unused, consider removing or renaming it as _ (revive) return func(t *testing.T, use string) { ^ internal/gio/safe_test.go:23:4: go-require: require must only be used in the goroutine running the test function (testifylint) require.Equal(t, 1, s) ^ internal/gio/safe_test.go:24:4: go-require: require must only be used in the goroutine running the test function (testifylint) require.NoError(t, err) ^ internal/pipe/gomod/gomod_proxy_test.go:126:3: useless-assert: asserting of the same variable (testifylint) require.Equal(t, ctx.ModulePath, ctx.ModulePath) ^ internal/pipe/gomod/gomod_proxy_test.go:152:3: useless-assert: asserting of the same variable (testifylint) require.Equal(t, ctx.ModulePath, ctx.ModulePath) ^ internal/pipe/gomod/gomod_proxy_test.go:178:3: useless-assert: asserting of the same variable (testifylint) require.Equal(t, ctx.ModulePath, ctx.ModulePath) ^ internal/pipe/gomod/gomod_proxy_test.go:239:3: useless-assert: asserting of the same variable (testifylint) require.Equal(t, ctx.ModulePath, ctx.ModulePath) ^ internal/artifact/artifact_test.go:638:46: unused-parameter: parameter 'a' seems to be unused, consider removing or renaming it as _ (revive) require.EqualError(t, artifacts.Visit(func(a *Artifact) error { ^ internal/pipe/milestone/milestone.go:79: File is not `gofumpt`-ed (gofumpt) internal/http/http_test.go:217:19: unused-parameter: parameter 'k' seems to be unused, consider removing or renaming it as _ (revive) assetOpen = func(k string, a *artifact.Artifact) (*asset, error) { ^ internal/middleware/logging/logging_test.go:12:37: unused-parameter: parameter 'ctx' seems to be unused, consider removing or renaming it as _ (revive) require.NoError(t, Log("foo", func(ctx *context.Context) error { ^ internal/middleware/logging/logging_test.go:16:40: unused-parameter: parameter 'ctx' seems to be unused, consider removing or renaming it as _ (revive) require.NoError(t, PadLog("foo", func(ctx *context.Context) error { ^ internal/pipe/chocolatey/chocolatey_test.go:277:15: unused-parameter: parameter 'cmd' seems to be unused, consider removing or renaming it as _ (revive) exec: func(cmd string, args ...string) ([]byte, error) { ^ internal/client/gitlab.go:325: File is not `gofumpt`-ed (gofumpt) internal/pipe/linkedin/client_test.go:58:77: unused-parameter: parameter 'req' seems to be unused, consider removing or renaming it as _ (revive) server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { ^ internal/middleware/errhandler/error_test.go:15:34: unused-parameter: parameter 'ctx' seems to be unused, consider removing or renaming it as _ (revive) require.NoError(t, Handle(func(ctx *context.Context) error { ^ internal/middleware/errhandler/error_test.go:21:34: unused-parameter: parameter 'ctx' seems to be unused, consider removing or renaming it as _ (revive) require.NoError(t, Handle(func(ctx *context.Context) error { ^ internal/middleware/errhandler/error_test.go:27:32: unused-parameter: parameter 'ctx' seems to be unused, consider removing or renaming it as _ (revive) require.Error(t, Handle(func(ctx *context.Context) error { ^ internal/middleware/errhandler/error_test.go:36:37: unused-parameter: parameter 'ctx' seems to be unused, consider removing or renaming it as _ (revive) require.NoError(t, memo.Wrap(func(ctx *context.Context) error { ^ internal/middleware/errhandler/error_test.go:42:37: unused-parameter: parameter 'ctx' seems to be unused, consider removing or renaming it as _ (revive) require.NoError(t, memo.Wrap(func(ctx *context.Context) error { ^ internal/middleware/errhandler/error_test.go:48:37: unused-parameter: parameter 'ctx' seems to be unused, consider removing or renaming it as _ (revive) require.NoError(t, memo.Wrap(func(ctx *context.Context) error { ^ internal/pipe/ko/ko.go:175:29: unused-parameter: parameter 'ctx' seems to be unused, consider removing or renaming it as _ (revive) build.WithBaseImages(func(ctx stdctx.Context, s string) (name.Reference, build.Result, error) { ^ ```
313 lines
8.1 KiB
Go
313 lines
8.1 KiB
Go
package gomod
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"runtime"
|
|
"syscall"
|
|
"testing"
|
|
|
|
"github.com/goreleaser/goreleaser/internal/testctx"
|
|
"github.com/goreleaser/goreleaser/internal/testlib"
|
|
"github.com/goreleaser/goreleaser/pkg/config"
|
|
"github.com/goreleaser/goreleaser/pkg/context"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestString(t *testing.T) {
|
|
require.NotEmpty(t, CheckGoModPipe{}.String())
|
|
require.NotEmpty(t, ProxyPipe{}.String())
|
|
}
|
|
|
|
func TestCheckGoMod(t *testing.T) {
|
|
t.Run("replace on snapshot", func(t *testing.T) {
|
|
dir := testlib.Mktmp(t)
|
|
dist := filepath.Join(dir, "dist")
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
Dist: dist,
|
|
GoMod: config.GoMod{
|
|
Proxy: true,
|
|
GoBinary: "go",
|
|
},
|
|
Builds: []config.Build{
|
|
{
|
|
ID: "foo",
|
|
Goos: []string{runtime.GOOS},
|
|
Goarch: []string{runtime.GOARCH},
|
|
Main: ".",
|
|
Dir: ".",
|
|
},
|
|
},
|
|
}, testctx.Snapshot, withGoReleaserModulePath)
|
|
|
|
fakeGoModAndSum(t, ctx.ModulePath)
|
|
require.NoError(t, exec.Command("go", "mod", "edit", "-replace", "foo=../bar").Run())
|
|
require.NoError(t, CheckGoModPipe{}.Run(ctx))
|
|
})
|
|
t.Run("no go mod", func(t *testing.T) {
|
|
dir := testlib.Mktmp(t)
|
|
dist := filepath.Join(dir, "dist")
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
Dist: dist,
|
|
GoMod: config.GoMod{
|
|
Proxy: true,
|
|
GoBinary: "go",
|
|
},
|
|
Builds: []config.Build{
|
|
{
|
|
ID: "foo",
|
|
Goos: []string{runtime.GOOS},
|
|
Goarch: []string{runtime.GOARCH},
|
|
Main: ".",
|
|
Dir: ".",
|
|
},
|
|
},
|
|
}, withGoReleaserModulePath)
|
|
|
|
require.NoError(t, CheckGoModPipe{}.Run(ctx))
|
|
})
|
|
t.Run("replace", func(t *testing.T) {
|
|
dir := testlib.Mktmp(t)
|
|
dist := filepath.Join(dir, "dist")
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
Dist: dist,
|
|
GoMod: config.GoMod{
|
|
Proxy: true,
|
|
GoBinary: "go",
|
|
},
|
|
Builds: []config.Build{
|
|
{
|
|
ID: "foo",
|
|
Goos: []string{runtime.GOOS},
|
|
Goarch: []string{runtime.GOARCH},
|
|
Main: ".",
|
|
Dir: ".",
|
|
},
|
|
},
|
|
}, withGoReleaserModulePath)
|
|
|
|
fakeGoModAndSum(t, ctx.ModulePath)
|
|
require.NoError(t, exec.Command("go", "mod", "edit", "-replace", "foo=../bar").Run())
|
|
require.ErrorIs(t, CheckGoModPipe{}.Run(ctx), ErrReplaceWithProxy)
|
|
})
|
|
}
|
|
|
|
func TestGoModProxy(t *testing.T) {
|
|
t.Run("goreleaser", func(t *testing.T) {
|
|
dir := testlib.Mktmp(t)
|
|
dist := filepath.Join(dir, "dist")
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
Dist: dist,
|
|
GoMod: config.GoMod{
|
|
Proxy: true,
|
|
GoBinary: "go",
|
|
},
|
|
Builds: []config.Build{
|
|
{
|
|
ID: "foo",
|
|
Goos: []string{runtime.GOOS},
|
|
Goarch: []string{runtime.GOARCH},
|
|
Main: ".",
|
|
Dir: ".",
|
|
},
|
|
},
|
|
}, testctx.WithCurrentTag("v0.161.1"), withGoReleaserModulePath)
|
|
|
|
fakeGoModAndSum(t, ctx.ModulePath)
|
|
require.NoError(t, ProxyPipe{}.Run(ctx))
|
|
requireGoMod(t)
|
|
require.Equal(t, ctx.ModulePath, ctx.Config.Builds[0].Main)
|
|
require.Equal(t, ".", ctx.Config.Builds[0].UnproxiedMain)
|
|
require.Equal(t, filepath.Join(dist, "proxy", "foo"), ctx.Config.Builds[0].Dir)
|
|
require.Equal(t, ".", ctx.Config.Builds[0].UnproxiedDir)
|
|
})
|
|
|
|
t.Run("nfpm", func(t *testing.T) {
|
|
dir := testlib.Mktmp(t)
|
|
dist := filepath.Join(dir, "dist")
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
Dist: dist,
|
|
GoMod: config.GoMod{
|
|
Proxy: true,
|
|
GoBinary: "go",
|
|
},
|
|
Builds: []config.Build{
|
|
{
|
|
ID: "foo",
|
|
Goos: []string{runtime.GOOS},
|
|
Goarch: []string{runtime.GOARCH},
|
|
Main: "./cmd/nfpm",
|
|
},
|
|
},
|
|
}, testctx.WithCurrentTag("v2.3.1"), withNfpmModulePath)
|
|
fakeGoModAndSum(t, ctx.ModulePath)
|
|
require.NoError(t, ProxyPipe{}.Run(ctx))
|
|
requireGoMod(t)
|
|
require.Equal(t, ctx.ModulePath+"/cmd/nfpm", ctx.Config.Builds[0].Main)
|
|
require.Equal(t, filepath.Join(dist, "proxy", "foo"), ctx.Config.Builds[0].Dir)
|
|
})
|
|
|
|
// this repo does not have a go.sum file, which is ok, a project might not have any dependencies
|
|
t.Run("no go.sum", func(t *testing.T) {
|
|
dir := testlib.Mktmp(t)
|
|
dist := filepath.Join(dir, "dist")
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
Dist: dist,
|
|
GoMod: config.GoMod{
|
|
Proxy: true,
|
|
GoBinary: "go",
|
|
},
|
|
Builds: []config.Build{
|
|
{
|
|
ID: "foo",
|
|
Goos: []string{runtime.GOOS},
|
|
Goarch: []string{runtime.GOARCH},
|
|
},
|
|
},
|
|
}, testctx.WithCurrentTag("v0.0.1"), withExampleModulePath)
|
|
fakeGoMod(t, ctx.ModulePath)
|
|
require.NoError(t, ProxyPipe{}.Run(ctx))
|
|
requireGoMod(t)
|
|
require.Equal(t, ctx.ModulePath, ctx.Config.Builds[0].Main)
|
|
require.Equal(t, filepath.Join(dist, "proxy", "foo"), ctx.Config.Builds[0].Dir)
|
|
})
|
|
|
|
t.Run("no perms", func(t *testing.T) {
|
|
for file, mode := range map[string]os.FileMode{
|
|
"go.mod": 0o500,
|
|
"go.sum": 0o500,
|
|
"../../../go.sum": 0o300,
|
|
} {
|
|
t.Run(file, func(t *testing.T) {
|
|
dir := testlib.Mktmp(t)
|
|
dist := filepath.Join(dir, "dist")
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
Dist: dist,
|
|
GoMod: config.GoMod{
|
|
Proxy: true,
|
|
GoBinary: "go",
|
|
},
|
|
Builds: []config.Build{
|
|
{
|
|
ID: "foo",
|
|
Goos: []string{runtime.GOOS},
|
|
Goarch: []string{runtime.GOARCH},
|
|
},
|
|
},
|
|
}, withGoReleaserModulePath, testctx.WithCurrentTag("v0.161.1"))
|
|
|
|
fakeGoModAndSum(t, ctx.ModulePath)
|
|
require.NoError(t, ProxyPipe{}.Run(ctx)) // should succeed at first
|
|
|
|
// change perms of a file and run again, which should now fail on that file.
|
|
require.NoError(t, os.Chmod(filepath.Join(dist, "proxy", "foo", file), mode))
|
|
require.ErrorIs(t, ProxyPipe{}.Run(ctx), syscall.EACCES)
|
|
})
|
|
}
|
|
})
|
|
|
|
t.Run("goreleaser with main.go", func(t *testing.T) {
|
|
dir := testlib.Mktmp(t)
|
|
dist := filepath.Join(dir, "dist")
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
Dist: dist,
|
|
GoMod: config.GoMod{
|
|
Proxy: true,
|
|
GoBinary: "go",
|
|
},
|
|
Builds: []config.Build{
|
|
{
|
|
ID: "foo",
|
|
Goos: []string{runtime.GOOS},
|
|
Goarch: []string{runtime.GOARCH},
|
|
Main: "main.go",
|
|
},
|
|
},
|
|
}, withGoReleaserModulePath, testctx.WithCurrentTag("v0.161.1"))
|
|
|
|
fakeGoModAndSum(t, ctx.ModulePath)
|
|
require.NoError(t, ProxyPipe{}.Run(ctx))
|
|
requireGoMod(t)
|
|
require.Equal(t, ctx.ModulePath, ctx.Config.Builds[0].Main)
|
|
require.Equal(t, filepath.Join(dist, "proxy", "foo"), ctx.Config.Builds[0].Dir)
|
|
})
|
|
}
|
|
|
|
func TestProxyDescription(t *testing.T) {
|
|
require.NotEmpty(t, ProxyPipe{}.String())
|
|
}
|
|
|
|
func TestSkip(t *testing.T) {
|
|
t.Run("skip false gomod.proxy", func(t *testing.T) {
|
|
ctx := testctx.New()
|
|
require.True(t, ProxyPipe{}.Skip(ctx))
|
|
require.True(t, CheckGoModPipe{}.Skip(ctx))
|
|
})
|
|
|
|
t.Run("skip snapshot", func(t *testing.T) {
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
GoMod: config.GoMod{
|
|
Proxy: true,
|
|
},
|
|
}, withGoReleaserModulePath, testctx.Snapshot)
|
|
require.True(t, ProxyPipe{}.Skip(ctx))
|
|
require.False(t, CheckGoModPipe{}.Skip(ctx))
|
|
})
|
|
|
|
t.Run("skip not a go module", func(t *testing.T) {
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
GoMod: config.GoMod{
|
|
Proxy: true,
|
|
},
|
|
}, func(ctx *context.Context) { ctx.ModulePath = "" })
|
|
require.True(t, ProxyPipe{}.Skip(ctx))
|
|
require.True(t, CheckGoModPipe{}.Skip(ctx))
|
|
})
|
|
|
|
t.Run("dont skip", func(t *testing.T) {
|
|
ctx := testctx.NewWithCfg(config.Project{
|
|
GoMod: config.GoMod{
|
|
Proxy: true,
|
|
},
|
|
}, withGoReleaserModulePath)
|
|
require.False(t, ProxyPipe{}.Skip(ctx))
|
|
require.False(t, CheckGoModPipe{}.Skip(ctx))
|
|
})
|
|
}
|
|
|
|
func requireGoMod(tb testing.TB) {
|
|
tb.Helper()
|
|
|
|
mod, err := os.ReadFile("dist/proxy/foo/go.mod")
|
|
require.NoError(tb, err)
|
|
require.Contains(tb, string(mod), `module foo
|
|
|
|
go 1.22`)
|
|
}
|
|
|
|
func fakeGoModAndSum(tb testing.TB, module string) {
|
|
tb.Helper()
|
|
|
|
fakeGoMod(tb, module)
|
|
require.NoError(tb, os.WriteFile("go.sum", []byte("\n"), 0o666))
|
|
}
|
|
|
|
func fakeGoMod(tb testing.TB, module string) {
|
|
tb.Helper()
|
|
require.NoError(tb, os.WriteFile("go.mod", []byte(fmt.Sprintf("module %s\n", module)), 0o666))
|
|
}
|
|
|
|
func withGoReleaserModulePath(ctx *context.Context) {
|
|
ctx.ModulePath = "github.com/goreleaser/goreleaser"
|
|
}
|
|
|
|
func withNfpmModulePath(ctx *context.Context) {
|
|
ctx.ModulePath = "github.com/goreleaser/nfpm/v2"
|
|
}
|
|
|
|
func withExampleModulePath(ctx *context.Context) {
|
|
ctx.ModulePath = "github.com/goreleaser/example-mod-proxy"
|
|
}
|