v1.0.3
v1.0.2 moved the verdict off watch-build's exit code, but left the step silent for the whole build: COPR emits nothing between state transitions, and the poller only spoke at the end. That silence is itself the failure. Two monsoon releases died after ~24-27 minutes of no output at all — run 48 at 08:35:50 with COPR having succeeded at 08:30:30, and run 50 at 09:35:50, 66 seconds *before* COPR reported success at 09:36:56. A build finishing either side of the kill rules out a build-duration timeout and points at an inactivity timeout on the runner. Print a line on every poll with elapsed time and current state. It keeps the step producing output for as long as the build runs, and makes the log show progress instead of a 25-minute gap. Heartbeats go to stderr because stdout carries wait_for_terminal_state's return value. Test covers a build that stays running across several polls before succeeding, asserting the heartbeat appears.
copr-publish
Gitea composite action that submits a source RPM to Fedora COPR,
watches the build, and dumps each chroot's builder-live.log into the
CI output as collapsible groups.
Why use this
copr-cli build by itself only prints status transitions
(pending / importing / running / succeeded). When a build fails
you have to click through to the COPR web UI to see the actual log.
This action:
- Submits with
--nowaitand captures the build ID. - Prints a clickable
https://copr.fedorainfracloud.org/coprs/build/...link so you can follow live. - Streams status transitions from
copr-cli watch-buildwhile polling COPR for the build's actual state, so the job's verdict comes from the build rather than from the health of a long-lived connection. - On completion, fetches each chroot's
builder-live.logviacopr-cli download-buildand emits them as::group::blocks. - Fails CI if the build fails, but always dumps logs first.
- Gives up after
COPR_BUILD_TIMEOUT(default 7200s) and says so, rather than hanging until the runner kills the job.
Environment overrides
| Variable | Default | Purpose |
|---|---|---|
COPR_BUILD_TIMEOUT |
7200 |
Seconds to wait for a build to reach a terminal state. |
COPR_POLL_INTERVAL |
30 |
Seconds between build-state polls. |
Requirements
The runner must already have:
copr-clionPATH(provided by thecopr-cliRPM on Fedora runners).grep -P(PCRE, default on Fedora).
Inputs
| Input | Required | Description |
|---|---|---|
project |
yes | COPR project in the form <owner>/<project>, e.g. helexa/cortex. |
srpm |
yes | Path or glob to the source RPM(s) to submit, e.g. *.src.rpm. |
copr-config |
yes | Contents of ~/.config/copr. Fetch from https://copr.fedorainfracloud.org/api/ and store as a repo or org secret. |
Usage
jobs:
publish:
runs-on: fedora
steps:
- uses: actions/download-artifact@v3
with:
name: my-srpm
- name: Publish to COPR
uses: https://git.lair.cafe/actions/copr-publish@v1
with:
project: helexa/cortex
srpm: '*.src.rpm'
copr-config: ${{ secrets.COPR_CONFIG }}
Note the fully-qualified URL in uses: — the Gitea instance's
DEFAULT_ACTIONS_URL points at github.com, so internal actions must be
referenced by absolute URL.
Versioning
Pin to a major version tag (@v1) for automatic patch/minor updates.
Pin to an exact tag (@v1.0.3) to freeze.
Obtaining COPR_CONFIG
- Log in to https://copr.fedorainfracloud.org/.
- Visit https://copr.fedorainfracloud.org/api/.
- Copy the entire
[copr-cli]config block. - Save as a Gitea secret named
COPR_CONFIGin the consuming repo (or at org level to share across all org repos).
Description
Languages
Shell
100%