1
1
Fork 0
mirror of https://github.com/goreleaser/nfpm synced 2024-05-13 03:16:20 +02:00

feat: custom packager configuration for rpm pkg (#409)

Co-authored-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax 2021-11-30 19:56:10 +01:00 committed by GitHub
parent 1de91949f5
commit 9570f5234f
Signed by: GitHub
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 47 additions and 1 deletions

View File

@ -185,6 +185,9 @@ func (c *Config) expandEnvVars() {
if apkPassphrase != "" {
c.Info.APK.Signature.KeyPassphrase = apkPassphrase
}
// RPM specific
c.Info.RPM.Packager = os.Expand(c.RPM.Packager, c.envMappingFunc)
}
// Info contains information about a single package.
@ -273,6 +276,7 @@ type RPM struct {
Summary string `yaml:"summary,omitempty" jsonschema:"title=package summary"`
Compression string `yaml:"compression,omitempty" jsonschema:"title=compression algorithm to be used,enum=gzip,enum=lzma,enum=xz,default=gzip"`
Signature RPMSignature `yaml:"signature,omitempty" jsonschema:"title=rpm signature"`
Packager string `yaml:"packager,omitempty" jsonschema:"title=organization that actually packaged the software"`
}
// RPMScripts represents scripts only available on RPM packages.

View File

@ -244,6 +244,7 @@ func TestOptionsFromEnvironment(t *testing.T) {
release = "3"
version = "1.0.0"
vendor = "GoReleaser"
packager = "nope"
)
t.Run("version", func(t *testing.T) {
@ -292,6 +293,14 @@ func TestOptionsFromEnvironment(t *testing.T) {
require.Equal(t, rpmPass, info.RPM.Signature.KeyPassphrase)
require.Equal(t, apkPass, info.APK.Signature.KeyPassphrase)
})
t.Run("packager", func(t *testing.T) {
os.Clearenv()
os.Setenv("PACKAGER", packager)
info, err := nfpm.Parse(strings.NewReader("name: foo\nrpm:\n packager: $PACKAGER"))
require.NoError(t, err)
require.Equal(t, packager, info.RPM.Packager)
})
}
func TestOverrides(t *testing.T) {

View File

@ -228,7 +228,7 @@ func buildRPMMeta(info *nfpm.Info) (*rpmpack.RPMMetaData, error) {
Licence: info.License,
URL: info.Homepage,
Vendor: info.Vendor,
Packager: info.Maintainer,
Packager: defaultTo(info.RPM.Packager, info.Maintainer),
Group: info.RPM.Group,
Provides: provides,
Recommends: recommends,

View File

@ -183,6 +183,33 @@ func TestRPMSummary(t *testing.T) {
require.Equal(t, customSummary, summary)
}
func TestRPMPackager(t *testing.T) {
f, err := ioutil.TempFile("", "test.rpm")
require.NoError(t, err)
customPackager := "GoReleaser <staff@goreleaser.com>"
info := exampleInfo()
info.RPM.Group = "Unspecified"
info.RPM.Packager = customPackager
require.NoError(t, Default.Package(info, f))
file, err := os.OpenFile(f.Name(), os.O_RDONLY, 0o600) //nolint:gosec
require.NoError(t, err)
defer func() {
f.Close()
file.Close()
err = os.Remove(file.Name())
require.NoError(t, err)
}()
rpm, err := rpmutils.ReadRpm(file)
require.NoError(t, err)
packager, err := rpm.Header.GetString(rpmutils.PACKAGER)
require.NoError(t, err)
require.Equal(t, customPackager, packager)
}
func TestWithRPMTags(t *testing.T) {
f, err := ioutil.TempFile("", "test.rpm")
require.NoError(t, err)

View File

@ -233,6 +233,12 @@ rpm:
# description, but can be explicitly provided here.
summary: Explicit Summary for Sample Package
# The packager is used to identify the organization that actually packaged
# the software, as opposed to the author of the software.
# `maintainer` will be used as fallback if not specified.
# This will expand any env var you set in the field, eg packager: ${PACKAGER}
packager: GoReleaser <staff@goreleaser.com>
# Compression algorithm (gzip (default), lzma or xz).
compression: lzma