1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-03-17 20:47:50 +02:00

refactor: improve go mod proxy usage (#3698)

Thanks for the suggestions @mvdan!

refs https://github.com/goreleaser/goreleaser/issues/3624

Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
This commit is contained in:
Carlos Alexandro Becker 2023-01-20 23:47:20 -03:00 committed by GitHub
parent d18adfb57e
commit c42b3ec6af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 49 deletions

View File

@ -39,18 +39,7 @@ func (ProxyPipe) Run(ctx *context.Context) error {
return nil
}
const goModTpl = `
module {{ .BuildID }}
require {{ .ModulePath }} {{ .Tag }}
`
const mainGoTpl = `
// +build main
package main
import _ "{{ .Main }}"
`
const goModTpl = `module {{ .BuildID }}`
// ErrProxy happens when something goes wrong while proxying the current go module.
type ErrProxy struct {
@ -102,11 +91,6 @@ func proxyBuild(ctx *context.Context, build *config.Build) error {
return newErrProxy(err)
}
main, err := template.Apply(mainGoTpl)
if err != nil {
return newErrProxy(err)
}
dir := filepath.Join(ctx.Config.Dist, "proxy", build.ID)
log.Debugf("creating needed files")
@ -115,10 +99,6 @@ func proxyBuild(ctx *context.Context, build *config.Build) error {
return newErrProxy(err)
}
if err := os.WriteFile(filepath.Join(dir, "main.go"), []byte(main), 0o666); err != nil {
return newErrProxy(err)
}
if err := os.WriteFile(filepath.Join(dir, "go.mod"), []byte(mod), 0o666); err != nil {
return newErrProxy(err)
}
@ -128,7 +108,7 @@ func proxyBuild(ctx *context.Context, build *config.Build) error {
}
log.Debugf("tidying")
cmd := exec.CommandContext(ctx, ctx.Config.GoMod.GoBinary, "mod", "tidy")
cmd := exec.CommandContext(ctx, ctx.Config.GoMod.GoBinary, "get", ctx.ModulePath+"@"+ctx.Git.CurrentTag)
cmd.Dir = dir
cmd.Env = append(ctx.Config.GoMod.Env, os.Environ()...)
if out, err := cmd.CombinedOutput(); err != nil {

View File

@ -39,8 +39,7 @@ func TestGoModProxy(t *testing.T) {
fakeGoModAndSum(t, ctx.ModulePath)
require.NoError(t, ProxyPipe{}.Run(ctx))
requireGoMod(t, ctx.ModulePath, ctx.Git.CurrentTag)
requireMainGo(t, ctx.ModulePath)
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)
@ -72,8 +71,7 @@ func TestGoModProxy(t *testing.T) {
ctx.ModulePath = "github.com/goreleaser/nfpm/v2"
fakeGoModAndSum(t, ctx.ModulePath)
require.NoError(t, ProxyPipe{}.Run(ctx))
requireGoMod(t, ctx.ModulePath, ctx.Git.CurrentTag)
requireMainGo(t, ctx.ModulePath+"/cmd/nfpm")
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)
require.Equal(t, ctx.ModulePath, ctx.ModulePath)
@ -102,8 +100,7 @@ func TestGoModProxy(t *testing.T) {
ctx.ModulePath = "github.com/goreleaser/example-mod-proxy"
fakeGoMod(t, ctx.ModulePath)
require.NoError(t, ProxyPipe{}.Run(ctx))
requireGoMod(t, ctx.ModulePath, ctx.Git.CurrentTag)
requireMainGo(t, ctx.ModulePath)
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)
require.Equal(t, ctx.ModulePath, ctx.ModulePath)
@ -113,7 +110,6 @@ func TestGoModProxy(t *testing.T) {
for file, mode := range map[string]os.FileMode{
"go.mod": 0o500,
"go.sum": 0o500,
"main.go": 0o500,
"../../../go.sum": 0o300,
} {
t.Run(file, func(t *testing.T) {
@ -171,8 +167,7 @@ func TestGoModProxy(t *testing.T) {
fakeGoModAndSum(t, ctx.ModulePath)
require.NoError(t, ProxyPipe{}.Run(ctx))
requireGoMod(t, ctx.ModulePath, ctx.Git.CurrentTag)
requireMainGo(t, ctx.ModulePath)
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)
require.Equal(t, ctx.ModulePath, ctx.ModulePath)
@ -220,30 +215,15 @@ func TestSkip(t *testing.T) {
})
}
func requireGoMod(tb testing.TB, module, version string) {
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), fmt.Sprintf(`module foo
require.Contains(tb, string(mod), `module foo
go 1.19
require %s %s
`, module, version))
}
func requireMainGo(tb testing.TB, module string) {
tb.Helper()
main, err := os.ReadFile("dist/proxy/foo/main.go")
require.NoError(tb, err)
require.Equal(tb, fmt.Sprintf(`
// +build main
package main
import _ "%s"
`, module), string(main))
`)
}
func fakeGoModAndSum(tb testing.TB, module string) {