From 78de7060b7a1441ffac9e4d92a7297dc7d9c499b Mon Sep 17 00:00:00 2001 From: Test User Date: Fri, 29 May 2026 21:02:10 -0500 Subject: [PATCH] build(choco): add Chocolatey package definition for Windows install Adds a chocolatey/ package so Windows users can eventually run `choco install maestro-ai`. The package downloads the official NSIS installer from GitHub Releases, verifies its SHA256, and installs it silently (no binary is bundled or modified). - maestro-ai.nuspec: package metadata pinned to the latest stable release - tools/chocolateyinstall.ps1: download + checksum-verify + silent install - tools/chocolateyuninstall.ps1: silent uninstall via registry entry - tools/VERIFICATION.txt: moderator/user binary verification steps - README.md: build, test, update, and publish instructions Submitting to the Chocolatey Community Repository remains a one-time maintainer step (requires a chocolatey.org account + API key). Closes #260 --- chocolatey/README.md | 74 ++++++++++++++++++++++++ chocolatey/maestro-ai.nuspec | 50 ++++++++++++++++ chocolatey/tools/VERIFICATION.txt | 30 ++++++++++ chocolatey/tools/chocolateyinstall.ps1 | 32 ++++++++++ chocolatey/tools/chocolateyuninstall.ps1 | 30 ++++++++++ 5 files changed, 216 insertions(+) create mode 100644 chocolatey/README.md create mode 100644 chocolatey/maestro-ai.nuspec create mode 100644 chocolatey/tools/VERIFICATION.txt create mode 100644 chocolatey/tools/chocolateyinstall.ps1 create mode 100644 chocolatey/tools/chocolateyuninstall.ps1 diff --git a/chocolatey/README.md b/chocolatey/README.md new file mode 100644 index 0000000000..f9c2f615d0 --- /dev/null +++ b/chocolatey/README.md @@ -0,0 +1,74 @@ +# Maestro Chocolatey package + +Packaging definition that lets Windows users install Maestro via +[Chocolatey](https://chocolatey.org/): + +```powershell +choco install maestro-ai +``` + +The package downloads the official signed NSIS installer +(`Maestro-Setup--x64.exe`) from +[GitHub Releases](https://github.com/RunMaestro/Maestro/releases) and installs it +silently. The installer binary is never bundled or modified — see +[`tools/VERIFICATION.txt`](tools/VERIFICATION.txt). + +> **Status:** this provides the package definition. Listing `maestro-ai` on the +> [Chocolatey Community Repository](https://community.chocolatey.org/packages) +> is a one-time maintainer step (requires a chocolatey.org account + API key) — +> see [Publishing](#publishing) below. + +## Contents + +| File | Purpose | +| ------------------------------- | ----------------------------------------------------------- | +| `maestro-ai.nuspec` | Package metadata (id, version, description, links) | +| `tools/chocolateyinstall.ps1` | Downloads + verifies + silently installs the NSIS installer | +| `tools/chocolateyuninstall.ps1` | Silently uninstalls via the registry uninstall entry | +| `tools/VERIFICATION.txt` | How moderators/users verify the downloaded binary | + +## Build & test locally + +Requires Chocolatey on a Windows machine. + +```powershell +cd chocolatey + +# Build the .nupkg +choco pack + +# Install from the local package to test +choco install maestro-ai --source . --yes + +# Test uninstall +choco uninstall maestro-ai --yes +``` + +## Updating for a new release + +1. Bump `` in `maestro-ai.nuspec` to match the release. +2. Update `$url64` and `$checksum64` in `tools/chocolateyinstall.ps1` (and the + matching url/checksum in `tools/VERIFICATION.txt`). + +Grab the checksum without downloading the 100+ MB installer using GitHub's +published asset digest: + +```bash +gh api repos/RunMaestro/Maestro/releases/tags/ \ + --jq '.assets[] | select(.name|test("Setup.*exe")) | {name, digest}' +``` + +The `digest` field is `sha256:`; use the `` portion. + +## Publishing + +One-time maintainer step (not done by this PR): + +```powershell +choco apikey --key --source https://push.chocolatey.org/ +choco push maestro-ai..nupkg --source https://push.chocolatey.org/ +``` + +New community packages go through Chocolatey's moderation review before they +appear in search. After the initial listing, this can be wired into the release +pipeline (`.github/workflows/release.yml`) to push automatically on each tag. diff --git a/chocolatey/maestro-ai.nuspec b/chocolatey/maestro-ai.nuspec new file mode 100644 index 0000000000..f25a266b5b --- /dev/null +++ b/chocolatey/maestro-ai.nuspec @@ -0,0 +1,50 @@ + + + + + maestro-ai + + 0.15.4 + https://github.com/RunMaestro/Maestro/tree/main/chocolatey + RunMaestro + + Maestro + Pedram Amini, RunMaestro + https://runmaestro.ai + https://raw.githubusercontent.com/RunMaestro/Maestro/main/build/icon.png + RunMaestro + https://github.com/RunMaestro/Maestro/blob/main/LICENSE + false + https://github.com/RunMaestro/Maestro + https://docs.runmaestro.ai + https://github.com/RunMaestro/Maestro/issues + maestro maestro-ai ai coding-assistant claude-code codex opencode electron developer-tools cross-platform admin + Maestro hones fractured attention into focused intent. + + https://github.com/RunMaestro/Maestro/releases/tag/v0.15.4-RC + + + + + diff --git a/chocolatey/tools/VERIFICATION.txt b/chocolatey/tools/VERIFICATION.txt new file mode 100644 index 0000000000..406e27b6f6 --- /dev/null +++ b/chocolatey/tools/VERIFICATION.txt @@ -0,0 +1,30 @@ +VERIFICATION + +Verification is intended to assist the Chocolatey moderators and community in +verifying that this package's contents are trustworthy. + +This package downloads the official Maestro Windows installer directly from the +project's GitHub Releases. The binary is NOT bundled inside this package and is +not modified or repackaged in any way. + +Package binary source: + https://github.com/RunMaestro/Maestro/releases + +The installer downloaded by tools/chocolateyinstall.ps1: + url: https://github.com/RunMaestro/Maestro/releases/download/v0.15.4-RC/Maestro-Setup-0.15.4-RC-x64.exe + checksum: 38903F98B940D46E562A37A6659044AC16A6D43361304E57656A727A18123346 (SHA256) + +To verify the checksum yourself: + + PowerShell: + Get-FileHash .\Maestro-Setup-0.15.4-RC-x64.exe -Algorithm SHA256 + + Or read GitHub's published digest for the asset (no download required): + gh api repos/RunMaestro/Maestro/releases/tags/v0.15.4-RC \ + --jq '.assets[] | select(.name|test("Setup.*exe")) | .digest' + +The hash printed must match the checksum listed above and in +tools/chocolateyinstall.ps1. + +Maestro is licensed under the GNU Affero General Public License v3.0: + https://github.com/RunMaestro/Maestro/blob/main/LICENSE diff --git a/chocolatey/tools/chocolateyinstall.ps1 b/chocolatey/tools/chocolateyinstall.ps1 new file mode 100644 index 0000000000..8b6c37e15c --- /dev/null +++ b/chocolatey/tools/chocolateyinstall.ps1 @@ -0,0 +1,32 @@ +$ErrorActionPreference = 'Stop' + +# --------------------------------------------------------------------------- +# To update this package for a new Maestro release: +# 1. Bump in ../maestro-ai.nuspec to the release version. +# 2. Update $url64 below to the new Maestro-Setup--x64.exe asset. +# 3. Update $checksum64 below. Grab it without downloading the installer via: +# gh api repos/RunMaestro/Maestro/releases/tags/ \ +# --jq '.assets[] | select(.name|test("Setup.*exe")) | .digest' +# (returns "sha256:"), or locally: Get-FileHash -Algorithm SHA256 +# --------------------------------------------------------------------------- + +$packageName = 'maestro-ai' +$softwareName = 'Maestro*' + +# Official NSIS installer published on GitHub Releases. +$url64 = 'https://github.com/RunMaestro/Maestro/releases/download/v0.15.4-RC/Maestro-Setup-0.15.4-RC-x64.exe' +$checksum64 = '38903F98B940D46E562A37A6659044AC16A6D43361304E57656A727A18123346' + +$packageArgs = @{ + packageName = $packageName + softwareName = $softwareName + fileType = 'exe' + url64bit = $url64 + checksum64 = $checksum64 + checksumType64 = 'sha256' + # electron-builder NSIS installer: '/S' performs a silent install. + silentArgs = '/S' + validExitCodes = @(0) +} + +Install-ChocolateyPackage @packageArgs diff --git a/chocolatey/tools/chocolateyuninstall.ps1 b/chocolatey/tools/chocolateyuninstall.ps1 new file mode 100644 index 0000000000..aa2b54fd57 --- /dev/null +++ b/chocolatey/tools/chocolateyuninstall.ps1 @@ -0,0 +1,30 @@ +$ErrorActionPreference = 'Stop' + +$packageName = 'maestro-ai' +$softwareName = 'Maestro*' + +[array]$key = Get-UninstallRegistryKey -SoftwareName $softwareName + +if ($key.Count -eq 1) { + $key | ForEach-Object { + $packageArgs = @{ + packageName = $packageName + fileType = 'exe' + # electron-builder NSIS uninstaller: '/S' performs a silent uninstall. + silentArgs = '/S' + validExitCodes = @(0) + file = "$($_.UninstallString)" + } + + Uninstall-ChocolateyPackage @packageArgs + } +} +elseif ($key.Count -eq 0) { + Write-Warning "$packageName has already been uninstalled by other means." +} +elseif ($key.Count -gt 1) { + Write-Warning "$($key.Count) matches found!" + Write-Warning "To prevent accidental data loss, no programs will be uninstalled." + Write-Warning "Please alert package maintainer the following keys were matched:" + $key | ForEach-Object { Write-Warning "- $($_.DisplayName)" } +}