1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-03-11 14:39:28 +02:00

feat: remove deprecated replacements (#4075)

since this will be a late, big release, let's remove the deprecated
stuff that expired

---------

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
This commit is contained in:
Carlos Alexandro Becker 2023-06-06 11:46:02 -03:00 committed by GitHub
parent 2e2bde5090
commit 66cee9493c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 86 additions and 238 deletions

View File

@ -146,20 +146,10 @@ type command struct {
// Those variables can be replaced by the given context, goos, goarch, goarm and more.
func resolveCommand(ctx *context.Context, publisher config.Publisher, artifact *artifact.Artifact) (*command, error) {
var err error
replacements := make(map[string]string)
// TODO: Replacements should be associated only with relevant artifacts/archives
// this is pretty much all wrong and will be removed soon.
archives := ctx.Config.Archives
if len(archives) > 0 {
replacements = archives[0].Replacements
}
dir := publisher.Dir
// nolint:staticcheck
tpl := tmpl.New(ctx).
WithArtifactReplacements(artifact, replacements)
tpl := tmpl.New(ctx).WithArtifact(artifact)
if dir != "" {
dir, err = tpl.Apply(dir)
if err != nil {

View File

@ -16,13 +16,6 @@ import (
func TestExecute(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
ProjectName: "blah",
Archives: []config.Archive{
{
Replacements: map[string]string{
"linux": "Linux",
},
},
},
Env: []string{
"TEST_A_SECRET=x",
"TEST_A_USERNAME=u2",

View File

@ -216,7 +216,7 @@ func uploadAsset(ctx *context.Context, upload *config.Upload, artifact *artifact
secret := getPassword(ctx, upload, kind)
// Generate the target url
targetURL, err := resolveTargetTemplate(ctx, upload, artifact)
targetURL, err := tmpl.New(ctx).WithArtifact(artifact).Apply(upload.Target)
if err != nil {
return fmt.Errorf("%s: %s: error while building target URL: %w", upload.Name, kind, err)
}
@ -241,7 +241,7 @@ func uploadAsset(ctx *context.Context, upload *config.Upload, artifact *artifact
headers := map[string]string{}
if upload.CustomHeaders != nil {
for name, value := range upload.CustomHeaders {
resolvedValue, err := resolveHeaderTemplate(ctx, upload, artifact, value)
resolvedValue, err := tmpl.New(ctx).WithArtifact(artifact).Apply(value)
if err != nil {
return fmt.Errorf("%s: %s: failed to resolve custom_headers template: %w", upload.Name, kind, err)
}
@ -361,34 +361,3 @@ func executeHTTPRequest(ctx *context.Context, upload *config.Upload, req *h.Requ
return resp, err
}
// resolveTargetTemplate returns the resolved target template with replaced variables
// Those variables can be replaced by the given context, goos, goarch, goarm and more.
func resolveTargetTemplate(ctx *context.Context, upload *config.Upload, artifact *artifact.Artifact) (string, error) {
replacements := map[string]string{}
if upload.Mode == ModeBinary {
// TODO: multiple archives here
// will be removed soon anyway
replacements = ctx.Config.Archives[0].Replacements
}
// nolint:staticcheck
return tmpl.New(ctx).
WithArtifactReplacements(artifact, replacements).
Apply(upload.Target)
}
// resolveHeaderTemplate returns the resolved custom header template with replaced variables
// Those variables can be replaced by the given context, goos, goarch, goarm and more.
func resolveHeaderTemplate(ctx *context.Context, upload *config.Upload, artifact *artifact.Artifact, headerValue string) (string, error) {
replacements := map[string]string{}
if upload.Mode == ModeBinary {
// TODO: multiple archives here
// will be removed soon anyway
replacements = ctx.Config.Archives[0].Replacements
}
// nolint:staticcheck
return tmpl.New(ctx).
WithArtifactReplacements(artifact, replacements).
Apply(headerValue)
}

View File

@ -229,13 +229,6 @@ func TestUpload(t *testing.T) {
}
ctx := testctx.NewWithCfg(config.Project{
ProjectName: "blah",
Archives: []config.Archive{
{
Replacements: map[string]string{
"linux": "Linux",
},
},
},
Env: []string{
"TEST_A_SECRET=x",
"TEST_A_USERNAME=u2",
@ -397,7 +390,7 @@ func TestUpload(t *testing.T) {
TrustedCerts: cert(s),
}
},
checks(check{"/blah/2.1.0/Linux/amd64/a.ubi", "u2", "x", content, map[string]string{}}),
checks(check{"/blah/2.1.0/linux/amd64/a.ubi", "u2", "x", content, map[string]string{}}),
},
{
"binary_with_ids", true, true, false, false,

View File

@ -78,9 +78,6 @@ func (Pipe) Default(ctx *context.Context) error {
archive.NameTemplate = defaultBinaryNameTemplate
}
}
if len(archive.Replacements) != 0 {
deprecate.Notice(ctx, "archives.replacements")
}
ids.Inc(archive.ID)
}
return ids.Validate()
@ -141,17 +138,19 @@ func checkArtifacts(artifacts map[string][]*artifact.Artifact) error {
}
func createMeta(ctx *context.Context, arch config.Archive) error {
return doCreate(ctx, arch, nil, arch.Format, tmpl.New(ctx))
return doCreate(ctx, arch, nil, arch.Format)
}
func create(ctx *context.Context, arch config.Archive, binaries []*artifact.Artifact) error {
// nolint:staticcheck
template := tmpl.New(ctx).WithArtifactReplacements(binaries[0], arch.Replacements)
format := packageFormat(arch, binaries[0].Goos)
return doCreate(ctx, arch, binaries, format, template)
return doCreate(ctx, arch, binaries, format)
}
func doCreate(ctx *context.Context, arch config.Archive, binaries []*artifact.Artifact, format string, template *tmpl.Template) error {
func doCreate(ctx *context.Context, arch config.Archive, binaries []*artifact.Artifact, format string) error {
template := tmpl.New(ctx)
if len(binaries) > 0 {
template = template.WithArtifact(binaries[0])
}
folder, err := template.Apply(arch.NameTemplate)
if err != nil {
return err
@ -253,10 +252,7 @@ func wrapFolder(a config.Archive) string {
func skip(ctx *context.Context, archive config.Archive, binaries []*artifact.Artifact) error {
for _, binary := range binaries {
// nolint:staticcheck
name, err := tmpl.New(ctx).
WithArtifactReplacements(binary, archive.Replacements).
Apply(archive.NameTemplate)
name, err := tmpl.New(ctx).WithArtifact(binary).Apply(archive.NameTemplate)
if err != nil {
return err
}

View File

@ -678,9 +678,6 @@ func TestRunPipeWrap(t *testing.T) {
NameTemplate: "foo",
WrapInDirectory: "foo_{{ .Os }}",
Format: "tar.gz",
Replacements: map[string]string{
"darwin": "macOS",
},
Files: []config.File{
{Source: "README.*"},
},
@ -704,11 +701,11 @@ func TestRunPipeWrap(t *testing.T) {
archives := ctx.Artifacts.Filter(artifact.ByType(artifact.UploadableArchive)).List()
require.Len(t, archives, 1)
require.Equal(t, "foo_macOS", artifact.ExtraOr(*archives[0], artifact.ExtraWrappedIn, ""))
require.Equal(t, "foo_darwin", artifact.ExtraOr(*archives[0], artifact.ExtraWrappedIn, ""))
require.ElementsMatch(
t,
[]string{"foo_macOS/README.md", "foo_macOS/mybin"},
[]string{"foo_darwin/README.md", "foo_darwin/mybin"},
testlib.LsArchive(t, filepath.Join(dist, "foo.tar.gz"), "tar.gz"),
)
}

View File

@ -59,14 +59,6 @@ func (Pipe) Default(ctx *context.Context) error {
if fpm.Maintainer == "" {
deprecate.NoticeCustom(ctx, "nfpms.maintainer", "`{{ .Property }}` should always be set, check {{ .URL }} for more info")
}
if len(fpm.Replacements) != 0 {
deprecate.Notice(ctx, "nfpms.replacements")
}
for _, rfpm := range fpm.Overrides {
if len(rfpm.Replacements) != 0 {
deprecate.Notice(ctx, "nfpms.replacements")
}
}
ids.Inc(fpm.ID)
}
@ -184,9 +176,8 @@ func create(ctx *context.Context, fpm config.NFPM, format string, binaries []*ar
return err
}
// nolint:staticcheck
t := tmpl.New(ctx).
WithArtifactReplacements(binaries[0], overridden.Replacements).
WithArtifact(binaries[0]).
WithExtraFields(tmpl.Fields{
"Release": fpm.Release,
"Epoch": fpm.Epoch,

View File

@ -33,42 +33,6 @@ func TestRunPipeNoFormats(t *testing.T) {
testlib.AssertSkipped(t, Pipe{}.Run(ctx))
}
func TestDefaultsDeprecated(t *testing.T) {
t.Run("replacements", func(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
NFPMs: []config.NFPM{
{
NFPMOverridables: config.NFPMOverridables{
Replacements: map[string]string{
"linux": "Tux",
},
},
},
},
})
require.NoError(t, Pipe{}.Default(ctx))
require.True(t, ctx.Deprecated)
})
t.Run("replacements overrides", func(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
NFPMs: []config.NFPM{
{
Overrides: map[string]config.NFPMOverridables{
"apk": {
Replacements: map[string]string{
"linux": "Tux",
},
},
},
},
},
})
require.NoError(t, Pipe{}.Default(ctx))
require.True(t, ctx.Deprecated)
})
}
func TestRunPipeError(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
Dist: t.TempDir(),
@ -206,9 +170,6 @@ func TestRunPipe(t *testing.T) {
Destination: "/etc/folder",
},
},
Replacements: map[string]string{
"linux": "Tux",
},
},
},
},
@ -304,7 +265,7 @@ func TestRunPipe(t *testing.T) {
}
if pkg.Goos == "linux" {
require.Equal(t, "foo_1.0.0_Tux_"+arch+"-10-20"+ext, pkg.Name)
require.Equal(t, "foo_1.0.0_linux_"+arch+"-10-20"+ext, pkg.Name)
} else {
require.Equal(t, "foo_1.0.0_ios_arm64-10-20"+ext, pkg.Name)
}
@ -1256,9 +1217,6 @@ func TestMeta(t *testing.T) {
Type: "dir",
},
},
Replacements: map[string]string{
"linux": "Tux",
},
},
},
},
@ -1283,7 +1241,7 @@ func TestMeta(t *testing.T) {
for _, pkg := range packages {
format := pkg.Format()
require.NotEmpty(t, format)
require.Equal(t, pkg.Name, "foo_1.0.0_Tux_"+pkg.Goarch+"-10-20."+format)
require.Equal(t, pkg.Name, "foo_1.0.0_linux_"+pkg.Goarch+"-10-20."+format)
require.Equal(t, pkg.ID(), "someid")
require.ElementsMatch(t, []string{
"/var/log/foobar",

View File

@ -13,7 +13,6 @@ import (
"github.com/caarlos0/log"
"github.com/goreleaser/goreleaser/internal/artifact"
"github.com/goreleaser/goreleaser/internal/deprecate"
"github.com/goreleaser/goreleaser/internal/gio"
"github.com/goreleaser/goreleaser/internal/ids"
"github.com/goreleaser/goreleaser/internal/pipe"
@ -132,9 +131,6 @@ func (Pipe) Default(ctx *context.Context) error {
snap.Builds = append(snap.Builds, b.ID)
}
}
if len(snap.Replacements) != 0 {
deprecate.Notice(ctx, "snapcrafts.replacements")
}
ids.Inc(snap.ID)
}
return ids.Validate()
@ -224,10 +220,7 @@ func (Pipe) Publish(ctx *context.Context) error {
func create(ctx *context.Context, snap config.Snapcraft, arch string, binaries []*artifact.Artifact) error {
log := log.WithField("arch", arch)
// nolint:staticcheck
folder, err := tmpl.New(ctx).
WithArtifactReplacements(binaries[0], snap.Replacements).
Apply(snap.NameTemplate)
folder, err := tmpl.New(ctx).WithArtifact(binaries[0]).Apply(snap.NameTemplate)
if err != nil {
return err
}

View File

@ -156,22 +156,6 @@ func (t *Template) WithExtraFields(f Fields) *Template {
return t
}
// WithArtifactReplacements populates Fields from the artifact and replacements.
//
// Deprecated: use WithArtifact instead.
func (t *Template) WithArtifactReplacements(a *artifact.Artifact, replacements map[string]string) *Template {
t.fields[osKey] = replace(replacements, a.Goos)
t.fields[arch] = replace(replacements, a.Goarch)
t.fields[arm] = replace(replacements, a.Goarm)
t.fields[mips] = replace(replacements, a.Gomips)
t.fields[amd64] = replace(replacements, a.Goamd64)
t.fields[binary] = artifact.ExtraOr(*a, binary, t.fields[projectName].(string))
t.fields[artifactName] = a.Name
t.fields[artifactExt] = artifact.ExtraOr(*a, artifact.ExtraExt, "")
t.fields[artifactPath] = a.Path
return t
}
// WithArtifact populates Fields from the artifact.
func (t *Template) WithArtifact(a *artifact.Artifact) *Template {
t.fields[osKey] = a.Goos
@ -280,15 +264,6 @@ func (t *Template) ApplySingleEnvOnly(s string) (string, error) {
return out.String(), err
}
// deprecated: will be removed soon.
func replace(replacements map[string]string, original string) string {
result := replacements[original]
if result == "" {
return original
}
return result
}
func incMajor(v string) string {
return prefix(v) + semver.MustParse(v).IncMajor().String()
}

View File

@ -51,7 +51,7 @@ func TestWithArtifact(t *testing.T) {
)
for expect, tmpl := range map[string]string{
"bar": "{{.Env.FOO}}",
"Linux": "{{.Os}}",
"linux": "{{.Os}}",
"amd64": "{{.Arch}}",
"6": "{{.Arm}}",
"softfloat": "{{.Mips}}",
@ -99,7 +99,7 @@ func TestWithArtifact(t *testing.T) {
expect := expect
t.Run(expect, func(t *testing.T) {
t.Parallel()
result, err := New(ctx).WithArtifactReplacements(
result, err := New(ctx).WithArtifact(
&artifact.Artifact{
Name: "not-this-binary",
Path: "/tmp/foo.exe",
@ -113,7 +113,6 @@ func TestWithArtifact(t *testing.T) {
artifact.ExtraExt: ".exe",
},
},
map[string]string{"linux": "Linux"},
).Apply(tmpl)
require.NoError(t, err)
require.Equal(t, expect, result)
@ -122,13 +121,13 @@ func TestWithArtifact(t *testing.T) {
t.Run("artifact without binary name", func(t *testing.T) {
t.Parallel()
result, err := New(ctx).WithArtifactReplacements(
result, err := New(ctx).WithArtifact(
&artifact.Artifact{
Name: "another-binary",
Goarch: "amd64",
Goos: "linux",
Goarm: "6",
}, map[string]string{},
},
).Apply("{{ .Binary }}")
require.NoError(t, err)
require.Equal(t, ctx.Config.ProjectName, result)

View File

@ -596,19 +596,18 @@ type UPX struct {
// Archive config used for the archive.
type Archive struct {
ID string `yaml:"id,omitempty" json:"id,omitempty"`
Builds []string `yaml:"builds,omitempty" json:"builds,omitempty"`
BuildsInfo FileInfo `yaml:"builds_info,omitempty" json:"builds_info,omitempty"`
NameTemplate string `yaml:"name_template,omitempty" json:"name_template,omitempty"`
Replacements map[string]string `yaml:"replacements,omitempty" json:"replacements,omitempty"` // Deprecated: use templates instead
Format string `yaml:"format,omitempty" json:"format,omitempty" jsonschema:"enum=tar,enum=tgz,enum=tar.gz,enum=zip,enum=gz,enum=tar.xz,enum=txz,enum=binary,default=tar.gz"`
FormatOverrides []FormatOverride `yaml:"format_overrides,omitempty" json:"format_overrides,omitempty"`
WrapInDirectory string `yaml:"wrap_in_directory,omitempty" json:"wrap_in_directory,omitempty" jsonschema:"oneof_type=string;boolean"`
StripParentBinaryFolder bool `yaml:"strip_parent_binary_folder,omitempty" json:"strip_parent_binary_folder,omitempty"`
RLCP bool `yaml:"rlcp,omitempty" json:"rlcp,omitempty"`
Files []File `yaml:"files,omitempty" json:"files,omitempty"`
Meta bool `yaml:"meta,omitempty" json:"meta,omitempty"`
AllowDifferentBinaryCount bool `yaml:"allow_different_binary_count,omitempty" json:"allow_different_binary_count,omitempty"`
ID string `yaml:"id,omitempty" json:"id,omitempty"`
Builds []string `yaml:"builds,omitempty" json:"builds,omitempty"`
BuildsInfo FileInfo `yaml:"builds_info,omitempty" json:"builds_info,omitempty"`
NameTemplate string `yaml:"name_template,omitempty" json:"name_template,omitempty"`
Format string `yaml:"format,omitempty" json:"format,omitempty" jsonschema:"enum=tar,enum=tgz,enum=tar.gz,enum=zip,enum=gz,enum=tar.xz,enum=txz,enum=binary,default=tar.gz"`
FormatOverrides []FormatOverride `yaml:"format_overrides,omitempty" json:"format_overrides,omitempty"`
WrapInDirectory string `yaml:"wrap_in_directory,omitempty" json:"wrap_in_directory,omitempty" jsonschema:"oneof_type=string;boolean"`
StripParentBinaryFolder bool `yaml:"strip_parent_binary_folder,omitempty" json:"strip_parent_binary_folder,omitempty"`
RLCP bool `yaml:"rlcp,omitempty" json:"rlcp,omitempty"`
Files []File `yaml:"files,omitempty" json:"files,omitempty"`
Meta bool `yaml:"meta,omitempty" json:"meta,omitempty"`
AllowDifferentBinaryCount bool `yaml:"allow_different_binary_count,omitempty" json:"allow_different_binary_count,omitempty"`
}
type ReleaseNotesMode string
@ -773,25 +772,24 @@ type NFPMArchLinux struct {
// NFPMOverridables is used to specify per package format settings.
type NFPMOverridables struct {
FileNameTemplate string `yaml:"file_name_template,omitempty" json:"file_name_template,omitempty"`
PackageName string `yaml:"package_name,omitempty" json:"package_name,omitempty"`
Epoch string `yaml:"epoch,omitempty" json:"epoch,omitempty"`
Release string `yaml:"release,omitempty" json:"release,omitempty"`
Prerelease string `yaml:"prerelease,omitempty" json:"prerelease,omitempty"`
VersionMetadata string `yaml:"version_metadata,omitempty" json:"version_metadata,omitempty"`
Replacements map[string]string `yaml:"replacements,omitempty" json:"replacements,omitempty"` // Deprecated: use templates instead
Dependencies []string `yaml:"dependencies,omitempty" json:"dependencies,omitempty"`
Recommends []string `yaml:"recommends,omitempty" json:"recommends,omitempty"`
Suggests []string `yaml:"suggests,omitempty" json:"suggests,omitempty"`
Conflicts []string `yaml:"conflicts,omitempty" json:"conflicts,omitempty"`
Replaces []string `yaml:"replaces,omitempty" json:"replaces,omitempty"`
Provides []string `yaml:"provides,omitempty" json:"provides,omitempty"`
Contents files.Contents `yaml:"contents,omitempty" json:"contents,omitempty"`
Scripts NFPMScripts `yaml:"scripts,omitempty" json:"scripts,omitempty"`
RPM NFPMRPM `yaml:"rpm,omitempty" json:"rpm,omitempty"`
Deb NFPMDeb `yaml:"deb,omitempty" json:"deb,omitempty"`
APK NFPMAPK `yaml:"apk,omitempty" json:"apk,omitempty"`
ArchLinux NFPMArchLinux `yaml:"archlinux,omitempty" json:"archlinux,omitempty"`
FileNameTemplate string `yaml:"file_name_template,omitempty" json:"file_name_template,omitempty"`
PackageName string `yaml:"package_name,omitempty" json:"package_name,omitempty"`
Epoch string `yaml:"epoch,omitempty" json:"epoch,omitempty"`
Release string `yaml:"release,omitempty" json:"release,omitempty"`
Prerelease string `yaml:"prerelease,omitempty" json:"prerelease,omitempty"`
VersionMetadata string `yaml:"version_metadata,omitempty" json:"version_metadata,omitempty"`
Dependencies []string `yaml:"dependencies,omitempty" json:"dependencies,omitempty"`
Recommends []string `yaml:"recommends,omitempty" json:"recommends,omitempty"`
Suggests []string `yaml:"suggests,omitempty" json:"suggests,omitempty"`
Conflicts []string `yaml:"conflicts,omitempty" json:"conflicts,omitempty"`
Replaces []string `yaml:"replaces,omitempty" json:"replaces,omitempty"`
Provides []string `yaml:"provides,omitempty" json:"provides,omitempty"`
Contents files.Contents `yaml:"contents,omitempty" json:"contents,omitempty"`
Scripts NFPMScripts `yaml:"scripts,omitempty" json:"scripts,omitempty"`
RPM NFPMRPM `yaml:"rpm,omitempty" json:"rpm,omitempty"`
Deb NFPMDeb `yaml:"deb,omitempty" json:"deb,omitempty"`
APK NFPMAPK `yaml:"apk,omitempty" json:"apk,omitempty"`
ArchLinux NFPMArchLinux `yaml:"archlinux,omitempty" json:"archlinux,omitempty"`
}
// SBOM config.
@ -865,10 +863,8 @@ type SnapcraftLayoutMetadata struct {
// Snapcraft config.
type Snapcraft struct {
NameTemplate string `yaml:"name_template,omitempty" json:"name_template,omitempty"`
Replacements map[string]string `yaml:"replacements,omitempty" json:"replacements,omitempty"` // Deprecated: use templates instead.
Publish bool `yaml:"publish,omitempty" json:"publish,omitempty"`
NameTemplate string `yaml:"name_template,omitempty" json:"name_template,omitempty"`
Publish bool `yaml:"publish,omitempty" json:"publish,omitempty"`
ID string `yaml:"id,omitempty" json:"id,omitempty"`
Builds []string `yaml:"builds,omitempty" json:"builds,omitempty"`
Name string `yaml:"name,omitempty" json:"name,omitempty"`

View File

@ -98,18 +98,16 @@ may have some extra fields:
| Key | Description |
| --------------- | -------------------------------------------- |
| `.Os` | `GOOS`[^archive-replacementes] |
| `.Arch` | `GOARCH`[^archive-replacementes] |
| `.Arm` | `GOARM`[^archive-replacementes] |
| `.Mips` | `GOMIPS`[^archive-replacementes] |
| `.Amd64` | `GOAMD64`[^archive-replacementes] |
| `.Os` | `GOOS` |
| `.Arch` | `GOARCH` |
| `.Arm` | `GOARM` |
| `.Mips` | `GOMIPS` |
| `.Amd64` | `GOAMD64` |
| `.Binary` | binary name |
| `.ArtifactName` | archive name |
| `.ArtifactPath` | absolute path to artifact |
| `.ArtifactExt` | binary extension (e.g. `.exe`). Since v1.11. |
[^archive-replacementes]: Might have been replaced by `archives.replacements`.
## nFPM extra fields
In the nFPM name template field, you can use those extra fields:

View File

@ -190,9 +190,33 @@ Same as [`archives.rlcp`](#archivesrlcp).
rlcp: true
```
### nfpms.maintainer
> since 2022-05-07 (v1.9.0)
nFPM will soon make mandatory setting the maintainer field.
=== "Before"
```yaml
nfpms:
- maintainer: ''
```
=== "After"
```yaml
nfpms:
- maintainer: 'Name <email>'
```
## Expired deprecation notices
The following options were deprecated in the past and were already removed.
### archives.replacements
> since 2022-11-24 (v1.14.0)
> since 2022-11-24 (v1.14.0), removed 2023-06-06 (v1.19.0)
The `replacements` will be removed soon from the archives section, as it was
never handled correctly when multiple archives were being used, and it also
@ -234,7 +258,7 @@ Notice that if you are using the `archives.name_template`, notice it also has a
### nfpms.replacements
> since 2022-11-24 (v1.14.0)
> since 2022-11-24 (v1.14.0), removed 2023-06-06 (v1.19.0)
The `replacements` will be removed soon from the nFPMs section.
@ -274,7 +298,7 @@ instead of custom templates.
### snapcrafts.replacements
> since 2022-11-24 (v1.14.0)
> since 2022-11-24 (v1.14.0), removed 2023-06-06 (v1.19.0)
The `replacements` will be removed soon from the Snapcrafts section.
@ -312,30 +336,6 @@ Those two configurations will yield the same results.
Generally speaking, is probably best to use `{{ .ConventionalFileName }}`
instead of custom templates.
### nfpms.maintainer
> since 2022-05-07 (v1.9.0)
nFPM will soon make mandatory setting the maintainer field.
=== "Before"
```yaml
nfpms:
- maintainer: ''
```
=== "After"
```yaml
nfpms:
- maintainer: 'Name <email>'
```
## Expired deprecation notices
The following options were deprecated in the past and were already removed.
### variables
> since 2022-01-20 (v1.4.0), removed 2023-05-01 (v1.18.0)