mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-03-19 20:57:53 +02:00
fix: artifact fields not available to flags (#1118)
This commit is contained in:
parent
e92bbe32ce
commit
1080215876
@ -68,26 +68,40 @@ func (*Builder) Build(ctx *context.Context, build config.Build, options api.Opti
|
|||||||
var env = append(ctx.Env.Strings(), build.Env...)
|
var env = append(ctx.Env.Strings(), build.Env...)
|
||||||
env = append(env, target.Env()...)
|
env = append(env, target.Env()...)
|
||||||
|
|
||||||
flags, err := processFlags(ctx, env, build.Flags, "")
|
artifact := &artifact.Artifact{
|
||||||
|
Type: artifact.Binary,
|
||||||
|
Path: options.Path,
|
||||||
|
Name: options.Name,
|
||||||
|
Goos: target.os,
|
||||||
|
Goarch: target.arch,
|
||||||
|
Goarm: target.arm,
|
||||||
|
Extra: map[string]interface{}{
|
||||||
|
"Binary": build.Binary,
|
||||||
|
"Ext": options.Ext,
|
||||||
|
"ID": build.ID,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
flags, err := processFlags(ctx, artifact, env, build.Flags, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cmd = append(cmd, flags...)
|
cmd = append(cmd, flags...)
|
||||||
|
|
||||||
asmflags, err := processFlags(ctx, env, build.Asmflags, "-asmflags=")
|
asmflags, err := processFlags(ctx, artifact, env, build.Asmflags, "-asmflags=")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cmd = append(cmd, asmflags...)
|
cmd = append(cmd, asmflags...)
|
||||||
|
|
||||||
gcflags, err := processFlags(ctx, env, build.Gcflags, "-gcflags=")
|
gcflags, err := processFlags(ctx, artifact, env, build.Gcflags, "-gcflags=")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cmd = append(cmd, gcflags...)
|
cmd = append(cmd, gcflags...)
|
||||||
|
|
||||||
// flag prefix is skipped because ldflags need to output a single string
|
// flag prefix is skipped because ldflags need to output a single string
|
||||||
ldflags, err := processFlags(ctx, env, build.Ldflags, "")
|
ldflags, err := processFlags(ctx, artifact, env, build.Ldflags, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -100,26 +114,14 @@ func (*Builder) Build(ctx *context.Context, build config.Build, options api.Opti
|
|||||||
if err := run(ctx, cmd, env); err != nil {
|
if err := run(ctx, cmd, env); err != nil {
|
||||||
return errors.Wrapf(err, "failed to build for %s", options.Target)
|
return errors.Wrapf(err, "failed to build for %s", options.Target)
|
||||||
}
|
}
|
||||||
ctx.Artifacts.Add(&artifact.Artifact{
|
ctx.Artifacts.Add(artifact)
|
||||||
Type: artifact.Binary,
|
|
||||||
Path: options.Path,
|
|
||||||
Name: options.Name,
|
|
||||||
Goos: target.os,
|
|
||||||
Goarch: target.arch,
|
|
||||||
Goarm: target.arm,
|
|
||||||
Extra: map[string]interface{}{
|
|
||||||
"Binary": build.Binary,
|
|
||||||
"Ext": options.Ext,
|
|
||||||
"ID": build.ID,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func processFlags(ctx *context.Context, env, flags []string, flagPrefix string) ([]string, error) {
|
func processFlags(ctx *context.Context, a *artifact.Artifact, env, flags []string, flagPrefix string) ([]string, error) {
|
||||||
processed := make([]string, 0, len(flags))
|
processed := make([]string, 0, len(flags))
|
||||||
for _, rawFlag := range flags {
|
for _, rawFlag := range flags {
|
||||||
flag, err := tmpl.New(ctx).WithEnvS(env).Apply(rawFlag)
|
flag, err := tmpl.New(ctx).WithEnvS(env).WithArtifact(a, map[string]string{}).Apply(rawFlag)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -404,8 +404,9 @@ func TestLdFlagsFullTemplate(t *testing.T) {
|
|||||||
Version: "1.2.3",
|
Version: "1.2.3",
|
||||||
Env: map[string]string{"FOO": "123"},
|
Env: map[string]string{"FOO": "123"},
|
||||||
}
|
}
|
||||||
flags, err := tmpl.New(ctx).
|
var artifact = &artifact.Artifact{Goarch: "amd64"}
|
||||||
Apply(`-s -w -X main.version={{.Version}} -X main.tag={{.Tag}} -X main.date={{.Date}} -X main.commit={{.Commit}} -X "main.foo={{.Env.FOO}}" -X main.time={{ time "20060102" }}`)
|
flags, err := tmpl.New(ctx).WithArtifact(artifact, map[string]string{}).
|
||||||
|
Apply(`-s -w -X main.version={{.Version}} -X main.tag={{.Tag}} -X main.date={{.Date}} -X main.commit={{.Commit}} -X "main.foo={{.Env.FOO}}" -X main.time={{ time "20060102" }} -X main.arch={{.Arch}}`)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Contains(t, flags, "-s -w")
|
assert.Contains(t, flags, "-s -w")
|
||||||
assert.Contains(t, flags, "-X main.version=1.2.3")
|
assert.Contains(t, flags, "-X main.version=1.2.3")
|
||||||
@ -414,6 +415,7 @@ func TestLdFlagsFullTemplate(t *testing.T) {
|
|||||||
assert.Contains(t, flags, fmt.Sprintf("-X main.date=%d", time.Now().Year()))
|
assert.Contains(t, flags, fmt.Sprintf("-X main.date=%d", time.Now().Year()))
|
||||||
assert.Contains(t, flags, fmt.Sprintf("-X main.time=%d", time.Now().Year()))
|
assert.Contains(t, flags, fmt.Sprintf("-X main.time=%d", time.Now().Year()))
|
||||||
assert.Contains(t, flags, `-X "main.foo=123"`)
|
assert.Contains(t, flags, `-X "main.foo=123"`)
|
||||||
|
assert.Contains(t, flags, `-X main.arch=amd64`)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInvalidTemplate(t *testing.T) {
|
func TestInvalidTemplate(t *testing.T) {
|
||||||
@ -437,19 +439,39 @@ func TestProcessFlags(t *testing.T) {
|
|||||||
}
|
}
|
||||||
ctx.Git.CurrentTag = "5.6.7"
|
ctx.Git.CurrentTag = "5.6.7"
|
||||||
|
|
||||||
|
var artifact = &artifact.Artifact{
|
||||||
|
Name: "name",
|
||||||
|
Goos: "darwin",
|
||||||
|
Goarch: "amd64",
|
||||||
|
Goarm: "7",
|
||||||
|
Extra: map[string]interface{}{
|
||||||
|
"Binary": "binary",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
var source = []string{
|
var source = []string{
|
||||||
"{{.Version}}",
|
|
||||||
"flag",
|
"flag",
|
||||||
|
"{{.Version}}",
|
||||||
|
"{{.Os}}",
|
||||||
|
"{{.Arch}}",
|
||||||
|
"{{.Arm}}",
|
||||||
|
"{{.Binary}}",
|
||||||
|
"{{.ArtifactName}}",
|
||||||
}
|
}
|
||||||
|
|
||||||
var expected = []string{
|
var expected = []string{
|
||||||
"-testflag=1.2.3",
|
|
||||||
"-testflag=flag",
|
"-testflag=flag",
|
||||||
|
"-testflag=1.2.3",
|
||||||
|
"-testflag=darwin",
|
||||||
|
"-testflag=amd64",
|
||||||
|
"-testflag=7",
|
||||||
|
"-testflag=binary",
|
||||||
|
"-testflag=name",
|
||||||
}
|
}
|
||||||
|
|
||||||
flags, err := processFlags(ctx, []string{}, source, "-testflag=")
|
flags, err := processFlags(ctx, artifact, []string{}, source, "-testflag=")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Len(t, flags, 2)
|
assert.Len(t, flags, 7)
|
||||||
assert.Equal(t, expected, flags)
|
assert.Equal(t, expected, flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -462,7 +484,7 @@ func TestProcessFlagsInvalid(t *testing.T) {
|
|||||||
|
|
||||||
var expected = `template: tmpl:1: unexpected "}" in operand`
|
var expected = `template: tmpl:1: unexpected "}" in operand`
|
||||||
|
|
||||||
flags, err := processFlags(ctx, []string{}, source, "-testflag=")
|
flags, err := processFlags(ctx, &artifact.Artifact{}, []string{}, source, "-testflag=")
|
||||||
assert.EqualError(t, err, expected)
|
assert.EqualError(t, err, expected)
|
||||||
assert.Nil(t, flags)
|
assert.Nil(t, flags)
|
||||||
}
|
}
|
||||||
@ -478,7 +500,6 @@ func TestJoinLdFlags(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
joinedLdFlags := joinLdFlags(test.input)
|
joinedLdFlags := joinLdFlags(test.input)
|
||||||
|
|
||||||
assert.Equal(t, joinedLdFlags, test.output)
|
assert.Equal(t, joinedLdFlags, test.output)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user