You've already forked sap-jenkins-library
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:
@ -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"},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
Reference in New Issue
Block a user