Add WinGet packaging for Windows - #216
Conversation
WinGet manifest: - winget/manifests/f/FernandoTonon/QtMeshEditor/2.16.0/ — version, locale, and installer YAML for portable zip install - Registers both QtMeshEditor.exe and qtmesh.cmd as portable commands CI automation: - winget-publish job in deploy.yml — runs wingetcreate on release to auto-submit updated manifest to microsoft/winget-pkgs - Requires WINGET_TOKEN secret (GitHub PAT with public_repo scope) Helper script: - scripts/update-winget.sh — generates manifest locally with SHA256 hash Documentation: - docs/index.html: Windows section updated with winget install command - README.md: Windows section updated with winget install/upgrade - CLAUDE.md: new WinGet section, updated CI/CD description Users can now install with: winget install FernandoTonon.QtMeshEditor Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Warning Rate limit exceeded
⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
📝 WalkthroughWalkthroughAdds WinGet distribution support: CI job to auto-submit updates on release, a script to generate WinGet manifests and compute SHA256, initial manifests for v2.16.0, a compiled Changes
Sequence DiagramsequenceDiagram
participant Release as Release Event
participant GH as GitHub Actions
participant Artifact as Release Artifact Storage
participant WinGet as WinGet Service
Release->>GH: release published (tag)
GH->>GH: run build-windows
GH->>Artifact: upload Windows ZIP artifact
GH->>GH: trigger winget-publish job (if release published)
GH->>GH: download wingetcreate.exe
GH->>GH: derive ZIP URL & compute SHA256 (scripts/update-winget.sh)
GH->>WinGet: wingetcreate update --version $version --urls $url --submit --token $WINGET_TOKEN
WinGet-->>GH: accept or return error (continue-on-error)
Estimated Code Review Effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (2)
README.md (1)
172-174: Add language identifier to fenced code block.The fenced code block is missing a language identifier. For consistency with other code blocks in this file and proper syntax highlighting, specify a language.
Suggested fix
-``` +```shell winget install FernandoTonon.QtMeshEditor</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@README.mdaround lines 172 - 174, The fenced code block containing the
command "winget install FernandoTonon.QtMeshEditor" is missing a language
identifier; update that block to include a language (e.g., use "shell" or
"bash") by changing the opening fence fromtoshell so the command is
consistently highlighted with other blocks in README.md.</details> </blockquote></details> <details> <summary>scripts/update-winget.sh (1)</summary><blockquote> `27-31`: **Consider portability: `shasum` may not be available on all systems.** The script uses `shasum -a 256` which is standard on macOS but may not be available on some Linux distributions where `sha256sum` is the common alternative. <details> <summary>Suggested portable fix</summary> ```diff # Compute SHA256 echo "Downloading and computing SHA256..." -SHA256=$(curl -sL "${ZIP_URL}" | shasum -a 256 | cut -d' ' -f1 | tr 'a-f' 'A-F') +if command -v shasum &>/dev/null; then + SHA256=$(curl -sL "${ZIP_URL}" | shasum -a 256 | cut -d' ' -f1 | tr 'a-f' 'A-F') +elif command -v sha256sum &>/dev/null; then + SHA256=$(curl -sL "${ZIP_URL}" | sha256sum | cut -d' ' -f1 | tr 'a-f' 'A-F') +else + echo "ERROR: Neither shasum nor sha256sum found" + exit 1 +fi ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@scripts/update-winget.sh` around lines 27 - 31, The SHA256 computation uses shasum (SHA256=$(curl -sL "${ZIP_URL}" | shasum -a 256 ...)) which is not available on all systems; update the script to detect and use an available tool (prefer sha256sum, fall back to shasum, then openssl dgst -sha256) to compute the checksum, and set SHA256 accordingly, preserving the existing uppercase conversion and empty-check logic; reference the SHA256 variable and ZIP_URL variable so the detection/selection logic appears before the existing SHA256 assignment and uses the chosen command to produce the same single-token hex output. ``` </details> </blockquote></details> </blockquote></details> <details> <summary>🤖 Prompt for all review comments with AI agents</summary>Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In@README.md:
- Around line 172-174: The fenced code block containing the command "winget
install FernandoTonon.QtMeshEditor" is missing a language identifier; update
that block to include a language (e.g., use "shell" or "bash") by changing the
opening fence fromtoshell so the command is consistently highlighted
with other blocks in README.md.In
@scripts/update-winget.sh:
- Around line 27-31: The SHA256 computation uses shasum (SHA256=$(curl -sL
"${ZIP_URL}" | shasum -a 256 ...)) which is not available on all systems; update
the script to detect and use an available tool (prefer sha256sum, fall back to
shasum, then openssl dgst -sha256) to compute the checksum, and set SHA256
accordingly, preserving the existing uppercase conversion and empty-check logic;
reference the SHA256 variable and ZIP_URL variable so the detection/selection
logic appears before the existing SHA256 assignment and uses the chosen command
to produce the same single-token hex output.</details> --- <details> <summary>ℹ️ Review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: defaults **Review profile**: CHILL **Plan**: Pro **Run ID**: `de76b25d-1b7e-4df4-ab7b-ee90ac221ce5` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 88da7e7c95e0984e40614acf47c124da906dcf6f and df00e8a5cf5255b6b1536dee4ec0fc2d5c23449a. </details> <details> <summary>📒 Files selected for processing (8)</summary> * `.github/workflows/deploy.yml` * `CLAUDE.md` * `README.md` * `docs/index.html` * `scripts/update-winget.sh` * `winget/manifests/f/FernandoTonon/QtMeshEditor/2.16.0/FernandoTonon.QtMeshEditor.installer.yaml` * `winget/manifests/f/FernandoTonon/QtMeshEditor/2.16.0/FernandoTonon.QtMeshEditor.locale.en-US.yaml` * `winget/manifests/f/FernandoTonon/QtMeshEditor/2.16.0/FernandoTonon.QtMeshEditor.yaml` </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: df00e8a5cf
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| # Compute SHA256 | ||
| echo "Downloading and computing SHA256..." | ||
| SHA256=$(curl -sL "${ZIP_URL}" | shasum -a 256 | cut -d' ' -f1 | tr 'a-f' 'A-F') |
There was a problem hiding this comment.
Handle HTTP errors before hashing release artifact
The hash computation uses curl -sL without -f, so a 404/500 response still produces output and gets hashed as if it were the Windows zip. Because the subsequent guard only checks whether the hash string is empty, a typoed/unpublished version will generate a manifest with an invalid InstallerSha256 instead of failing fast, which can break WinGet submissions and make debugging harder.
Useful? React with 👍 / 👎.
Microsoft's validation bot requires ManifestVersion 1.12.0. Updated all three manifest files and the update-winget.sh script. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
WinGet validation rejects .cmd as a NestedInstallerFiles entry. Only the .exe portable is registered. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
WinGet portable manifests don't allow .cmd files. Instead of a batch wrapper, build a tiny qtmesh.exe that launches QtMeshEditor.exe --cli with the original arguments. This gives Windows users the same `qtmesh` CLI alias as Linux/macOS. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New release includes qtmesh.exe launcher for Windows so WinGet can register both qtmesheditor and qtmesh portable commands. SHA256 placeholder will be updated after CI builds the release. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|



Summary
Adds WinGet (Windows Package Manager) support so Windows users can install with:
What's included
WinGet manifest (
winget/manifests/f/FernandoTonon/QtMeshEditor/2.16.0/):qtmesheditorandqtmeshcommandsCI automation (
deploy.yml→winget-publishjob):release: publishedeventswingetcreateto auto-submit updated manifest PR to microsoft/winget-pkgsWINGET_TOKENsecret (GitHub PAT withpublic_reposcope to fork winget-pkgs)Helper script (
scripts/update-winget.sh):./scripts/update-winget.sh 2.16.0Documentation updates:
winget installcommandSetup required
Add a
WINGET_TOKENrepository secret — a GitHub Personal Access Token withpublic_reposcope. This is needed forwingetcreateto fork microsoft/winget-pkgs and submit PRs.First submission
After merging, the initial manifest needs to be submitted manually to microsoft/winget-pkgs (the CI job will handle future releases automatically). Use:
Then copy the generated manifests to a fork of winget-pkgs and submit a PR.
Test plan
🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
winget install FernandoTonon.QtMeshEditorand upgrade withwinget upgrade FernandoTonon.QtMeshEditor.Documentation
Chores