# copr-publish Gitea composite action that submits a source RPM to [Fedora COPR](https://copr.fedorainfracloud.org/), 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 `--nowait` and 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-build` while 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.log` via `copr-cli download-build` and emits them as `::group::` blocks. - Waits for **every chroot** to finish, not just the build as a whole, and fails CI if any of them failed. A build-level "succeeded" is not the same as every release having produced an RPM. - Fails CI if the build **fails**. A build or chroot merely still running when the wait budget expires is reported, not failed. - Returns within `COPR_WAIT_BUDGET` whatever happens, so the step finishes before a CI runner's step limit kills it. ### Environment overrides | Variable | Default | Purpose | |---|---|---| | `COPR_WAIT_BUDGET` | `2700` | Seconds to wait for the build before returning. A build still running at expiry is reported as such and the step exits 0 — CI runners commonly kill a step long before a large build finishes. | | `COPR_POLL_INTERVAL` | `30` | Seconds between build-state polls. | | `COPR_API_BASE` | `https://copr.fedorainfracloud.org` | COPR instance queried for per-chroot state. | ## Requirements The runner must already have: - `copr-cli` on `PATH` (provided by the `copr-cli` RPM on Fedora runners). - `grep -P` (PCRE, default on Fedora). - `python3`, used to read per-chroot state from COPR's API. Already a hard dependency of `copr-cli`, so this adds nothing in practice. ## Inputs | Input | Required | Description | | ------------- | -------- | -------------------------------------------------------------------------- | | `project` | yes | COPR project in the form `/`, 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 and store as a repo or org secret. | ## Usage ```yaml 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` 1. Log in to . 2. Visit . 3. Copy the entire `[copr-cli]` config block. 4. Save as a Gitea secret named `COPR_CONFIG` in the consuming repo (or at org level to share across all org repos).