Skip to content

Commit 409b516

Browse files
authored
feat(rpm): properly handle optional fields (#809)
closes #619 Signed-off-by: Carlos Alexandro Becker <[email protected]>
1 parent ccfa2f4 commit 409b516

File tree

4 files changed

+68
-6
lines changed

4 files changed

+68
-6
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ require (
1111
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb
1212
github.com/caarlos0/go-rpmutils v0.2.1-0.20240105125627-01185134a559
1313
github.com/caarlos0/go-version v0.1.1
14-
github.com/google/rpmpack v0.6.0
14+
github.com/google/rpmpack v0.6.1-0.20240329070804-c2247cbb881a
1515
github.com/goreleaser/chglog v0.5.0
1616
github.com/goreleaser/fileglob v1.3.0
1717
github.com/invopop/jsonschema v0.12.0

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJA
6666
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
6767
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
6868
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
69-
github.com/google/rpmpack v0.6.0 h1:LoQuqlw6kHRwg25n3M0xtYrW+z2pTkR0ae1xx11hRw8=
70-
github.com/google/rpmpack v0.6.0/go.mod h1:uqVAUVQLq8UY2hCDfmJ/+rtO3aw7qyhc90rCVEabEfI=
69+
github.com/google/rpmpack v0.6.1-0.20240329070804-c2247cbb881a h1:JJBdjSfqSy3mnDT0940ASQFghwcZ4y4cb6ttjAoXqwE=
70+
github.com/google/rpmpack v0.6.1-0.20240329070804-c2247cbb881a/go.mod h1:uqVAUVQLq8UY2hCDfmJ/+rtO3aw7qyhc90rCVEabEfI=
7171
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
7272
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
7373
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=

rpm/rpm.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,13 @@ func buildRPMMeta(info *nfpm.Info) (*rpmpack.RPMMetaData, error) {
208208
if info.RPM.Compression == "" {
209209
info.RPM.Compression = "gzip:-1"
210210
}
211-
if epoch, err = strconv.ParseUint(defaultTo(info.Epoch, "0"), 10, 32); err != nil {
212-
return nil, err
211+
212+
if info.Epoch == "" {
213+
epoch = uint64(rpmpack.NoEpoch)
214+
} else {
215+
if epoch, err = strconv.ParseUint(info.Epoch, 10, 32); err != nil {
216+
return nil, err
217+
}
213218
}
214219
if provides, err = toRelation(info.Provides); err != nil {
215220
return nil, err

rpm/rpm_test.go

+58-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ func exampleInfo() *nfpm.Info {
2929
Priority: "extra",
3030
Maintainer: "Carlos A Becker <[email protected]>",
3131
Version: "1.0.0",
32+
Release: "1",
33+
Epoch: "0",
3234
Section: "default",
3335
Homepage: "http://carlosbecker.com",
3436
Vendor: "nope",
@@ -78,6 +80,7 @@ func exampleInfo() *nfpm.Info {
7880
PostRemove: "../testdata/scripts/postremove.sh",
7981
},
8082
RPM: nfpm.RPM{
83+
Group: "foo",
8184
Prefixes: []string{"/opt"},
8285
Scripts: nfpm.RPMScripts{
8386
PreTrans: "../testdata/scripts/pretrans.sh",
@@ -134,7 +137,7 @@ func TestRPM(t *testing.T) {
134137

135138
group, err := rpm.Header.GetString(rpmutils.GROUP)
136139
require.NoError(t, err)
137-
require.Equal(t, "", group)
140+
require.Equal(t, "foo", group)
138141

139142
summary, err := rpm.Header.GetString(rpmutils.SUMMARY)
140143
require.NoError(t, err)
@@ -145,6 +148,60 @@ func TestRPM(t *testing.T) {
145148
require.Equal(t, "Foo does things", description)
146149
}
147150

151+
func TestRPMMandatoryFieldsOnly(t *testing.T) {
152+
f, err := os.CreateTemp(t.TempDir(), "test.rpm")
153+
require.NoError(t, err)
154+
require.NoError(t, Default.Package(&nfpm.Info{
155+
Name: "foo",
156+
Arch: "amd64",
157+
Version: "1.2",
158+
Release: "1",
159+
Description: "summary\nfoo bar\nlong description",
160+
License: "MIT",
161+
}, f))
162+
163+
file, err := os.OpenFile(f.Name(), os.O_RDONLY, 0o600) //nolint:gosec
164+
require.NoError(t, err)
165+
defer func() {
166+
f.Close()
167+
file.Close()
168+
err = os.Remove(file.Name())
169+
require.NoError(t, err)
170+
}()
171+
rpm, err := rpmutils.ReadRpm(file)
172+
require.NoError(t, err)
173+
174+
os, err := rpm.Header.GetString(rpmutils.OS)
175+
require.NoError(t, err)
176+
require.Equal(t, "linux", os)
177+
178+
arch, err := rpm.Header.GetString(rpmutils.ARCH)
179+
require.NoError(t, err)
180+
require.Equal(t, archToRPM["amd64"], arch)
181+
182+
version, err := rpm.Header.GetString(rpmutils.VERSION)
183+
require.NoError(t, err)
184+
require.Equal(t, "1.2", version)
185+
186+
release, err := rpm.Header.GetString(rpmutils.RELEASE)
187+
require.NoError(t, err)
188+
require.Equal(t, "1", release)
189+
190+
_, err = rpm.Header.Get(rpmutils.EPOCH)
191+
require.Error(t, err, "epoch should not be set")
192+
193+
_, err = rpm.Header.GetString(rpmutils.GROUP)
194+
require.Error(t, err, "group should not be set")
195+
196+
summary, err := rpm.Header.GetString(rpmutils.SUMMARY)
197+
require.NoError(t, err)
198+
require.Equal(t, "summary", summary)
199+
200+
description, err := rpm.Header.GetString(rpmutils.DESCRIPTION)
201+
require.NoError(t, err)
202+
require.Equal(t, "summary\nfoo bar\nlong description", description)
203+
}
204+
148205
func TestRPMPlatform(t *testing.T) {
149206
f, err := os.CreateTemp(t.TempDir(), "test*.rpm")
150207
require.NoError(t, err)

0 commit comments

Comments
 (0)