README

GoReleaser Logo

NFPM

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

Release Software License GitHub Actions Codecov branch Go Report Card Go Doc

Why

While fpm is great, for me, it is a bummer that it depends on ruby, tar and other softwares.

I wanted something that could be used as a binary and/or as a library and that was really simple.

So I created NFPM: a simpler, 0-dependency, as-little-assumptions-as-possible alternative to fpm.

Usage

Check the documentation at https://nfpm.goreleaser.com

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.

Expand ▾ Collapse ▴

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 ClearPackagers

    func ClearPackagers()

      ClearPackagers clear all registered packagers, used for testing.

      func RegisterPackager

      func RegisterPackager(format string, p Packager)

        RegisterPackager a new packager for the given format.

        func Validate

        func Validate(info *Info) (err error)

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

          Types

          type APK

          type APK struct {
          	Signature APKSignature `yaml:"signature,omitempty"`
          }

          type APKSignature

          type APKSignature struct {
          	PackageSignature `yaml:",inline"`
          	// defaults to <maintainer email>.rsa.pub
          	KeyName string `yaml:"key_name,omitempty"`
          }

          type Config

          type Config struct {
          	Info      `yaml:",inline"`
          	Overrides map[string]Overridables `yaml:"overrides,omitempty"`
          	// contains filtered or unexported fields
          }

            Config contains the top level configuration for packages.

            func Parse

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

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

              func ParseFile

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

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

                func ParseFileWithEnvMapping

                func ParseFileWithEnvMapping(path string, mapping func(string) string) (config Config, err error)

                  ParseFileWithEnvMapping decodes YAML data from a file path into a configuration struct.

                  func ParseWithEnvMapping

                  func ParseWithEnvMapping(in io.Reader, mapping func(string) string) (config Config, err error)

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

                    func (*Config) Get

                    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

                      func (c *Config) Validate() error

                        Validate ensures that the config is well typed.

                        type Deb

                        type Deb struct {
                        	Scripts   DebScripts   `yaml:"scripts,omitempty"`
                        	Triggers  DebTriggers  `yaml:"triggers,omitempty"`
                        	Breaks    []string     `yaml:"breaks,omitempty"`
                        	Signature DebSignature `yaml:"signature,omitempty"`
                        }

                          Deb is custom configs that are only available on deb packages.

                          type DebScripts

                          type DebScripts struct {
                          	Rules     string `yaml:"rules,omitempty"`
                          	Templates string `yaml:"templates,omitempty"`
                          	Config    string `yaml:"config,omitempty"`
                          }

                            DebScripts is scripts only available on deb packages.

                            type DebSignature

                            type DebSignature struct {
                            	PackageSignature `yaml:",inline"`
                            	// origin, maint or archive (defaults to origin)
                            	Type string `yaml:"type,omitempty"`
                            }

                            type DebTriggers

                            type DebTriggers struct {
                            	Interest        []string `yaml:"interest,omitempty"`
                            	InterestAwait   []string `yaml:"interest_await,omitempty"`
                            	InterestNoAwait []string `yaml:"interest_noawait,omitempty"`
                            	Activate        []string `yaml:"activate,omitempty"`
                            	ActivateAwait   []string `yaml:"activate_await,omitempty"`
                            	ActivateNoAwait []string `yaml:"activate_noawait,omitempty"`
                            }

                              DebTriggers contains triggers only available for deb packages. https://wiki.debian.org/DpkgTriggers https://man7.org/linux/man-pages/man5/deb-triggers.5.html

                              type ErrFieldEmpty

                              type ErrFieldEmpty struct {
                              	// contains filtered or unexported fields
                              }

                                ErrFieldEmpty happens when some required field is empty.

                                func (ErrFieldEmpty) Error

                                func (e ErrFieldEmpty) Error() string

                                type ErrNoPackager

                                type ErrNoPackager struct {
                                	// contains filtered or unexported fields
                                }

                                  ErrNoPackager happens when no packager is registered for the given format.

                                  func (ErrNoPackager) Error

                                  func (e ErrNoPackager) Error() string

                                  type ErrSigningFailure

                                  type ErrSigningFailure struct {
                                  	Err error
                                  }

                                    ErrSigningFailure is returned whenever something went wrong during the package signing process. The underlying error can be unwrapped and could be crypto-related or something that occurred while adding the signature to the package.

                                    func (*ErrSigningFailure) Error

                                    func (s *ErrSigningFailure) Error() string

                                    func (*ErrSigningFailure) Unwarp

                                    func (s *ErrSigningFailure) Unwarp() error

                                    type Info

                                    type Info struct {
                                    	Overridables    `yaml:",inline"`
                                    	Name            string `yaml:"name,omitempty"`
                                    	Arch            string `yaml:"arch,omitempty"`
                                    	Platform        string `yaml:"platform,omitempty"`
                                    	Epoch           string `yaml:"epoch,omitempty"`
                                    	Version         string `yaml:"version,omitempty"`
                                    	Release         string `yaml:"release,omitempty"`
                                    	Prerelease      string `yaml:"prerelease,omitempty"`
                                    	VersionMetadata string `yaml:"version_metadata,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"`
                                    	Changelog       string `yaml:"changelog,omitempty"`
                                    	DisableGlobbing bool   `yaml:"disable_globbing"`
                                    	Target          string `yaml:"-"`
                                    }

                                      Info contains information about a single package.

                                      func WithDefaults

                                      func WithDefaults(info *Info) *Info

                                        WithDefaults set some sane defaults into the given Info.

                                        func (*Info) GetChangeLog

                                        func (i *Info) GetChangeLog() (log *chglog.PackageChangeLog, err error)

                                          GetChangeLog parses the provided changelog file.

                                          func (*Info) Validate

                                          func (i *Info) Validate() error

                                          type Overridables

                                          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"`
                                          	Contents     files.Contents `yaml:"contents,omitempty"`
                                          	EmptyFolders []string       `yaml:"empty_folders,omitempty"`
                                          	Scripts      Scripts        `yaml:"scripts,omitempty"`
                                          	RPM          RPM            `yaml:"rpm,omitempty"`
                                          	Deb          Deb            `yaml:"deb,omitempty"`
                                          	APK          APK            `yaml:"apk,omitempty"`
                                          }

                                            Overridables contain the field which are overridable in a package.

                                            type PackageSignature

                                            type PackageSignature struct {
                                            	// PGP secret key, can be ASCII-armored
                                            	KeyFile       string  `yaml:"key_file,omitempty"`
                                            	KeyID         *string `yaml:"key_id,omitempty"`
                                            	KeyPassphrase string  `yaml:"-"` // populated from environment variable
                                            }

                                            type Packager

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

                                              Packager represents any packager implementation.

                                              func Get

                                              func Get(format string) (Packager, error)

                                                Get a packager for the given format.

                                                type RPM

                                                type RPM struct {
                                                	Group       string       `yaml:"group,omitempty"`
                                                	Summary     string       `yaml:"summary,omitempty"`
                                                	Compression string       `yaml:"compression,omitempty"`
                                                	Signature   RPMSignature `yaml:"signature,omitempty"`
                                                }

                                                  RPM is custom configs that are only available on RPM packages.

                                                  type RPMSignature

                                                  type RPMSignature struct {
                                                  	PackageSignature `yaml:",inline"`
                                                  }

                                                  type Scripts

                                                  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.

                                                    Source Files

                                                    Directories

                                                    Path Synopsis
                                                    Package apk implements nfpm.Packager providing .apk bindings.
                                                    Package apk implements nfpm.Packager providing .apk bindings.
                                                    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 rpm implements nfpm.Packager providing .rpm bindings using google/rpmpack.
                                                    Package rpm implements nfpm.Packager providing .rpm bindings using google/rpmpack.
                                                    internal
                                                    glob
                                                    Package glob provides file globbing for use in nfpm.Packager implementations
                                                    Package glob provides file globbing for use in nfpm.Packager implementations