Source RPMs
GoReleaser can generate Source RPM (.src.rpm) packages.
Source RPMs are the standard way to distribute software source code for RPM-based
Linux distributions (Fedora, RHEL, CentOS, etc.). They contain the source code
archive and a .spec file that describes how to build binary RPMs from the source.
Warning
Source RPM generation is an alpha feature.
You must write your own .spec file template — GoReleaser does not provide a
default template because the content of .spec files varies considerably
between projects.
Note
Source RPMs require a source archive to be configured.
Make sure to enable source.enabled: true and set
source.prefix_template appropriately in your configuration.
Configuration
srpm:
# Whether to enable source RPM generation.
#
# Default: false.
enabled: true
# Name of the source RPM package.
#
# Default: ProjectName.
package_name: myproject
# Path to the .spec file Go template.
# This file is required and must be provided by you.
spec_file: myproject.spec.tmpl
# Template for the source RPM file name.
#
# Default: '{{ .PackageName }}-{{ .Version }}.src.rpm'.
# Templates: allowed.
file_name_template: "{{ .ConventionalFileName }}.src.rpm"
# Import path for the Go package (used in Fedora-style spec templates).
import_path: github.com/myorg/myproject
# One-line summary of the package.
summary: My project summary
# License identifier.
license: MIT
# Name of the license file to include.
license_file_name: LICENSE
# URL of the project homepage.
url: https://myproject.example.com
# Long description of the package.
description: |
A longer description of my project.
# The person or organization that built this package.
packager: My Name <[email protected]>
# Software vendor name.
vendor: My Organization
# Map of binary names to their Go import paths for %gobuild directives.
# The key is the binary name, the value is the Go import path.
#
# Default: { ProjectName: '%{goipath}' }.
bins:
myproject: github.com/myorg/myproject/cmd/myproject
# List of documentation files to include.
docs:
- README.md
- CHANGELOG.md
# RPM-specific fields, shared with nfpms[].rpm.
group: Applications/Internet
compression: lzma
# Signature configuration.
#
# If the key is password-protected, you'll need to set the `%SRPM_PASSPHRASE`
# environment variable when calling GoReleaser.
signature:
key_file: "{{ .Env.GPG_KEY_FILE }}"
# Extra files to include in the SRPM beyond the source archive and spec file.
# The `src`, `dst`, `file_info.owner`, `file_info.group`, and `file_info.mtime`
# fields support templates.
contents:
- src: "{{ .Env.PATCH_DIR }}/fix-build-{{ .Version }}.patch"
dst: "fix-build-{{ .Version }}.patch"
file_info:
owner: mockbuild
group: mockbuild
mtime: "2006-01-02T15:04:05Z"Spec file template
You must provide a .spec file template. The template is rendered using
Go’s text/template with the following variables available:
| Variable | Description |
|---|---|
.Version | The release version |
.FullCommit | The full git commit SHA |
.PackageName | The package name |
.ImportPath | The Go import path |
.Summary | One-line summary |
.License | License identifier |
.LicenseFileName | License file name |
.URL | Project homepage URL |
.Description | Long description |
.Packager | Packager name |
.Vendor | Vendor name |
.Group | RPM group |
.Epoch | RPM epoch |
.Section | Section |
.Maintainer | Maintainer |
.Source | Source archive file name |
.Bins | Map of binary names to import paths |
.Docs | List of documentation files |
All standard GoReleaser template variables are also available.
A minimal example for a Fedora-style Go project:
# Generated by goreleaser
%bcond_without check
%global goipath {{ .ImportPath }}
%global commit {{ .FullCommit }}
%gometa -f
%global common_description %{expand:
{{ .Description }}}
{{ if .LicenseFileName }}%global golicenses {{ .LicenseFileName }}{{ end }}
{{ if .Docs }}%global godocs {{ range .Docs }} {{ . }}{{ end }}{{ end }}
Name: %{goname}
Version: {{ .Version }}
Release: %autorelease -p
Summary: {{ .Summary }}
License: {{ .License }}
URL: {{ .URL }}
Source: {{ .Source }}
%description %{common_description}
%gopkg
%prep
%goprep
%generate_buildrequires
%go_generate_buildrequires
%build
{{ range $binary, $importPath := .Bins }}
%gobuild -o %{gobuilddir}/bin/{{ $binary }} {{ $importPath }}
{{ end }}
%install
%gopkginstall
install -m 0755 -vd %{buildroot}%{_bindir}
install -m 0755 -vp %{gobuilddir}/bin/* %{buildroot}%{_bindir}/
%if %{with check}
%check
%gocheck
%endif
%files
{{ range .Docs }}%doc {{ . }}
{{ end }}
{{ if .LicenseFileName }}%license {{ .LicenseFileName }}{{ end }}
%{_bindir}/*
%gopkgfiles
%changelog
%autochangelog