Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ All historical references to "CFWheels" in this changelog have been preserved fo

### Fixed

- The Scoop `wheels.cmd` wrapper (both `wheels` and `wheels-be` channels) now dispatches LuCLI via `"%JAVA_HOME%\bin\java.exe" -client -jar "%~dp0lucli-<ver>.bat" %*` instead of `call "%~dp0lucli-<ver>.bat" %*`. The `lucli-<ver>.bat` artifact is a bat-jar concatenation (small bat preamble + raw JAR ZIP bytes, ~915 KB), and cmd.exe pre-parses the entire file looking for labels before running it — on at least Windows 11 10.0.26200.8457 that pre-parse trips on a byte sequence in the JAR tail and aborts with `The filename, directory name, or volume label syntax is incorrect.` before LuCLI ever executes. Invoking java directly bypasses the bat-file pre-parser; java reads the JAR via stream and skips the bat preamble. The wrapper now also resolves `JAVA_HOME` from the openjdk21 dependency declared via `depends: java/openjdk21` (preferring `%SCOOP%\apps\openjdk21\current`, falling back to the sibling-app layout `%~dp0..\..\openjdk21\current`) and fails fast with an actionable install hint when neither is found. The same fix is applied to the `:deploy_dispatch` branch added by #2691. The published bucket needs republishing for existing installs to pick up the fix on their next `scoop update`. Closes #2765
- The Scoop `wheels.cmd` wrapper (both `wheels` and `wheels-be` channels) was failing on Windows 11 build 10.0.26200.8457 with `The filename, directory name, or volume label syntax is incorrect.` before LuCLI could run, due to two compounding bugs: (1) `call "%~dp0lucli-<ver>.bat" %*` made cmd.exe pre-parse the entire bat-jar concatenation (~915 KB of bat preamble + `:JAR_BOUNDARY` + raw JAR ZIP bytes) looking for labels, and the pre-parser tripped on byte sequences in the ZIP tail; (2) `JAVA_HOME=%~dp0share\jdk` pointed at a location Scoop's extraction didn't reliably produce — on at least one machine the inlined OpenJDK 21 zip landed at `%~dp0jdk-21.0.2` (the ZIP's root layout, as if `extract_to=share/jdk` were ignored) instead. The fix landed directly in the canonical bucket via wheels-dev/scoop-wheels#6: the wrapper now dispatches LuCLI via `"%JAVA_HOME%\bin\java.exe" -client -jar "%~dp0lucli-<ver>.bat" %*` (java reads the JAR via stream and skips the bat preamble, bypassing cmd's pre-parser entirely), and a one-line fallback `if not exist "%JAVA_HOME%\bin\java.exe" set "JAVA_HOME=%~dp0jdk-21.0.2"` handles the broken-extraction case. As part of the same cleanup, the stale Scoop manifest drafts at `tools/distribution-drafts/scoop/` (`build-manifests.py`, `validate.py`, `wheels.json`, `wheels-be.json`, and the local README), plus the regression spec at `vendor/wheels/tests/specs/cli/ScoopWrapperSpec.cfc` that pinned against those drafts, are removed — the live bucket has had its own self-hosted autoupdate workflow and an inline-JDK layout since scoop-wheels@3f22250 and the in-repo drafts had silently diverged on every meaningful axis (inline JDK vs. `depends:`, real hashes vs. placeholder zeros, autoupdate strategy, wrapper template). `tools/distribution-drafts/README.md` is updated to note that the scoop bucket is now canonical and no longer mirrored here. Closes #2765 (#2767)
- Release artifacts (`wheels-core`, `wheels-cli`, `wheels-base-template`, `wheels-starter-app`) now ship `*.zip.sha512` / `*.zip.md5` checksum sidecars (was `*.sha512` / `*.md5`) so the scoop-wheels `autoupdate` config — which expects the `.zip.sha512` shape via `$url.sha512` substitution — no longer 404s on every non-module artifact. `wheels-module` already used the correct shape; this brings the other four artifacts and both release workflows (`release.yml`, `release-candidate.yml`, plus the `snapshot.yml` reusable-workflow chain) into line. Closes the Windows install regression reported in #2758 + scoop-wheels#2 (#2761)
- Docs: Windows install steps in `start-here/installing.mdx` and `command-line-tools/installation.mdx` now call out `scoop bucket add java` as a prerequisite. Scoop's `depends:` declaration does not auto-add the dependency bucket on the user's behalf, so users hit `Couldn't find manifest for 'openjdk21' from 'java' bucket` before they could proceed (#2761)
- `$viteResolveAssets()` on Adobe CF 2023/2025 returned empty `preloads` and `styles` arrays when the manifest included transitive imports with CSS chunks. Root cause: Adobe CF copies arrays by value when they are passed directly from a struct literal — `$viteWalkImports(preloads = local.rv.preloads, styles = local.rv.styles, ...)` handed the walker independent copies on Adobe CF, so every `ArrayAppend(arguments.preloads, ...)` inside the recursion wrote to garbage and `local.rv` came back empty. Lucee and BoxLang share the array references, so the bug was Adobe-only. Fix: pass the parent `rv` struct and mutate `arguments.rv.preloads` / `arguments.rv.styles` — struct references are shared on every engine (Cross-Engine Invariant #6). Affects every helper that walks transitive imports: `viteScriptTag`, `viteStyleTag`, `vitePreloadTag`, and `$viteHtmlHead`. Existing viteSpec assertions on transitive-import walk, diamond-dependency dedup, and cyclic-import termination serve as the regression catch (#2756)
Expand Down
14 changes: 8 additions & 6 deletions tools/distribution-drafts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@ When merged, the contents of this directory should be copied into:
| `homebrew/wheels-be.rb` | `wheels-dev/homebrew-wheels` | `Formula/wheels-be.rb` (new file) |
| `homebrew/bleeding-edge-update.yml` | `wheels-dev/homebrew-wheels` | `.github/workflows/bleeding-edge-update.yml` (new file) |
| `homebrew/auto-update-channel-patch.md` | (informational) | applied as a small patch to the existing `auto-update.yml` |
| `scoop/wheels.json` | `wheels-dev/scoop-wheels` (new repo) | `bucket/wheels.json` |
| `scoop/wheels-be.json` | `wheels-dev/scoop-wheels` | `bucket/wheels-be.json` |
| `winget/manifests/*.yaml` | `microsoft/winget-pkgs` (PR) | `manifests/w/WheelsFramework/Wheels/<version>/` |
| `snapshots-repo/README.md` | `wheels-dev/wheels-snapshots` (✅ pushed) | `README.md` |
| `snapshots-repo/cleanup-old-snapshots.yml` | `wheels-dev/wheels-snapshots` (✅ pushed) | `.github/workflows/cleanup-old-snapshots.yml` |
| `linux-packages/*` | reference + Phase 2 plan for `apt.wheels.dev` / `yum.wheels.dev` | (CF Pages) |

After Tuesday's GA, this directory can either stay (as canonical source-of-truth
for what each tap looks like) or be removed (the taps become authoritative).
Leaning toward keeping it — drift between the in-repo template and the actual
tap is a useful diff signal during release reviews.
## Scoop bucket is authoritative, not drafted here

The Scoop manifests previously drafted in `scoop/` were removed (wheels#2765).
The live `wheels-dev/scoop-wheels` bucket has its own self-hosted autoupdate
workflow and is the unambiguous source of truth — keeping a drafted copy here
just produced silent drift (the in-repo drafts grew out of sync with the
bucket's inline-JDK rework and no one noticed for two releases). Edit the
bucket repo directly; this repo no longer mirrors it.
141 changes: 0 additions & 141 deletions tools/distribution-drafts/scoop/README.md

This file was deleted.

Loading
Loading