1
1
mirror of https://github.com/goreleaser/nfpm synced 2025-04-30 14:18:01 +02:00

feat: wip: rpm

This commit is contained in:
Carlos Alexandro Becker 2018-02-03 17:42:56 -02:00
parent f8004ed94a
commit 09e4e94e2a
No known key found for this signature in database
GPG Key ID: E61E2F7DC14AB940
5 changed files with 142 additions and 0 deletions

102
rpm/rpm.go Normal file

@ -0,0 +1,102 @@
package rpm
import (
"fmt"
"io"
"io/ioutil"
"log"
"os"
"path/filepath"
"github.com/goreleaser/archive"
"github.com/goreleaser/packager"
)
var _ packager.Packager = Default
// Default deb packager
var Default = &RPM{}
// RPM is a RPM packager implementation
type RPM struct{}
// Package writes a new RPM package to the given writer using the given info
func (*RPM) Package(info packager.Info, deb io.Writer) error {
root, err := ioutil.TempDir("", info.Name)
if err != nil {
return err
}
for _, folder := range []string{
"RPMS",
"SRPMS",
"BUILD",
"SOURCES",
"SPECS",
"tmp",
} {
if err := os.Mkdir(filepath.Join(root, folder), 0744); err != nil {
return err
}
}
targz, err := os.Create(filepath.Join(root, "SOURCES", info.Name+".tar.gz"))
if err != nil {
return fmt.Errorf("failed to create tar.gz file: %s", err)
}
archive := archive.New(targz)
defer archive.Close()
for src, dst := range info.Files {
if err := archive.Add(dst, src); err != nil {
return fmt.Errorf("failed to add file %s to tar.gz: %s", src, err)
}
}
var args = []string{
"--define", fmt.Sprintf("_topdir %s", root),
"--define", fmt.Sprintf("_tmppath %s/tmp", root),
}
log.Println(args)
return nil
}
const specTemplate = `
%define __spec_install_post %{nil}
%define debug_package %{nil}
%define __os_install_post %{_dbpath}/brp-compress
Summary: {{.Info.Description}}
Name: {{.Info.Name}}
Version: {{.Info.Version}}
Release: 1
License: {{.Info.License}}
Group: Development/Tools
SOURCE0 : %{name}.tar.gz
URL: {{.Info.Homepage}}
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
%description
%{summary}
%prep
%setup -q
%build
# Empty section.
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}
# in builddir
cp -a * %{buildroot}
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
%config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf
%{_bindir}/*
`

34
rpm/rpm_test.go Normal file

@ -0,0 +1,34 @@
package rpm
import (
"io/ioutil"
"testing"
"github.com/goreleaser/packager"
"github.com/tj/assert"
)
func TestRPM(t *testing.T) {
var err = Default.Package(
packager.Info{
Name: "foo",
Arch: "amd64",
Depends: []string{
"bash",
},
Description: "Foo does things",
Priority: "extra",
Maintainer: "Carlos A Becker <pkg@carlosbecker.com>",
Version: "1.0.0",
Section: "default",
Homepage: "http://carlosbecker.com",
Vendor: "nope",
Files: map[string]string{
"./testdata/fake": "/usr/local/bin/fake",
"./testdata/whatever.conf": "/etc/fake/fake.conf",
},
},
ioutil.Discard,
)
assert.NoError(t, err)
}

BIN
rpm/testdata/fake vendored Executable file

Binary file not shown.

5
rpm/testdata/main.go vendored Normal file

@ -0,0 +1,5 @@
package main
func main() {
println("fake linux binary")
}

1
rpm/testdata/whatever.conf vendored Normal file

@ -0,0 +1 @@
foo=bar