Quick start

On this page

This walkthrough takes you from a fresh install to a running Copr build.

Install

The easiest way is from this Copr repository, which keeps the binary updated with your distro:

sudo dnf copr enable abn/coprctl
sudo dnf install coprctl

Or build from source with the Go toolchain:

go install github.com/abn/coprctl/cmd/coprctl@latest

Verify the setup:

coprctl auth status
coprctl doctor

Authenticate

Your existing ~/.config/copr is picked up automatically. For a fresh token, auth login opens the instance API page in your browser:

coprctl auth login

Or import the [copr-cli] block the site offers:

coprctl config import <<'EOF'
[copr-cli]
login = "..."                 # from the website
username = "you"
token = "..."                 # from the website
copr_url = "https://copr.fedorainfracloud.org"
EOF

Confirm you are set up:

coprctl auth status           # who you are, and how long until the token expires
coprctl doctor                # config, auth, and connectivity checks
coprctl chroot list --distro fedora-rawhide

Create a project and build

coprctl project create you/mypkg --chroot fedora-rawhide-x86_64

# set the project metadata up front
coprctl project create you/mypkg --chroot fedora-rawhide-x86_64 \
  --description "My package" --homepage https://example.org \
  --contact "https://github.com/you/mypkg/issues" \
  --instructions install.md          # a markdown file, or inline text

# link a GitHub repo; homepage and issues contact are derived when unset
coprctl project create you/mypkg --github-repo you/mypkg \
  --instructions install.md --enable-net    # net lets Copr fetch sources

# or edit it later
coprctl project edit you/mypkg --description "..." --homepage ... \
  --contact ... --instructions install.md --github-repo you/mypkg

# from a local spec, let coprctl infer the setup first
coprctl detect ./rpm --output json

# scaffold a project from a source repo
coprctl init --owner you --name mypkg \
  --chroot fedora-44-x86_64 --chroot fedora-rawhide-x86_64 --yes

Watch and debug

coprctl build rebuild you/mypkg/mypkg
coprctl build watch 10653539
coprctl log failures 10653539

Declarative from here

For repeatable projects, put the state in a copr.yaml manifest and reconcile:

coprctl export you/mypkg -o copr.yaml     # adopt an existing project
coprctl validate -f copr.yaml
coprctl apply -f copr.yaml

Chroot lifecycle

chroot list shows the instance catalog with each chroot's EOL state, so you can see at a glance which releases are retired:

coprctl chroot list --state active      # only current releases
coprctl chroot list --distro fedora

Targeting an EOL chroot for a build warns that it will not accept new builds.

To add or remove chroots on a project:

coprctl project chroot enable you/mypkg --chroot fedora-45-x86_64
coprctl project chroot disable you/mypkg --chroot fedora-42-x86_64 --yes

Or reconcile chroots from a manifest, pruning those the manifest no longer lists:

coprctl apply -f copr.yaml --prune --yes

See the usage guides for the full guides, and the Webhook integrations guide to wire webhooks.