From 7910863ecdbaa5244c0522cc4f6bae34b1d6ca53 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Fri, 29 Dec 2017 11:47:13 -0200 Subject: [PATCH] refactor: improved name template Should keep the previous behavior of having binary == nametemplate --- internal/filenametemplate/template.go | 15 ++++++++---- internal/filenametemplate/template_test.go | 28 ++++++++++++++++++---- pipeline/archive/archive.go | 28 +++++++++++----------- pipeline/fpm/fpm.go | 2 +- pipeline/snapcraft/snapcraft.go | 2 +- 5 files changed, 49 insertions(+), 26 deletions(-) diff --git a/internal/filenametemplate/template.go b/internal/filenametemplate/template.go index 46d17acb4..d82adb09b 100644 --- a/internal/filenametemplate/template.go +++ b/internal/filenametemplate/template.go @@ -23,16 +23,21 @@ type Fields struct { } // NewFields returns a Fields instances filled with the data provided -func NewFields(ctx *context.Context, a artifact.Artifact, replacements map[string]string) Fields { +func NewFields(ctx *context.Context, replacements map[string]string, artifacts ...artifact.Artifact) Fields { + // This will fail if artifacts is empty - should never be though... + var binary = artifacts[0].Extra["Binary"] + if len(artifacts) > 1 { + binary = ctx.Config.ProjectName + } return Fields{ Env: ctx.Env, Version: ctx.Version, Tag: ctx.Git.CurrentTag, ProjectName: ctx.Config.ProjectName, - Binary: a.Extra["Binary"], - Os: replace(replacements, a.Goos), - Arch: replace(replacements, a.Goarch), - Arm: replace(replacements, a.Goarm), + Os: replace(replacements, artifacts[0].Goos), + Arch: replace(replacements, artifacts[0].Goarch), + Arm: replace(replacements, artifacts[0].Goarm), + Binary: binary, } } diff --git a/internal/filenametemplate/template_test.go b/internal/filenametemplate/template_test.go index 262bd0fd2..8a527cc9e 100644 --- a/internal/filenametemplate/template_test.go +++ b/internal/filenametemplate/template_test.go @@ -18,7 +18,7 @@ func TestTemplate(t *testing.T) { } ctx.Version = "1.0.0" ctx.Git.CurrentTag = "v1.0.0" - var fields = NewFields(ctx, artifact.Artifact{ + var artifact = artifact.Artifact{ Name: "not-this-binary", Goarch: "amd64", Goos: "linux", @@ -26,9 +26,8 @@ func TestTemplate(t *testing.T) { Extra: map[string]string{ "Binary": "binary", }, - }, map[string]string{ - "linux": "Linux", - }) + } + var fields = NewFields(ctx, map[string]string{"linux": "Linux"}, artifact) for expect, tmpl := range map[string]string{ "bar": "{{.Env.FOO}}", "Linux": "{{.Os}}", @@ -50,9 +49,28 @@ func TestTemplate(t *testing.T) { } } +func TestNewFields(t *testing.T) { + var ctx = context.New(config.Project{ + ProjectName: "proj", + }) + ctx.Version = "1.0.0" + ctx.Git.CurrentTag = "v1.0.0" + var artifact = artifact.Artifact{ + Name: "not-this-binary", + Goarch: "amd64", + Goos: "linux", + Goarm: "6", + Extra: map[string]string{ + "Binary": "binary", + }, + } + var fields = NewFields(ctx, map[string]string{}, artifact, artifact) + assert.Equal(t, "proj", fields.Binary) +} + func TestInvalidTemplate(t *testing.T) { var ctx = context.New(config.Project{}) - var fields = NewFields(ctx, artifact.Artifact{}, map[string]string{}) + var fields = NewFields(ctx, map[string]string{}, artifact.Artifact{}) result, err := Apply("{{.Foo}", fields) assert.Empty(t, result) assert.EqualError(t, err, `template: {{.Foo}:1: unexpected "}" in operand`) diff --git a/pipeline/archive/archive.go b/pipeline/archive/archive.go index 5e78942b1..63d1380c3 100644 --- a/pipeline/archive/archive.go +++ b/pipeline/archive/archive.go @@ -75,11 +75,11 @@ func (Pipe) Run(ctx *context.Context) error { return g.Wait() } -func create(ctx *context.Context, artifacts []artifact.Artifact) error { - var format = packageFormat(ctx, artifacts[0].Goos) +func create(ctx *context.Context, binaries []artifact.Artifact) error { + var format = packageFormat(ctx, binaries[0].Goos) folder, err := filenametemplate.Apply( ctx.Config.Archive.NameTemplate, - filenametemplate.NewFields(ctx, artifacts[0], ctx.Config.Archive.Replacements), + filenametemplate.NewFields(ctx, ctx.Config.Archive.Replacements, binaries...), ) if err != nil { return err @@ -103,7 +103,7 @@ func create(ctx *context.Context, artifacts []artifact.Artifact) error { return fmt.Errorf("failed to add %s to the archive: %s", f, err.Error()) } } - for _, binary := range artifacts { + for _, binary := range binaries { if err := a.Add(wrap(ctx, binary.Name, folder), binary.Path); err != nil { return fmt.Errorf("failed to add %s -> %s to the archive: %s", binary.Path, binary.Name, err.Error()) } @@ -112,24 +112,24 @@ func create(ctx *context.Context, artifacts []artifact.Artifact) error { Type: artifact.UploadableArchive, Name: folder + "." + format, Path: archivePath, - Goos: artifacts[0].Goos, - Goarch: artifacts[0].Goarch, - Goarm: artifacts[0].Goarm, + Goos: binaries[0].Goos, + Goarch: binaries[0].Goarch, + Goarm: binaries[0].Goarm, }) return nil } -func skip(ctx *context.Context, artifacts []artifact.Artifact) error { - for _, a := range artifacts { - log.WithField("binary", a.Name).Info("skip archiving") - var fields = filenametemplate.NewFields(ctx, a, ctx.Config.Archive.Replacements) +func skip(ctx *context.Context, binaries []artifact.Artifact) error { + for _, binary := range binaries { + log.WithField("binary", binary.Name).Info("skip archiving") + var fields = filenametemplate.NewFields(ctx, ctx.Config.Archive.Replacements, binary) name, err := filenametemplate.Apply(ctx.Config.Archive.NameTemplate, fields) if err != nil { return err } - a.Type = artifact.UploadableBinary - a.Name = name + a.Extra["Ext"] - ctx.Artifacts.Add(a) + binary.Type = artifact.UploadableBinary + binary.Name = name + binary.Extra["Ext"] + ctx.Artifacts.Add(binary) } return nil } diff --git a/pipeline/fpm/fpm.go b/pipeline/fpm/fpm.go index e111af04f..df6888305 100644 --- a/pipeline/fpm/fpm.go +++ b/pipeline/fpm/fpm.go @@ -88,7 +88,7 @@ func doRun(ctx *context.Context) error { func create(ctx *context.Context, format, arch string, binaries []artifact.Artifact) error { name, err := filenametemplate.Apply( ctx.Config.FPM.NameTemplate, - filenametemplate.NewFields(ctx, binaries[0], ctx.Config.FPM.Replacements), + filenametemplate.NewFields(ctx, ctx.Config.FPM.Replacements, binaries...), ) if err != nil { return err diff --git a/pipeline/snapcraft/snapcraft.go b/pipeline/snapcraft/snapcraft.go index 947ddba67..5b7f5616c 100644 --- a/pipeline/snapcraft/snapcraft.go +++ b/pipeline/snapcraft/snapcraft.go @@ -102,7 +102,7 @@ func create(ctx *context.Context, arch string, binaries []artifact.Artifact) err var log = log.WithField("arch", arch) folder, err := filenametemplate.Apply( ctx.Config.Snapcraft.NameTemplate, - filenametemplate.NewFields(ctx, binaries[0], ctx.Config.Snapcraft.Replacements), + filenametemplate.NewFields(ctx, ctx.Config.Snapcraft.Replacements, binaries...), ) if err != nil { return err