fix(release): CI starts the Windows launcher under Wine from a build that unpacks itself, so the uncompressed launcher builds again #37

Merged
HumanBean merged 1 commit from HumanBean/LongshotLauncher:fix/wine-self-check into main 2026-11-13 13:36:24 +00:00
Owner

No launcher has been released since PR 32: every build since then fails at CI's Wine --self-check, so neither nightlies nor v1.0.0-rc.3 can be published. Wine can't load the uncompressed single-file program. This PR keeps the program uncompressed (PR 32's antivirus fix) and changes what CI starts under Wine.

What changed

  • scripts/package.sh: with WINE_CHECK_EXE=<path>, it also publishes the Windows program with -p:IncludeAllContentForSelfExtract=true, the same code built to unpack itself to disk at start, and writes it to that path. It isn't put in the release. publish() now takes its output folder.
  • release.yml: the build job sets WINE_CHECK_EXE to $RUNNER_TEMP/wine-check/LongshotLauncher.exe and starts that file under Wine instead of the shipped setup.

Why the shipped file can't be checked under Wine

An uncompressed .NET single file has its assemblies mapped straight from the bundle. Wine refuses that mapping:

Failed to load System.Private.CoreLib.dll (error code 0x8007046C)
Error message: Incorrect alignment. (0x8007046C)
Failed to create CoreCLR, HRESULT: 0x8007046C

That's from run 125's build job. The compressed program worked under Wine only because it decompressed into memory. Uncompressed single-file is .NET's default and is expected to work on real Windows, but nobody has started the uncompressed program on Windows yet. That needs a Windows tester before the next rc is tagged.

Testing

  • scripts/package.sh nightly-test-winecheck <dir> with WINE_CHECK_EXE set, on Linux with the .NET 10 SDK: builds all three files and the check program (the same 106 MB setup as before; the check program is the same size with a different SHA-256).
  • Ubuntu 24.04 container, its wine package (the same as CI's step):
    • the shipped setup.exe --self-check: the 0x8007046C failure above, the same as CI;
    • the check program --self-check: LongshotLauncher nightly-test-winecheck.
  • python -I tests/test_launcher_core.py --longshot <Longshot checkout>: 634 checks passed. python -I tests/test_release.py: OK. bash -n scripts/package.sh: OK.
  • Not tested: the shipped uncompressed setup.exe on real Windows. The merge's nightly is the first published build of it.

🤖 Generated with Claude Code

No launcher has been released since [PR 32](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/32): every build since then fails at CI's Wine `--self-check`, so neither nightlies nor `v1.0.0-rc.3` can be published. Wine can't load the uncompressed single-file program. This PR keeps the program uncompressed (PR 32's antivirus fix) and changes what CI starts under Wine. ## What changed - **`scripts/package.sh`:** with `WINE_CHECK_EXE=<path>`, it also publishes the Windows program with `-p:IncludeAllContentForSelfExtract=true`, the same code built to unpack itself to disk at start, and writes it to that path. It isn't put in the release. `publish()` now takes its output folder. - **`release.yml`:** the build job sets `WINE_CHECK_EXE` to `$RUNNER_TEMP/wine-check/LongshotLauncher.exe` and starts that file under Wine instead of the shipped setup. ## Why the shipped file can't be checked under Wine An uncompressed .NET single file has its assemblies mapped straight from the bundle. Wine refuses that mapping: ``` Failed to load System.Private.CoreLib.dll (error code 0x8007046C) Error message: Incorrect alignment. (0x8007046C) Failed to create CoreCLR, HRESULT: 0x8007046C ``` That's from [run 125](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/actions/runs/125)'s build job. The compressed program worked under Wine only because it decompressed into memory. Uncompressed single-file is .NET's default and is expected to work on real Windows, but **nobody has started the uncompressed program on Windows yet**. That needs a Windows tester before the next rc is tagged. ## Testing - `scripts/package.sh nightly-test-winecheck <dir>` with `WINE_CHECK_EXE` set, on Linux with the .NET 10 SDK: builds all three files and the check program (the same 106 MB setup as before; the check program is the same size with a different SHA-256). - Ubuntu 24.04 container, its `wine` package (the same as CI's step): - the shipped `setup.exe --self-check`: the `0x8007046C` failure above, the same as CI; - the check program `--self-check`: `LongshotLauncher nightly-test-winecheck`. - `python -I tests/test_launcher_core.py --longshot <Longshot checkout>`: 634 checks passed. `python -I tests/test_release.py`: OK. `bash -n scripts/package.sh`: OK. - **Not tested:** the shipped uncompressed `setup.exe` on real Windows. The merge's nightly is the first published build of it. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(release): CI starts the Windows launcher under Wine from a build that unpacks itself, so the uncompressed launcher builds again
All checks were successful
CI / Compile and test (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 8s
c15c5e7af8
Co-Authored-By: Claude Opus 5.5 <[email protected]>
HumanBean deleted branch fix/wine-self-check 2026-11-13 13:36:24 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/LongshotLauncher!37
No description provided.