rpkg - Man Page
RPM packaging utility
Synopsis
rpkg [ global_options ] command [ command_options ] [ command_arguments ]
rpkg help
rpkg command --help
Description
rpkg is a script to manage spec enriched Git repositories - meaning any repositories which contain an rpm spec file. It is designed to work with expanded application sources as well as with standard DistGit tarballs and patches. Note that you should trust the .spec files you work with because many operations (like `rpkg srpm` or `rpkg lint`) involve parsing the spec file, which brings along evaluation of any shell or lua scriplets present in it.
Global Options
Command Overview
- rpkg add [-h] [--all] [paths ...]
Add changes to index
- rpkg build [-h] [--outdir OUTDIR] [--spec SPEC] [--config CONFIG] [--wait] [project]
Alias for copr-build
- rpkg ci [-h] [--message MESSAGE | --file FILE] [--all] [--amend] [--with-changelog] [--tag] [--push] [--signoff] [file ...]
Alias for commit
- rpkg clean [-h] [--dry-run] [-x] [--force] [-d]
Remove untracked files
- rpkg clog [-h] [--raw]
Output top changelog entry to stdout
- rpkg clone [-h] [--branches] [--branch BRANCH] [--anonymous] repo_path [directory]
Clone and checkout a repository
- rpkg commit [-h] [--message MESSAGE | --file FILE] [--all] [--amend] [--with-changelog] [--tag] [--push] [--signoff] [file ...]
Commit changes
- rpkg compile [-h] [--target TARGET] [--with OPTION] [--without OPTION] [--outdir OUTDIR] [--spec SPEC] [--short-circuit SHORT_CIRCUIT] [--nocheck]
Local test rpmbuild compile
- rpkg config [-h]
Do nothing, only output used config
- rpkg copr-build [-h] [--outdir OUTDIR] [--spec SPEC] [--config CONFIG] [--wait] [project]
Build package in Copr build system
- rpkg diff [-h] [--cached] [file ...]
Show changes between the last commit and working tree, etc.
- rpkg gimmespec [-h]
Print auto-located input spec file name
- rpkg import [-h] [--repo-path REPO_PATH] [--skip-diffs] [--offline] srpm
Import srpm content
- rpkg install [-h] [--target TARGET] [--with OPTION] [--without OPTION] [--outdir OUTDIR] [--spec SPEC] [--short-circuit SHORT_CIRCUIT] [--nocheck]
Local test rpmbuild install
- rpkg lint [-h] [--info] [--rpmlint-config RPMLINT_CONFIG] [target_path]
Run rpmlint against rendered spec and build products if present. Needs rpmlint to be installed.
- rpkg local [-h] [--target TARGET] [--with OPTION] [--without OPTION] [--outdir OUTDIR] [--spec SPEC] [--nocheck]
Local test rpmbuild binary
- rpkg log [-h] [--graph] [--all] [--show-signature] [revision ...] [path ...]
Display git log history
- rpkg merge [-h] [--no-commit] [--squash] [--message MESSAGE] [--file FILE] [--signoff] [--abort] [--continue] [commit ...]
Incorporates changes from the named commits into the current branch
- rpkg new [-h] [--outdir OUTDIR] [--spec SPEC]
Diff against last package tag
- rpkg nvr [-h] [--outdir OUTDIR] [--spec SPEC]
Print package name-version-release
- rpkg prep [-h] [--target TARGET] [--with OPTION] [--without OPTION] [--outdir OUTDIR] [--spec SPEC]
Prep test rpmbuild binary
- rpkg pull [-h] [--rebase] [--no-rebase]
Pull changes from the remote repository and update the working copy
- rpkg push [-h] [--follow-tags] [--force]
Push changes and annotated tags to remote repository
- rpkg reset [-h] [--soft | --mixed | --hard] [commit|path]
Reset branch tip, index, or the working tree
- rpkg sources [-h] [--repo-path REPO_PATH] [--outdir OUTDIR]
Download source files from lookaside cache
- rpkg spec [-h] [--outdir OUTDIR] [--spec SPEC] [--sources] [--print]
Generate spec file from a spec template
- rpkg srpm [-h] [--target TARGET] [--with OPTION] [--without OPTION] [--outdir OUTDIR] [--spec SPEC]
Create a source rpm
- rpkg status [-h] [pathspec ...]
Display git status of the current working tree and index
- rpkg switch [-h] [--create] [--detach] [--list-branches] [--fetch] [target]
Work with branches
- rpkg tag [-h] [--list] [--delete] [--skip-edit] [--name NAME] [--version VERSION] [--release RELEASE] [tag]
Manage git tags
- rpkg unused-patches [-h]
Print list of patches in CWD not referenced by name in the specfile
- rpkg upload [-h] [--repo-path REPO_PATH] [--offline] file [file ...]
Upload source files
- rpkg verify-files [-h] [target_dir]
Locally verify %%files section
Command Reference
rpkg add
usage: rpkg add [-h] [--all] [paths ...]
This command updates the index with changes found in the working tree.
positional arguments:
paths Specific paths to add changes for.
options:
-h, --help show this help message and exit
--all, -A Update index with all changes found in the working tree.
rpkg build
usage: rpkg build [-h] [--outdir OUTDIR] [--spec SPEC] [--config CONFIG]
[--wait]
[project]
Build package in Copr build system. You need to have copr-cli installed and
also set up Copr API key. For more information about the API key, see API KEY
section in copr-cli(1) man page. NOTE: This method of building the package
does not support with, without, and rpmdefines rpkg configuration options.
These options are used to build an srpm which is then sent to Copr but rpm
build in Copr happens without these options already, which is important for
the resulting build. If you want these options applied, you should rather
setup auto-rebuilding in Copr that will react to new pushes into your
repository.
positional arguments:
project Name of the project in format OWNER/PROJECT. You can omit
it if you have specified copr_project configuration option.
options:
-h, --help show this help message and exit
--outdir OUTDIR Where to put any generated rpm content. Directory must
exist.
--spec SPEC An input spec template. If not given, the spec template is
auto-located in <path> as a file ending either with
".spec.rpkg" or ".spec" suffix (in this order). The
directory of the template then also becomes search location
for the associated sources and rpkg.conf file. By default,
these files are being looked up in <path>. Essentially,
this argument changes the subpackage we work with and which
is determined by the --path argument initially (with CWD as
the default value for it).
--config CONFIG Path to an alternative Copr configuration file
--wait, -w Wait for build to finish.
rpkg ci
usage: rpkg ci [-h] [--message MESSAGE | --file FILE] [--all] [--amend]
[--with-changelog] [--tag] [--push] [--signoff]
[file ...]
Alias for commit.
positional arguments:
file Optional list of specific files to commit
options:
-h, --help show this help message and exit
--message, -m MESSAGE
Use the given <msg> as the commit message summary
--file, -F FILE Take the commit message from the given file
--all, -a Tell the command to automatically stage files that
have been modified or deleted.
--amend Replace the tip of the current branch by creating a
new commit.
--with-changelog Get the last changelog from SPEC as commit message
content. This option must be used with -m together.
--tag, -t Create a tag for this commit
--push, -p Commit and push as one action
--signoff, -s Include a signed-off-by
rpkg clean
usage: rpkg clean [-h] [--dry-run] [-x] [--force] [-d]
This command can be used to clean up your work tree from untracked files and,
files described by .gitignore additionally if -x option is passed.
options:
-h, --help show this help message and exit
--dry-run, -n Don't actually remove anything, just show what would be done.
-x Don't exclude files described by .gitignore rules from
deletion.
--force, -f This option is required to perform deletion of any files or
directories if git configuration variable clean.requireForce
is set to true. It is passed by default if rpkg configuration
variable git.clean_force is set to true.
-d Remove whole directories in addition to files. This option is
passed by default if rpkg configuration variable
git.clean_dirs is set to true.
rpkg clog
usage: rpkg clog [-h] [--raw]
This will output the latest rpm changelog entry to stdout. The leading "- "
text will be stripped.
options:
-h, --help show this help message and exit
--raw Generate a more "raw" clog without twiddling the contents
rpkg clone
usage: rpkg clone [-h] [--branches] [--branch BRANCH] [--anonymous]
repo_path [directory]
This command will clone the named repository from the configured repository
base URL. By default it will also checkout the master branch for your working
copy.
positional arguments:
repo_path Name of the repository to clone or full clone url. If
just a basename is specified, preconfigured git clone
urls and default namespace is used to construct the
final clone url.
directory Directory in which to clone the repository
options:
-h, --help show this help message and exit
--branches, -B Checkout a subdirectory for each branch
--branch, -b BRANCH Check out a specific branch. This has no effect if
--branches/-B is specified.
--anonymous, -a Check out a repository anonymously
rpkg commit
usage: rpkg commit [-h] [--message MESSAGE | --file FILE] [--all] [--amend]
[--with-changelog] [--tag] [--push] [--signoff]
[file ...]
This invokes a git commit. All tracked files with changes will be committed
unless a specific file list is provided. $EDITOR will be used to generate a
changelog message unless one is given to the command. A tag or push can be
done at the same time. If you have set git.gpg_keyid rpkg configuration
option, commit and tag will be created signed with the configured GPG key.
positional arguments:
file Optional list of specific files to commit
options:
-h, --help show this help message and exit
--message, -m MESSAGE
Use the given <msg> as the commit message summary
--file, -F FILE Take the commit message from the given file
--all, -a Tell the command to automatically stage files that
have been modified or deleted.
--amend Replace the tip of the current branch by creating a
new commit.
--with-changelog Get the last changelog from SPEC as commit message
content. This option must be used with -m together.
--tag, -t Create a tag for this commit
--push, -p Commit and push as one action
--signoff, -s Include a signed-off-by
rpkg compile
usage: rpkg compile [-h] [--target TARGET] [--with OPTION] [--without OPTION]
[--outdir OUTDIR] [--spec SPEC]
[--short-circuit SHORT_CIRCUIT] [--nocheck]
This command calls rpmbuild to compile the source. By default the prep and
configure stages will be done as well, unless the short-circuit option is
used.
options:
-h, --help show this help message and exit
--target TARGET Prep for a specific arch or arch-vendor-os.
--with OPTION Enable %bcond spec OPTION. Can be specified multiple
times.
--without OPTION Disable %bcond spec OPTION. Can be specified multiple
times.
--outdir OUTDIR Where to put any generated rpm content. Directory must
exist.
--spec SPEC An input spec template. If not given, the spec
template is auto-located in <path> as a file ending
either with ".spec.rpkg" or ".spec" suffix (in this
order). The directory of the template then also
becomes search location for the associated sources and
rpkg.conf file. By default, these files are being
looked up in <path>. Essentially, this argument
changes the subpackage we work with and which is
determined by the --path argument initially (with CWD
as the default value for it).
--short-circuit SHORT_CIRCUIT
short-circuit compile
--nocheck nocheck compile
rpkg config
usage: rpkg config [-h]
Do nothing, only output used config.
options:
-h, --help show this help message and exit
rpkg copr-build
usage: rpkg copr-build [-h] [--outdir OUTDIR] [--spec SPEC] [--config CONFIG]
[--wait]
[project]
Build package in Copr build system.
You need to have copr-cli installed and also set up Copr API key.
For more information about the API key, see API KEY section in
copr-cli(1) man page.
NOTE: This method of building the package does not support
with, without, and rpmdefines rpkg configuration options.
These options are used to build an srpm which is then
sent to Copr but rpm build in Copr happens without
these options already, which is important for the
resulting build. If you want these options applied,
you should rather setup auto-rebuilding in Copr
that will react to new pushes into your repository.
positional arguments:
project Name of the project in format OWNER/PROJECT. You can omit
it if you have specified copr_project configuration option.
options:
-h, --help show this help message and exit
--outdir OUTDIR Where to put any generated rpm content. Directory must
exist.
--spec SPEC An input spec template. If not given, the spec template is
auto-located in <path> as a file ending either with
".spec.rpkg" or ".spec" suffix (in this order). The
directory of the template then also becomes search location
for the associated sources and rpkg.conf file. By default,
these files are being looked up in <path>. Essentially,
this argument changes the subpackage we work with and which
is determined by the --path argument initially (with CWD as
the default value for it).
--config CONFIG Path to an alternative Copr configuration file
--wait, -w Wait for build to finish.
rpkg diff
usage: rpkg diff [-h] [--cached] [file ...]
Use git diff to show changes that have been made to tracked files. By default
cached changes (changes that have been git added) will not be shown.
positional arguments:
file Optionally diff specific files
options:
-h, --help show this help message and exit
--cached View staged changes
rpkg gimmespec
usage: rpkg gimmespec [-h]
Print auto-located input spec file name
options:
-h, --help show this help message and exit
rpkg import
usage: rpkg import [-h] [--repo-path REPO_PATH] [--skip-diffs] [--offline]
srpm
This will extract sources, patches, and the spec file from an srpm and
overwrites the current package content accordingly. It will import to the
current branch by default. Newly discovered sources will be uploaded and
.gitignore and sources file updated accordingly.
positional arguments:
srpm Source rpm to import. It can be also an URL in which
case the target srpm will be downloaded first.
options:
-h, --help show this help message and exit
--repo-path REPO_PATH
Path to git repository for which to upload sources. If
not specified, it will be automatically derived from
remote URL configured for the current branch.
--skip-diffs Don't show diffs when importing.
--offline Do not actually upload the files but do all the rest.
rpkg install
usage: rpkg install [-h] [--target TARGET] [--with OPTION] [--without OPTION]
[--outdir OUTDIR] [--spec SPEC]
[--short-circuit SHORT_CIRCUIT] [--nocheck]
This will call rpmbuild to run the install section. All leading sections will
be processed as well, unless the short-circuit option is used.
options:
-h, --help show this help message and exit
--target TARGET Prep for a specific arch or arch-vendor-os.
--with OPTION Enable %bcond spec OPTION. Can be specified multiple
times.
--without OPTION Disable %bcond spec OPTION. Can be specified multiple
times.
--outdir OUTDIR Where to put any generated rpm content. Directory must
exist.
--spec SPEC An input spec template. If not given, the spec
template is auto-located in <path> as a file ending
either with ".spec.rpkg" or ".spec" suffix (in this
order). The directory of the template then also
becomes search location for the associated sources and
rpkg.conf file. By default, these files are being
looked up in <path>. Essentially, this argument
changes the subpackage we work with and which is
determined by the --path argument initially (with CWD
as the default value for it).
--short-circuit SHORT_CIRCUIT
short-circuit install
--nocheck nocheck install
rpkg lint
usage: rpkg lint [-h] [--info] [--rpmlint-config RPMLINT_CONFIG] [target_path]
Rpmlint can be configured using the --rpmlint-config/-r option or by setting
rpkg.rpmlint_config variable.
positional arguments:
target_path Directory with rpm items to be linted or just a single
rpm item like a .spec file. if not specified, the
latest package directory from base output path will be
selected.
options:
-h, --help show this help message and exit
--info, -i Display explanations for reported messages
--rpmlint-config, -r RPMLINT_CONFIG
Use a specific configuration file for rpmlint
rpkg local
usage: rpkg local [-h] [--target TARGET] [--with OPTION] [--without OPTION]
[--outdir OUTDIR] [--spec SPEC] [--nocheck]
Locally test run of rpmbuild producing binary RPMs.
options:
-h, --help show this help message and exit
--target TARGET Prep for a specific arch or arch-vendor-os.
--with OPTION Enable %bcond spec OPTION. Can be specified multiple
times.
--without OPTION Disable %bcond spec OPTION. Can be specified multiple
times.
--outdir OUTDIR Where to put any generated rpm content. Directory must
exist.
--spec SPEC An input spec template. If not given, the spec template is
auto-located in <path> as a file ending either with
".spec.rpkg" or ".spec" suffix (in this order). The
directory of the template then also becomes search
location for the associated sources and rpkg.conf file. By
default, these files are being looked up in <path>.
Essentially, this argument changes the subpackage we work
with and which is determined by the --path argument
initially (with CWD as the default value for it).
--nocheck nocheck local build
rpkg log
usage: rpkg log [-h] [--graph] [--all] [--show-signature]
[revision ...] [path ...]
Display git log history. Can be configured by git.log_graph and git.log_all
rpkg configuration options.
positional arguments:
revision Specific revisions or revision range to be shown.
path Limit commits to those that touch the specific path(s).
You might need to use a -- to explicitly separate paths
from revisions. In that case, you also need to insert
another -- to first separate options from all the
positional arguments.
options:
-h, --help show this help message and exit
--graph Draw a text-based graphical representation of the commit
history. By default enabled by rpkg configuration option
git.log_graph.
--all Pretend as if all the refs in refs/, along with HEAD, are
listed on the command line as a revision. By default
enabled by rpkg configuration option git.log_all.
--show-signature Show gpg signatures and check their validity.
rpkg merge
usage: rpkg merge [-h] [--no-commit] [--squash] [--message MESSAGE]
[--file FILE] [--signoff] [--abort] [--continue]
[commit ...]
Incorporates changes from the named commits (since the time their histories
diverged from the current branch) into the current branch.
positional arguments:
commit Commits, usually other branch heads, to merge into our
branch. If no commit is given, merge the remote-
tracking branches that the current branch is
configured to use as its upstream.
options:
-h, --help show this help message and exit
--no-commit Perform the merge but do not auto-commit.
--squash Produce the working tree and index state as if a real
merge happened but do not auto-commit. The next commit
will have only a single parent and contain all the
merged changes.
--message, -m MESSAGE
Use the given <msg> as the commit message summary.
--file, -F FILE Take the commit message from the given file.
--signoff Add Signed-off-by line by the committer.
--abort Abort the current conflict resolution process, and try
to reconstruct the pre-merge state.
--continue When all your merge conflicts have been resolved, you
can conclude the merge by running this command.
rpkg new
usage: rpkg new [-h] [--outdir OUTDIR] [--spec SPEC]
This will use git to show a diff of all the changes (even uncommitted changes)
since the last package tag was created.
options:
-h, --help show this help message and exit
--outdir OUTDIR Where to put any generated rpm content. Directory must
exist.
--spec SPEC An input spec template. If not given, the spec template is
auto-located in <path> as a file ending either with
".spec.rpkg" or ".spec" suffix (in this order). The
directory of the template then also becomes search location
for the associated sources and rpkg.conf file. By default,
these files are being looked up in <path>. Essentially,
this argument changes the subpackage we work with and which
is determined by the --path argument initially (with CWD as
the default value for it).
rpkg nvr
usage: rpkg nvr [-h] [--outdir OUTDIR] [--spec SPEC]
Print package name-version-release
options:
-h, --help show this help message and exit
--outdir OUTDIR Where to put any generated rpm content. Directory must
exist.
--spec SPEC An input spec template. If not given, the spec template is
auto-located in <path> as a file ending either with
".spec.rpkg" or ".spec" suffix (in this order). The
directory of the template then also becomes search location
for the associated sources and rpkg.conf file. By default,
these files are being looked up in <path>. Essentially,
this argument changes the subpackage we work with and which
is determined by the --path argument initially (with CWD as
the default value for it).
rpkg prep
usage: rpkg prep [-h] [--target TARGET] [--with OPTION] [--without OPTION]
[--outdir OUTDIR] [--spec SPEC]
Use rpmbuild to "prep" the sources (unpack the source archive(s) and apply any
patches).
options:
-h, --help show this help message and exit
--target TARGET Prep for a specific arch or arch-vendor-os.
--with OPTION Enable %bcond spec OPTION. Can be specified multiple
times.
--without OPTION Disable %bcond spec OPTION. Can be specified multiple
times.
--outdir OUTDIR Where to put any generated rpm content. Directory must
exist.
--spec SPEC An input spec template. If not given, the spec template is
auto-located in <path> as a file ending either with
".spec.rpkg" or ".spec" suffix (in this order). The
directory of the template then also becomes search
location for the associated sources and rpkg.conf file. By
default, these files are being looked up in <path>.
Essentially, this argument changes the subpackage we work
with and which is determined by the --path argument
initially (with CWD as the default value for it).
rpkg pull
usage: rpkg pull [-h] [--rebase] [--no-rebase]
This command uses git to fetch remote changes and apply them to the current
working copy. A rebase option is available which can be used to avoid merges.
options:
-h, --help show this help message and exit
--rebase Rebase the locally committed changes on top of the remote
changes after fetching. This can avoid a merge commit, but does
rewrite local history.
--no-rebase Do not rebase, overriding .git settings to the contrary
rpkg push
usage: rpkg push [-h] [--follow-tags] [--force]
Push changes and annotated tags to remote repository.
options:
-h, --help show this help message and exit
--follow-tags Push all the refs that would be pushed without this option
and also push annotated tags reachable from the refs that are
pushed by default. This option is passed by default if
git.push_follow_tags configuration variable is set to true.
--force, -f Force push
rpkg reset
usage: rpkg reset [-h] [--soft | --mixed | --hard] [commit|path]
Reset HEAD to the specified commit and update index and/or working tree.
Alternatively, if path is passed instead of commit, reset the respective index
entry to its state at HEAD.
positional arguments:
commit|path Commit or path. If path is passed, the respective index entry
is updated to its HEAD state, otherwise the action depends on
the specified option switch (--mixed is implicit).
options:
-h, --help show this help message and exit
--soft Does not touch the index file or the working tree. Only resets
the head to the specified commit.
--mixed Resets the index but not the working tree. This is the default
action.
--hard Resets the index and working tree. Any changes to tracked files
in the working tree since the specified commit are discarded.
rpkg sources
usage: rpkg sources [-h] [--repo-path REPO_PATH] [--outdir OUTDIR]
Download source files from lookaside cache.
options:
-h, --help show this help message and exit
--repo-path REPO_PATH
Path to git repository for which to download sources.
If not specified, it will be automatically derived
from remote URL configured for the current branch.
--outdir OUTDIR Directory to put downloaded files into (defaults to
cwd)
rpkg spec
usage: rpkg spec [-h] [--outdir OUTDIR] [--spec SPEC] [--sources] [--print]
Preprocess a given spec template and put the resulting spec file into outdir.
The spec template is simply copied into the outdir if spec preprocessing is
turned off or if the input spec template does not contain any preprocessor
macros.
options:
-h, --help show this help message and exit
--outdir OUTDIR Where to put any generated rpm content. Directory must
exist.
--spec SPEC An input spec template. If not given, the spec template is
auto-located in <path> as a file ending either with
".spec.rpkg" or ".spec" suffix (in this order). The
directory of the template then also becomes search location
for the associated sources and rpkg.conf file. By default,
these files are being looked up in <path>. Essentially,
this argument changes the subpackage we work with and which
is determined by the --path argument initially (with CWD as
the default value for it).
--sources Enable source generation by the input spec template. By
default disabled.
--print, -p Print rendered spec file to stdout.
rpkg srpm
usage: rpkg srpm [-h] [--target TARGET] [--with OPTION] [--without OPTION]
[--outdir OUTDIR] [--spec SPEC]
Create a source rpm
options:
-h, --help show this help message and exit
--target TARGET Prep for a specific arch or arch-vendor-os.
--with OPTION Enable %bcond spec OPTION. Can be specified multiple
times.
--without OPTION Disable %bcond spec OPTION. Can be specified multiple
times.
--outdir OUTDIR Where to put any generated rpm content. Directory must
exist.
--spec SPEC An input spec template. If not given, the spec template is
auto-located in <path> as a file ending either with
".spec.rpkg" or ".spec" suffix (in this order). The
directory of the template then also becomes search
location for the associated sources and rpkg.conf file. By
default, these files are being looked up in <path>.
Essentially, this argument changes the subpackage we work
with and which is determined by the --path argument
initially (with CWD as the default value for it).
rpkg status
usage: rpkg status [-h] [pathspec ...]
Display git status of the current working tree and index.
positional arguments:
pathspec Limit status information to the specific subpaths.
options:
-h, --help show this help message and exit
rpkg switch
usage: rpkg switch [-h] [--create] [--detach] [--list-branches] [--fetch]
[target]
Switch to a given git branch. If --detach option is given, also tag, or a
commit can be used as a target for switching. Additionally, this command can
be used to list the existing local and remote branches or to fetch new refs
from remote.
positional arguments:
target Target branch name or alternatively, commit or tag to
switch to. If provided with a remote branch name that
does not have a local match, it creates one and sets it
to track the corresponding remote branch.
options:
-h, --help show this help message and exit
--create, -c Create a new local branch even if it does not have the
corresponding remote and switch to it.
--detach, -d Detach HEAD at target commit or tag.
--list-branches, -l List both remote-tracking branches and local branches.
Implied when target is not specified.
--fetch Fetch branches and tags from remote before switch.
rpkg tag
usage: rpkg tag [-h] [--list] [--delete] [--skip-edit] [--name NAME]
[--version VERSION] [--release RELEASE]
[tag]
This command uses git to create, list, or delete tags. If you have set
git.gpg_keyid in rpkg configuraion, the tags will be created signed.
positional arguments:
tag Name of the tag. Overrides any of the --name,
--version, --release args if specified
options:
-h, --help show this help message and exit
--list, -l List all tags with a given pattern, or all if not
pattern is given
--delete, -d Delete a tag
--skip-edit, -s Skip changelog editing when creating a tag.
--name, -n NAME Set package name part of the tag name to specific
value.
--version, -v VERSION
Set version part of the tag name to specific value.
--release, -r RELEASE
Set release part of the tag name to specific value.
rpkg unused-patches
usage: rpkg unused-patches [-h]
Print list of patches in current working directory not referenced by name in
the specfile.
options:
-h, --help show this help message and exit
rpkg upload
usage: rpkg upload [-h] [--repo-path REPO_PATH] [--offline] file [file ...]
This command will upload new source file(s) to lookaside cache. Source file
names are appended to sources file, and .gitignore will be also updated with
new uploaded file(s). Please remember to commit them.
positional arguments:
file List of files to upload
options:
-h, --help show this help message and exit
--repo-path REPO_PATH
Path to git repository for which to upload sources. If
not specified, it will be automatically derived from
remote URL configured for the current branch.
--offline Do not actually upload the files but do all the rest,
which involves updating .gitignore and sources file.
rpkg verify-files
usage: rpkg verify-files [-h] [target_dir]
Locally run 'rpmbuild -bl' to verify the spec file's %%files sections. This
requires a successful run of the install commaned in advance.
positional arguments:
target_dir Directory with build results to verify. If not specified, the
latest package directory from base output path will be selected.
options:
-h, --help show this help message and exit
Configuration
rpkg reads configuration options from the following files in this order:
/etc/rpkg.conf, ~/.config/rpkg.conf, <git_root>/rpkg.conf, <pkg_path>/rpkg.conf
Configuration found in <pkg_path>/rpkg.conf has the highest priority. Configuration found in /etc/rpkg.conf has the lowest priority. <git_root> placeholder above is the top level of the Git repository we are working in. If we are in a plain directory (i.e. there is not .git subdir) and all our parent directories are also plain, reading of <git_root>/rpkg.conf is skipped. <pkg_path> is CWD, by default, but it can be overriden with --path argument and --spec argument, the latter having higher priority.
There are also built-in default values for each variable that are used if the variable is not specified in any configuration file. You can see them below together with the variable descriptions.
Default Configuration with Descriptions
[rpkg]
# Whether to enable spec preprocessing,
# that is parsing and evaluation of {{{ ... }}} expressions
# type: bool
preprocess_spec = True
# Base directory where generated files should be put.
# The files will not be put directly there but
# instead into dynamically generated subdirectories
# type: string
base_output_path = /tmp/rpkg
# Path to user preproc macros. You may use ${git_props:root}
# variable to anchor the path to top-level of your git repo.
# type: list of space-separated strings
user_macros =
# rpm bcondition "with" specifier
# type: list of space-separated strings
with =
# rpm bcondition "without" specifier
# type: list of space-separated strings
without =
# Defines rpm variables for spec parsing
# type: list of space-separated quoted string pairs (e.g. 'dist %nil')
rpmdefines =
# Defines rpm variables for spec parsing during
# version/release bumping (see the tag subcommand)
# This list is not being concatenated with rpmdefines.
# type: list of space-separated quoted string pairs
bump_rpmdefines = 'dist %nil'
# Path to rpmlint configuration (see the lint subcommand)
# type: string
rpmlint_config =
# Paths to default preproc macros relative to
# /usr/lib/rpkg.macros.d directory
# type: list of space-separated strings
default_macros = git.bash
[git]
# Default Git repository URL, used by `rpkg clone <repo_path>`
# type: string
clone_url =
# Default Git repository URL, used by `rpkg clone -a <repo_path>`
# type: string
anon_clone_url =
# If you clone a project with rpkg clone and specify only
# its basename (i.e. the last part like "dist-git"), then
# default namespace (e.g. rpms) will be automatically
# prepended to it together with ending slash if specified.
# type: string
default_namespace =
# Whether to automatically push tags with rpkg push
# type: bool
push_follow_tags = True
# Allows removing of files and directories
# for rpkg clean operation
# type: bool
clean_force = True
# Whether rpkg clean should descend into
# untracked directories
# type: bool
clean_dirs = True
# Whether rpkg log should be in graph form
# type: bool
log_graph = True
# Whether rpkg log should display all branches
# type: bool
log_all = True
# Key to sign commits and tags with. Specifying
# it enables signing.
# type: bool
gpg_keyid =
# In which Copr project to build a package by using
# rpkg build command, in form: user/project or @group/project
# type: string
copr_project =
[lookaside]
# Download URL for DistGit lookaside cache, used by rpkg sources.
# There are some dynamic variables that you can use:
# %(repo_path)s is a fully-namespaced repository name (e.g. rpms/rpkg-util)
# %(ns<n>)s, ..., %(ns2)s, %(ns1)s, %(name)s is %(repo_path)s split into individual components.
# E.g. forks/praiskup/rpms/passwd path will provide variables: %(ns3)s == forks, %(ns2)s == praiskup, %(ns1)s == rpms, %(name)s == passwd
# %(filename)s, %(hashtype)s, %(hash)s fields are read from 'sources' file, if present.
# Further, you can use ${git_props:remote_netloc} interpolation
# variable to base the download URL on git clone URL.
# type: string
download_url =
# Upload URL for DistGit lookaside cache, used by rpkg upload.
# You can use ${git_props:remote_netloc} interpolation
# variable to base the download URL on git clone URL.
# type: string
upload_url =
# For client certificate authentication if employed
# by the server
# type: string
client_cert =
# For client certificate authentication if employed
# by the server
# type: string
client_key =
# For client certificate authentication if employed
# by the server
# type: string
ca_cert =
Dynamic Configuration Sections
There are also other config sections which are dynamically added by rpkg during runtime. These are [DEFAULT] (containing user, path, and pkg_path properties) and [git_props] (containing lots of git status specific information). You can print the whole final config (including those sections) with rpkg config command.
Interpolation
When specifying configuration values, you can use interpolation to reference another configuration variable even from another section. The syntax is: ${<section name>:<param name>} (e.g. ${git_props:remote_netloc}).
There is also %(<var>)s interpolation for some fields like lookaside:download_url. The variables you can interpolate like this are always field-specific.
Examples
Run %prep phase of an rpm build:
$ rpkg prep
git_dir_pack: packing path /home/clime/rpkg-util
git_dir_pack: Wrote: /tmp/rpkg/rpkg-util-12-ft3gm2mw/rpkg-util-f01b36d7-dirty.tar.gz
Wrote: /tmp/rpkg/rpkg-util-12-ft3gm2mw/rpkg-util.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.iqrI6z
+ umask 022
+ cd /tmp/rpkg/rpkg-util-12-ft3gm2mw
+ cd /tmp/rpkg/rpkg-util-12-ft3gm2mw
+ rm -rf rpkg-util
+ /usr/bin/gzip -dc /tmp/rpkg/rpkg-util-12-ft3gm2mw/rpkg-util-f01b36d7-dirty.tar.gz
+ /usr/bin/tar -xof -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd rpkg-util
+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ RPM_EC=0
++ jobs -p
+ exit 0
Generate spec file from a template:
$ rpkg spec
Wrote: /tmp/rpkg/rpkg-util-13-53194610/rpkg-util.spec
Build srpm:
$ rpkg srpm
git_dir_pack: packing path /home/clime/rpkg-util
git_dir_pack: Wrote: /tmp/rpkg/rpkg-util-14-q3t0g4um/rpkg-util-f01b36d7-dirty.tar.gz
Wrote: /tmp/rpkg/rpkg-util-14-q3t0g4um/rpkg-util.spec
Wrote: /tmp/rpkg/rpkg-util-14-q3t0g4um/rpkg-util-3.prototype.git.229.f01b36d7.dirty.02idw5-1.fc31.src.rpm
Spec Templates
Apart from being useful as a means to handle unpacked as well as packed content, they also make it possible to generate certain parts of your spec file automatically from a Git repository where your spec file is located. You need to have "preprocess_spec" configuration option set to True in rpkg config to use this functionality.
Basic Example
Name: {{{ git_dir_name }}}
Version: {{{ git_dir_version }}}
Release: 1%{?dist}
Summary: This is a test package.
License: GPLv2+
URL: https://someurl.org
VCS: {{{ git_dir_vcs }}}
Source: {{{ git_dir_pack }}}
%description
This is a test package.
%prep
{{{ git_dir_setup_macro }}}
%changelog
{{{ git_dir_changelog }}}
Having a spec template like this in your project (instead of just a plain spec file) allows you to build source and rpm packages automatically following git history of your project.
Macro Reference
Please, see dedicated rpkg-macros page.
User-Defined Macros
You can define your own rpkg macros. They are basically just standard bash functions read from file specified by user_macros config variable. When used, standard output of your custom macro will be captured and the {{{ <macro_name> }}} invocation in an input spec file will be replaced with it.
Example of a custom macro placed in repo-specific rpkg.macros file:
function my_git_commits_no {
total_commits=$(git rev-list --all --count)
echo -n "$total_commits"
}
If you have got rpkg.macros file with this content in git top-level directory for your project, then also create rpkg.conf file in your top-level dir with at least the following content:
[rpkg]
user_macros = ${git_props:root}/rpkg.macros
This will enable reading of the custom user macros. In the spec file, you can then e.g. use this snippet:
Release: {{{ my_git_commits_no }}}
to enable generating release based on total number of commits.