1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2025-07-15 01:34:38 +02:00

fix(golangBuild): publish binary with default name (#3773)

* fix(golangBuild): publish binary with default name

* chore: merge changes with latest state

* fix & enhance tests
This commit is contained in:
Oliver Nocon
2022-06-30 09:57:48 +02:00
committed by GitHub
parent 8923d1e583
commit ce161590ae
2 changed files with 58 additions and 12 deletions

View File

@ -17,6 +17,7 @@ import (
"github.com/stretchr/testify/assert"
"golang.org/x/mod/modfile"
"golang.org/x/mod/module"
)
type golangBuildMockUtils struct {
@ -80,12 +81,23 @@ func newGolangBuildTestsUtils() *golangBuildMockUtils {
func TestRunGolangBuild(t *testing.T) {
cpe := golangBuildCommonPipelineEnvironment{}
modTestFile := `module private.example.com/test
require (
example.com/public/module v1.0.0
private1.example.com/private/repo v0.1.0
private2.example.com/another/repo v0.2.0
)
go 1.17`
t.Run("success - no tests", func(t *testing.T) {
config := golangBuildOptions{
TargetArchitectures: []string{"linux,amd64"},
}
utils := newGolangBuildTestsUtils()
utils.FilesMock.AddFile("go.mod", []byte(modTestFile))
telemetryData := telemetry.CustomData{}
err := runGolangBuild(&config, &telemetryData, utils, &cpe)
@ -102,6 +114,7 @@ func TestRunGolangBuild(t *testing.T) {
TargetArchitectures: []string{"linux,amd64"},
}
utils := newGolangBuildTestsUtils()
utils.FilesMock.AddFile("go.mod", []byte(modTestFile))
telemetryData := telemetry.CustomData{}
err := runGolangBuild(&config, &telemetryData, utils, &cpe)
@ -121,6 +134,7 @@ func TestRunGolangBuild(t *testing.T) {
TargetArchitectures: []string{"linux,amd64"},
}
utils := newGolangBuildTestsUtils()
utils.FilesMock.AddFile("go.mod", []byte(modTestFile))
telemetryData := telemetry.CustomData{}
err := runGolangBuild(&config, &telemetryData, utils, &cpe)
@ -135,6 +149,7 @@ func TestRunGolangBuild(t *testing.T) {
TargetArchitectures: []string{"linux,amd64"},
}
utils := newGolangBuildTestsUtils()
utils.FilesMock.AddFile("go.mod", []byte(modTestFile))
telemetryData := telemetry.CustomData{}
err := runGolangBuild(&config, &telemetryData, utils, &cpe)
@ -147,6 +162,24 @@ func TestRunGolangBuild(t *testing.T) {
assert.Equal(t, []string{"build", "-trimpath"}, utils.ExecMockRunner.Calls[2].Params)
})
t.Run("success - simple publish", func(t *testing.T) {
config := golangBuildOptions{
TargetArchitectures: []string{"linux,amd64"},
Publish: true,
TargetRepositoryURL: "https://my.target.repository.local/",
ArtifactVersion: "1.0.0",
}
utils := newGolangBuildTestsUtils()
utils.returnFileUploadStatus = 201
utils.FilesMock.AddFile("go.mod", []byte(modTestFile))
telemetryData := telemetry.CustomData{}
err := runGolangBuild(&config, &telemetryData, utils, &cpe)
assert.NoError(t, err)
assert.Equal(t, "test", cpe.custom.artifacts[0].Name)
})
t.Run("success - publishes binaries", func(t *testing.T) {
config := golangBuildOptions{
TargetArchitectures: []string{"linux,amd64"},
@ -203,6 +236,7 @@ func TestRunGolangBuild(t *testing.T) {
TargetArchitectures: []string{"linux,amd64"},
}
utils := newGolangBuildTestsUtils()
utils.FilesMock.AddFile("go.mod", []byte(modTestFile))
telemetryData := telemetry.CustomData{}
err := runGolangBuild(&config, &telemetryData, utils, &cpe)
@ -285,6 +319,7 @@ func TestRunGolangBuild(t *testing.T) {
TargetArchitectures: []string{"linux,amd64"},
}
utils := newGolangBuildTestsUtils()
utils.FilesMock.AddFile("go.mod", []byte(modTestFile))
utils.ShouldFailOnCommand = map[string]error{"go build": fmt.Errorf("build failure")}
telemetryData := telemetry.CustomData{}
@ -613,8 +648,9 @@ func TestRunGolangBuildPerArchitecture(t *testing.T) {
utils := newGolangBuildTestsUtils()
ldflags := ""
architecture, _ := multiarch.ParsePlatformString("linux,amd64")
goModFile := modfile.File{Module: &modfile.Module{Mod: module.Version{Path: "test/testBinary"}}}
binaryName, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
binaryName, err := runGolangBuildPerArchitecture(&config, &goModFile, utils, ldflags, architecture)
assert.NoError(t, err)
assert.Greater(t, len(utils.Env), 3)
assert.Contains(t, utils.Env, "CGO_ENABLED=0")
@ -622,7 +658,7 @@ func TestRunGolangBuildPerArchitecture(t *testing.T) {
assert.Contains(t, utils.Env, "GOARCH=amd64")
assert.Equal(t, utils.Calls[0].Exec, "go")
assert.Equal(t, utils.Calls[0].Params[0], "build")
assert.Empty(t, binaryName)
assert.Equal(t, binaryName[0], "testBinary")
})
t.Run("success - custom params", func(t *testing.T) {
@ -631,8 +667,9 @@ func TestRunGolangBuildPerArchitecture(t *testing.T) {
utils := newGolangBuildTestsUtils()
ldflags := "-X test=test"
architecture, _ := multiarch.ParsePlatformString("linux,amd64")
goModFile := modfile.File{Module: &modfile.Module{Mod: module.Version{Path: "test/testBinary"}}}
binaryNames, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
binaryNames, err := runGolangBuildPerArchitecture(&config, &goModFile, utils, ldflags, architecture)
assert.NoError(t, err)
assert.Contains(t, utils.Calls[0].Params, "-o")
assert.Contains(t, utils.Calls[0].Params, "testBin-linux.amd64")
@ -649,8 +686,9 @@ func TestRunGolangBuildPerArchitecture(t *testing.T) {
utils := newGolangBuildTestsUtils()
ldflags := ""
architecture, _ := multiarch.ParsePlatformString("windows,amd64")
goModFile := modfile.File{Module: &modfile.Module{Mod: module.Version{Path: "test/testBinary"}}}
binaryNames, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
binaryNames, err := runGolangBuildPerArchitecture(&config, &goModFile, utils, ldflags, architecture)
assert.NoError(t, err)
assert.Contains(t, utils.Calls[0].Params, "-o")
assert.Contains(t, utils.Calls[0].Params, "testBin-windows.amd64.exe")
@ -668,8 +706,9 @@ func TestRunGolangBuildPerArchitecture(t *testing.T) {
}
ldflags := ""
architecture, _ := multiarch.ParsePlatformString("linux,amd64")
goModFile := modfile.File{Module: &modfile.Module{Mod: module.Version{Path: "test/testBinary"}}}
binaryNames, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
binaryNames, err := runGolangBuildPerArchitecture(&config, &goModFile, utils, ldflags, architecture)
assert.NoError(t, err)
assert.Contains(t, utils.Calls[0].Params, "list")
assert.Contains(t, utils.Calls[0].Params, "package/foo")
@ -691,8 +730,9 @@ func TestRunGolangBuildPerArchitecture(t *testing.T) {
}
ldflags := ""
architecture, _ := multiarch.ParsePlatformString("windows,amd64")
goModFile := modfile.File{Module: &modfile.Module{Mod: module.Version{Path: "test/testBinary"}}}
binaryNames, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
binaryNames, err := runGolangBuildPerArchitecture(&config, &goModFile, utils, ldflags, architecture)
assert.NoError(t, err)
assert.Contains(t, utils.Calls[0].Params, "list")
assert.Contains(t, utils.Calls[0].Params, "package/foo")
@ -714,8 +754,9 @@ func TestRunGolangBuildPerArchitecture(t *testing.T) {
}
ldflags := ""
architecture, _ := multiarch.ParsePlatformString("linux,amd64")
goModFile := modfile.File{Module: &modfile.Module{Mod: module.Version{Path: "test/testBinary"}}}
binaryNames, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
binaryNames, err := runGolangBuildPerArchitecture(&config, &goModFile, utils, ldflags, architecture)
assert.NoError(t, err)
assert.Contains(t, utils.Calls[0].Params, "list")
assert.Contains(t, utils.Calls[0].Params, "package/foo")
@ -733,8 +774,9 @@ func TestRunGolangBuildPerArchitecture(t *testing.T) {
utils.ShouldFailOnCommand = map[string]error{"go build": fmt.Errorf("execution error")}
ldflags := ""
architecture, _ := multiarch.ParsePlatformString("linux,amd64")
goModFile := modfile.File{Module: &modfile.Module{Mod: module.Version{Path: "test/testBinary"}}}
_, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
_, err := runGolangBuildPerArchitecture(&config, &goModFile, utils, ldflags, architecture)
assert.EqualError(t, err, "failed to run build for linux.amd64: execution error")
})
@ -778,8 +820,8 @@ go 1.17`
expect: expectations{
envVars: []string{"GOPRIVATE=*.example.com"},
commandsExecuted: [][]string{
[]string{"git", "config", "--global", "url.https://secret@private1.example.com/private/repo.git.insteadOf", "https://private1.example.com/private/repo.git"},
[]string{"git", "config", "--global", "url.https://secret@private2.example.com/another/repo.git.insteadOf", "https://private2.example.com/another/repo.git"},
{"git", "config", "--global", "url.https://secret@private1.example.com/private/repo.git.insteadOf", "https://private1.example.com/private/repo.git"},
{"git", "config", "--global", "url.https://secret@private2.example.com/another/repo.git.insteadOf", "https://private2.example.com/another/repo.git"},
},
},
},