nfpm

package module
v2.37.1 Latest Latest
Warning

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

Go to latest
Published: May 9, 2024 License: MIT Imports: 16 Imported by: 33

README

GoReleaser Logo

nFPM

nFPM is a simple and 0-dependencies deb, rpm, apk and arch linux 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 software.

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.

Community

You have questions, need support and or just want to talk about GoReleaser/nFPM?

Here are ways to get in touch with the GoReleaser community:

Join Discord Follow Twitter GitHub Discussions

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

Stargazers over time


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 Enumerate added in v2.37.0

func Enumerate() []string

Enumerate lists the available packagers

func PrepareForPackager added in v2.27.0

func PrepareForPackager(info *Info, packager string) (err error)

PrepareForPackager validates the configuration for the given packager and prepares the contents for said packager.

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. Validate will no change the info's contents.

Types

type APK

type APK struct {
	Arch      string       `yaml:"arch,omitempty" json:"arch,omitempty" jsonschema:"title=architecture in apk nomenclature"`
	Signature APKSignature `yaml:"signature,omitempty" json:"signature,omitempty" jsonschema:"title=apk signature"`
	Scripts   APKScripts   `yaml:"scripts,omitempty" json:"scripts,omitempty" jsonschema:"title=apk scripts"`
}

type APKScripts added in v2.5.0

type APKScripts struct {
	PreUpgrade  string `yaml:"preupgrade,omitempty" json:"preupgrade,omitempty" jsonschema:"title=pre upgrade script"`
	PostUpgrade string `yaml:"postupgrade,omitempty" json:"postupgrade,omitempty" jsonschema:"title=post upgrade script"`
}

type APKSignature

type APKSignature struct {
	PackageSignature `yaml:",inline" json:",inline"`
	// defaults to <maintainer email>.rsa.pub
	KeyName string `` /* 127-byte string literal not displayed */
}

type ArchLinux added in v2.20.0

type ArchLinux struct {
	Pkgbase  string           `` /* 147-byte string literal not displayed */
	Arch     string           `yaml:"arch,omitempty" json:"arch,omitempty" jsonschema:"title=architecture in archlinux nomenclature"`
	Packager string           `yaml:"packager,omitempty" json:"packager,omitempty" jsonschema:"title=organization that packaged the software"`
	Scripts  ArchLinuxScripts `yaml:"scripts,omitempty" json:"scripts,omitempty" jsonschema:"title=archlinux-specific scripts"`
}

type ArchLinuxScripts added in v2.20.0

type ArchLinuxScripts struct {
	PreUpgrade  string `yaml:"preupgrade,omitempty" json:"preupgrade,omitempty" jsonschema:"title=preupgrade script"`
	PostUpgrade string `yaml:"postupgrade,omitempty" json:"postupgrade,omitempty" jsonschema:"title=postupgrade script"`
}

type Config

type Config struct {
	Info      `yaml:",inline" json:",inline"`
	Overrides map[string]*Overridables `` /* 182-byte string literal not displayed */
	// 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 added in v2.4.0

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 added in v2.4.0

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 {
	Arch        string            `yaml:"arch,omitempty" json:"arch,omitempty" jsonschema:"title=architecture in deb nomenclature"`
	Scripts     DebScripts        `yaml:"scripts,omitempty" json:"scripts,omitempty" jsonschema:"title=scripts"`
	Triggers    DebTriggers       `yaml:"triggers,omitempty" json:"triggers,omitempty" jsonschema:"title=triggers"`
	Breaks      []string          `yaml:"breaks,omitempty" json:"breaks,omitempty" jsonschema:"title=breaks"`
	Signature   DebSignature      `yaml:"signature,omitempty" json:"signature,omitempty" jsonschema:"title=signature"`
	Compression string            `` /* 150-byte string literal not displayed */
	Fields      map[string]string `yaml:"fields,omitempty" json:"fields,omitempty" jsonschema:"title=fields"`
	Predepends  []string          `yaml:"predepends,omitempty" json:"predepends,omitempty" jsonschema:"title=predepends directive,example=nfpm"`
}

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

type DebScripts

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

DebScripts is scripts only available on deb packages.

type DebSignature

type DebSignature struct {
	PackageSignature `yaml:",inline" json:",inline"`
	// debsign, or dpkg-sig (defaults to debsign)
	Method string `yaml:"method,omitempty" json:"method,omitempty" jsonschema:"title=method role,enum=debsign,enum=dpkg-sig,default=debsign"`
	// origin, maint or archive (defaults to origin)
	Type   string `yaml:"type,omitempty" json:"type,omitempty" jsonschema:"title=signer role,enum=origin,enum=maint,enum=archive,default=origin"`
	Signer string `yaml:"signer,omitempty" json:"signer,omitempty" jsonschema:"title=signer"`
}

type DebTriggers

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

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 IPK added in v2.37.0

type IPK struct {
	ABIVersion    string            `yaml:"abi_version,omitempty" json:"abi_version,omitempty" jsonschema:"title=abi version"`
	Alternatives  []IPKAlternative  `yaml:"alternatives,omitempty" json:"alternatives,omitempty" jsonschema:"title=alternatives"`
	Arch          string            `yaml:"arch,omitempty" json:"arch,omitempty" jsonschema:"title=architecture in deb nomenclature"`
	AutoInstalled bool              `yaml:"auto_installed,omitempty" json:"auto_installed,omitempty" jsonschema:"title=auto installed,default=false"`
	Essential     bool              `yaml:"essential,omitempty" json:"essential,omitempty" jsonschema:"title=whether package is essential,default=false"`
	Fields        map[string]string `yaml:"fields,omitempty" json:"fields,omitempty" jsonschema:"title=fields"`
	Predepends    []string          `yaml:"predepends,omitempty" json:"predepends,omitempty" jsonschema:"title=predepends directive,example=nfpm"`
	Tags          []string          `yaml:"tags,omitempty" json:"tags,omitempty" jsonschema:"title=tags"`
}

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

type IPKAlternative added in v2.37.0

type IPKAlternative struct {
	Priority int    `yaml:"priority,omitempty" json:"priority,omitempty" jsonschema:"title=priority"`
	Target   string `yaml:"target,omitempty" json:"target,omitempty" jsonschema:"title=target"`
	LinkName string `yaml:"link_name,omitempty" json:"link_name,omitempty" jsonschema:"title=link name"`
}

IPKAlternative represents an alternative for an IPK package.

type Info

type Info struct {
	Overridables    `yaml:",inline" json:",inline"`
	Name            string    `yaml:"name" json:"name" jsonschema:"title=package name"`
	Arch            string    `yaml:"arch" json:"arch" jsonschema:"title=target architecture,example=amd64"`
	Platform        string    `yaml:"platform,omitempty" json:"platform,omitempty" jsonschema:"title=target platform,example=linux,default=linux"`
	Epoch           string    `yaml:"epoch,omitempty" json:"epoch,omitempty" jsonschema:"title=version epoch,example=2,default=extracted from version"`
	Version         string    `yaml:"version" json:"version" jsonschema:"title=version,example=v1.0.2,example=2.0.1"`
	VersionSchema   string    `` /* 134-byte string literal not displayed */
	Release         string    `yaml:"release,omitempty" json:"release,omitempty" jsonschema:"title=version release,example=1"`
	Prerelease      string    `yaml:"prerelease,omitempty" json:"prerelease,omitempty" jsonschema:"title=version prerelease,default=extracted from version"`
	VersionMetadata string    `yaml:"version_metadata,omitempty" json:"version_metadata,omitempty" jsonschema:"title=version metadata,example=git"`
	Section         string    `yaml:"section,omitempty" json:"section,omitempty" jsonschema:"title=package section,example=default"`
	Priority        string    `yaml:"priority,omitempty" json:"priority,omitempty" jsonschema:"title=package priority,example=extra"`
	Maintainer      string    `yaml:"maintainer,omitempty" json:"maintainer,omitempty" jsonschema:"title=package maintainer,example=me@example.com"`
	Description     string    `yaml:"description,omitempty" json:"description,omitempty" jsonschema:"title=package description"`
	Vendor          string    `yaml:"vendor,omitempty" json:"vendor,omitempty" jsonschema:"title=package vendor,example=MyCorp"`
	Homepage        string    `yaml:"homepage,omitempty" json:"homepage,omitempty" jsonschema:"title=package homepage,example=https://example.com"`
	License         string    `yaml:"license,omitempty" json:"license,omitempty" jsonschema:"title=package license,example=MIT"`
	Changelog       string    `` /* 183-byte string literal not displayed */
	DisableGlobbing bool      `` /* 133-byte string literal not displayed */
	MTime           time.Time `yaml:"mtime,omitempty" json:"mtime,omitempty" jsonschema:"title=time to set into the files generated by nFPM"`
	Target          string    `yaml:"-" json:"-"`
}

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" json:"replaces,omitempty" jsonschema:"title=replaces directive,example=nfpm"`
	Provides   []string       `yaml:"provides,omitempty" json:"provides,omitempty" jsonschema:"title=provides directive,example=nfpm"`
	Depends    []string       `yaml:"depends,omitempty" json:"depends,omitempty" jsonschema:"title=depends directive,example=nfpm"`
	Recommends []string       `yaml:"recommends,omitempty" json:"recommends,omitempty" jsonschema:"title=recommends directive,example=nfpm"`
	Suggests   []string       `yaml:"suggests,omitempty" json:"suggests,omitempty" jsonschema:"title=suggests directive,example=nfpm"`
	Conflicts  []string       `yaml:"conflicts,omitempty" json:"conflicts,omitempty" jsonschema:"title=conflicts directive,example=nfpm"`
	Contents   files.Contents `yaml:"contents,omitempty" json:"contents,omitempty" jsonschema:"title=files to add to the package"`
	Umask      os.FileMode    `yaml:"umask,omitempty" json:"umask,omitempty" jsonschema:"title=umask for file contents,example=112"`
	Scripts    Scripts        `yaml:"scripts,omitempty" json:"scripts,omitempty" jsonschema:"title=scripts to execute"`
	RPM        RPM            `yaml:"rpm,omitempty" json:"rpm,omitempty" jsonschema:"title=rpm-specific settings"`
	Deb        Deb            `yaml:"deb,omitempty" json:"deb,omitempty" jsonschema:"title=deb-specific settings"`
	APK        APK            `yaml:"apk,omitempty" json:"apk,omitempty" jsonschema:"title=apk-specific settings"`
	ArchLinux  ArchLinux      `yaml:"archlinux,omitempty" json:"archlinux,omitempty" jsonschema:"title=archlinux-specific settings"`
	IPK        IPK            `yaml:"ipk,omitempty" json:"ipk,omitempty" jsonschema:"title=ipk-specific settings"`
}

Overridables contain the field which are overridable in a package.

type PackageSignature added in v2.2.3

type PackageSignature struct {
	// PGP secret key, can be ASCII-armored
	KeyFile       string  `yaml:"key_file,omitempty" json:"key_file,omitempty" jsonschema:"title=key file,example=key.gpg"`
	KeyID         *string `yaml:"key_id,omitempty" json:"key_id,omitempty" jsonschema:"title=key id,example=bc8acdd415bd80b3"`
	KeyPassphrase string  `yaml:"-" json:"-"` // populated from environment variable
	// SignFn, if set, will be called with the package-specific data to sign.
	// For deb and rpm packages, data is the full package content.
	// For apk packages, data is the SHA1 digest of control tgz.
	//
	// This allows for signing implementations other than using a local file
	// (for example using a remote signer like KMS).
	SignFn func(data io.Reader) ([]byte, error) `yaml:"-" json:"-"` // populated when used as a library
}

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 PackagerWithExtension added in v2.20.0

type PackagerWithExtension interface {
	Packager
	ConventionalExtension() string
}

type RPM

type RPM struct {
	Arch        string       `yaml:"arch,omitempty" json:"arch,omitempty" jsonschema:"title=architecture in rpm nomenclature"`
	Scripts     RPMScripts   `yaml:"scripts,omitempty" json:"scripts,omitempty" jsonschema:"title=rpm-specific scripts"`
	Group       string       `yaml:"group,omitempty" json:"group,omitempty" jsonschema:"title=package group,example=Unspecified"`
	Summary     string       `yaml:"summary,omitempty" json:"summary,omitempty" jsonschema:"title=package summary"`
	Compression string       `` /* 153-byte string literal not displayed */
	Signature   RPMSignature `yaml:"signature,omitempty" json:"signature,omitempty" jsonschema:"title=rpm signature"`
	Packager    string       `yaml:"packager,omitempty" json:"packager,omitempty" jsonschema:"title=organization that actually packaged the software"`
	Prefixes    []string     `yaml:"prefixes,omitempty" json:"prefixes,omitempty" jsonschema:"title=Prefixes for relocatable packages"`
}

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

type RPMScripts added in v2.5.0

type RPMScripts struct {
	PreTrans  string `yaml:"pretrans,omitempty" json:"pretrans,omitempty" jsonschema:"title=pretrans script"`
	PostTrans string `yaml:"posttrans,omitempty" json:"posttrans,omitempty" jsonschema:"title=posttrans script"`
	Verify    string `yaml:"verify,omitempty" json:"verify,omitempty" jsonschema:"title=verify script"`
}

RPMScripts represents scripts only available on RPM packages.

type RPMSignature

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

type Scripts

type Scripts struct {
	PreInstall  string `yaml:"preinstall,omitempty" json:"preinstall,omitempty" jsonschema:"title=pre install"`
	PostInstall string `yaml:"postinstall,omitempty" json:"postinstall,omitempty" jsonschema:"title=post install"`
	PreRemove   string `yaml:"preremove,omitempty" json:"preremove,omitempty" jsonschema:"title=pre remove"`
	PostRemove  string `yaml:"postremove,omitempty" json:"postremove,omitempty" jsonschema:"title=post remove"`
}

Scripts contains information about maintainer scripts for packages.

Directories

Path Synopsis
Package apk implements nfpm.Packager providing .apk bindings.
Package apk implements nfpm.Packager providing .apk bindings.
Package arch implements nfpm.Packager providing bindings for Arch Linux packages.
Package arch implements nfpm.Packager providing bindings for Arch Linux packages.
cmd
Package deb implements nfpm.Packager providing .deb bindings.
Package deb implements nfpm.Packager providing .deb bindings.
Package deprecation provides centralized deprecation notice messaging for nfpm.
Package deprecation provides centralized deprecation notice messaging for nfpm.
internal
cmd
Package cmd contains the main nfpm cli source code.
Package cmd contains the main nfpm cli source code.
glob
Package glob provides file globbing for use in nfpm.Packager implementations
Package glob provides file globbing for use in nfpm.Packager implementations
Package ipk implements nfpm.Packager providing .ipk bindings.
Package ipk implements nfpm.Packager providing .ipk bindings.
Package rpm implements nfpm.Packager providing .rpm bindings using google/rpmpack.
Package rpm implements nfpm.Packager providing .rpm bindings using google/rpmpack.

Jump to

Keyboard shortcuts

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