Status: active
Applies to: Windows x64 zip releases and installer preparation
Current release target: 0.3.0
rmenu core v1 is frozen. Release work must not add product behavior to the core unless it is already planned as a generic platform primitive.
The 0.3.0 release scope is the daemon/rmods/resident-helper wave: warm daemon launch, persistent data root, native companions, /rmods, rpack, resident helpers, validated registry rpacks, installer packaging, and updater foundation. Fully automatic/background updates remain out of scope.
A release is ready when:
- validation commands pass;
- release artifact contents are deterministic;
- module examples are packaged safely;
- checksums are generated;
- install/update docs are current;
- changelog/release notes are current;
- manual smoke checks are repeated or explicitly accepted from the latest validation pass.
Primary local release command:
.\scripts\release-local.ps1The script interactively:
- reads and displays the current
Cargo.tomlversion; - asks for the target release version;
- updates
Cargo.tomlif the target version differs; - asks for a multiline commit message terminated by
END; - runs validation;
- creates the Windows x64 zip and SHA256 checksums;
- stages exact changed files, excluding
dist/andtarget/; - commits with the provided message;
- pushes the current branch;
- creates the GitHub Release and remote tag with
gh release create; - fetches tags back from
origin.
Package-only dry run for local artifact validation:
.\scripts\release-local.ps1 -Version 0.2.0 -PackageOnlyNotes:
- The script does not use
git add .orgit add -A; it stages exact changed paths after showing them for confirmation. - The script creates the GitHub Release directly with
gh; the GitHub Actions workflow remains a manual reproducible fallback and is not triggered by release tags. - Pass
-IncludeInstallerto includermenu-setup-v<VERSION>.exeand its SHA256 in the release assets. - The script requires
gh auth loginbefore publishing. dist/artifacts are uploaded to the GitHub Release, not committed.
- Confirm branch and worktree state:
git status --short- Confirm version in
Cargo.toml. - For
0.3.0, leave the version bump toscripts/release-local.ps1or the final release task; do not bump during planning-only work. - Confirm
CHANGELOG.mdhas an entry for the release. - Confirm
CORE_FREEZE_V1.mdstill reflects the current core policy. - Confirm
INSTALL.mdandREADME.mdlinks are current.
Run from the repository root:
cargo fmt
cargo test
cargo check
cargo build --releaseExpected:
-
cargo fmtcompletes. -
cargo testpasses. -
cargo checkpasses. -
cargo build --releaseproduces:target\release\rmenu.exetarget\release\rmenu-daemon.exetarget\release\rmenu-module-host.exetarget\release\rmenu-updater.exe
Run from the repository root after release build:
.\target\release\rmenu.exe --metrics
.\target\release\rmenu.exe --modules-debug
.\target\release\rmenu.exe --debug-ranking blender
.\target\release\rmenu.exe --reindex --metricsExpected:
- metrics command exits successfully;
- modules debug command exits successfully;
- ranking debug command exits successfully;
- reindex metrics command exits successfully.
These flows have already been validated by the user during core closure and should be repeated before public release when practical:
- launcher opens;
- search works;
- Enter launches the selected item;
- Esc cancels/closes;
- stdin mode returns the selected item;
- running from repository root with modules works:
- calculator module works;
- local scripts scoped mode works;
- shortcuts module works if configured;
- running from an empty working directory without external modules works;
- builtin-only
--modules-debugreportsexternal_descriptors: 0andrunning_hosts: 0.
Example stdin check:
"uno`ndos`ntres" | .\target\release\rmenu.exeRelease zip name:
rmenu-v<VERSION>-windows-x64.zip
Recommended artifact layout:
rmenu-v<VERSION>-windows-x64/
├── rmenu.exe
├── rmenu-daemon.exe
├── rmenu-module-host.exe
├── rmenu-updater.exe
├── config_example.ini
├── README.md
├── INSTALL.md
├── CHANGELOG.md
├── CORE_FREEZE_V1.md
├── MODULES_QUICKSTART.md
├── MODULES_AUTHORING_GUIDE.md
├── MODULES_OPERATIONS_GUIDE.md
├── MODULES_API_SPEC_V1.md
├── RMOD_SPEC_V1.md
├── MANIFEST_SPEC_V1.md
├── CTX_ACTIONS_SPEC_V1.md
├── PROVIDER_EXECUTION_POLICY.md
├── ERROR_ISOLATION_POLICY.md
├── MODULES_CAPABILITIES_MATRIX.md
├── module-examples/
│ ├── calculator.rmod
│ ├── local-scripts.rmod
│ └── shortcuts.example.rmod
├── docs/
│ ├── companion-and-rmods-workflow.md
│ ├── rmods-registry.md
│ └── update-workflow.md
└── checksums.txt
Installer artifact name when enabled:
rmenu-setup-v<VERSION>.exe
Installer expectations:
- installs app binaries under
C:\Program Files\rMenuby default; - asks for the reusable data folder, defaulting to
C:\rMenuData; - stores the chosen data folder in
HKCU\Software\SynrgStudio\rMenu\DataDirfor future upgrades; - preserves the chosen data folder during install, upgrade, and uninstall;
- registers
rmenu-daemon.exeat user startup by default, unless the user unchecks the task; - launches
rmenu-daemon.exeafter install by default, unless the user unchecks the task; - Start Menu shortcuts use the rMenu app icon;
- daemon shows a system tray icon with Open and Quit actions;
- installs
rmenu-updater.exenext tormenu.exe; - removes app binaries/startup entry on uninstall without deleting the data root.
Notes:
- The zip should not contain active external modules in
modules/by default. - Module examples should live under
module-examples/in the release artifact. - Users can copy selected examples into a
modules/directory next tormenu.exewhen they want to enable them. shortcuts.rmodfrom a developer machine must not be shipped as an active default module because it may contain local app paths.- Use
shortcuts.example.rmodwith generic targets such asnotepad.exeandwt.exe.
When building the installer locally:
.\installer\build-installer.ps1 -Version 0.3.0 -SkipBuild -ForceWhen validating all artifacts locally without publishing:
.\scripts\release-local.ps1 -Version 0.3.0 -PackageOnly -SkipValidation -IncludeInstallerUpdater smoke validation:
# Use file:// fixtures and --dry-run; do not execute a real installer during automated validation.
.\target\debug\rmenu-updater.exe install --version 9.9.9 --release-url https://example.test/release --installer-url file://C:/tmp/rmenu-setup-v9.9.9.exe --checksums-url file://C:/tmp/SHA256SUMS.txt --data-dir C:\Temp\rmenu-updater-smoke --dry-runExpected dist\SHA256SUMS.txt entries:
rmenu-v<VERSION>-windows-x64.zip
installers/rmenu-setup-v<VERSION>.exe
Generate SHA256 checksums for the zip, installer, and key binaries.
PowerShell example:
Get-FileHash .\target\release\rmenu.exe -Algorithm SHA256
Get-FileHash .\target\release\rmenu-daemon.exe -Algorithm SHA256
Get-FileHash .\target\release\rmenu-module-host.exe -Algorithm SHA256
Get-FileHash .\dist\rmenu-v<VERSION>-windows-x64.zip -Algorithm SHA256
Get-FileHash .\dist\installers\rmenu-setup-v<VERSION>.exe -Algorithm SHA256The local release script and GitHub Actions workflow both generate checksums automatically.
The GitHub Actions workflow is a manual fallback only:
GitHub -> Actions -> Release -> Run workflow
It is not triggered by release tags. The local release script is the publishing path and uploads the zip/checksums directly with gh release create.
GitHub validation checks:
- workflow runs on
windows-latestwhen manually dispatched; - artifacts upload successfully;
- generated zip and checksums match the documented artifact layout.
Preferred publication path:
.\scripts\release-local.ps1The script handles commit, branch push, remote tag/release creation, and asset upload after confirmation.
Manual fallback:
- Ensure changelog entry is final.
- Commit and push release changes.
- Run
.\scripts\release-local.ps1to create the release and upload local assets. - Optionally run GitHub Actions manually as a reproducibility check.
- Confirm GitHub Release includes:
rmenu-v<VERSION>-windows-x64.zip;rmenu-setup-v<VERSION>.exewhen installer is accepted;SHA256SUMS.txt;- release notes.
- Download artifact from GitHub Release.
- Verify checksum.
- Smoke test downloaded artifact.
Do not tag or push unless explicitly intended by the maintainer.
- Confirm release page links work.
- Confirm install docs match artifact layout.
- Confirm no local-user module config or paths were shipped as active defaults.
- Record release result in
CHANGELOG.mdor follow-up notes if needed. - Start next roadmap item only after release artifact is verified.