nfpm

package module
v0.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 20, 2019 License: MIT Imports: 7 Imported by: 28

README

GoReleaser Logo

NFPM

NFPM is Not FPM - a simple deb and rpm packager written in Go.

Release Software License Travis Codecov branch Go Report Card Go Doc SayThanks.io

Why

While fpm is great, for me it is a bummer that it depends on Ruby, tar and probably other software.

I wanted something that could be used as a binary and/or as a lib on go-software, so I hacked this together and it works!

Goals

  • be simple to use
  • provide packaging for the most common linux packaging systems (at very least deb and rpm)
  • be distributed as a single binary
  • reproducible results
    • depend on the fewer external things as possible (namely rpmbuild)
    • generate packages based on yaml files (maybe also json and toml?)
  • be possible to use it as a lib in other go projects (namely goreleaser itself)
  • support complex packages and power users

Usage

The first steps are to run nfpm init to initialize a config file and edit the generated file according to your needs:

nfpm init

The next step is to run nfpm pkg --target mypkg.deb. NFPM will guess which packager to use based on the target file extension.

nfpm pkg

And that's it!

Usage as a docker image

You can run it with docker as well:

docker run --rm \
  -v $PWD:/tmp/pkg \
  goreleaser/nfpm pkg --config /tmp/pkg/foo.yml --target /tmp/pkg/foo.rpm

That's it!

Usage as lib

You can look at the code of nfpm itself to see how to use it as a library, or, take a look at the nfpm pipe on GoReleaser.

Attention: GoReleaser deb packager only compiles with go1.10+.

Status

  • both deb and rpm packaging are working but there are some missing features.

Special thanks

Thanks to the fpm authors for fpm, which inspires nfpm a lot.

Donate

Donations are very much appreciated! You can donate/sponsor on the main goreleaser opencollective! It's easy and will surely help the developers at least buy some ☕️ or 🍺!

Stargazers over time

goreleaser/nfpm stargazers over time


Would you like to fix something in the documentation? Feel free to open an issue.

Documentation

Overview

Package nfpm provides ways to package programs in some linux packaging formats.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Register

func Register(format string, p Packager)

Register a new packager for the given format

func Validate added in v0.6.3

func Validate(info Info) error

Validate the given Info and returns an error if it is invalid.

Types

type Config added in v0.8.0

type Config struct {
	Info      `yaml:",inline"`
	Overrides map[string]Overridables `yaml:"overrides,omitempty"`
}

Config contains the top level configuration for packages

func Parse added in v0.8.0

func Parse(in io.Reader) (config Config, err error)

Parse decodes YAML data from an io.Reader into a configuration struct

func ParseFile added in v0.8.0

func ParseFile(path string) (config Config, err error)

ParseFile decodes YAML data from a file path into a configuration struct

func (*Config) Get added in v0.8.0

func (c *Config) Get(format string) (info Info, err error)

Get returns the Info struct for the given packager format. Overrides for the given format are merged into the final struct

func (*Config) Validate added in v0.8.0

func (c *Config) Validate() error

Validate ensures that the config is well typed

type Info

type Info struct {
	Overridables `yaml:",inline"`
	Name         string `yaml:"name,omitempty"`
	Arch         string `yaml:"arch,omitempty"`
	Platform     string `yaml:"platform,omitempty"`
	Version      string `yaml:"version,omitempty"`
	Section      string `yaml:"section,omitempty"`
	Priority     string `yaml:"priority,omitempty"`
	Maintainer   string `yaml:"maintainer,omitempty"`
	Description  string `yaml:"description,omitempty"`
	Vendor       string `yaml:"vendor,omitempty"`
	Homepage     string `yaml:"homepage,omitempty"`
	License      string `yaml:"license,omitempty"`
	Bindir       string `yaml:"bindir,omitempty"`
}

Info contains information about a single package

func WithDefaults

func WithDefaults(info Info) Info

WithDefaults set some sane defaults into the given Info

type Overridables added in v0.8.0

type Overridables struct {
	Replaces     []string          `yaml:"replaces,omitempty"`
	Provides     []string          `yaml:"provides,omitempty"`
	Depends      []string          `yaml:"depends,omitempty"`
	Recommends   []string          `yaml:"recommends,omitempty"`
	Suggests     []string          `yaml:"suggests,omitempty"`
	Conflicts    []string          `yaml:"conflicts,omitempty"`
	Files        map[string]string `yaml:"files,omitempty"`
	ConfigFiles  map[string]string `yaml:"config_files,omitempty"`
	EmptyFolders []string          `yaml:"empty_folders,omitempty"`
	Scripts      Scripts           `yaml:"scripts,omitempty"`
}

Overridables contain the field which are overridable in a package

type Packager

type Packager interface {
	Package(info Info, w io.Writer) error
}

Packager represents any packager implementation

func Get

func Get(format string) (Packager, error)

Get a packager for the given format

type Scripts added in v0.7.0

type Scripts struct {
	PreInstall  string `yaml:"preinstall,omitempty"`
	PostInstall string `yaml:"postinstall,omitempty"`
	PreRemove   string `yaml:"preremove,omitempty"`
	PostRemove  string `yaml:"postremove,omitempty"`
}

Scripts contains information about maintainer scripts for packages

Directories

Path Synopsis
cmd
nfpm
Package main contains the main nfpm cli source code.
Package main contains the main nfpm cli source code.
Package deb implements nfpm.Packager providing .deb bindings.
Package deb implements nfpm.Packager providing .deb bindings.
Package glob provides file globbing for use in nfpm.Packager implementations
Package glob provides file globbing for use in nfpm.Packager implementations
Package rpm implements nfpm.Packager providing .rpm bindings through rpmbuild.
Package rpm implements nfpm.Packager providing .rpm bindings through rpmbuild.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL