Skip to content

Commit

Permalink
feat(nfpm): allow to change package name (#1244)
Browse files Browse the repository at this point in the history
* feat: allow to change package name

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* fix: typo

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
  • Loading branch information
caarlos0 committed Nov 15, 2019
1 parent 1cf86b8 commit 0953c2f
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 33 deletions.
15 changes: 11 additions & 4 deletions internal/pipe/nfpm/nfpm.go
Expand Up @@ -50,8 +50,15 @@ func (Pipe) Default(ctx *context.Context) error {
if fpm.Bindir == "" {
fpm.Bindir = "/usr/local/bin"
}
if fpm.NameTemplate == "" {
fpm.NameTemplate = defaultNameTemplate
if fpm.PackageName == "" {
fpm.PackageName = ctx.Config.ProjectName
}
if fpm.NameTemplate != "" && fpm.FileNameTemplate == "" {
deprecate.Notice("nfpms.name_template")
fpm.FileNameTemplate = fpm.NameTemplate
}
if fpm.FileNameTemplate == "" {
fpm.FileNameTemplate = defaultNameTemplate
}
if fpm.Files == nil {
fpm.Files = map[string]string{}
Expand Down Expand Up @@ -125,7 +132,7 @@ func create(ctx *context.Context, fpm config.NFPM, format, arch string, binaries
}
name, err := tmpl.New(ctx).
WithArtifact(binaries[0], overridden.Replacements).
Apply(overridden.NameTemplate)
Apply(overridden.FileNameTemplate)
if err != nil {
return err
}
Expand All @@ -145,7 +152,7 @@ func create(ctx *context.Context, fpm config.NFPM, format, arch string, binaries
var info = &nfpm.Info{
Arch: arch,
Platform: "linux",
Name: ctx.Config.ProjectName,
Name: fpm.PackageName,
Version: ctx.Version,
Section: "",
Priority: "",
Expand Down
64 changes: 48 additions & 16 deletions internal/pipe/nfpm/nfpm_test.go
Expand Up @@ -40,8 +40,9 @@ func TestRunPipeInvalidFormat(t *testing.T) {
Formats: []string{"nope"},
Builds: []string{"foo"},
NFPMOverridables: config.NFPMOverridables{
NameTemplate: defaultNameTemplate,
Files: map[string]string{},
PackageName: "foo",
FileNameTemplate: defaultNameTemplate,
Files: map[string]string{},
},
},
},
Expand Down Expand Up @@ -90,12 +91,13 @@ func TestRunPipe(t *testing.T) {
Vendor: "asdf",
Homepage: "https://goreleaser.github.io",
NFPMOverridables: config.NFPMOverridables{
NameTemplate: defaultNameTemplate,
Dependencies: []string{"make"},
Recommends: []string{"svn"},
Suggests: []string{"bzr"},
Conflicts: []string{"git"},
EmptyFolders: []string{"/var/log/foobar"},
FileNameTemplate: defaultNameTemplate,
PackageName: "foo",
Dependencies: []string{"make"},
Recommends: []string{"svn"},
Suggests: []string{"bzr"},
Conflicts: []string{"git"},
EmptyFolders: []string{"/var/log/foobar"},
Files: map[string]string{
"./testdata/testfile.txt": "/usr/share/testfile.txt",
},
Expand Down Expand Up @@ -148,9 +150,12 @@ func TestInvalidNameTemplate(t *testing.T) {
Config: config.Project{
NFPMs: []config.NFPM{
{
NFPMOverridables: config.NFPMOverridables{NameTemplate: "{{.Foo}"},
Formats: []string{"deb"},
Builds: []string{"default"},
NFPMOverridables: config.NFPMOverridables{
PackageName: "foo",
FileNameTemplate: "{{.Foo}",
},
Formats: []string{"deb"},
Builds: []string{"default"},
},
},
},
Expand Down Expand Up @@ -206,6 +211,7 @@ func TestCreateFileDoesntExist(t *testing.T) {
Formats: []string{"deb", "rpm"},
Builds: []string{"default"},
NFPMOverridables: config.NFPMOverridables{
PackageName: "foo",
Files: map[string]string{
"testdata/testfile.txt": "/var/lib/test/testfile.txt",
},
Expand Down Expand Up @@ -263,7 +269,8 @@ func TestInvalidConfig(t *testing.T) {
func TestDefault(t *testing.T) {
var ctx = &context.Context{
Config: config.Project{
NFPMs: []config.NFPM{},
ProjectName: "foobar",
NFPMs: []config.NFPM{},
Builds: []config.Build{
{ID: "foo"},
{ID: "bar"},
Expand All @@ -273,7 +280,8 @@ func TestDefault(t *testing.T) {
require.NoError(t, Pipe{}.Default(ctx))
require.Equal(t, "/usr/local/bin", ctx.Config.NFPMs[0].Bindir)
require.Equal(t, []string{"foo", "bar"}, ctx.Config.NFPMs[0].Builds)
require.Equal(t, defaultNameTemplate, ctx.Config.NFPMs[0].NameTemplate)
require.Equal(t, defaultNameTemplate, ctx.Config.NFPMs[0].FileNameTemplate)
require.Equal(t, ctx.Config.ProjectName, ctx.Config.NFPMs[0].PackageName)
}

func TestDefaultDeprecate(t *testing.T) {
Expand All @@ -292,10 +300,10 @@ func TestDefaultDeprecate(t *testing.T) {
require.Equal(t, "/usr/local/bin", ctx.Config.NFPMs[0].Bindir)
require.Equal(t, []string{"deb"}, ctx.Config.NFPMs[0].Formats)
require.Equal(t, []string{"foo", "bar"}, ctx.Config.NFPMs[0].Builds)
require.Equal(t, defaultNameTemplate, ctx.Config.NFPMs[0].NameTemplate)
require.Equal(t, defaultNameTemplate, ctx.Config.NFPMs[0].FileNameTemplate)
}

func TestDefaultSet(t *testing.T) {
func TestDefaultDeprecated(t *testing.T) {
var ctx = &context.Context{
Config: config.Project{
Builds: []config.Build{
Expand All @@ -315,7 +323,31 @@ func TestDefaultSet(t *testing.T) {
}
require.NoError(t, Pipe{}.Default(ctx))
require.Equal(t, "/bin", ctx.Config.NFPMs[0].Bindir)
require.Equal(t, "foo", ctx.Config.NFPMs[0].NameTemplate)
require.Equal(t, "foo", ctx.Config.NFPMs[0].FileNameTemplate)
require.Equal(t, []string{"foo"}, ctx.Config.NFPMs[0].Builds)
}

func TestDefaultSet(t *testing.T) {
var ctx = &context.Context{
Config: config.Project{
Builds: []config.Build{
{ID: "foo"},
{ID: "bar"},
},
NFPMs: []config.NFPM{
{
Builds: []string{"foo"},
Bindir: "/bin",
NFPMOverridables: config.NFPMOverridables{
FileNameTemplate: "foo",
},
},
},
},
}
require.NoError(t, Pipe{}.Default(ctx))
require.Equal(t, "/bin", ctx.Config.NFPMs[0].Bindir)
require.Equal(t, "foo", ctx.Config.NFPMs[0].FileNameTemplate)
require.Equal(t, []string{"foo"}, ctx.Config.NFPMs[0].Builds)
}

Expand Down
24 changes: 13 additions & 11 deletions pkg/config/config.go
Expand Up @@ -211,17 +211,19 @@ type NFPMScripts struct {

// NFPMOverridables is used to specify per package format settings
type NFPMOverridables struct {
NameTemplate string `yaml:"name_template,omitempty"`
Epoch string `yaml:"epoch,omitempty"`
Replacements map[string]string `yaml:",omitempty"`
Dependencies []string `yaml:",omitempty"`
Recommends []string `yaml:",omitempty"`
Suggests []string `yaml:",omitempty"`
Conflicts []string `yaml:",omitempty"`
EmptyFolders []string `yaml:"empty_folders,omitempty"`
Files map[string]string `yaml:",omitempty"`
ConfigFiles map[string]string `yaml:"config_files,omitempty"`
Scripts NFPMScripts `yaml:"scripts,omitempty"`
FileNameTemplate string `yaml:"file_name_template,omitempty"`
PackageName string `yaml:"package_name,omitempty"`
NameTemplate string `yaml:"name_template,omitempty"` // deprecated
Epoch string `yaml:"epoch,omitempty"`
Replacements map[string]string `yaml:",omitempty"`
Dependencies []string `yaml:",omitempty"`
Recommends []string `yaml:",omitempty"`
Suggests []string `yaml:",omitempty"`
Conflicts []string `yaml:",omitempty"`
EmptyFolders []string `yaml:"empty_folders,omitempty"`
Files map[string]string `yaml:",omitempty"`
ConfigFiles map[string]string `yaml:"config_files,omitempty"`
Scripts NFPMScripts `yaml:"scripts,omitempty"`
}

// Sign config
Expand Down
21 changes: 21 additions & 0 deletions www/content/deprecations.md
Expand Up @@ -39,6 +39,27 @@ to this:
-->

### nfpms.name_template

> since 2019-11-15
The `name_template` field was deprecated in favor of a more clear one,
`file_name_template`.

Change this:

```yaml
nfpms:
- name_template: foo
```

to this:

```yaml
nfpms:
- file_name_template: foo
```


### blob

Expand Down
9 changes: 7 additions & 2 deletions www/content/nfpm.md
Expand Up @@ -18,9 +18,14 @@ nfpms:
# ID of the nfpm config, must be unique.
# Defaults to "default".
id: foo
# You can change the name of the package.

# Name of the package.
# Defaults to `ProjectName`.
package_name: foo

# You can change the file name of the package.
# Default: `{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}`
name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}"
file_name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}"

# Build IDs for the builds you want to create NFPM packages for.
# Defaults to all builds.
Expand Down

0 comments on commit 0953c2f

Please sign in to comment.