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:
parent
d18adfb57e
commit
c42b3ec6af
@ -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 {
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user