Add click-through Windows COW support to trunk#36
Merged
Conversation
This was referenced May 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What it does
Applies the Windows-native COW work to current
trunk.On Windows, ForkPress can use ReFS block cloning through
FSCTL_DUPLICATE_EXTENTS_TO_FILEwhen a site lives on clone-capable ReFS/Dev Drive storage. This PR also adds the click-through setup path:ForkPressSetup.exeinstalls ForkPress, prepares the Dev Drive, initializes a first site, and creates a Start ForkPress Site shortcut.The intended fresh laptop flow is:
ForkPressSetup.exe.This keeps #35 intact and opens a fresh trunk-based PR for the same direction.
Refs #34 and #6.
Rationale
A normal Windows laptop starts on NTFS, where ForkPress cannot cheaply create COW branches. The product path should not ask users to install WSL, Docker, FUSE, WinFsp, Dokany, or a developer storage stack.
The installer creates a ReFS/Dev Drive VHDX instead:
ForkPress projects under that mount get ordinary Windows paths plus ReFS block cloning. On Windows,
forkpress initfails closed if the current directory cannot block-clone instead of silently creating huge full-copy branches on NTFS.Implementation
FSCTL_DUPLICATE_EXTENTS_TO_FILE, including ReFS cluster alignment and chunk handling.bin/php.exeplus its DLL/ext tree.forkpress.exe, packages a zip, and createsForkPressSetup.exewith Inno Setup.%ProgramFiles%\ForkPress.%ProgramData%\ForkPressstorage.WINDOWS_CODESIGN_CERT_BASE64andWINDOWS_CODESIGN_PASSWORDare configured.Testing instructions
Local checks run on this trunk-based branch:
FORKPRESS_RUNTIME_BUNDLE=/dev/null cargo test --workspace FORKPRESS_RUNTIME_BUNDLE=/dev/null cargo check -p forkpress-cli --target x86_64-pc-windows-msvc npx --yes prettier --check .github/workflows/ci.yml .github/workflows/release.yml actionlint .github/workflows/ci.yml .github/workflows/release.yml git diff --checkThe Windows release workflow also smoke-tests the packaged artifact on
windows-latestby extracting the zip, running packagedforkpress.exe --version, running packagedinstall.ps1against a CI ReFS VHDX, confirming an initialized site exists, and runningforkpress storage statusagainst that installed site.Manual release validation should still include one real fresh Windows 11 x64 laptop click-through of the signed
ForkPressSetup.exe, mainly to verify SmartScreen/reboot/shortcut behavior outside GitHub Actions.