fedpkg(1)

πŸ“¦
version 1.48 Β· 5 versions
, in fedora 43, fedora 44

πŸ’– fedpkg β€” the rpm-packager manual, but make it make sense πŸ’–

okay bestie, welcome to the fedpkg page of the rpm-packager manual. yes, this is the whole thing, and no, we are not skimming, because every single flag matters. grab a strawberry πŸ“ and let's go.


✨ NAME ✨

fedpkg β€” the RPM Packaging utility. that's it, that's the name, she's simple but she runs the whole group chat.


✨ SYNOPSIS ✨

so here's how you actually talk to her:

fedpkg [ global_options ] command [ command_options ] [
command_arguments ]
fedpkg help
fedpkg command --help

three whole ways to pull up: throw global options + a command + that command's options + args, or just ask for help, or ask a specific command for --help. iconic behaviour honestly.


✨ DESCRIPTION ✨

fedpkg is a script that talks to the RPM Packaging system for you. she's the friend who handles the awkward stuff so you don't have to.


🌸 Global Options 🌸

these are the settings that apply no matter which command you're running. the main-character flags, if you will πŸ‘‘

  • --config, -C CONFIG β€” tell her which config file to use. like, "bestie, use this one."
  • --dry-run β€” do a whole dry run. all the vibes, none of the consequences πŸ’…
  • --release RELEASE β€” override the release she discovered, e.g. f25. and heads up, this has to match the remote branch name that was created in the package repository. specifically: use the rawhide/main branch to build RPMs for rawhide. fr fr, it has to match.
  • --name NAME β€” override the repository name. if you wanna change the namespace too, that's what --namespace is for. and if you don't specify a name at all, she goes hunting for it in this exact order: from the Git push URL, or from the Git URL (that's the last part of the path with the .git extension removed), or from the Name macro in the spec file. first one she finds wins.
  • --namespace NAMESPACE β€” the package repository namespace. leave it out and it defaults to rpms if namespace is enabled.
  • --user USER β€” override the user name she discovered.
  • --password PASSWORD β€” the password for Koji login πŸ”
  • --runas RUNAS β€” run Koji commands as a different user. main character energy, borrowed account edition.
  • --path PATH β€” define the directory to work in. defaults to cwd, obviously.
  • --verbose, -v β€” run with verbose debug output. she will tell you everything.
  • --debug, -d β€” run with debug output.
  • -q β€” run quietly, only displaying errors. the "no thoughts, only problems" mode 😭
  • --user-config USER_CONFIG β€” specify a user config file to use.

and that's just the warm-up, because there's so much more coming. stay tuned bestie πŸ¦‹

🌸 COMMAND OVERVIEW 🌸

okay bestie, this is the master list β€” every single subcommand fedpkg has, with its exact usage line and a lil sum-up of what it does. bookmark this one, fr fr. πŸ’–


  • fedpkg build β€” bestie this one requests a build, like the whole point of your life rn πŸ”₯
fedpkg build [-h] [--arches [ARCHES ...]] [--md5] [--nowait] [--target TARGET] [--background] [--fail-fast] [--skip-remote-rules-validation] [--skip-nvr-check] [--custom-user-metadata CUSTOM_USER_METADATA] [--skip-tag] [--scratch | --draft] [--srpm [SRPM]] [--srpm-mock] [--root CONFIG]
  • fedpkg chain-build β€” builds the current package in order with the other packages you name, like a lil conga line of builds πŸŽ€
fedpkg chain-build [-h] [--arches [ARCHES ...]] [--md5] [--nowait] [--target TARGET] [--background] [--fail-fast] [--skip-remote-rules-validation] [--skip-nvr-check] [--custom-user-metadata CUSTOM_USER_METADATA] package [package ...]
  • fedpkg ci β€” literally just an alias for commit, nothing more, we love a shortcut ✨
fedpkg ci [-h] [-m MESSAGE] [--with-changelog] [-c] [--raw] [-t] [-F FILE] [-p] [-s] [files ...]
  • fedpkg clean β€” yeets the untracked files out of your tree, so satisfying 🧹
fedpkg clean [-h] [-x]
  • fedpkg clog β€” makes a clog file holding the top changelog entry, chef's kiss for writing commit messages πŸ“
fedpkg clog [-h] [--raw]
  • fedpkg clone β€” clones and checks out a repository, the classic πŸ’…
fedpkg clone [-h] [--branches] [--branch BRANCH] [--anonymous] [--depth DEPTH] repo [clone_target] ...
  • fedpkg co β€” alias for clone, shorter to type, main character energy ⌨️
fedpkg co [-h] [--branches] [--branch BRANCH] [--anonymous] [--depth DEPTH] repo [clone_target] ...
  • fedpkg commit β€” commits your changes, the moment of truth 🫢
fedpkg commit [-h] [-m MESSAGE] [--with-changelog] [-c] [--raw] [-t] [-F FILE] [-p] [-s] [files ...]
  • fedpkg compile β€” a local test rpmbuild compile, for when you wanna see it before you commit to it πŸ¦‹
fedpkg compile [-h] [--builddir BUILDDIR] [--buildrootdir BUILDROOTDIR] [--arch ARCH] [--define DEFINE] [--short-circuit] [--nocheck] ...
  • fedpkg container-build β€” builds a container, periodt πŸ“¦
fedpkg container-build [-h] [--target TARGET] [--nowait] [--background] [--build-release BUILD_RELEASE] [--isolated] [--koji-parent-build KOJI_PARENT_BUILD] [--scratch] [--arches [ARCHES ...]] [--repo-url URL [URL ...]] [--signing-intent SIGNING_INTENT] [--skip-remote-rules-validation] [--skip-build] [--compose-id COMPOSE_ID [COMPOSE_ID ...]] [--replace-dependency PKG_MANAGER:NAME:VERSION[:NEW_NAME] [PKG_MANAGER:NAME:VERSION[:NEW_NAME] ...]]
  • fedpkg container-build-setup β€” sets the options for container-build βš™οΈ
fedpkg container-build-setup [-h] (--get-autorebuild | --set-autorebuild {true,false})
  • fedpkg copr-build β€” builds the package over in Copr, cute lil side quest πŸ—οΈ
fedpkg copr-build [-h] [--config CONFIG] [--nowait] project ...
  • fedpkg diff β€” shows changes between commits, between a commit and the working tree, etc etc etc πŸ‘€
fedpkg diff [-h] [--cached] [files ...]
  • fedpkg disable-monitoring β€” turns OFF monitoring for the current repo, she's on do-not-disturb mode πŸ™ˆ
fedpkg disable-monitoring [-h]
  • fedpkg flatpak-build β€” builds a Flatpak 🌈
fedpkg flatpak-build [-h] [--target TARGET] [--nowait] [--background] [--build-release BUILD_RELEASE] [--isolated] [--koji-parent-build KOJI_PARENT_BUILD] [--scratch] [--arches [ARCHES ...]] [--repo-url URL [URL ...]] [--signing-intent SIGNING_INTENT] [--skip-remote-rules-validation] [--skip-build]
  • fedpkg fork β€” makes a brand new fork of the current repository, go get your own copy bestie 🍴
fedpkg fork [-h] [--anonymous]
  • fedpkg gimmespec β€” prints the spec file name. that's it. that's the command. πŸ’€
fedpkg gimmespec [-h]
  • fedpkg gitbuildhash β€” prints the git hash that was used to build the n-v-r you hand it πŸ”
fedpkg gitbuildhash [-h] build
  • fedpkg giturl β€” prints the git url used for building πŸ”—
fedpkg giturl [-h]
  • fedpkg help β€” shows usage, your lil safety net πŸ›Ÿ
fedpkg help [-h]
  • fedpkg import β€” imports srpm content into a module πŸ“₯
fedpkg import [-h] [--skip-diffs] [--offline] [--do-not-check-specfile-name] srpm
  • fedpkg install β€” a local test rpmbuild install πŸ› οΈ
fedpkg install [-h] [--builddir BUILDDIR] [--buildrootdir BUILDROOTDIR] [--arch ARCH] [--define DEFINE] [--short-circuit] [--nocheck] [--with BCOND_WITH] [--without BCOND_WITHOUT] ...
  • fedpkg lint β€” runs rpmlint against the local spec and the build output, if present 🧼
fedpkg lint [-h] [--info] [--rpmlintconf RPMLINTCONF]
  • fedpkg list-side-tags β€” lists the side-tags that already exist 🏷️
fedpkg list-side-tags [-h] [--mine | --user TAG_OWNER | --base-tag BASE_TAG]
  • fedpkg local β€” a local test rpmbuild binary, lowkey the quickest vibe check πŸ’«
fedpkg local [-h] [--builddir BUILDDIR] [--buildrootdir BUILDROOTDIR] [--arch ARCH] [--define DEFINE] [--md5] [--with BCOND_WITH] [--without BCOND_WITHOUT] ...
  • fedpkg mock-config β€” generates a mock config πŸ§ͺ
fedpkg mock-config [-h] [--target TARGET] [--arch ARCH]
  • fedpkg mockbuild β€” a local test build using mock, the real deal πŸ”₯
fedpkg mockbuild [-h] [--root CONFIG] [--md5] [--no-clean] [--no-cleanup-after] [--no-clean-all] [--with BCOND_WITH] [--without BCOND_WITHOUT] [--shell] [--enablerepo ENABLEREPO] [--disablerepo DISABLEREPO] [--enable-network] [--srpm-mock] [--use-koji-mock-config | --use-local-mock-config] [--default-mock-resultdir] [--extra-pkgs [EXTRA_PKGS ...]] ...
  • fedpkg new β€” diffs against the last tag πŸ†•
fedpkg new [-h]
  • fedpkg new-package β€” scaffolds a whole new package directory with a spec template, like a starter pack 🎁
fedpkg new-package [-h] [-t TYPE] [--list-types] [name]
  • fedpkg new-sources β€” uploads source files πŸ†™
fedpkg new-sources [-h] [--offline] files [files ...]
  • fedpkg override β€” manages buildroot overrides πŸŽ›οΈ
fedpkg override [-h] {create,extend} ...
  • fedpkg patch β€” creates and adds a gendiff patch file 🩹
fedpkg patch [-h] [--rediff] suffix
  • fedpkg pre-push-check β€” checks whether the eventual git push command could actually go through, a lil pre-flight check ✈️
fedpkg pre-push-check [-h] [ref]
  • fedpkg prep β€” a local test rpmbuild prep 🧴
fedpkg prep [-h] [--builddir BUILDDIR] [--buildrootdir BUILDROOTDIR] [--arch ARCH] [--define DEFINE] [--check-deps] ...
  • fedpkg pull β€” pulls changes from the remote repository and updates the working copy, stay in sync bestie πŸ”„
fedpkg pull [-h] [--rebase] [--no-rebase]
  • fedpkg push β€” pushes your changes to the remote repository, moment of truth part two πŸš€
fedpkg push [-h] [--force] [--no-verify]
  • fedpkg releases-info β€” prints the Fedora or EPEL releases that are currently active πŸ“…
fedpkg releases-info [-h] [-e | -f | -j]
  • fedpkg remote β€” operations with tracked repositories (remotes). ⚠️ heads up: this is an experimental interface, so treat it gently πŸ§ͺ
fedpkg remote [-h] {add} ...
  • fedpkg remove-side-tag β€” removes a side tag, and no, it does not merge the packages, don't come for me πŸ—‘οΈ
fedpkg remove-side-tag [-h] TAG
  • fedpkg repo-status β€” prints the package version in the Fedora/EPEL repositories πŸ“Š
fedpkg repo-status [-h] [-a | -e | -f] [--package NAME]
  • fedpkg request-branch β€” requests a brand new dist-git branch 🌿
fedpkg request-branch [-h] [--repo NAME] [--namespace {rpms,container,flatpaks}] [--sl [SL ...]] [--no-git-branch] [--no-auto-module] [--all-releases] [branch]
  • fedpkg request-repo β€” requests a whole new dist-git repository 🏠
fedpkg request-repo [-h] [--namespace {rpms,container,flatpaks}] [--description DESCRIPTION] [--monitor {no-monitoring,monitoring,monitoring-with-scratch}] [--upstreamurl UPSTREAMURL] [--summary SUMMARY] [--exception] [--project-name PROJECT_NAME] [--backend {BitBucket,Cgit,CPAN,CRAN,crates.io,Debian project,Drupal6,Drupal7,folder,Freshmeat,GitHub,GitLab,Gitea,GNOME,GNU Project,Gogs,Google code,Hackage,Launchpad,Maven Central,npmjs,Packagist,pagure,PEAR,PECL,PyPI,Rubygems,Sourceforge,Sourceforge (git),SourceHut,Stackage,custom}] [--no-initial-commit] [--onboard-packit {no,pull-request,push}] name [bug]
  • fedpkg request-side-tag β€” creates a new side tag ✨
fedpkg request-side-tag [-h] [--base-tag BASE_TAG] [--suffix SUFFIX]
  • fedpkg request-tests-repo β€” requests a new tests dist-git repository πŸ§ͺ
fedpkg request-tests-repo [-h] [--bug BUG] name description
  • fedpkg request-unretirement β€” requests an unretirement of the package branch, bringing it back from the dead 🧟
fedpkg request-unretirement [-h] [--repo NAME] [--namespace NS] [--bz_bug_id BUG_ID] [-b BRANCHES [BRANCHES ...]]
  • fedpkg retire β€” retires a package/module. sad girl hours 😭
fedpkg retire [-h] reason
  • fedpkg scratch-build β€” requests a scratch build (throwaway build, no tag, no stress) 🎯
fedpkg scratch-build [-h] [--arches [ARCHES ...]] [--md5] [--nowait] [--target TARGET] [--background] [--fail-fast] [--skip-remote-rules-validation] [--skip-nvr-check] [--custom-user-metadata CUSTOM_USER_METADATA] [--srpm [SRPM]] [--srpm-mock] [--root CONFIG]
  • fedpkg set-distgit-token β€” updates the fedpkg.distgit API token in the ~/.config/rpkg/fedpkg.conf file. πŸ”
fedpkg set-distgit-token [-h]
tokens are length 64 and contain ONLY uppercase and numerical values, no lowercase bestie. the new API token can be generated at: https://src.fedoraproject.org/settings/token/new
  • fedpkg set-forgejo-token β€” updates the fedpkg.forgejo API token in the ~/.config/rpkg/fedpkg.conf file. πŸ”‘
fedpkg set-forgejo-token [-h]
the new API token can be generated at: https://forge.fedoraproject.org/user/settings/applications
  • fedpkg sources β€” downloads the source files ⬇️
fedpkg sources [-h] [--outdir OUTDIR] [--force] [--offline]
  • fedpkg srpm β€” creates a source rpm πŸ“¦
fedpkg srpm [-h] [--builddir BUILDDIR] [--buildrootdir BUILDROOTDIR] [--arch ARCH] [--define DEFINE] [--md5] [--srpm-mock] [--no-clean] [--no-cleanup-after] [--no-clean-all] [--offline] [--root CONFIG] ...
  • fedpkg switch-branch β€” works with branches, hop between them like it's nothing 🌿
fedpkg switch-branch [-h] [-l] [--fetch] [branch]
  • fedpkg tag β€” management of git tags 🏷️
fedpkg tag [-h] [-f] [-m MESSAGE] [-c] [--raw] [-F FILE] [-l] [-d] [tag]
  • fedpkg unused-patches β€” prints the list of patches that are NOT referenced by name in the specfile, the forgotten ones πŸ₯²
fedpkg unused-patches [-h]
  • fedpkg update β€” submits the last build as an update 🚒
fedpkg update [-h] [--type {bugfix,security,enhancement,newpackage,unspecified}] [--request {testing,stable}] [--bugs BUGS [BUGS ...]] [--notes NOTES | --notes-file NOTES_FILE] [--disable-autokarma] [--stable-karma KARMA] [--unstable-karma KARMA] [--not-close-bugs] [--no-require-bugs] [--no-require-testcases] [--severity {unspecified,low,medium,high,urgent}] [--suggest-reboot | --suggest-logout]
  • fedpkg upload β€” uploads source files ‴️
fedpkg upload [-h] [--offline] files [files ...]
  • fedpkg verify-files β€” locally verifies the %%files section, catching problems before anyone else has to πŸ‘‘πŸ“
fedpkg verify-files [-h] [--builddir BUILDDIR] [--buildrootdir BUILDROOTDIR] [--arch ARCH] [--define DEFINE] ...
  • fedpkg verrel β€” prints the name-version-release. iconic. πŸ’œ
fedpkg verrel [-h] [--json]

πŸ“– COMMAND REFERENCE πŸ“–

🌟 fedpkg build

here's the full tea on the big one πŸ’…

usage: fedpkg build [-h] [--arches [ARCHES ...]] [--md5] [--nowait]
                    [--target TARGET] [--background] [--fail-fast]
                    [--skip-remote-rules-validation]
                    [--skip-nvr-check]
                    [--custom-user-metadata CUSTOM_USER_METADATA]
                    [--skip-tag] [--scratch | --draft]
                    [--srpm [SRPM]] [--srpm-mock] [--root CONFIG]

so this command requests a build of the package in the build system. by default it figures out the target to build for all on its own based on branch data (slay, it just knows), and it uses the latest commit as the build source. ✨


and bestie, it gets better: fedpkg can also submit multiple builds to Koji at once from a stream branch, based on a local config that lives inside the repository. 🫢 the config file is named package.cfg and it's in INI format. for example:

[koji]
targets = rawhide fedora epel7

you only need to put Fedora releases and EPEL in the targets option and fedpkg will convert it into the proper Koji build target for submitting builds. and beside regular release names, the targets option also accepts two shortcut names: fedora and epel, just like you can see in the example above. πŸ‘‘

  • fedora stands for the current active Fedora releases
  • epel stands for the active EPEL releases, which are el6 and epel7 currently

no cap, that's the whole thing. 🌈

Oh and one quick PSA before we get into the flags β€” that config file is a branch specific file. Which means you could literally create a package.cfg for each stream branch <em>separately</em>, to indicate which targets to build the package for on that particular stream. πŸ’… Per-stream customisation, we love to see it.

✨ options ✨

  • -h, --help β€” show this help message and exit, the classic
  • --arches [ARCHES ...] β€” build for specific arches
  • --md5 β€” use md5 checksums (for older rpm hosts) 🫢
  • --nowait β€” don't wait on build, we're busy
  • --target TARGET β€” define the build target to build into
  • --background β€” run the build at a low priority
  • --fail-fast β€” fail the build immediately if any arch fails
  • --skip-remote-rules-validation β€” don't check if there's a valid gating.yaml file in the repo, where you can define additional policies for Greenwave gating.
  • --skip-nvr-check β€” submit build to buildsystem without check if NVR was already built. NVR is constructed locally and may be different from NVR constructed during build on builder.
  • --custom-user-metadata CUSTOM_USER_METADATA β€” provide a JSON string of custom metadata to be deserialized and stored under the build's extra.custom_user_metadata field
  • --skip-tag β€” do not attempt to tag package
  • --scratch β€” perform a scratch build
  • --draft β€” perform a draft build
  • --srpm [SRPM] β€” build from an srpm. If no srpm is provided with this option an srpm will be generated from current module content.
  • --srpm-mock β€” build from an srpm. Source rpm will be generated in 'mock' instead of 'rpmbuild'.
  • --root, --mock-config, -r CONFIG β€” override mock configuration (like mock -r)

🌈 fedpkg chain-build 🌈

okay this one is the collab era of builds, bestie. usage be like:

usage: fedpkg chain-build [-h] [--arches [ARCHES ...]] [--md5] [--nowait]
                          [--target TARGET] [--background] [--fail-fast]
                          [--skip-remote-rules-validation] [--skip-nvr-check]
                          [--custom-user-metadata CUSTOM_USER_METADATA]
                          package [package ...]

Build current package in order with other packages. πŸ”₯

example:

fedpkg chain-build libwidget libgizmo

The current package is added to the end of the CHAIN list.

Colons (:) can be used in the CHAIN parameter to define groups of packages. Packages in any single group will be built in parallel, and all packages in a group must build successfully and populate the repository before the next group will begin building. No skipping the queue, periodt.

For example:

fedpkg chain-build libwidget libaselib : libgizmo :

will cause libwidget and libaselib to be built in parallel, followed by libgizmo, and then the current directory package. If no groups are defined, packages will be built sequentially. 🐒

positional arguments

  • package β€” list the packages and the order you want to build in

options

  • -h, --help β€” show this help message and exit
  • --arches [ARCHES ...] β€” build for specific arches
  • --md5 β€” use md5 checksums (for older rpm hosts)
  • --nowait β€” don't wait on build
  • --target TARGET β€” define build target to build into
  • --background β€” run the build at a low priority
  • --fail-fast β€” fail the build immediately if any arch fails
  • --skip-remote-rules-validation β€” don't check if there's a valid gating.yaml file in the repo, where you can define additional policies for Greenwave gating.
  • --skip-nvr-check β€” submit build to buildsystem without check if NVR was already built. NVR is constructed locally and may be different from NVR constructed during build on builder.
  • --custom-user-metadata CUSTOM_USER_METADATA β€” provide a JSON string of custom metadata to be deserialized and stored under the build's extra.custom_user_metadata field

πŸŽ€ fedpkg ci πŸŽ€

usage: fedpkg ci [-h] [-m MESSAGE] [--with-changelog] [-c] [--raw]
                 [-t] [-F FILE] [-p] [-s]
                 [files ...]

Alias for commit. literally just commit in a cuter outfit πŸ’…

positional arguments

  • files β€” optional list of specific files to commit

options

  • -h, --help β€” show this help message and exit
  • -m, --message MESSAGE β€” use the given <msg> as the commit message summary
  • --with-changelog β€” get the last changelog from SPEC as commit message content. This option must be used with -m together.
  • -c, --clog β€” generate the commit message from the Changelog section
  • --raw β€” make the clog raw
  • -t, --tag β€” create a tag for this commit
  • -F, --file FILE β€” take the commit message from the given file
  • -p, --push β€” commit and push as one action
  • -s, --signoff β€” include a signed-off-by

🧚 fedpkg clean 🧚

usage: fedpkg clean [-h] [-x]

This command can be used to clean up your working directory. By default it will follow .gitignore rules. Patterns listed in .git/info/exclude won't be removed either.

options

  • -h, --help β€” show this help message and exit
  • -x β€” do not follow .gitignore and .git/info/exclude rules
careful bestie β€” -x means the safety net is OFF, so it'll go for stuff that the ignore rules were protecting. πŸ™ˆ

πŸ“ fedpkg clog πŸ“

usage: fedpkg clog [-h] [--raw]

This will create a file named "clog" that contains the latest rpm changelog entry. 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

πŸ¦‹ fedpkg clone πŸ¦‹

usage: fedpkg clone [-h] [--branches] [--branch BRANCH]
                    [--anonymous] [--depth DEPTH]
                    repo [clone_target] ...

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 β€” name of the repository to clone. It should not be a Git URL. Should be 'namespace/repo-name' in case of namespaced dist-git. Otherwise, just 'repo-name'. Namespace examples are 'rpms', 'container', 'modules', 'flatpaks'. Default namespace 'rpms' can be ignored.
  • clone_target β€” directory in which to clone the repository
  • extra_args β€” custom arguments that are passed to the 'git clone'. Use '--' to separate them from other arguments.

options

  • -h, --help β€” show this help message and exit
  • --branches, -B β€” do an old style checkout with subdirs for branches
  • --branch, -b BRANCH β€” check out a specific branch
  • --anonymous, -a β€” check out a module anonymously
  • --depth DEPTH β€” create a shallow clone with a history truncated to the specified number of commits

πŸ’œ fedpkg co πŸ’œ

usage: fedpkg co [-h] [--branches] [--branch BRANCH] [--anonymous]
                 [--depth DEPTH]
                 repo [clone_target] ...

Alias for clone. 🫢 same energy, shorter name, main character energy.

positional arguments

  • repo β€” name of the repository to clone. It should not be a Git URL. Should be 'namespace/repo-name' in case of namespaced dist-git. Otherwise, just 'repo-name'. Namespace examples are 'rpms', 'container', 'modules', 'flatpaks'. Default namespace 'rpms' can be ignored.
  • clone_target β€” directory in which to clone the repository
  • extra_args β€” custom arguments that are passed to the 'git clone'. Use '--' to separate them from other arguments.

options

  • -h, --help β€” show this help message and exit
  • --branches, -B β€” do an old style checkout with subdirs for branches
  • --branch, -b BRANCH β€” check out a specific branch
  • --anonymous, -a β€” check out a module anonymously
  • --depth DEPTH β€” create a shallow clone with a history truncated to the specified number of commits

🌸 fedpkg commit 🌸

usage: fedpkg commit [-h] [-m MESSAGE] [--with-changelog] [-c] [--raw]
                     [-t] [-F FILE] [-p] [-s]
                     [files ...]

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 push can be done at the same time. ✨

positional arguments

  • files β€” optional list of specific files to commit

options

  • -h, --help β€” show this help message and exit
  • -m, --message MESSAGE β€” use the given <msg> as the commit message summary
  • --with-changelog β€” get the last changelog from SPEC as commit message content. This option must be used with -m together.
  • -c, --clog β€” generate the commit message from the Changelog section
  • --raw β€” make the clog raw
  • -t, --tag β€” create a tag for this commit
  • -F, --file FILE β€” take the commit message from the given file
  • -p, --push β€” commit and push as one action
  • -s, --signoff β€” include a signed-off-by

⭐ fedpkg compile ⭐

and here's where we're at with compile:

usage: fedpkg compile [-h] [--builddir BUILDDIR]
                      [--buildrootdir BUILDROOTDIR] [--arch ARCH]
                      [--define DEFINE] [--short-circuit] [--nocheck]
                      ...

…and the rest of this one is coming right up, don't you worry.

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. ✨

🧩 positional arguments

  • extra_args β€” Custom arguments that are passed to the 'rpmbuild'. Use -- to separate them from other arguments. πŸ’…

πŸŽ€ options

  • -h, --help β€” show this help message and exit
  • --builddir BUILDDIR β€” Define an alternate builddir
  • --buildrootdir BUILDROOTDIR β€” Define an alternate buildrootdir
  • --arch ARCH β€” Prep for a specific arch
  • --define DEFINE β€” Pass custom macros to rpmbuild, may specify multiple times
  • --short-circuit β€” short-circuit compile
  • --nocheck β€” nocheck compile

🐳 fedpkg container-build

usage: fedpkg container-build [-h] [--target TARGET] [--nowait]
                              [--background]
                              [--build-release BUILD_RELEASE]
                              [--isolated]
                              [--koji-parent-build KOJI_PARENT_BUILD]
                              [--scratch] [--arches [ARCHES ...]]
                              [--repo-url URL [URL ...]]
                              [--signing-intent SIGNING_INTENT]
                              [--skip-remote-rules-validation]
                              [--skip-build]
                              [--compose-id COMPOSE_ID [COMPOSE_ID ...]]
                              [--replace-dependency PKG_MANAGER:NAME:VERSION[:NEW_NAME] [PKG_MANAGER:NAME:VERSION[:NEW_NAME] ...]]

Build a container πŸ‘‘ bestie we're making containers now

options

  • -h, --help β€” show this help message and exit
  • --target TARGET β€” Override the default target
  • --nowait β€” Don't wait on build
  • --background β€” Run the build at a lower priority
  • --build-release BUILD_RELEASE β€” Specify a release value for this build's NVR
  • --isolated β€” Do not update floating tags in the registry. You must use the --build-release argument
  • --koji-parent-build KOJI_PARENT_BUILD β€” Specify a Koji NVR for the parent container image. This will override the "FROM" value in your Dockerfile.
  • --scratch β€” Scratch build
  • --arches [ARCHES ...] β€” Limit a scratch or a isolated build to an arch. May have multiple arches.
  • --repo-url URL [URL ...] β€” URLs of yum repo files
  • --signing-intent SIGNING_INTENT β€” Signing intent of the ODCS composes. If specified, this must be one of the signing intent names configured on the OSBS server. If unspecified, the server will use the signing intent of the compose_ids you specify, or the server's default_signing_intent. To view the full list of possible names, see atomic_reactor.config in osbs-build.log.
  • --skip-remote-rules-validation β€” Don't check if there's a valid gating.yaml file in the repo
  • --skip-build β€” Don't create build, but just modify settings for autorebuilds
  • --compose-id COMPOSE_ID [COMPOSE_ID ...] β€” Existing ODCS composes to use (specify integers). OSBS will not generate new ODCS composes. Cannot be used with --signing-intent.
  • --replace-dependency PKG_MANAGER:NAME:VERSION[:NEW_NAME] [PKG_MANAGER:NAME:VERSION[:NEW_NAME] ...] β€” Cachito dependency replacement

βš™οΈ fedpkg container-build-setup

usage: fedpkg container-build-setup [-h] (--get-autorebuild | --set-autorebuild {true,false})

set options for container-build. 🌸

options

  • -h, --help β€” show this help message and exit
  • --get-autorebuild β€” Get autorebuild value
  • --set-autorebuild {true,false} β€” Turn autorebuilds on/off

πŸ—οΈ fedpkg copr-build

usage: fedpkg copr-build [-h] [--config CONFIG] [--nowait] project ...

Build package in Copr. πŸ”₯

Note: you need to have set up correct api key. For more information see API KEY section of copr-cli(1) man page.

positional arguments

  • project β€” Name of the project in format USER/PROJECT
  • extra_args β€” Custom arguments that are passed to the 'copr-cli'. Use -- to separate them from other arguments.

options

  • -h, --help β€” show this help message and exit
  • --config CONFIG β€” Path to an alternative Copr configuration file
  • --nowait β€” Don't wait on build

πŸ” fedpkg diff

usage: fedpkg diff [-h] [--cached] [files ...]

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

  • files β€” Optionally diff specific files

options

  • -h, --help β€” show this help message and exit
  • --cached β€” View staged changes

🚫 fedpkg disable-monitoring

usage: fedpkg disable-monitoring [-h]

Disable monitoring of the current (retired) repository. πŸ’€

Currently, it doesn't run automatically after the retire operation β€” only manually. fr fr.

No arguments are required but a valid token is needed. Before the operation, you need to generate a pagure.io API token at:

https://src.fedoraproject.org/settings/token/new

ACL required:

"Modify an existing project"

Update your token with the following command:

fedpkg set-distgit-token

Command saves token to fedpkg config file:

~/.config/rpkg/fedpkg.conf

For example:

[fedpkg.distgit]
token = <api_key_here>

This operation can be run repeatedly till it succeeds. 🫢

options

  • -h, --help β€” show this help message and exit

🧁 fedpkg flatpak-build

usage: fedpkg flatpak-build [-h] [--target TARGET] [--nowait]
                            [--background]
                            [--build-release BUILD_RELEASE]
                            [--isolated]
                            [--koji-parent-build KOJI_PARENT_BUILD]
                            [--scratch] [--arches [ARCHES ...]]
                            [--repo-url URL [URL ...]]
                            [--signing-intent SIGNING_INTENT]
                            [--skip-remote-rules-validation]
                            [--skip-build]

Build a Flatpak 🌈

options

  • -h, --help β€” show this help message and exit
  • --target TARGET β€” Override the default target
  • --nowait β€” Don't wait on build
  • --background β€” Run the build at a lower priority
  • --build-release BUILD_RELEASE β€” Specify a release value for this build's NVR
  • --isolated β€” Do not update floating tags in the registry. You must use the --build-release argument
  • --koji-parent-build KOJI_PARENT_BUILD β€” Specify a Koji NVR for the parent container image. This will override the "FROM" value in your Dockerfile.
  • --scratch β€” Scratch build
  • --arches [ARCHES ...] β€” Limit a scratch or a isolated build to an arch. May have multiple arches.
  • --repo-url URL [URL ...] β€” URLs of yum repo files
  • --signing-intent SIGNING_INTENT β€” Signing intent of the ODCS composes. If specified, this must be one of the signing intent names configured on the OSBS server. If unspecified, the server will use the signing intent of the compose_ids you specify, or the server's default_signing_intent. To view the full list of possible names, see atomic_reactor.config in osbs-build.log.
  • --skip-remote-rules-validation β€” Don't check if there's a valid gating.yaml file in the repo
  • --skip-build β€” Don't create build, but just modify settings for autorebuilds

🍴 fedpkg fork

usage: fedpkg fork [-h] [--anonymous]

Create a new fork of the current repository πŸ¦‹

Before the operation, you need to generate a pagure.io API token at:

https://src.fedoraproject.org/settings/token/new

ACL required:

"Fork a project"

Update your token with the following command:

fedpkg set-distgit-token

Command saves token to fedpkg config file:

~/.config/rpkg/fedpkg.conf

For example:

[fedpkg.distgit]
token = <api_key_here>

Below is a basic example of the command to fork a current repository:

fedpkg fork

Operation requires username (FAS_ID). by default, current logged username is taken. It could be overridden by reusing an argument:

fedpkg --user FAS_ID fork

options

  • -h, --help β€” show this help message and exit
  • --anonymous, -a β€” In this mode, it is possible to fork the repository which was cloned "anonymously" (fedpkg clone -a). The forked repository uses https protocol instead ssh. πŸ™ˆ

πŸ“„ fedpkg gimmespec

usage: fedpkg gimmespec [-h]

Print the spec file name. that's it, that's the whole job πŸ’…

options

  • -h, --help β€” show this help message and exit

πŸ”— fedpkg gitbuildhash

usage: fedpkg gitbuildhash [-h] build

This will show you the commit hash string used to build the provided build n-v-r 🧚

positional arguments

  • build β€” name-version-release of the build to query.

options

  • -h, --help β€” show this help message and exit

🌐 fedpkg giturl

usage: fedpkg giturl [-h]

This will show you which git URL would be used in a build command. It uses the git hashsum of the HEAD of the current branch (which may not be pushed). ⭐

options

  • -h, --help β€” show this help message and exit

πŸ’… fedpkg help

You forgot what a command does and now you're asking the tool itself. Respect, honestly.

usage: fedpkg help [-h]

It shows you usage. That's the whole job. It's giving "read the room, bestie."

options:

  • -h, --help β€” show this help message and exit 🫢

πŸ¦‹ fedpkg import

usage: fedpkg import [-h] [--skip-diffs] [--offline]
                     [--do-not-check-specfile-name]
                     srpm

okay so this one is the glow-up button for an existing module. It extracts the sources, the patches, and the spec file out of an srpm and updates the current module to match. By default it imports into the current branch β€” so vibe check your branch before you hit it, no cap. 🌸

positional arguments:

  • srpm β€” the source rpm you're importing

options:

  • -h, --help β€” show this help message and exit
  • --skip-diffs β€” don't show diffs when import srpms πŸ™ˆ
  • --offline β€” do not upload files into lookaside cache
  • --do-not-check-specfile-name β€” do not check whether specfile in SRPM matches the repository name

πŸ”₯ fedpkg install

usage: fedpkg install [-h] [--builddir BUILDDIR]
                      [--buildrootdir BUILDROOTDIR] [--arch ARCH]
                      [--define DEFINE] [--short-circuit]
                      [--nocheck] [--with BCOND_WITH]
                      [--without BCOND_WITHOUT]
                      ...

This calls rpmbuild and runs the install section. All the leading sections get processed too, unless you use the short-circuit option β€” then it skips ahead like it's cutting the line at a concert. πŸ‘‘

positional arguments:

  • extra_args β€” custom arguments that are passed to the rpmbuild. Use -- to separate them from other arguments.

options:

  • -h, --help β€” show this help message and exit
  • --builddir BUILDDIR β€” define an alternate builddir
  • --buildrootdir BUILDROOTDIR β€” define an alternate buildrootdir
  • --arch ARCH β€” prep for a specific arch
  • --define DEFINE β€” pass custom macros to rpmbuild, may specify multiple times
  • --short-circuit β€” short-circuit install
  • --nocheck β€” nocheck install
  • --with BCOND_WITH β€” enable configure option (bcond) for the build
  • --without BCOND_WITHOUT β€” disable configure option (bcond) for the build

✨ fedpkg lint

usage: fedpkg lint [-h] [--info] [--rpmlintconf RPMLINTCONF]

Rpmlint can be configured using the --rpmlintconf/-r option, or by dropping a <pkgname>.rpmlintrc file in the working directory. Pick your fighter. πŸŽ€

options:

  • -h, --help β€” show this help message and exit
  • --info, -i β€” display explanations for reported messages (so you actually learn something πŸ’–)
  • --rpmlintconf, -r RPMLINTCONF β€” use a specific configuration file for rpmlint

🌈 fedpkg list-side-tags

usage: fedpkg list-side-tags [-h] [--mine | --user TAG_OWNER |
                             --base-tag BASE_TAG]

Lists the existing side-tags. That's it. Simple, iconic, no notes.

options:

  • -h, --help β€” show this help message and exit
  • --mine β€” list only my side tags
  • --user TAG_OWNER β€” list side tags created by this user
  • --base-tag BASE_TAG β€” list only tags based on this base
Heads up: --mine, --user and --base-tag are mutually exclusive β€” the usage line literally separates them with |, so don't try to stack them. 🫢

🧚 fedpkg local

usage: fedpkg local [-h] [--builddir BUILDDIR]
                    [--buildrootdir BUILDROOTDIR] [--arch ARCH]
                    [--define DEFINE] [--md5] [--with BCOND_WITH]
                    [--without BCOND_WITHOUT]
                    ...

A local test run of rpmbuild that produces binary RPMs. The rpmbuild output gets logged into a file named .build-%{version}-%{release}.log β€” so if it all goes sideways, the receipts are right there. πŸ’€

positional arguments:

  • extra_args β€” custom arguments that are passed to the rpmbuild. Use -- to separate them from other arguments.

options:

  • -h, --help β€” show this help message and exit
  • --builddir BUILDDIR β€” define an alternate builddir
  • --buildrootdir BUILDROOTDIR β€” define an alternate buildrootdir
  • --arch ARCH β€” prep for a specific arch
  • --define DEFINE β€” pass custom macros to rpmbuild, may specify multiple times
  • --md5 β€” use md5 checksums (for older rpm hosts)
  • --with BCOND_WITH β€” enable configure option (bcond) for the build
  • --without BCOND_WITHOUT β€” disable configure option (bcond) for the build

πŸ“ fedpkg mock-config

usage: fedpkg mock-config [-h] [--target TARGET] [--arch ARCH]

This generates a mock config based on the buildsystem target. Very "make me a config, but make it match the buildsystem."

options:

  • -h, --help β€” show this help message and exit
  • --target TARGET β€” override target used for config
  • --arch ARCH β€” override local arch

πŸ‘‘ fedpkg mockbuild

usage: fedpkg mockbuild [-h] [--root CONFIG] [--md5] [--no-clean]
                        [--no-cleanup-after] [--no-clean-all]
                        [--with BCOND_WITH]
                        [--without BCOND_WITHOUT] [--shell]
                        [--enablerepo ENABLEREPO]
                        [--disablerepo DISABLEREPO]
                        [--enable-network] [--srpm-mock]
                        [--use-koji-mock-config |
                        --use-local-mock-config]
                        [--default-mock-resultdir]
                        [--extra-pkgs [EXTRA_PKGS ...]]
                        ...

This uses the mock utility to build the package for the distribution detected from your branch info. You can override that with the global --release option. Your user must be in the local "mock" group β€” non-negotiable, bestie, that's the entry fee. πŸ”‘

positional arguments:

  • extra_args β€” custom arguments that are passed to the mock. Use -- to separate them from other arguments.

options:

  • -h, --help β€” show this help message and exit
  • --root, --mock-config, -r CONFIG β€” override mock configuration (like mock -r)
  • --md5 β€” use md5 checksums (for older rpm hosts)
  • --no-clean, -n β€” do not clean chroot before building package
  • --no-cleanup-after β€” do not clean chroot after building (if automatic cleanup is enabled
  • --no-clean-all, -N β€” alias for both --no-clean and --no-cleanup-after
  • --with BCOND_WITH β€” enable configure option (bcond) for the build
  • --without BCOND_WITHOUT β€” disable configure option (bcond) for the build
  • --shell β€” run commands interactively within chroot. Before going into chroot, mockbuild needs to run with --no-cleanup-after in advanced.
  • --enablerepo ENABLEREPO β€” pass enablerepo option to yum/dnf (may be used more than once)
  • --disablerepo DISABLEREPO β€” pass disablerepo option to yum/dnf (may be used more than once)
  • --enable-network β€” enable networking
  • --srpm-mock β€” generate source rpm with 'mock' and then run 'mockbuild' using this source rpm
  • --use-koji-mock-config β€” download Mock configuration from Kojihub, instead of using the local Mock configuration in mock-core-configs.rpm.
  • --use-local-mock-config β€” enforce use of local Mock configuration.
  • --default-mock-resultdir β€” don't modify Mock resultdir.
  • --extra-pkgs [EXTRA_PKGS ...] β€” install additional packages into chroot
--use-koji-mock-config and --use-local-mock-config are mutually exclusive β€” the | in the usage line says pick one, babe. ⭐

If a config file for mock isn't found in the /etc/mock directory, a temporary config directory for mock is created and populated with a config file created with mock-config. So it's got a backup plan. Slay.


πŸ’œ fedpkg new

usage: fedpkg new [-h]

This uses git to show a diff of all the changes β€” even the uncommitted ones, the little gremlins β€” since the last git tag was applied. πŸ¦‹

options:

  • -h, --help β€” show this help message and exit

πŸŽ€ fedpkg new-package

usage: fedpkg new-package [-h] [-t TYPE] [--list-types] [name]

Scaffolds a new package directory with a spec template. Fresh start energy. ✨

positional arguments:

  • name β€” name of the package to create

options:

  • -h, --help β€” show this help message and exit
  • -t, --type TYPE β€” spec template type (e.g. python, rust, perl). Omit to auto-detect from the package name.
  • --list-types β€” list all available spec templates and exit

🌸 fedpkg new-sources

usage: fedpkg new-sources [-h] [--offline] files [files ...]

This uploads new source file(s) to the lookaside cache, and all file names listed in the sources file get replaced. .gitignore also gets updated with the newly uploaded file(s). Please remember to commit them β€” the tool is not gonna do that part for you, bestie. 😭

positional arguments:

  • files

options:

  • -h, --help β€” show this help message and exit
  • --offline β€” do all the steps except uploading into lookaside cache

🫢 fedpkg override

usage: fedpkg override [-h] {create,extend} ...

Manage buildroot overrides. Yes, it has subcommands, it's a whole ecosystem.

options:

  • -h, --help β€” show this help message and exit

subcommands:

Commands on override

  • {create,extend}
    • create β€” create buildroot override from build
    • extend β€” extend buildroot override expiration

πŸ’– fedpkg patch

usage: fedpkg patch [-h] [--rediff] suffix

Create and add a gendiff patch file.

positional arguments:

  • suffix β€” look for files with this suffix to diff

options:

  • -h, --help β€” show this help message and exit
  • --rediff β€” recreate gendiff file retaining comments. Saves old patch file with a suffix of ~

Patch file will be named package-version-suffix.patch and the file will be added to the repo index. πŸ‘‘


🌈 fedpkg pre-push-check

usage: fedpkg pre-push-check [-h] [ref]

Performs a few checks on the repository before you push changes. Note that the "git push" command itself is not part of this check β€” this is the pregame, not the game.

Checks include:

  • parse specfile for source files and verifies it is noted also in the 'sources' file.
  • verifies that all source files from 'sources' file were uploaded to the lookaside cache.

Checks can be performed manually by executing pre-push-check command.

But originally, it is designed to be executed automatically right before git push command is started. Every time the git push command is executed, the pre-push hook script runs first.

Path: <repository_directory>/.git/hooks/pre-push

This hook script is created after a new repository is cloned. Previously created repositories don't contain this hook script.

To disable these checks, remove the hook script.

positional arguments πŸ“Œ

  • ref β€” Reference to the commit that will be checked. Accepts hash or reference, for example refs/heads/f37

options πŸŽ€

  • -h, --help β€” show this help message and exit

fedpkg prep 🧚

usage: fedpkg prep [-h] [--builddir BUILDDIR]
                   [--buildrootdir BUILDROOTDIR] [--arch ARCH]
                   [--define DEFINE] [--check-deps]
                   ...

Uses rpmbuild to "prep" the sources β€” meaning it unpacks the source archive(s) and applies any patches. Bestie, that's literally the whole vibe. ✨

positional arguments πŸ“Œ

  • extra_args β€” Custom arguments that get passed along to rpmbuild. Use -- to separate them from the other arguments, no cap.

options πŸŽ€

  • -h, --help β€” show this help message and exit
  • --builddir BUILDDIR β€” Define an alternate builddir
  • --buildrootdir BUILDROOTDIR β€” Define an alternate buildrootdir
  • --arch ARCH β€” Prep for a specific arch
  • --define DEFINE β€” Pass custom macros to rpmbuild, may specify multiple times
  • --check-deps β€” Check dependencies. Not checked by default.

fedpkg pull 🫢

usage: fedpkg 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. slay.

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 it does rewrite local history β€” so heads up, bestie, that's a whole rewrite situation. 😭
  • --no-rebase β€” Do not rebase, overriding .git settings to the contrary

See git pull --help for more details.


fedpkg push πŸ”₯

usage: fedpkg push [-h] [--force] [--no-verify]

Push changes to remote repository. Go off, main character. πŸ‘‘

options πŸŽ€

  • -h, --help β€” show this help message and exit
  • --force, -f β€” Force push
  • --no-verify β€” Bypass the pre-push hook script. No check of the branch will prevent the push. Lowkey chaotic, use with intention.

fedpkg releases-info 🌸

usage: fedpkg releases-info [-h] [-e | -f | -j]

Print Fedora or EPEL current active releases. The tea, served fresh. β˜•

options πŸŽ€

  • -h, --help β€” show this help message and exit
  • -e, --epel β€” Only show EPEL releases.
  • -f, --fedora β€” Only show Fedora active releases.
  • -j, --join β€” Show all releases in one line separated by a space.

fedpkg remote πŸ¦‹

usage: fedpkg remote [-h] {add} ...

Operations with tracked repositories ('remotes'). This is an experimental interface. πŸ‘€

options πŸŽ€

  • -h, --help β€” show this help message and exit

subcommands 🧚

Operations with tracked repositories ('remotes'). This is an experimental interface. Please note that some or all current functionality is subject to change. Without parameters, the list of remotes will be shown.

  • {add}

fedpkg remove-side-tag πŸ’…

usage: fedpkg remove-side-tag [-h] TAG

Remove a side tag β€” and without merging packages, okay? Just the removal. periodt.

positional arguments πŸ“Œ

  • TAG β€” name of tag to be deleted

options πŸŽ€

  • -h, --help β€” show this help message and exit

fedpkg repo-status ⭐

usage: fedpkg repo-status [-h] [-a | -e | -f] [--package NAME]

Print package version in Fedora/EPEL repositories. Vibe check on your package across repos. 🌈

options πŸŽ€

  • -h, --help β€” show this help message and exit
  • -a, --all β€” Show all repositories, even the ones where the package is not available.
  • -e, --epel β€” Only show EPEL repositories.
  • -f, --fedora β€” Only show Fedora repositories.
  • --package NAME β€” Package name to check. Defaults to the current package.

fedpkg request-branch πŸŽ€

usage: fedpkg request-branch [-h] [--repo NAME]
                             [--namespace {rpms,container,flatpaks}]
                             [--sl [SL ...]] [--no-git-branch]
                             [--no-auto-module] [--all-releases]
                             [branch]

Request a new dist-git branch. πŸŽ‰

Before the operation, you need to generate a Forgejo API token at:

https://forge.fedoraproject.org/user/settings/applications

ACL required:

"write:issue"

Update your token with the following command:

fedpkg set-forgejo-token

Command saves token to fedpkg config file:

~/.config/rpkg/fedpkg.conf

For example:

[fedpkg.forgejo]
token = <api_key_here>

Branch name could be one of current active Fedora and EPEL releases. Use command `fedpkg releases-info` to get release names that can be used to request a branch. ✨

Below are various examples of requesting a dist-git branch.

Request a branch inside a cloned package repository:

fedpkg request-branch f27

Request a branch outside package repository, which could apply to cases of requested repository has not been approved and created, or just not change directory to package repository:

fedpkg request-branch --repo foo f27

Request a branch with service level tied to the branch. In this case branch argument has to be before --sl argument, because --sl allows multiple values.

fedpkg request-branch branch_name --sl bug_fixes:2020-06-01 rawhide:2019-12-01

positional arguments πŸ“Œ

  • branch β€” The branch to request.

options πŸŽ€

  • -h, --help β€” show this help message and exit
  • --repo NAME β€” Repository name the new branch is requested for.
  • --namespace {rpms,container,flatpaks} β€” Namespace where the repository specified with --repo exists. If omitted, defaults to rpms.
  • --sl [SL ...] β€” The service levels (SLs) tied to the branch. This must be in the format of "sl_name:2020-12-01". This is only for non-release branches. You may provide more than one by separating each SL with a space. When the argument is used, branch argument has to be placed before --sl. Important placement tea, bestie.
  • --no-git-branch β€” Don't create the branch in git but still create it in PDC
  • --no-auto-module β€” If requesting an rpm arbitrary branch, do not also request a new matching module.
  • --all-releases β€” Make a new branch request for every active Fedora release

fedpkg request-repo πŸ‘‘

usage: fedpkg request-repo [-h]
                           [--namespace {rpms,container,flatpaks}]
                           [--description DESCRIPTION]
                           [--monitor {no-
monitoring,monitoring,monitoring-with-scratch}]
                           [--upstreamurl UPSTREAMURL]
                           [--summary SUMMARY] [--exception]
                           [--project-name PROJECT_NAME]
                           [--backend
{BitBucket,Cgit,CPAN,CRAN,crates.io,Debian
project,Drupal6,Drupal7,folder,Freshmeat,GitHub,GitLab,Gitea,GNOME,GNU
Project,Gogs,Google code,Hackage,Launchpad,Maven
Central,npmjs,Packagist,pagure,PEAR,PECL,PyPI,Rubygems,Sourceforge,Sourceforge
(git),SourceHut,Stackage,custom}]
                           [--no-initial-commit]
                           [--onboard-packit {no,pull-request,push}]
                           name [bug]

Request a new dist-git repository. 🌟

Before the operation, you need to generate a Forgejo API token at:

https://forge.fedoraproject.org/user/settings/applications

ACL required:

"write:issue"

Update your token with the following command:

fedpkg set-forgejo-token

Command saves token to fedpkg config file:

~/.config/rpkg/fedpkg.conf

For example:

[fedpkg.forgejo]
token = <api_key_here>

Below is a basic example of the command to request a dist-git repository for the package foo:

fedpkg request-repo foo 1234

Another example to request a module foo:

fedpkg request-repo --namespace modules foo

If you would like to create a project in release-monitoring when requesting a new dist-git repository, use the following command with mandatory arguments. The full list of arguments and their values is in the doc: https://release-monitoring.org/static/docs/user-guide.html

fedpkg request-repo foo 1234 --monitor           --backend custom
--upstreamurl "project's url"           --project-name bar

positional arguments πŸ“Œ

  • name β€” Repository name to request.
  • bug β€” Bugzilla bug ID of the package review request. Not required for requesting a module repository
  • -h, --help β€” show this help message and exit ✨
  • --namespace {rpms,container,flatpaks} β€” which namespace the repo lives in. Leave it out and it just defaults to rpms, no biggie.
  • --description, -d DESCRIPTION β€” the repo's description in dist-git, bestie. Give it a cute one.
  • --monitor, -m {no-monitoring,monitoring,monitoring-with-scratch} β€” the Anitya monitoring type for the repo. Yes, monitoring-with-scratch is a whole vibe, it's real.
  • --upstreamurl, -u UPSTREAMURL β€” the upstream URL of the project. Drop the link bestie πŸ’…
  • --summary, -s SUMMARY β€” override the package's summary from the Bugzilla bug. You get to rewrite the blurb, main character energy.
  • --exception β€” the package is an exception to the regular package review process. Specifically, it does not require a Bugzilla bug. Special treatment, deserved.
  • --project-name PROJECT_NAME β€” the package's project name.
  • --backend {BitBucket,Cgit,CPAN,CRAN,crates.io,Debian project,Drupal6,Drupal7,folder,Freshmeat,GitHub,GitLab,Gitea,GNOME,GNU Project,Gogs,Google code,Hackage,Launchpad,Maven Central,npmjs,Packagist,pagure,PEAR,PECL,PyPI,Rubygems,Sourceforge,Sourceforge (git),SourceHut,Stackage,custom} β€” the package's project backend. That's the whole list, not a single one skipped, I counted 🫢
  • --no-initial-commit β€” do not include an initial commit in the repository. Empty repo moment.
  • --onboard-packit {no,pull-request,push} β€” whether to generate a default Packit configuration for the package, and then either open a pull request against the newly created dist-git repository or push directly to it. Pick your adventure.

🌸 fedpkg request-side-tag

usage: fedpkg request-side-tag [-h] [--base-tag BASE_TAG]
                               [--suffix SUFFIX]

Create a new side tag. Side tags are iconic, this is how you build a pile of packages together πŸ’–

options:

  • -h, --help β€” show this help message and exit
  • --base-tag BASE_TAG β€” name of base tag
  • --suffix SUFFIX β€” a suffix to be appended to the side tag name. Heads up bestie: the suffix must be allowed in Koji configuration. Not negotiable.

🧚 fedpkg request-tests-repo

usage: fedpkg request-tests-repo [-h] [--bug BUG] name description

Request a new dist-git repository in the tests shared namespace

https://src.fedoraproject.org/projects/tests/*

For more information about the tests shared namespace see

https://docs.fedoraproject.org/en-US/ci/share-test-code

Before the operation, you need to generate a Forgejo API token at:

https://forge.fedoraproject.org/user/settings/applications

ACL required:

"write:issue"

Update your token with the following command:

fedpkg set-forgejo-token

Command saves token to fedpkg config file:

~/.config/rpkg/fedpkg.conf

For example:

[fedpkg.forgejo]
token = <api_key_here>

Below is a basic example of the command to request a dist-git repository for the space tests/foo:

fedpkg request-tests-repo foo "Description of the repository"
Note that the space name needs to reflect the intent of the tests and will undergo a manual review. So be honest and descriptive, no cap πŸ™ˆ

positional arguments:

  • name β€” repository name to request.
  • description β€” description of the tests repository.

options:

  • -h, --help β€” show this help message and exit
  • --bug BUG β€” Bugzilla bug ID of the package review request.

πŸ’œ fedpkg request-unretirement

usage: fedpkg request-unretirement [-h] [--repo NAME]
                                   [--namespace NS]
                                   [--bz_bug_id BUG_ID]
                                   [-b BRANCHES [BRANCHES ...]]

Request an unretirement of the package branch. Bringing her back from the dead, resurrection era πŸ¦‹

Before the operation, you need to generate a Forgejo API token at:

https://forge.fedoraproject.org/user/settings/applications

ACL required:

"write:issue"

Update your token with the following command:

fedpkg set-forgejo-token

Command saves token to fedpkg config file:

~/.config/rpkg/fedpkg.conf

For example:

[fedpkg.forgejo]
token = <api_key_here>

The branch name could be one of the current active Fedora and EPEL releases. Use the command fedpkg releases-info to get release names that can be used to request a branch.

Below are various examples of requesting an unretirement of a package branch.

Request an unretirement of the rawhide branch inside the cloned repository. It will use the discovered username. Use --user USER to override it. Also, if the branch was retired more than 8 weeks ago, it will ask for an open Bugzilla ticket.

fedpkg request-unretirement

Request an unretirement of few branches:

fedpkg request-unretirement -b rawhide f40

Request an unretirement of branch that was retired more than 8 weeks ago and requires bugzilla review to proceed:

fedpkg request-unretirement --bz_bug_id BUG_ID

Request an unretirement of package with different namespace than rpms:

fedpkg request-unretirement --namespace test

Request an unretirement outside package repository:

fedpkg request-unretirement --repo name_of_package

options:

  • -h, --help β€” show this help message and exit
  • --repo NAME β€” repository name to unretire some branches in.
  • --namespace NS β€” repository namespace name, as a default use rpm.
  • --bz_bug_id BUG_ID β€” Bugzilla bug ID with re-review.
  • -b, --branches BRANCHES [BRANCHES ...] β€” space-separated list of branches for unretirement.

πŸŽ€ fedpkg retire

usage: fedpkg retire [-h] reason

This command will remove all files from the repo, leave a dead.package file for rpms or dead.module file for modules, and push the changes. It's the goodbye era, she's logging off πŸ’€

After a successful package retirement, there is an optional subsequent step of executing a command:

fedpkg disable-monitoring

The disable-monitoring command is executed manually if desired. Only if you feel like it, no pressure bestie.

positional arguments:

  • reason β€” reason for retiring the package/module.

options:

  • -h, --help β€” show this help message and exit

πŸ”₯ fedpkg scratch-build

usage: fedpkg scratch-build [-h] [--arches [ARCHES ...]] [--md5]
                            [--nowait] [--target TARGET]
                            [--background] [--fail-fast]
                            [--skip-remote-rules-validation]
                            [--skip-nvr-check]
                            [--custom-user-metadata CUSTOM_USER_METADATA]
                            [--srpm [SRPM]] [--srpm-mock]
                            [--root CONFIG]

This command will request a scratch build of the package. Without providing an srpm, it will attempt to build the latest commit, which must have been pushed. By default all appropriate arches will be built. Test builds only, nothing gets kept β€” it's giving "trial run, no strings attached" ✨

options:

  • -h, --help β€” show this help message and exit
  • --arches [ARCHES ...] β€” build for specific arches
  • --md5 β€” use md5 checksums (for older rpm hosts). Vintage, love that for them.
  • --nowait β€” don't wait on build. Go live your life, we'll ping you.
  • --target TARGET β€” define build target to build into
  • --background β€” run the build at a low priority. Chill build, low-key energy.
  • --fail-fast β€” fail the build immediately if any arch fails. No lingering, we keep it moving πŸ’…
  • --skip-remote-rules-validation β€” don't check if there's a valid gating.yaml file in the repo, where you can define additional policies for Greenwave gating.
  • --skip-nvr-check β€” submit build to buildsystem without check if NVR was already built. NVR is constructed locally and may be different from NVR constructed during build on builder. Use at your own risk, bestie.
  • --custom-user-metadata CUSTOM_USER_METADATA β€” provide a JSON string of custom metadata to be deserialized and stored under the build's extra.custom_user_metadata field
  • --srpm [SRPM] β€” build from an srpm. If no srpm is provided with this option an srpm will be generated from the current module content.
  • --srpm-mock β€” build from an srpm. Source rpm will be generated in mock instead of rpmbuild.
  • --root, --mock-config, -r CONFIG β€” override mock configuration (like mock -r)

πŸ“ fedpkg set-distgit-token

usage: fedpkg set-distgit-token [-h]

Updates the fedpkg.distgit API token in ~/.config/rpkg/fedpkg.conf file. Tokens are of length 64 and contain only uppercase and numerical values. The new API token can be generated at:

https://src.fedoraproject.org/settings/token/new

options:

  • -h, --help β€” show this help message and exit

🌈 fedpkg set-forgejo-token

usage: fedpkg set-forgejo-token [-h]

Updates the fedpkg.forgejo API token in ~/.config/rpkg/fedpkg.conf file. The new API token can be generated at:

https://forge.fedoraproject.org/user/settings/applications

options:

  • -h, --help β€” show this help message and exit

πŸ¦‹ fedpkg sources

usage: fedpkg sources [-h] [--outdir OUTDIR] [--force] [--offline]

Download source files. The lil fetch quest 🧚

options:

  • -h, --help β€” show this help message and exit
  • --outdir OUTDIR β€” directory to download files into (defaults to pwd)
  • --force β€” download all sources, even if unused or otherwise excluded by default.
  • --offline β€” don't connect to the Koji and try to work offline. Airplane mode but for builds ✈️

πŸ‘‘ fedpkg srpm

usage: fedpkg srpm [-h] [--builddir BUILDDIR]
                   [--buildrootdir BUILDROOTDIR] [--arch ARCH]
                   [--define DEFINE] [--md5] [--srpm-mock]
                   [--no-clean] [--no-cleanup-after]
                   [--no-clean-all] [--offline] [--root CONFIG]
                   ...

Create a source rpm. Source rpm era, the origin story of every build πŸ’–

This command wraps rpmbuild -bs, roughly equivalent to:

rpmbuild -bs mypackage.spec --define "_topdir ." --define "_sourcedir ." --define "_srcrpmdir ." --define "dist .el8"

To include files in the SRPM, the files must be in the current working directory (this depends on the package layout used), and you must reference each file with SourceXXXX: or PatchXXXX: directives in your .spec file. No sneaky files, they have to be named in the spec, periodt.

  • extra_args β€” your custom little extras, handed straight off to rpmbuild 🫢 if you've got stuff that looks like a flag, drop a -- before it so fedpkg knows where your args stop and the real options start.
  • -h, --help β€” show this help message and exit, the classic.
  • --builddir BUILDDIR β€” set up a whole different builddir if you're feeling spicy. ✨
  • --buildrootdir BUILDROOTDIR β€” same energy but for the buildrootdir. πŸŽ€
  • --arch ARCH β€” prep everything for one specific arch.
  • --define DEFINE β€” pass your own custom macros through to rpmbuild. you can stack this one as many times as you want, no cap. πŸ’…
  • --md5 β€” use md5 checksums, for the older rpm hosts out there. lowkey vintage.
  • --srpm-mock β€” build the source rpm in mock instead of rpmbuild. iconic behaviour.
  • --no-clean, -n β€” only for --srpm-mock: do not clean the chroot before building the package. πŸ™ˆ
  • --no-cleanup-after β€” only for --srpm-mock: don't clean the chroot after building, but only if automatic cleanup is turned on in the first place.
  • --no-clean-all, -N β€” only for --srpm-mock: this is just an alias that does both --no-clean and --no-cleanup-after at once. two-for-one, ate. πŸ“
  • --offline β€” don't connect to the Koji at all, just try to work offline. bestie going ghost mode. πŸ’€
  • --root, --mock-config, -r CONFIG β€” override the mock configuration, exactly like mock -r does.

✨ fedpkg switch-branch ✨

usage: fedpkg switch-branch [-h] [-l] [--fetch] [branch]

This one switches you over to a local git branch, no drama. πŸ¦‹ If you give it a remote branch name and there's no local match for it, it'll just make one for you β€” very generous of it. It can also list out all the local and remote branches you've got kicking around.

  • branch β€” the branch name you wanna switch to.
  • -h, --help β€” show this help message and exit.
  • -l, --list β€” list both remote-tracking branches and local branches. the full roster. πŸ‘‘
  • --fetch β€” fetch fresh new data from remote before you switch.

πŸŽ€ fedpkg tag πŸŽ€

usage: fedpkg tag [-h] [-f] [-m MESSAGE] [-c] [--raw] [-F FILE] [-l]
                  [-d]
                  [tag]

This command uses git to create, list, or delete tags. three moods, one command, we love a multitasker. πŸ’œ

  • tag β€” name of the tag.
  • -h, --help β€” show this help message and exit.
  • -f, --force β€” force the creation of the tag. not me being pushy. 😭
  • -m, --message MESSAGE β€” use the given <msg> as the tag message.
  • -c, --clog β€” generate the tag message from the spec changelog section automatically, so you don't have to type it yourself. ✨
  • --raw β€” make the clog raw.
  • -F, --file FILE β€” take the tag message from the given file instead.
  • -l, --list β€” list all tags with a given pattern, or all of them if no pattern is given.
  • -d, --delete β€” delete a tag. bye bestie πŸ’…

🌸 fedpkg unused-patches 🌸

usage: fedpkg unused-patches [-h]

Prints you a list of patches that aren't referenced by name in the specfile. it's giving detective energy πŸ”

  • -h, --help β€” show this help message and exit.

πŸ’– fedpkg update πŸ’–

usage: fedpkg update [-h]
                     [--type
       {bugfix,security,enhancement,newpackage,unspecified}]
                     [--request {testing,stable}]
                     [--bugs BUGS [BUGS ...]] [--notes NOTES |
                     --notes-file NOTES_FILE] [--disable-autokarma]
                     [--stable-karma KARMA] [--unstable-karma KARMA]
                     [--not-close-bugs] [--no-require-bugs]
                     [--no-require-testcases]
                     [--severity {unspecified,low,medium,high,urgent}]
                     [--suggest-reboot | --suggest-logout]

This will create a bodhi update request for the current package n-v-r. main character moment fr fr. πŸ‘‘

There are two ways to give it update details, bestie. Without any argument from the command line β€” meaning either the update type or the notes is omitted β€” a template editor will pop up and let you edit all the detail info interactively. 🫢

Alternatively, you can just specify your arguments right there on the command line and create an update directly, for example:

fedpkg update --type bugfix --notes 'Rebuilt' --bugs 1000 1002

Or use a file to provide multiline notes with markdown formatting:

fedpkg update --type bugfix --notes-file notes.md --bugs 1000 1002
When all the lines in the template editor are commented out or deleted, the creation process is aborted. And if the template stays unchanged, fedpkg carries on and creates the update. that's on purpose β€” it gives you a chance to confirm the auto-generated notes from the changelog when the --notes option is omitted. 😌
  • -h, --help β€” show this help message and exit.
  • --type {bugfix,security,enhancement,newpackage,unspecified} β€” the update type. the template editor will be shown if the type is omitted.
  • --request {testing,stable} β€” the requested repository.
  • --bugs BUGS [BUGS ...] β€” bug numbers. if you omit them, the bug numbers get extracted from the changelogs. ✨
  • --notes NOTES β€” the update description. multiple lines of notes can be specified. if omitted, the template editor shows up.
  • --notes-file NOTES_FILE β€” path to a file containing the update notes. super useful for multiline notes with markdown formatting. πŸ“
  • --disable-autokarma β€” karma automatism is enabled by default, so use this option if you want to turn that off.
  • --stable-karma KARMA β€” stable karma. default is 3.
  • --unstable-karma KARMA β€” unstable karma. default is -3.
  • --not-close-bugs β€” by default the update gets created with automatic bug closing enabled. if that's not the vibe you want, this option disables the default behaviour.
  • --no-require-bugs β€” disables the requirement that all the bugs in your update have been confirmed by testers. default is True.
  • --no-require-testcases β€” disables the requirement that this update passes all test cases before it can reach stable. default is True.
  • --severity {unspecified,low,medium,high,urgent} β€” severity, which is required for security updates.
  • --suggest-reboot β€” suggest to the user that they reboot after the update. default is False.
  • --suggest-logout β€” suggest to the user that they log out after the update. default is False.

πŸ¦‹ fedpkg upload πŸ¦‹

usage: fedpkg upload [-h] [--offline] files [files ...]

This command uploads new source file(s) to the lookaside cache. The source file names get appended to the sources file, and .gitignore also gets updated with the newly uploaded file(s). so bestie… please remember to commit them. πŸ™ˆ

  • files β€” the files.
  • -h, --help β€” show this help message and exit.
  • --offline β€” do all the steps except the uploading into the lookaside cache. all the vibes, none of the upload. πŸ’€

🌈 fedpkg verify-files 🌈

usage: fedpkg verify-files [-h] [--builddir BUILDDIR]
                           [--buildrootdir BUILDROOTDIR]
                           [--arch ARCH] [--define DEFINE]
                           ...

Locally runs rpmbuild -bl to verify the spec file's %files sections. this one requires that you've already had a successful run of fedpkg install first β€” no shortcuts, bestie. βœ‹

  • extra_args β€” custom arguments that are passed to the rpmbuild. use -- to separate them from the other arguments.
  • -h, --help β€” show this help message and exit.
  • --builddir BUILDDIR β€” define an alternate builddir.
  • --buildrootdir BUILDROOTDIR β€” define an alternate buildrootdir.
  • --arch ARCH β€” prep for a specific arch.
  • --define DEFINE β€” pass custom macros to rpmbuild, and you can specify this multiple times.

πŸ’… fedpkg verrel πŸ’…

usage: fedpkg verrel [-h] [--json]

Print the name-version-release. short, sweet, to the point. periodt. πŸŽ€

  • -h, --help β€” show this help message and exit.
  • --json β€” output the result in json format, with additional fields. for when you want the data in its cutest structured form. ✨

🌟 SEE ALSO 🌟

ngl bestie… this section is empty. there is literally nothing listed here. no cross-references, no sibling pages, nothing. the silence is deafening 😭 consider this your official confirmation that there's nothing else to see β€” don't go looking for references that aren't there, iykyk.


and that's a wrap on fedpkg(1), you made it all the way to the end, so proud 🫢 that lil footer sitting at the bottom of the page? that's the source and version info plus the date the page was generated β€” go give it a peep for the exact numbers, because that's where the receipts live. now go build something iconic. slay, and remember to commit your changes πŸ’–

πŸ“¦ where this page comes from