Skip to content

Add Windows FMAs (letter G): 13 apps - #49281

Merged
allenhouchins merged 3 commits into
mainfrom
add-windows-fmas-letter-g
Jul 15, 2026
Merged

Add Windows FMAs (letter G): 13 apps#49281
allenhouchins merged 3 commits into
mainfrom
add-windows-fmas-letter-g

Conversation

@allenhouchins

@allenhouchins allenhouchins commented Jul 14, 2026

Copy link
Copy Markdown
Member

Related issue: N/A — part of the ongoing Windows Fleet-maintained apps (FMA) parity workstream (letter G).

What this does

Adds 19 Windows Fleet-maintained apps for the letter-G batch. Each app has a winget-sourced input, generated output manifest, and (where a cleanly-licensed ≥256px icon was found) a catalog icon.

MSI (clean, upgrade-code uninstall):

  • Gadwin PrintScreen, Gadwin PrintScreen Pro, Gadwin ScreenRecorder — free + the two paid editions are distinct products (separate ProductCodes/UpgradeCodes), so each matches by exact ARP name to avoid cross-matching
  • GitHub CLI, Go, gsudo, grepWin
  • GeoGebra Classic — the machine MSI; the winget manifest's top-level Scope: user forced installer_scope: user in the input + custom machine-MSI install/uninstall scripts
  • Google Ads Editor — dual user/machine WiX MSI; custom install forces ALLUSERS=1

MSI (custom uninstall):

  • GoodSync — ignore_hash (non-versioned "latest" URL drifts from the manifest version/SHA, Chrome/TeamViewer pattern); process-stopping uninstall for its tray app + sync service

NSIS / exe (custom install + uninstall):

  • Google Web Designer, Gpg4win (x86-only; versioned ARP name → fuzzy match), GoAnywhere OpenPGP Studio (install4j -q), GoldenDict-ng (maintained fork; name-only exists query), Graphviz
  • Streamlabs Desktop — electron-builder /S /allusers + process-stopping uninstall (versioned ARP name → fuzzy match)

WiX burn / electron (custom install + uninstall):

  • Garmin BaseCamp, Garmin Express (ignore_hash — rolling URL + self-updating app), Galaxy Modeler (/S /allusers)

Dropped from this batch (recorded in the workstream tracker)

  • Genesys Cloud Background Assistant — WiX burn bootstrapper with a hard VCRedist 2015+ x86 dependency Fleet won't resolve, x86-only, non-standard burn uninstall.
  • GoldenDict.GoldenDict — stale original, superseded by the actively-maintained xiaoyifang.GoldenDict-ng fork (shipped instead).
  • GeoGebra GraphingCalculator + Geometry — user-scope-only exe installers (no machine option); shipped GeoGebra Classic (MSI) instead.
  • Garden Gnome Package Viewerggnome.com download URLs sit behind a Cloudflare cf-mitigated: challenge and return 403 to all automated requests (even with the Chrome UA), so Fleet's downloader can't fetch it.

Notes

  • Gadwin ScreenRecorder and Garmin Express ship without a custom catalog icon — no cleanly-licensed ≥256px source was found (they fall back to the generic icon).
  • Verification (winget manifest identity, installer type/scope/arch, ProductCode/UpgradeCode, silent switches, URL stability) was done per the new-fma skill against the winget-pkgs manifests and, where needed, the real installers.

Testing

  • FMA CI validator (install → detect → uninstall) on the SYSTEM-context Windows runner — pending.
  • Generated outputs verified locally: all 19 produce valid manifests; MSI apps carry the correct UpgradeCode-based uninstall; exists/patched queries reviewed for name + publisher correctness.

Summary by CodeRabbit

  • New Features
    • Added maintained Windows software catalog entries for 13 applications (Gadwin PrintScreen/Pro/ScreenRecorder, Galaxy Modeler, Garmin BaseCamp, GeoGebra Classic, Go, GoAnywhere OpenPGP Studio, GoldenDict-ng, Google Ads Editor, Google Web Designer, Graphviz, grepWin).
    • Enabled silent install/upgrade detection and automated uninstall behavior for the newly supported apps.
    • Added app icons and expanded software-name keyword matching for improved identification in the catalog.

Adds Fleet-maintained apps for the letter-G batch of the Windows FMA
workstream:

- Gadwin PrintScreen, Gadwin PrintScreen Pro, Gadwin ScreenRecorder (MSI)
- GitHub CLI, Go, gsudo, grepWin (MSI, developer tools)
- GeoGebra Classic (machine MSI; manifest top-level Scope:user, custom scripts)
- Google Ads Editor (dual-scope WiX MSI, forced ALLUSERS=1)
- GoodSync (MSI; ignore_hash rolling URL; process-stopping uninstall)
- Google Web Designer, Gpg4win, GoAnywhere OpenPGP Studio, GoldenDict-ng,
  Graphviz (NSIS/exe)
- Streamlabs Desktop (electron-builder; process-stopping uninstall)
- Garmin BaseCamp, Garmin Express (WiX burn; Express uses ignore_hash),
  Galaxy Modeler (electron-builder /S /allusers)

Dropped from this batch (recorded in the workstream tracker): Genesys Cloud
Background Assistant (burn + unresolvable VCRedist x86 dependency, x86-only),
GoldenDict.GoldenDict (stale, superseded by the maintained -ng fork), GeoGebra
GraphingCalculator + Geometry (user-scope-only exe), Garden Gnome Package
Viewer (Cloudflare challenge blocks all download URLs).

Gadwin ScreenRecorder and Garmin Express ship without a custom catalog icon
(no cleanly-licensed >=256px source found).
fleet-release
fleet-release previously approved these changes Jul 14, 2026
@codecov

codecov Bot commented Jul 14, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 12 lines in your changes missing coverage. Please review.
✅ Project coverage is 67.97%. Comparing base (35ee986) to head (e23e476).
⚠️ Report is 16 commits behind head on main.

Files with missing lines Patch % Lines
...oftwarePage/components/icons/GadwinPrintscreen.tsx 50.00% 1 Missing ⚠️
...warePage/components/icons/GadwinPrintscreenPro.tsx 50.00% 1 Missing ⚠️
...es/SoftwarePage/components/icons/GalaxyModeler.tsx 50.00% 1 Missing ⚠️
...s/SoftwarePage/components/icons/GarminBasecamp.tsx 50.00% 1 Missing ⚠️
.../SoftwarePage/components/icons/GeogebraClassic.tsx 50.00% 1 Missing ⚠️
...rontend/pages/SoftwarePage/components/icons/Go.tsx 50.00% 1 Missing ⚠️
...ePage/components/icons/GoanywhereOpenpgpStudio.tsx 50.00% 1 Missing ⚠️
...ges/SoftwarePage/components/icons/GoldendictNg.tsx 50.00% 1 Missing ⚠️
.../SoftwarePage/components/icons/GoogleAdsEditor.tsx 50.00% 1 Missing ⚠️
...oftwarePage/components/icons/GoogleWebDesigner.tsx 50.00% 1 Missing ⚠️
... and 2 more
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #49281      +/-   ##
==========================================
- Coverage   67.97%   67.97%   -0.01%     
==========================================
  Files        3801     3814      +13     
  Lines      239965   239996      +31     
  Branches    12842    12694     -148     
==========================================
+ Hits       163123   163141      +18     
- Misses      62057    62070      +13     
  Partials    14785    14785              
Flag Coverage Δ
frontend 59.38% <50.00%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Validation (SYSTEM-context Windows runner) passed 13/19. Dropping the 6
that failed:

- gsudo, GitHub CLI: x64 MSI platform/native-arch LaunchCondition fails on
  the ARM validator runner (gsudo: 'not intended for your platform', 1603).
  Valid on real x64 hosts; re-add when validated on an x64 runner.
- GoodSync: non-versioned 'latest' installer URL serves 12.11.5.2 while the
  manifest pins 12.11.4.4, so osquery version detection fails.
- Garmin Express: WiX burn bootstrapper hangs headless (10-min install
  timeout, no install).
- Gpg4win: /S install spawns a persistent gpg-agent/dirmngr daemon that keeps
  the installer process alive past the 10-min timeout and locks the installer.
- Streamlabs Desktop: electron-builder installer auto-launches the app and
  never returns (10-min timeout), though it did install machine-wide.

Preserved the existing macOS goodsync/garmin-express FMAs (removed only the
windows.json variants).
@allenhouchins allenhouchins changed the title Add Windows FMAs (letter G): 19 apps Add Windows FMAs (letter G): 13 apps Jul 14, 2026
@allenhouchins

Copy link
Copy Markdown
Member Author

Validation update: 13 of 19 passed the SYSTEM-context validator (install → detect → uninstall). Dropped the 6 that failed.

Passing (13): Gadwin PrintScreen, Gadwin PrintScreen Pro, Gadwin ScreenRecorder, Galaxy Modeler, Garmin BaseCamp, GeoGebra Classic, Go, GoAnywhere OpenPGP Studio, GoldenDict-ng, Google Ads Editor, Google Web Designer, Graphviz, grepWin.

Dropped (6):

  • gsudo — MSI aborts with 1603 / "This package is not intended for your platform" (a native-arch/platform LaunchCondition). This is the ARM validator-runner limitation — x64 MSIs that enforce native arch fail there. Valid on real x64 hosts; can re-add once validated on an x64 runner.
  • GitHub CLI — same x64-MSI class as gsudo (its error lines weren't in the pasted log, but the failure mode matches). Re-add candidate on an x64 runner.
  • GoodSync — the non-versioned "latest" URL served 12.11.5.2 while the manifest pins 12.11.4.4, so osquery didn't match the expected version. ignore_hash lets the download proceed but the version assertion still fails — inherent to a rolling-version URL.
  • Garmin Express — WiX burn bootstrapper hangs headless (10-min install timeout, no install).
  • Gpg4win — GnuPG did install, but the /S install spawns a persistent gpg-agent/dirmngr daemon that keeps the installer process alive past the timeout and locks the installer file for the rest of the run.
  • Streamlabs Desktop — installed machine-wide correctly, but the electron-builder installer auto-launches the app and never returns (10-min timeout).

Existing macOS goodsync/garmin-express FMAs were untouched (only the Windows variants were removed).

Minor note: grepWin and Google Ads Editor passed but with a "no changes in C:\Program Files" warning — grepWin's MSI landed per-user (AppData\\Local\\Programs); both were still detected and uninstalled cleanly.

@allenhouchins
allenhouchins marked this pull request as ready for review July 15, 2026 01:46
@allenhouchins
allenhouchins requested a review from a team as a code owner July 15, 2026 01:46
Copilot AI review requested due to automatic review settings July 15, 2026 01:46
@fleet-release
fleet-release requested a review from eashaw July 15, 2026 01:46
fleet-release
fleet-release previously approved these changes Jul 15, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new batch of Windows Fleet-maintained apps (FMAs) in the “G” set, including generated Windows manifests/scripts and corresponding Software page icon mappings so the UI can render app icons when available.

Changes:

  • Added new Software page icon components and extended SOFTWARE_NAME_TO_ICON_MAP for the new G-apps.
  • Added new winget input definitions and PowerShell install/uninstall scripts for the new Windows FMAs.
  • Added generated Windows output manifests plus updated the global apps.json catalog list with the new app entries.

Reviewed changes

Copilot reviewed 55 out of 67 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
frontend/pages/SoftwarePage/components/icons/index.ts Registers new icon components and maps normalized software names to icons.
frontend/pages/SoftwarePage/components/icons/Grepwin.tsx Adds embedded icon asset for grepWin.
frontend/pages/SoftwarePage/components/icons/GoogleWebDesigner.tsx Adds embedded icon asset for Google Web Designer.
frontend/pages/SoftwarePage/components/icons/GoogleAdsEditor.tsx Adds embedded icon asset for Google Ads Editor.
frontend/pages/SoftwarePage/components/icons/GoldendictNg.tsx Adds embedded icon asset for GoldenDict-ng.
frontend/pages/SoftwarePage/components/icons/GoanywhereOpenpgpStudio.tsx Adds embedded icon asset for GoAnywhere OpenPGP Studio.
frontend/pages/SoftwarePage/components/icons/Go.tsx Adds embedded icon asset for Go.
frontend/pages/SoftwarePage/components/icons/GeogebraClassic.tsx Adds embedded icon asset for GeoGebra Classic.
frontend/pages/SoftwarePage/components/icons/GalaxyModeler.tsx Adds embedded icon asset for Galaxy Modeler.
ee/maintained-apps/outputs/grepwin/windows.json Generated Windows manifest for grepWin (queries, URL, scripts/refs, sha256).
ee/maintained-apps/outputs/graphviz/windows.json Generated Windows manifest for Graphviz (queries, URL, scripts/refs, sha256).
ee/maintained-apps/outputs/google-web-designer/windows.json Generated Windows manifest for Google Web Designer (queries, URL, scripts/refs, sha256).
ee/maintained-apps/outputs/google-ads-editor/windows.json Generated Windows manifest for Google Ads Editor (queries, URL, scripts/refs, sha256, upgrade_code).
ee/maintained-apps/outputs/goldendict-ng/windows.json Generated Windows manifest for GoldenDict-ng (queries, URL, scripts/refs, sha256).
ee/maintained-apps/outputs/goanywhere-openpgp-studio/windows.json Generated Windows manifest for GoAnywhere OpenPGP Studio (queries, URL, scripts/refs, sha256).
ee/maintained-apps/outputs/go/windows.json Generated Windows manifest for Go (queries, URL, scripts/refs, sha256, upgrade_code).
ee/maintained-apps/outputs/geogebra-classic/windows.json Generated Windows manifest for GeoGebra Classic (queries, URL, scripts/refs, sha256).
ee/maintained-apps/outputs/garmin-basecamp/windows.json Generated Windows manifest for Garmin BaseCamp (queries, URL, scripts/refs, sha256).
ee/maintained-apps/outputs/galaxy-modeler/windows.json Generated Windows manifest for Galaxy Modeler (queries, URL, scripts/refs, sha256).
ee/maintained-apps/outputs/gadwin-screenrecorder/windows.json Generated Windows manifest for Gadwin ScreenRecorder (queries, URL, scripts/refs, sha256, upgrade_code).
ee/maintained-apps/outputs/gadwin-printscreen/windows.json Generated Windows manifest for Gadwin PrintScreen (queries, URL, scripts/refs, sha256, upgrade_code).
ee/maintained-apps/outputs/gadwin-printscreen-pro/windows.json Generated Windows manifest for Gadwin PrintScreen Pro (queries, URL, scripts/refs, sha256, upgrade_code).
ee/maintained-apps/outputs/apps.json Adds the new Windows apps to the global maintained-apps catalog list.
ee/maintained-apps/inputs/winget/scripts/graphviz_uninstall.ps1 Custom uninstall script for Graphviz (NSIS registry lookup + /S).
ee/maintained-apps/inputs/winget/scripts/graphviz_install.ps1 Custom silent install script for Graphviz (NSIS /S).
ee/maintained-apps/inputs/winget/scripts/google-web-designer_uninstall.ps1 Custom uninstall script for Google Web Designer (NSIS registry lookup + /S).
ee/maintained-apps/inputs/winget/scripts/google-web-designer_install.ps1 Custom silent install script for Google Web Designer (NSIS /S).
ee/maintained-apps/inputs/winget/scripts/google-ads-editor_install.ps1 Custom install script for Google Ads Editor MSI (forces ALLUSERS=1).
ee/maintained-apps/inputs/winget/scripts/goldendict-ng_uninstall.ps1 Custom uninstall script for GoldenDict-ng (stop process + NSIS registry lookup + /S).
ee/maintained-apps/inputs/winget/scripts/goldendict-ng_install.ps1 Custom silent install script for GoldenDict-ng (NSIS /S).
ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_uninstall.ps1 Custom uninstall script for GoAnywhere OpenPGP Studio (install4j uninstall.exe + -q).
ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_install.ps1 Custom silent install script for GoAnywhere OpenPGP Studio (install4j -q).
ee/maintained-apps/inputs/winget/scripts/geogebra-classic_uninstall.ps1 Custom uninstall script for GeoGebra Classic MSI (resolve ProductCode + msiexec /x).
ee/maintained-apps/inputs/winget/scripts/geogebra-classic_install.ps1 Custom install script for GeoGebra Classic MSI (silent MSI install).
ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_uninstall.ps1 Custom uninstall script for Garmin BaseCamp (Burn bundle quiet uninstall).
ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_install.ps1 Custom install script for Garmin BaseCamp (Burn bundle /quiet).
ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_uninstall.ps1 Custom uninstall script for Galaxy Modeler (electron-builder NSIS: stop + /allusers /S).
ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_install.ps1 Custom install script for Galaxy Modeler (electron-builder NSIS /S /allusers).
ee/maintained-apps/inputs/winget/grepwin.json New winget input definition for grepWin.
ee/maintained-apps/inputs/winget/graphviz.json New winget input definition for Graphviz (with custom scripts).
ee/maintained-apps/inputs/winget/google-web-designer.json New winget input definition for Google Web Designer (with custom scripts).
ee/maintained-apps/inputs/winget/google-ads-editor.json New winget input definition for Google Ads Editor (with custom install script).
ee/maintained-apps/inputs/winget/goldendict-ng.json New winget input definition for GoldenDict-ng (with custom scripts and exists_query).
ee/maintained-apps/inputs/winget/goanywhere-openpgp-studio.json New winget input definition for GoAnywhere OpenPGP Studio (with custom scripts).
ee/maintained-apps/inputs/winget/go.json New winget input definition for Go.
ee/maintained-apps/inputs/winget/geogebra-classic.json New winget input definition for GeoGebra Classic (with custom scripts).
ee/maintained-apps/inputs/winget/garmin-basecamp.json New winget input definition for Garmin BaseCamp (with custom scripts).
ee/maintained-apps/inputs/winget/galaxy-modeler.json New winget input definition for Galaxy Modeler (with custom scripts).
ee/maintained-apps/inputs/winget/gadwin-screenrecorder.json New winget input definition for Gadwin ScreenRecorder.
ee/maintained-apps/inputs/winget/gadwin-printscreen.json New winget input definition for Gadwin PrintScreen.
ee/maintained-apps/inputs/winget/gadwin-printscreen-pro.json New winget input definition for Gadwin PrintScreen Pro.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +3476 to +3482
{
"name": "Gadwin PrintScreen Pro",
"slug": "gadwin-printscreen-pro/windows",
"platform": "windows",
"unique_identifier": "Gadwin PrintScreenPro (64-Bit)",
"description": ""
},
Comment on lines +415 to +418
import GadwinPrintscreen from "./GadwinPrintscreen";
import GadwinPrintscreenPro from "./GadwinPrintscreenPro";
import GalaxyModeler from "./GalaxyModeler";
import GarminBasecamp from "./GarminBasecamp";
@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 7c71dd87-83f5-4b88-9574-b32bd49b8c35

📥 Commits

Reviewing files that changed from the base of the PR and between 674e797 and e23e476.

📒 Files selected for processing (1)
  • ee/maintained-apps/outputs/apps.json

Walkthrough

Adds Winget manifests and PowerShell installation workflows for thirteen Windows applications. Adds corresponding Windows app definitions with detection queries, installer metadata, checksums, script references, and embedded install/uninstall logic. Registers the applications in the maintained-app catalog and adds React icon components plus software-name mappings for the Software page.

Possibly related PRs

  • fleetdm/fleet#48872: Adds maintained Windows app manifests and corresponding frontend icon components.
  • fleetdm/fleet#48950: Extends Winget manifests, scripts, app definitions, and frontend icon mappings.
  • fleetdm/fleet#49218: Updates the shared frontend icon registry alongside Winget application definitions.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the PR’s main change: adding 13 Windows FMA apps for the letter G.
Description check ✅ Passed The description summarizes the batch, notes dropped apps, and includes testing context, though it does not follow the full template.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch add-windows-fmas-letter-g

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
ee/maintained-apps/inputs/winget/goldendict-ng.json (1)

14-14: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Prefer a fuzzy match in exists_query to future-proof version updates.

The exists_query uses an exact match (name = 'GoldenDict-ng'). While this currently passes validation, many Windows installers append the version to the registry DisplayName on updates (e.g., GoldenDict-ng 23.09). Consider using a LIKE clause to ensure the detection remains robust across future versions.

♻️ Proposed refactor
-  "exists_query": "SELECT 1 FROM programs WHERE name = 'GoldenDict-ng';"
+  "exists_query": "SELECT 1 FROM programs WHERE name LIKE 'GoldenDict-ng%';"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ee/maintained-apps/inputs/winget/goldendict-ng.json` at line 14, Update the
exists_query for GoldenDict-ng to use a LIKE-based name match rather than exact
equality, preserving the GoldenDict-ng prefix so registry display names with
appended version suffixes are detected.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@ee/maintained-apps/outputs/go/windows.json`:
- Around line 20-21: Update the Go installation script identified by the
8959087b entry to normalize MSI exit codes before exiting: treat 0, 3010, and
1641 as successful and exit 0; preserve the existing exit code for all other
results. Apply this around the $installProcess.ExitCode handling without
changing the surrounding installation flow.

---

Nitpick comments:
In `@ee/maintained-apps/inputs/winget/goldendict-ng.json`:
- Line 14: Update the exists_query for GoldenDict-ng to use a LIKE-based name
match rather than exact equality, preserving the GoldenDict-ng prefix so
registry display names with appended version suffixes are detected.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 6b9ad59c-1d37-4607-8551-a2c56ba73919

📥 Commits

Reviewing files that changed from the base of the PR and between 0e917c2 and 674e797.

⛔ Files ignored due to path filters (12)
  • website/assets/images/app-icon-gadwin-printscreen-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-gadwin-printscreen-pro-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-galaxy-modeler-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-garmin-basecamp-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-geogebra-classic-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-go-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-goanywhere-openpgp-studio-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-goldendict-ng-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-google-ads-editor-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-google-web-designer-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-graphviz-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-grepwin-60x60@2x.png is excluded by !**/*.png
📒 Files selected for processing (55)
  • ee/maintained-apps/inputs/winget/gadwin-printscreen-pro.json
  • ee/maintained-apps/inputs/winget/gadwin-printscreen.json
  • ee/maintained-apps/inputs/winget/gadwin-screenrecorder.json
  • ee/maintained-apps/inputs/winget/galaxy-modeler.json
  • ee/maintained-apps/inputs/winget/garmin-basecamp.json
  • ee/maintained-apps/inputs/winget/geogebra-classic.json
  • ee/maintained-apps/inputs/winget/go.json
  • ee/maintained-apps/inputs/winget/goanywhere-openpgp-studio.json
  • ee/maintained-apps/inputs/winget/goldendict-ng.json
  • ee/maintained-apps/inputs/winget/google-ads-editor.json
  • ee/maintained-apps/inputs/winget/google-web-designer.json
  • ee/maintained-apps/inputs/winget/graphviz.json
  • ee/maintained-apps/inputs/winget/grepwin.json
  • ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_install.ps1
  • ee/maintained-apps/inputs/winget/scripts/galaxy-modeler_uninstall.ps1
  • ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_install.ps1
  • ee/maintained-apps/inputs/winget/scripts/garmin-basecamp_uninstall.ps1
  • ee/maintained-apps/inputs/winget/scripts/geogebra-classic_install.ps1
  • ee/maintained-apps/inputs/winget/scripts/geogebra-classic_uninstall.ps1
  • ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_install.ps1
  • ee/maintained-apps/inputs/winget/scripts/goanywhere-openpgp-studio_uninstall.ps1
  • ee/maintained-apps/inputs/winget/scripts/goldendict-ng_install.ps1
  • ee/maintained-apps/inputs/winget/scripts/goldendict-ng_uninstall.ps1
  • ee/maintained-apps/inputs/winget/scripts/google-ads-editor_install.ps1
  • ee/maintained-apps/inputs/winget/scripts/google-web-designer_install.ps1
  • ee/maintained-apps/inputs/winget/scripts/google-web-designer_uninstall.ps1
  • ee/maintained-apps/inputs/winget/scripts/graphviz_install.ps1
  • ee/maintained-apps/inputs/winget/scripts/graphviz_uninstall.ps1
  • ee/maintained-apps/outputs/apps.json
  • ee/maintained-apps/outputs/gadwin-printscreen-pro/windows.json
  • ee/maintained-apps/outputs/gadwin-printscreen/windows.json
  • ee/maintained-apps/outputs/gadwin-screenrecorder/windows.json
  • ee/maintained-apps/outputs/galaxy-modeler/windows.json
  • ee/maintained-apps/outputs/garmin-basecamp/windows.json
  • ee/maintained-apps/outputs/geogebra-classic/windows.json
  • ee/maintained-apps/outputs/go/windows.json
  • ee/maintained-apps/outputs/goanywhere-openpgp-studio/windows.json
  • ee/maintained-apps/outputs/goldendict-ng/windows.json
  • ee/maintained-apps/outputs/google-ads-editor/windows.json
  • ee/maintained-apps/outputs/google-web-designer/windows.json
  • ee/maintained-apps/outputs/graphviz/windows.json
  • ee/maintained-apps/outputs/grepwin/windows.json
  • frontend/pages/SoftwarePage/components/icons/GadwinPrintscreen.tsx
  • frontend/pages/SoftwarePage/components/icons/GadwinPrintscreenPro.tsx
  • frontend/pages/SoftwarePage/components/icons/GalaxyModeler.tsx
  • frontend/pages/SoftwarePage/components/icons/GarminBasecamp.tsx
  • frontend/pages/SoftwarePage/components/icons/GeogebraClassic.tsx
  • frontend/pages/SoftwarePage/components/icons/Go.tsx
  • frontend/pages/SoftwarePage/components/icons/GoanywhereOpenpgpStudio.tsx
  • frontend/pages/SoftwarePage/components/icons/GoldendictNg.tsx
  • frontend/pages/SoftwarePage/components/icons/GoogleAdsEditor.tsx
  • frontend/pages/SoftwarePage/components/icons/GoogleWebDesigner.tsx
  • frontend/pages/SoftwarePage/components/icons/Graphviz.tsx
  • frontend/pages/SoftwarePage/components/icons/Grepwin.tsx
  • frontend/pages/SoftwarePage/components/icons/index.ts

Comment on lines +20 to +21
"0047620c": "# Fleet uninstalls app by finding all related product codes for the specified upgrade code\n$inst = New-Object -ComObject \"WindowsInstaller.Installer\"\n$timeoutSeconds = 300 # 5 minute timeout per product\n\n# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,\n# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.\n$successCodes = @(0, 3010, 1641)\n\nforeach ($product_code in $inst.RelatedProducts('{22EA7650-4AC6-4001-BF29-F4B8775DB1C0}')) {\n $process = Start-Process msiexec -ArgumentList @(\"/quiet\", \"/x\", $product_code, \"/norestart\") -PassThru\n\n # Wait for process with timeout\n $completed = $process.WaitForExit($timeoutSeconds * 1000)\n\n if (-not $completed) {\n Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue\n Exit 1603 # ERROR_UNINSTALL_FAILURE\n }\n\n # If the uninstall failed, bail\n if ($successCodes -notcontains $process.ExitCode) {\n Write-Output \"Uninstall for $($product_code) exited $($process.ExitCode)\"\n Exit $process.ExitCode\n }\n}\n\n# All uninstalls succeeded; exit success\nExit 0\n",
"8959087b": "$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv ${logFile} /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Normalize MSI success exit codes in the install script.

The installation script for Go (8959087b) directly exits with $installProcess.ExitCode. Unlike the uninstall script and other MSI install scripts in this batch, it does not normalize MSI reboot exit codes (such as 3010 and 1641) to 0. This can cause successful installations that require a reboot to be incorrectly reported as failed.

Please update the input install script for Go to map these success codes to 0.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ee/maintained-apps/outputs/go/windows.json` around lines 20 - 21, Update the
Go installation script identified by the 8959087b entry to normalize MSI exit
codes before exiting: treat 0, 3010, and 1641 as successful and exit 0; preserve
the existing exit code for all other results. Apply this around the
$installProcess.ExitCode handling without changing the surrounding installation
flow.

@allenhouchins
allenhouchins merged commit e1ab5b5 into main Jul 15, 2026
28 of 30 checks passed
@allenhouchins
allenhouchins deleted the add-windows-fmas-letter-g branch July 15, 2026 02:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants