Skip to content

fix: correct LuCLI release asset URLs in distribution drafts#2547

Merged
bpamiri merged 1 commit intodevelopfrom
peter/fix-lucli-asset-urls
May 10, 2026
Merged

fix: correct LuCLI release asset URLs in distribution drafts#2547
bpamiri merged 1 commit intodevelopfrom
peter/fix-lucli-asset-urls

Conversation

@bpamiri
Copy link
Copy Markdown
Collaborator

@bpamiri bpamiri commented May 10, 2026

Summary

Develop snapshot CI run 25636562099 failed at the Build Linux packages (.deb / .rpm) step with curl: (22) ... 404. Root cause: my draft URLs assumed arch-split asset names (lucli-0.3.7-linux-x64, lucli-0.3.7-macos-arm64, etc.) but cybersonic/LuCLI v0.3.7 ships single binaries per OS.

Verified against actual release:

$ gh release view v0.3.7 --repo cybersonic/LuCLI --json assets
  lucli-0.3.7-linux       (Linux x86_64)
  lucli-0.3.7-macos       (macOS universal)
  lucli-0.3.7.bat         (Windows wrapper)
  lucli-0.3.7.jar
  lucli.jar

Fixed

File Change Active?
build-linux-packages.sh -linux-x64-linux ✅ runs in CI; this fix unblocks snapshot publishing
wheels-be.rb (homebrew draft) Collapse on_arm/on_intel into single on_macos; drop -x64/-arm64 suffixes ❌ not pushed yet
wheels.json, wheels-be.json (scoop drafts) -windows-x64.exe.bat ❌ scoop bucket not created

Test plan

  • CI green (commitlint expects bare fix: or fix(scope): — no scope here since the change spans drafts in multiple subsystems)
  • After merge, develop snapshot run reaches Create Snapshot Pre-Release step (was previously skipped due to this failure)
  • First release lands at https://github.com/wheels-dev/wheels-snapshots/releases

Note for Tuesday GA

Stable (main) runs the same nfpm step, so this fix is also required for v4.0.0 GA tag publishing. Without it, GA day's release would hit the same 404. Merging here, before Tuesday, addresses both.

Refs

#2545 (introduced the wrong URLs in draft state).
#2546 (last fix; this is the next failure surfaced post-merge).

The build-linux-packages.sh script in tools/distribution-drafts/ failed in
the develop snapshot CI run (run 25636562099) with `curl: (22) ... 404`
when fetching the LuCLI Linux binary. Root cause: assumed asset names had
arch suffixes (`lucli-0.3.7-linux-x64`, `lucli-0.3.7-macos-arm64`, etc.)
but the upstream cybersonic/LuCLI v0.3.7 release actually publishes single
binaries per OS with no arch split.

Verified upstream:
  $ gh release view v0.3.7 --repo cybersonic/LuCLI --json assets
    lucli-0.3.7-linux       (Linux x86_64)
    lucli-0.3.7-macos       (macOS universal)
    lucli-0.3.7.bat         (Windows wrapper, calls Java with the .jar)
    lucli-0.3.7.jar         (versioned jar)
    lucli.jar               (unversioned)

Fixed in four places:

- build-linux-packages.sh: -linux-x64 -> -linux. This is the only change
  that affects an active CI workflow; Linux package build will now succeed.

- wheels-be.rb (homebrew draft): collapse the on_arm/on_intel split into a
  single on_macos block since the macOS asset is universal. No active
  consumer yet (formula not pushed to tap).

- wheels.json + wheels-be.json (scoop drafts): -windows-x64.exe -> .bat
  to match the actual artifact name. No active consumer yet (scoop bucket
  not created).

Tuesday GA unaffected on stable: stable releases run the same nfpm step
which now uses the correct URL.
Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wheels Bot — Reviewer A

TL;DR — This PR fixes a CI-blocking 404 in the Linux package build step by correcting the LuCLI download URL from the non-existent arch-suffixed form to the actual asset name, and applies the same correction to the Homebrew and Scoop distribution drafts. The primary fix is correct and targeted. One forward-looking concern with the Scoop manifests is flagged below, but since those are explicitly not-yet-deployed drafts the overall verdict is comment — no changes required to unblock the CI fix.


Correctness

build-linux-packages.sh line 25 — fix is accurate.

-LUCLI_LINUX_URL="${LUCLI_LINUX_URL:-https://github.com/cybersonic/LuCLI/releases/download/v${LUCLI_VERSION}/lucli-${LUCLI_VERSION}-linux-x64}"
+LUCLI_LINUX_URL="${LUCLI_LINUX_URL:-https://github.com/cybersonic/LuCLI/releases/download/v${LUCLI_VERSION}/lucli-${LUCLI_VERSION}-linux}"

Matches the actual v0.3.7 release asset name. Other CI workflows (snapshot.yml line 40, pr.yml line 49, release.yml line 582) already used the no-suffix form; this brings the build script into alignment.

wheels-be.rb — collapsing on_arm/on_intel into a single on_macos block is correct given LuCLI ships a universal binary. The added comment citing gh release view v0.3.7 as source-of-truth is good practice for future maintainers.

Scoop manifests — potential missing JAR dependency (not a blocker today, but flag before go-live)

Both wheels.json and wheels-be.json now download lucli-0.3.7.bat as the Windows launcher:

"https://github.com/cybersonic/LuCLI/releases/download/v0.3.7/lucli-0.3.7.bat"

and invoke it directly in post_install:

"$dir\\lucli-0.3.7.bat" %*

The .bat file is a Windows wrapper script. LuCLI's v0.3.7 release also ships lucli-0.3.7.jar and lucli.jar, which the bat launcher calls internally (standard pattern for Java CLI wrappers). The Scoop manifests download only the .bat — the JAR is absent. When the Scoop bucket is eventually created and a user runs scoop install wheels, the invocation of lucli-0.3.7.bat will fail with a missing JAR error.

The PR correctly marks these files as ❌ scoop bucket not created, so there is no user-facing breakage today. Before activating the Scoop bucket, the manifest should be updated to also download lucli-0.3.7.jar (or lucli.jar) into $dir. Suggest tracking this as a follow-up issue so it doesn't get lost before GA.


Commits

Single commit: fix: correct LuCLI release asset URLs in distribution drafts

  • Type fix — valid per commitlint.config.js
  • No scope — appropriate since the change spans three distribution subsystems
  • Subject is non-empty, not ALL-CAPS, and well within 100 chars

Conforms to convention.


Tests

No automated test coverage for distribution artifact scripts — consistent with the rest of the tools/distribution-drafts/ directory. The CI pipeline itself (release.yml calling build-linux-packages.sh) is the effective integration test for the Linux path, which is the intended verification as stated in the PR test plan.


Security

SHA256 values remain 0000... placeholders in all draft files. This is a pre-existing condition explicitly acknowledged in comments and acceptable for draft assets. Worth noting that build-linux-packages.sh fetches the LuCLI binary with curl -fsSL without SHA verification — also pre-existing and not introduced by this PR, but worth a follow-up hardening ticket before GA.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 10, 2026

Wheels Bot -- Reviewer B (round 1)

A's review is solid. No sycophancy, no false positives I can identify, and the one forward-looking concern about the Scoop JAR dependency is substantive and correctly scoped as non-blocking. Verdict alignment is correct. Converging on approve.

Sycophancy

None detected. A used COMMENTED (not approve), raised real concerns, and avoided blanket praise despite the fix being narrow and straightforward.

False positives

None detected.

  • A's claim that snapshot.yml, pr.yml, and release.yml already used the no-suffix URL form is verified: all three reference lucli-${LUCLI_VERSION}-linux at the lines cited.
  • The Homebrew collapse from on_arm/on_intel to a single on_macos block is accurately described given a universal binary.
  • The Scoop JAR concern (A's main flag) is at minimum plausible: lucli-0.3.7.bat is a Java wrapper script; if the JAR is not bundled inside wheels-cli-*.zip, a user running scoop install wheels would hit a missing-JAR error. A correctly marks this non-blocking because the Scoop bucket does not exist yet, and suggests a follow-up issue. That framing is right.

Missed issues

None detected. The diff is narrow -- four URL string substitutions across three distribution-draft files. A covered the only substantive forward-looking risk (Scoop JAR), noted the pre-existing SHA256 placeholder situation, and noted the pre-existing absence of SHA verification in the curl invocation. Nothing was glossed over.

Verdict alignment

A's COMMENTED (no changes required) verdict is consistent with the findings. The primary CI fix is correct and unblocks snapshot publishing; the Scoop concern is real but not a reason to hold the PR.

Convergence

Aligned. A and I agree: the Linux package build fix is correct, the Homebrew and Scoop draft corrections follow the same logic, and no changes are needed before merging. The Scoop JAR dependency should be tracked as a follow-up issue before the Scoop bucket is activated. Joint recommendation: approve and merge.

@bpamiri bpamiri merged commit e210596 into develop May 10, 2026
7 checks passed
@bpamiri bpamiri deleted the peter/fix-lucli-asset-urls branch May 10, 2026 19:20
bpamiri added a commit that referenced this pull request May 10, 2026
Documents the new bleeding-edge channel (wheels-be) alongside stable
(wheels). Covers:

- Comparison table: package name, source repo, cadence, version shape,
  channel-aware --version output
- Install steps for each channel on macOS / Windows / Linux
- Switching channels (uninstall one, install the other — they're
  mutually exclusive via brew's conflicts_with)
- "Already-scaffolded apps are unaffected" reassurance
- Decision guide: when to pick stable vs bleeding-edge
- "How channels work under the hood" optional section explaining the
  snapshot version format, where snapshots live (wheels-snapshots
  repo), and the auto-update propagation chain

Also adds a "Choose a channel" section to installing.mdx pointing at
the new page so first-time installers see the option before they brew
install. Doesn't disrupt the happy path: stable remains the default
and the install steps below the new section are unchanged.

Sidebar order: release-channels.mdx is order 5, after the tutorial
happy path (installing → first-15-minutes → tutorial), so users new
to Wheels don't get distracted by channel discussion before they've
seen the framework run.

Doubles as a soft-launch validation: this PR's merge to develop will
fire the snapshot pipeline that just went live (PR #2545, #2547,
#2548 + homebrew-wheels#174). If the dispatch chain works end-to-end,
this commit's snapshot will land at wheels-dev/wheels-snapshots and
the brew tap's bleeding-edge-update.yml will auto-bump wheels-be.rb
to the new version within ~5 minutes.
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