1
1
mirror of https://github.com/goreleaser/nfpm synced 2026-07-23 10:04:50 +02:00
Files
Dj Gilcrease e1c7b33e10 feat: replace rpmpack with a more complete implementation (#1104)
* feat: replace rpmpack with a more complete implementation

* chore: add extra testing

* feat: add lang support and config|tree support for rpm

---------

Co-authored-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
2026-06-29 21:50:09 -03:00

83 lines
1.8 KiB
Go

package rpm
import (
"io"
"strings"
"github.com/goreleaser/nfpm/v2"
"github.com/goreleaser/nfpm/v2/internal/modtime"
"go.digitalxero.dev/rpm"
)
// packageRPM builds a binary RPM and writes it to w.
func (r *RPM) packageRPM(info *nfpm.Info, w io.Writer) error {
b := rpm.NewPackage()
if err := applyMetadata(b, info); err != nil {
return err
}
if err := applyRelations(b, info); err != nil {
return err
}
if err := applyScripts(b, info); err != nil {
return err
}
if err := applyChangelog(b, info); err != nil {
return err
}
addContents(b, info)
if fn := signFunc(info); fn != nil {
b.WithPGPSignFunc(fn)
}
pkg, err := b.Build()
if err != nil {
return err
}
_, err = pkg.WriteTo(w)
return err
}
// applyMetadata maps the nfpm.Info scalar metadata onto the package builder.
func applyMetadata(b rpm.PackageBuilder, info *nfpm.Info) error {
b.WithName(info.Name)
b.WithVersion(formatVersion(info))
b.WithRelease(defaultTo(info.Release, "1"))
b.WithSummary(defaultTo(info.RPM.Summary, strings.Split(info.Description, "\n")[0]))
b.WithDescription(info.Description)
b.WithArch(info.Arch)
if info.Platform != "" {
b.WithOS(info.Platform)
}
b.WithLicense(info.License)
b.WithURL(info.Homepage)
b.WithVendor(info.Vendor)
b.WithGroup(info.RPM.Group)
b.WithPackager(defaultTo(info.RPM.Packager, info.Maintainer))
if len(info.RPM.Prefixes) > 0 {
b.WithPrefixes(info.RPM.Prefixes...)
}
b.WithBuildTime(modtime.Get(info.MTime))
host, err := buildHost(info)
if err != nil {
return err
}
b.WithBuildHost(host)
if epoch, ok, err := parseEpoch(info); err != nil {
return err
} else if ok {
b.WithEpoch(epoch)
}
comp, err := parseCompression(info.RPM.Compression)
if err != nil {
return err
}
b.WithCompressor(comp)
return nil
}