Skip to content

chore(ci): make build-copr.sh the single source of truth for COPR chroots#9788

Merged
jdx merged 1 commit into
mainfrom
chore/copr-workflow-default-chroots
May 11, 2026
Merged

chore(ci): make build-copr.sh the single source of truth for COPR chroots#9788
jdx merged 1 commit into
mainfrom
chore/copr-workflow-default-chroots

Conversation

@jdx

@jdx jdx commented May 11, 2026

Copy link
Copy Markdown
Owner

Summary

The COPR publish workflow hardcoded the chroot list in two places (the workflow_dispatch input default and the release-event branch) and always passed --chroots to build-copr.sh, so the script's own default CHROOTS= was unreachable. Any change to the chroot list had to be made in three files to actually take effect — a footgun that caused PR #9787's EL9 chroots to be set as a no-op until this lands.

Refactored to make packaging/copr/build-copr.sh:9 the single source of truth:

  • workflow_dispatch.chroots input default changed from the hardcoded list to "", with a description that explains the empty-string semantics.
  • Removed the release-event branch's hardcoded CHROOTS=... line entirely.
  • The build step now passes --chroots only when the workflow input was explicitly set (non-empty); otherwise the script falls through to its own default list.
  • Switched the build step to a bash array for readable conditional arg passing.

After this, both the release-event path and the no-input workflow_dispatch path use whatever packaging/copr/build-copr.sh declares.

Test plan

  • actionlint .github/workflows/copr-publish.yml passes locally.
  • Next workflow_dispatch with empty input → COPR job logs the script default list (currently includes epel-10-* and centos-stream+epel-next-9-* after chore(copr): publish EL9 builds via centos-stream+epel-next-9 chroot #9787 lands).
  • Next workflow_dispatch with a custom value → COPR job logs that value instead.

🤖 Generated with Claude Code


Note

Medium Risk
Changes the COPR publish workflow’s chroot selection logic, which can alter what targets get built on release/publish runs. Risk is limited to CI/release automation but could result in missing or unintended COPR builds if the default list or input handling is wrong.

Overview
Makes packaging/copr/build-copr.sh the single source of truth for COPR chroots by removing the workflow’s hardcoded/default chroot list and only setting CHROOTS when workflow_dispatch provides a non-empty input.

Refactors the COPR submission step to build a bash args array and conditionally append --chroots, so release-triggered runs (and empty-input manual runs) fall back to the script’s internal default chroot list.

Reviewed by Cursor Bugbot for commit 454b531. Bugbot is set up for automated code reviews on this repo. Configure here.

…oots

The workflow previously hardcoded the chroot list in two places and always
passed --chroots to build-copr.sh, so the script's default was unreachable.
Drop the workflow's defaults and only pass --chroots when explicitly
overridden via workflow_dispatch. This unblocks the EL9 chroots added in
the previous commits — without this, they were never published.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Note

Gemini is unable to generate a review for this pull request due to the file types involved not being currently supported.

@greptile-apps

greptile-apps Bot commented May 11, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR eliminates the three-way chroot list duplication between copr-publish.yml (dispatch default, release branch) and build-copr.sh. Both the release-event path and a no-input workflow_dispatch now fall through to the script's own CHROOTS default on line 9, while an explicit dispatch input still overrides it.

  • The workflow_dispatch chroots input default is changed to "", and the step that previously set a hardcoded CHROOTS= for the release event is removed entirely.
  • --chroots is now appended to the invocation only when $CHROOTS is non-empty (i.e., an explicit dispatch override), using a bash args array for clarity.

Confidence Score: 5/5

The change is safe to merge; it simplifies a straightforward CI workflow with no logic regressions on any trigger path.

The refactoring is minimal: one file changed, the conditional logic correctly distinguishes all three trigger paths (release, dispatch-with-input, dispatch-without-input), and the bash array approach is a strict improvement over the previous single-line invocation. The script's own default list is now reachable as intended.

No files require special attention.

Important Files Changed

Filename Overview
.github/workflows/copr-publish.yml Refactored to remove duplicate chroot lists; build-copr.sh is now the single source of truth via conditional --chroots injection only when explicitly set by the caller.

Reviews (1): Last reviewed commit: "chore(ci): make build-copr.sh the single..." | Re-trigger Greptile

@jdx jdx merged commit 6e4df51 into main May 11, 2026
34 of 35 checks passed
@jdx jdx deleted the chore/copr-workflow-default-chroots branch May 11, 2026 19:34
@github-actions

Copy link
Copy Markdown

Hyperfine Performance

mise x -- echo

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.5.6 x -- echo 20.5 ± 1.0 18.5 27.7 1.00
mise x -- echo 20.5 ± 0.9 18.6 27.2 1.00 ± 0.07

mise env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.5.6 env 19.8 ± 1.0 17.7 26.8 1.00
mise env 20.0 ± 1.2 18.1 29.8 1.01 ± 0.08

mise hook-env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.5.6 hook-env 21.0 ± 1.0 18.6 27.7 1.00
mise hook-env 21.0 ± 0.9 19.1 27.8 1.00 ± 0.07

mise ls

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.5.6 ls 17.3 ± 0.9 15.5 23.7 1.00
mise ls 17.3 ± 0.9 15.6 26.0 1.00 ± 0.07

xtasks/test/perf

Command mise-2026.5.6 mise Variance
install (cached) 130ms 130ms +0%
ls (cached) 60ms 59ms +1%
bin-paths (cached) 65ms 65ms +0%
task-ls (cached) 496ms 495ms +0%

mise-en-dev added a commit that referenced this pull request May 13, 2026
### 🐛 Bug Fixes

- **(backend)** use runtime paths for backend bin dirs by @risu729 in
[#9606](#9606)
- **(ci)** preserve vendor/aqua-registry/ in PPA publish workflow by
@jdx in [#9782](#9782)
- **(ci)** set UTF-8 locale in e2e Docker image by @jdx in
[#9820](#9820)
- **(ci)** pass UTF-8 locale through to e2e tests by @jdx in
[#9823](#9823)
- **(conda)** dedup repodata by archive identifier instead of URL by
@jdx in [#9831](#9831)
- **(github)** use default shell for credential command by @risu729 in
[#9664](#9664)
- **(settings)** distinguish unset known settings from unknown ones by
@jdx in [#9818](#9818)
- **(upgrade)** remove completed progress jobs to prevent duplicate
output by @jdx in [#9779](#9779)
- **(vfox)** resolve GitHub token lazily inside Lua plugins by @jdx in
[#9816](#9816)

### 🚜 Refactor

- **(config)** separate core and backend tool options by @risu729 in
[#9753](#9753)
- **(schema)** reuse env directive property schemas by @risu729 in
[#9651](#9651)

### 📚 Documentation

- **(aliases)** fix Aliased Versions example and drop stale asdf callout
by @jdx in [#9830](#9830)

### ⚡ Performance

- **(aqua)** use phf for baked registry lookups by @risu729 in
[#9763](#9763)
- **(task)** cache per-file content hashes for
source_freshness_hash_contents by @jdx in
[#9819](#9819)

### 🧪 Testing

- **(e2e)** pin aube to known-good version in npm package_manager test
by @jdx in [#9794](#9794)

### 📦 Registry

- replace unsupported exe options by @risu729 in
[#9587](#9587)
- update pi by @garysassano in
[#9792](#9792)

### Chore

- **(ci)** use non-large runners for release builds by @jdx in
[#9786](#9786)
- **(ci)** compare registry PRs from fork point by @risu729 in
[#9643](#9643)
- **(ci)** make build-copr.sh the single source of truth for COPR
chroots by @jdx in [#9788](#9788)
- **(ci)** use crates.io trusted publishing in release-plz by @jdx in
[#9793](#9793)
- **(ci)** remove autofix.ci workflow by @jdx in
[#9801](#9801)
- **(ci)** restore -large runner for Linux release builds by @jdx in
[#9815](#9815)
- **(ci)** add zizmor workflow for github actions security analysis by
@jdx in [#9804](#9804)
- **(ci)** assert mise run render produces no diff by @jdx in
[#9803](#9803)
- **(copr)** publish EL9 builds via centos-stream+epel-next-9 chroot by
@jdx in [#9787](#9787)

### Ci

- remove pull_request_target workflow by @jdx in
[#9799](#9799)
- remove caching from publishing workflows by @jdx in
[#9800](#9800)

### Security

- reject shell metacharacters in version strings and CI inputs by @jdx
in [#9814](#9814)

## 📦 Aqua Registry Updates

### New Packages (11)

- [`Code-Hex/Neo-cowsay`](https://github.com/Code-Hex/Neo-cowsay)
-
[`SonarSource/sonarqube-cli`](https://github.com/SonarSource/sonarqube-cli)
- [`earendil-works/pi`](https://github.com/earendil-works/pi)
- [`hylo-lang/hylo-new`](https://github.com/hylo-lang/hylo-new)
- [`jfernandez/bpftop`](https://github.com/jfernandez/bpftop)
- [`modem-dev/hunk`](https://github.com/modem-dev/hunk)
- [`npm/cli`](https://github.com/npm/cli)
- [`racket/racket/minimal`](https://github.com/racket/racket)
- [`slackapi/slack-cli`](https://github.com/slackapi/slack-cli)
- [`vectordotdev/vector`](https://github.com/vectordotdev/vector)
- [`wasilibs/go-yamllint`](https://github.com/wasilibs/go-yamllint)

### Updated Packages (10)

- [`DataDog/pup`](https://github.com/DataDog/pup)
- [`aquasecurity/trivy`](https://github.com/aquasecurity/trivy)
- [`astral-sh/uv`](https://github.com/astral-sh/uv)
- [`caarlos0/svu`](https://github.com/caarlos0/svu)
-
[`cargo-bins/cargo-binstall`](https://github.com/cargo-bins/cargo-binstall)
- [`foundry-rs/foundry`](https://github.com/foundry-rs/foundry)
- [`gastownhall/beads`](https://github.com/gastownhall/beads)
-
[`gruntwork-io/terragrunt`](https://github.com/gruntwork-io/terragrunt)
- [`pnpm/pnpm`](https://github.com/pnpm/pnpm)
- [`santosr2/TerraTidy`](https://github.com/santosr2/TerraTidy)
3PeatVR pushed a commit to 3PeatVR/mise that referenced this pull request May 14, 2026
### 🐛 Bug Fixes

- **(backend)** use runtime paths for backend bin dirs by @risu729 in
[jdx#9606](jdx#9606)
- **(ci)** preserve vendor/aqua-registry/ in PPA publish workflow by
@jdx in [jdx#9782](jdx#9782)
- **(ci)** set UTF-8 locale in e2e Docker image by @jdx in
[jdx#9820](jdx#9820)
- **(ci)** pass UTF-8 locale through to e2e tests by @jdx in
[jdx#9823](jdx#9823)
- **(conda)** dedup repodata by archive identifier instead of URL by
@jdx in [jdx#9831](jdx#9831)
- **(github)** use default shell for credential command by @risu729 in
[jdx#9664](jdx#9664)
- **(settings)** distinguish unset known settings from unknown ones by
@jdx in [jdx#9818](jdx#9818)
- **(upgrade)** remove completed progress jobs to prevent duplicate
output by @jdx in [jdx#9779](jdx#9779)
- **(vfox)** resolve GitHub token lazily inside Lua plugins by @jdx in
[jdx#9816](jdx#9816)

### 🚜 Refactor

- **(config)** separate core and backend tool options by @risu729 in
[jdx#9753](jdx#9753)
- **(schema)** reuse env directive property schemas by @risu729 in
[jdx#9651](jdx#9651)

### 📚 Documentation

- **(aliases)** fix Aliased Versions example and drop stale asdf callout
by @jdx in [jdx#9830](jdx#9830)

### ⚡ Performance

- **(aqua)** use phf for baked registry lookups by @risu729 in
[jdx#9763](jdx#9763)
- **(task)** cache per-file content hashes for
source_freshness_hash_contents by @jdx in
[jdx#9819](jdx#9819)

### 🧪 Testing

- **(e2e)** pin aube to known-good version in npm package_manager test
by @jdx in [jdx#9794](jdx#9794)

### 📦 Registry

- replace unsupported exe options by @risu729 in
[jdx#9587](jdx#9587)
- update pi by @garysassano in
[jdx#9792](jdx#9792)

### Chore

- **(ci)** use non-large runners for release builds by @jdx in
[jdx#9786](jdx#9786)
- **(ci)** compare registry PRs from fork point by @risu729 in
[jdx#9643](jdx#9643)
- **(ci)** make build-copr.sh the single source of truth for COPR
chroots by @jdx in [jdx#9788](jdx#9788)
- **(ci)** use crates.io trusted publishing in release-plz by @jdx in
[jdx#9793](jdx#9793)
- **(ci)** remove autofix.ci workflow by @jdx in
[jdx#9801](jdx#9801)
- **(ci)** restore -large runner for Linux release builds by @jdx in
[jdx#9815](jdx#9815)
- **(ci)** add zizmor workflow for github actions security analysis by
@jdx in [jdx#9804](jdx#9804)
- **(ci)** assert mise run render produces no diff by @jdx in
[jdx#9803](jdx#9803)
- **(copr)** publish EL9 builds via centos-stream+epel-next-9 chroot by
@jdx in [jdx#9787](jdx#9787)

### Ci

- remove pull_request_target workflow by @jdx in
[jdx#9799](jdx#9799)
- remove caching from publishing workflows by @jdx in
[jdx#9800](jdx#9800)

### Security

- reject shell metacharacters in version strings and CI inputs by @jdx
in [jdx#9814](jdx#9814)

## 📦 Aqua Registry Updates

### New Packages (11)

- [`Code-Hex/Neo-cowsay`](https://github.com/Code-Hex/Neo-cowsay)
-
[`SonarSource/sonarqube-cli`](https://github.com/SonarSource/sonarqube-cli)
- [`earendil-works/pi`](https://github.com/earendil-works/pi)
- [`hylo-lang/hylo-new`](https://github.com/hylo-lang/hylo-new)
- [`jfernandez/bpftop`](https://github.com/jfernandez/bpftop)
- [`modem-dev/hunk`](https://github.com/modem-dev/hunk)
- [`npm/cli`](https://github.com/npm/cli)
- [`racket/racket/minimal`](https://github.com/racket/racket)
- [`slackapi/slack-cli`](https://github.com/slackapi/slack-cli)
- [`vectordotdev/vector`](https://github.com/vectordotdev/vector)
- [`wasilibs/go-yamllint`](https://github.com/wasilibs/go-yamllint)

### Updated Packages (10)

- [`DataDog/pup`](https://github.com/DataDog/pup)
- [`aquasecurity/trivy`](https://github.com/aquasecurity/trivy)
- [`astral-sh/uv`](https://github.com/astral-sh/uv)
- [`caarlos0/svu`](https://github.com/caarlos0/svu)
-
[`cargo-bins/cargo-binstall`](https://github.com/cargo-bins/cargo-binstall)
- [`foundry-rs/foundry`](https://github.com/foundry-rs/foundry)
- [`gastownhall/beads`](https://github.com/gastownhall/beads)
-
[`gruntwork-io/terragrunt`](https://github.com/gruntwork-io/terragrunt)
- [`pnpm/pnpm`](https://github.com/pnpm/pnpm)
- [`santosr2/TerraTidy`](https://github.com/santosr2/TerraTidy)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant