mirror of
https://github.com/goreleaser/nfpm
synced 2025-04-30 14:18:01 +02:00
feat: wip: rpm
This commit is contained in:
parent
f8004ed94a
commit
09e4e94e2a
102
rpm/rpm.go
Normal file
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
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
BIN
rpm/testdata/fake
vendored
Executable file
Binary file not shown.
5
rpm/testdata/main.go
vendored
Normal file
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
1
rpm/testdata/whatever.conf
vendored
Normal file
@ -0,0 +1 @@
|
||||
foo=bar
|
Loading…
Reference in New Issue
Block a user