Skip to content

Update Fleet-maintained apps - #49458

Merged
allenhouchins merged 2 commits into
mainfrom
fma-2607170019
Jul 17, 2026
Merged

Update Fleet-maintained apps#49458
allenhouchins merged 2 commits into
mainfrom
fma-2607170019

Conversation

@fleet-release

@fleet-release fleet-release commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Automated ingestion of latest Fleet-maintained app data.

Summary by CodeRabbit

  • New Features
    • Added an improved Tower uninstall script for winget on Windows that targets all related MSI products and handles success/reboot scenarios reliably.
  • Bug Fixes
    • Improved upgrade/patch detection and refreshed version gating for multiple maintained apps on both macOS and Windows.
    • Updated version-specific uninstall cleanup for several JetBrains apps (and Tower) to remove the correct release-named data.
  • Chores
    • Refreshed installer download URLs and checksums for the latest Arc, AWS CLI, Brave, Claude, Cursor, Datagrip, Devolutions, Discord, and others.

Generated automatically with cmd/maintained-apps.
@github-actions

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/outputs/arc/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/arc/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/aws-cli/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/brave-browser/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/browserstacklocal/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/claude/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/clion/darwin.json

=== Install Script (no changes) ===
=== Uninstall // efb3480e -> 51845cc5 ===

--- /tmp/old.HUAds6	2026-07-17 00:24:08.196247447 +0000
+++ /tmp/new.sNV0k0	2026-07-17 00:24:08.196247447 +0000
@@ -54,8 +54,8 @@
 
 sudo rm -rf "$APPDIR/CLion.app"
 sudo rm -rf 'clion'
-trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/CLion2026.1'
-trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/CLion2026.1'
-trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/CLion2026.1'
+trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/CLion2026.2'
+trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/CLion2026.2'
+trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/CLion2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.CLion.plist'
 trash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.CLion.savedState'

ee/maintained-apps/outputs/clockify/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cursor/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/datagrip/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/datagrip/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/devolutions-workspace/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/discord/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/discord/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/dockside/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/drawio/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/egnyte/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/epic-games/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/epic-games/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/focusrite-control-2/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/gdevelop/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/goland/darwin.json

=== Install Script (no changes) ===
=== Uninstall // c7ca278d -> 20571185 ===

--- /tmp/old.LbH19i	2026-07-17 00:24:08.802261851 +0000
+++ /tmp/new.FSjIkI	2026-07-17 00:24:08.803261874 +0000
@@ -55,9 +55,9 @@
 sudo rm -rf "$APPDIR/GoLand.app"
 sudo rm -rf 'goland'
 trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/GoLand'
-trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/GoLand2026.1'
-trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/GoLand2026.1'
-trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/GoLand2026.1'
+trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/GoLand2026.2'
+trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/GoLand2026.2'
+trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/GoLand2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.goland.plist'
-trash $LOGGED_IN_USER '~/Library/Preferences/GoLand2026.1'
+trash $LOGGED_IN_USER '~/Library/Preferences/GoLand2026.2'
 trash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.goland.SavedState'

ee/maintained-apps/outputs/goland/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/granola/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/granola/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/intellij-idea/darwin.json

=== Install Script (no changes) ===
=== Uninstall // 188d226d -> acfd723a ===

--- /tmp/old.mpvdxz	2026-07-17 00:24:08.959265582 +0000
+++ /tmp/new.SgEZLQ	2026-07-17 00:24:08.959265582 +0000
@@ -54,10 +54,10 @@
 
 sudo rm -rf "$APPDIR/IntelliJ IDEA.app"
 sudo rm -rf 'idea'
-trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/IntelliJIdea2026.1'
-trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/IntelliJIdea2026.1'
-trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/IntelliJIdea2026.1'
+trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/IntelliJIdea2026.2'
+trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/IntelliJIdea2026.2'
+trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/IntelliJIdea2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.intellij.plist'
-trash $LOGGED_IN_USER '~/Library/Preferences/IntelliJIdea2026.1'
+trash $LOGGED_IN_USER '~/Library/Preferences/IntelliJIdea2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/jetbrains.idea.*.plist'
 trash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.intellij.savedState'

ee/maintained-apps/outputs/lenovo-dock-manager/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/loom/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/loom/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/masscode/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/okta-advanced-server-access/darwin.json

=== Install // 29769d7b -> eba4ced9 ===

--- /tmp/old.3boWCK	2026-07-17 00:24:09.179270811 +0000
+++ /tmp/new.Vz9IDo	2026-07-17 00:24:09.179270811 +0000
@@ -96,5 +96,5 @@
 
 # install pkg files
 quit_and_track_application 'com.scaleft.ScaleFT'
-sudo installer -pkg "$TMPDIR/ScaleFT-1.108.0.pkg" -target /
+sudo installer -pkg "$TMPDIR/ScaleFT-1.109.0.pkg" -target /
 relaunch_application 'com.scaleft.ScaleFT'

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ollama/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ollama/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/opencode-desktop/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/phpstorm/darwin.json

=== Install Script (no changes) ===
=== Uninstall // bdde2409 -> f215b72e ===

--- /tmp/old.RtLWV0	2026-07-17 00:24:09.335274519 +0000
+++ /tmp/new.zmC9ba	2026-07-17 00:24:09.335274519 +0000
@@ -55,8 +55,8 @@
 sudo rm -rf "$APPDIR/PhpStorm.app"
 sudo rm -rf 'phpstorm'
 trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/consentOptions'
-trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/PhpStorm2026.1'
-trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/PhpStorm2026.1'
-trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/PhpStorm2026.1'
+trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/PhpStorm2026.2'
+trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/PhpStorm2026.2'
+trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/PhpStorm2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.PhpStorm.plist'
 trash $LOGGED_IN_USER '~/Library/Preferences/jetbrains.jetprofile.asset.plist'

ee/maintained-apps/outputs/phpstorm/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/redcine-x-pro/darwin.json

=== Install // 2ffae6d6 -> e488f825 ===

--- /tmp/old.WcQovr	2026-07-17 00:24:09.440277015 +0000
+++ /tmp/new.5mr0E2	2026-07-17 00:24:09.440277015 +0000
@@ -96,5 +96,5 @@
 
 # install pkg files
 quit_and_track_application 'com.red.RED-Tether'
-sudo installer -pkg "$TMPDIR/REDCINE-X_PRO_Build_65.1.3.pkg" -target /
+sudo installer -pkg "$TMPDIR/REDCINE-X_PRO_Build_65.2.1.pkg" -target /
 relaunch_application 'com.red.RED-Tether'

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/remote-desktop-manager/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/spokenly/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/spotify/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/surge/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/tower/windows.json

=== Install Script (no changes) ===
=== Uninstall // d6c5c5e5 -> 4f4283d4 ===

--- /tmp/old.wEul8X	2026-07-17 00:24:09.637281697 +0000
+++ /tmp/new.M60bKX	2026-07-17 00:24:09.637281697 +0000
@@ -1,28 +1,26 @@
-# Fleet uninstalls app by finding all related product codes for the specified upgrade code
-$inst = New-Object -ComObject "WindowsInstaller.Installer"
-$timeoutSeconds = 300  # 5 minute timeout per product
+$product_code = 'MSI:Tower'
+$timeoutSeconds = 300  # 5 minute timeout
 
-# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
-# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
-$successCodes = @(0, 3010, 1641)
+# Fleet uninstalls app using product code that's extracted on upload
+$process = Start-Process msiexec -ArgumentList @("/quiet", "/x", $product_code, "/norestart") -PassThru
 
-foreach ($product_code in $inst.RelatedProducts('{871FD9D0-41D3-52BE-AF69-12F8B08740C0}')) {
-    $process = Start-Process msiexec -ArgumentList @("/quiet", "/x", $product_code, "/norestart") -PassThru
+# Wait for process with timeout
+$completed = $process.WaitForExit($timeoutSeconds * 1000)
 
-    # Wait for process with timeout
-    $completed = $process.WaitForExit($timeoutSeconds * 1000)
+if (-not $completed) {
+    Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue
+    Exit 1603  # ERROR_UNINSTALL_FAILURE
+}
 
-    if (-not $completed) {
-        Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue
-        Exit 1603  # ERROR_UNINSTALL_FAILURE
-    }
+# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
+# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
+$successCodes = @(0, 3010, 1641)
 
-    # If the uninstall failed, bail
-    if ($successCodes -notcontains $process.ExitCode) {
-        Write-Output "Uninstall for $($product_code) exited $($process.ExitCode)"
-        Exit $process.ExitCode
-    }
+# Check exit code and output result
+if ($successCodes -contains $process.ExitCode) {
+    Write-Output "Exit 0"
+    Exit 0
+} else {
+    Write-Output "Exit $($process.ExitCode)"
+    Exit $process.ExitCode
 }
-
-# All uninstalls succeeded; exit success
-Exit 0

ee/maintained-apps/outputs/voiceink/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/webstorm/darwin.json

=== Install Script (no changes) ===
=== Uninstall // c0791a1f -> 6d11a5af ===

--- /tmp/old.5SfQUO	2026-07-17 00:24:09.750284383 +0000
+++ /tmp/new.29rXQL	2026-07-17 00:24:09.750284383 +0000
@@ -54,12 +54,12 @@
 
 sudo rm -rf "$APPDIR/WebStorm.app"
 sudo rm -rf 'webstorm'
-trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/WebStorm2026.1'
+trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/WebStorm2026.2'
 trash $LOGGED_IN_USER '~/Library/Caches/com.apple.nsurlsessiond/Downloads/com.jetbrains.WebStorm'
-trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/WebStorm2026.1'
-trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/WebStorm2026.1'
+trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/WebStorm2026.2'
+trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/WebStorm2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.WebStorm.plist'
 trash $LOGGED_IN_USER '~/Library/Preferences/jetbrains.webstorm.*.plist'
-trash $LOGGED_IN_USER '~/Library/Preferences/WebStorm2026.1'
+trash $LOGGED_IN_USER '~/Library/Preferences/WebStorm2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/webstorm.plist'
 trash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.WebStorm.savedState'

ee/maintained-apps/outputs/webstorm/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

@coderabbitai

coderabbitai Bot commented Jul 17, 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: 839d6461-d72b-4296-94b3-a96da23c0bbc

📥 Commits

Reviewing files that changed from the base of the PR and between 756c2a6 and 943cf46.

📒 Files selected for processing (3)
  • ee/maintained-apps/inputs/winget/scripts/tower_uninstall.ps1
  • ee/maintained-apps/inputs/winget/tower.json
  • ee/maintained-apps/outputs/tower/windows.json

Walkthrough

Updated maintained-app output manifests to newer releases across macOS and Windows. Changes refresh versions, patched-query thresholds, installer URLs, and SHA-256 checksums. Several JetBrains macOS entries now reference version-specific uninstall scripts. ScaleFT and REDCINE-X PRO installer scripts were updated for new package filenames, and Tower’s Windows uninstall flow now uses product codes with timeout and MSI exit-code handling.

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description is too vague and misses the required template sections, issue reference, checklist items, and testing details. Fill in the template with a related issue, complete applicable checklist items, and add testing/validation details for the changed app data.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately summarizes the main change: refreshing Fleet-maintained app data.
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 fma-2607170019

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: 2

🤖 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/clion/darwin.json`:
- Line 20: Replace the relative launcher deletion paths in
ee/maintained-apps/outputs/clion/darwin.json lines 20-20,
ee/maintained-apps/outputs/goland/darwin.json lines 20-20,
ee/maintained-apps/outputs/intellij-idea/darwin.json lines 20-20,
ee/maintained-apps/outputs/phpstorm/darwin.json lines 20-20, and
ee/maintained-apps/outputs/webstorm/darwin.json lines 19-19 with the
corresponding absolute /usr/local/bin paths: clion, goland, idea, phpstorm, and
webstorm.

In `@ee/maintained-apps/outputs/tower/windows.json`:
- Line 19: The uninstall script’s `$product_code` uses an invalid placeholder
instead of Tower’s Windows Installer identifier. Replace the value in the
`4f4283d4` uninstall command with Tower’s actual ProductCode GUID, keeping the
existing `msiexec` arguments and timeout/exit handling unchanged.
🪄 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: d0cee7ee-7d2d-4cb7-bbcc-ec702e52a8bc

📥 Commits

Reviewing files that changed from the base of the PR and between b70087b and 756c2a6.

📒 Files selected for processing (45)
  • ee/maintained-apps/outputs/arc/darwin.json
  • ee/maintained-apps/outputs/arc/windows.json
  • ee/maintained-apps/outputs/aws-cli/windows.json
  • ee/maintained-apps/outputs/brave-browser/windows.json
  • ee/maintained-apps/outputs/browserstacklocal/windows.json
  • ee/maintained-apps/outputs/claude/darwin.json
  • ee/maintained-apps/outputs/clion/darwin.json
  • ee/maintained-apps/outputs/clockify/windows.json
  • ee/maintained-apps/outputs/cursor/darwin.json
  • ee/maintained-apps/outputs/datagrip/darwin.json
  • ee/maintained-apps/outputs/datagrip/windows.json
  • ee/maintained-apps/outputs/devolutions-workspace/windows.json
  • ee/maintained-apps/outputs/discord/darwin.json
  • ee/maintained-apps/outputs/discord/windows.json
  • ee/maintained-apps/outputs/dockside/darwin.json
  • ee/maintained-apps/outputs/drawio/darwin.json
  • ee/maintained-apps/outputs/egnyte/darwin.json
  • ee/maintained-apps/outputs/epic-games/darwin.json
  • ee/maintained-apps/outputs/epic-games/windows.json
  • ee/maintained-apps/outputs/focusrite-control-2/darwin.json
  • ee/maintained-apps/outputs/gdevelop/windows.json
  • ee/maintained-apps/outputs/goland/darwin.json
  • ee/maintained-apps/outputs/goland/windows.json
  • ee/maintained-apps/outputs/granola/darwin.json
  • ee/maintained-apps/outputs/granola/windows.json
  • ee/maintained-apps/outputs/intellij-idea/darwin.json
  • ee/maintained-apps/outputs/lenovo-dock-manager/windows.json
  • ee/maintained-apps/outputs/loom/darwin.json
  • ee/maintained-apps/outputs/loom/windows.json
  • ee/maintained-apps/outputs/masscode/darwin.json
  • ee/maintained-apps/outputs/okta-advanced-server-access/darwin.json
  • ee/maintained-apps/outputs/ollama/darwin.json
  • ee/maintained-apps/outputs/ollama/windows.json
  • ee/maintained-apps/outputs/opencode-desktop/darwin.json
  • ee/maintained-apps/outputs/phpstorm/darwin.json
  • ee/maintained-apps/outputs/phpstorm/windows.json
  • ee/maintained-apps/outputs/redcine-x-pro/darwin.json
  • ee/maintained-apps/outputs/remote-desktop-manager/windows.json
  • ee/maintained-apps/outputs/spokenly/darwin.json
  • ee/maintained-apps/outputs/spotify/windows.json
  • ee/maintained-apps/outputs/surge/darwin.json
  • ee/maintained-apps/outputs/tower/windows.json
  • ee/maintained-apps/outputs/voiceink/darwin.json
  • ee/maintained-apps/outputs/webstorm/darwin.json
  • ee/maintained-apps/outputs/webstorm/windows.json

"refs": {
"0eea3e67": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.jetbrains.CLion'\nif [ -d \"$APPDIR/CLion.app\" ]; then\n\tsudo mv \"$APPDIR/CLion.app\" \"$TMPDIR/CLion.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/CLion.app\" \"$APPDIR\"\nrelaunch_application 'com.jetbrains.CLion'\n",
"efb3480e": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/CLion.app\"\nsudo rm -rf 'clion'\ntrash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/CLion2026.1'\ntrash $LOGGED_IN_USER '~/Library/Caches/JetBrains/CLion2026.1'\ntrash $LOGGED_IN_USER '~/Library/Logs/JetBrains/CLion2026.1'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.CLion.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.CLion.savedState'\n"
"51845cc5": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/CLion.app\"\nsudo rm -rf 'clion'\ntrash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/CLion2026.2'\ntrash $LOGGED_IN_USER '~/Library/Caches/JetBrains/CLion2026.2'\ntrash $LOGGED_IN_USER '~/Library/Logs/JetBrains/CLion2026.2'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.CLion.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.CLion.savedState'\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

Relative path used for JetBrains CLI launcher deletion.

Across these files, the uninstall scripts use an unqualified relative path (e.g., sudo rm -rf 'clion') to remove the command-line launcher. This will fail to remove the actual CLI launcher (typically located at /usr/local/bin/) and will instead attempt to delete a directory or file of that name in the script's current working directory.

  • ee/maintained-apps/outputs/clion/darwin.json#L20-L20: Update the script payload to use sudo rm -rf '/usr/local/bin/clion' instead of sudo rm -rf 'clion'.
  • ee/maintained-apps/outputs/goland/darwin.json#L20-L20: Update the script payload to use sudo rm -rf '/usr/local/bin/goland' instead of sudo rm -rf 'goland'.
  • ee/maintained-apps/outputs/intellij-idea/darwin.json#L20-L20: Update the script payload to use sudo rm -rf '/usr/local/bin/idea' instead of sudo rm -rf 'idea'.
  • ee/maintained-apps/outputs/phpstorm/darwin.json#L20-L20: Update the script payload to use sudo rm -rf '/usr/local/bin/phpstorm' instead of sudo rm -rf 'phpstorm'.
  • ee/maintained-apps/outputs/webstorm/darwin.json#L19-L19: Update the script payload to use sudo rm -rf '/usr/local/bin/webstorm' instead of sudo rm -rf 'webstorm'.
📍 Affects 5 files
  • ee/maintained-apps/outputs/clion/darwin.json#L20-L20 (this comment)
  • ee/maintained-apps/outputs/goland/darwin.json#L20-L20
  • ee/maintained-apps/outputs/intellij-idea/darwin.json#L20-L20
  • ee/maintained-apps/outputs/phpstorm/darwin.json#L20-L20
  • ee/maintained-apps/outputs/webstorm/darwin.json#L19-L19
🤖 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/clion/darwin.json` at line 20, Replace the
relative launcher deletion paths in ee/maintained-apps/outputs/clion/darwin.json
lines 20-20, ee/maintained-apps/outputs/goland/darwin.json lines 20-20,
ee/maintained-apps/outputs/intellij-idea/darwin.json lines 20-20,
ee/maintained-apps/outputs/phpstorm/darwin.json lines 20-20, and
ee/maintained-apps/outputs/webstorm/darwin.json lines 19-19 with the
corresponding absolute /usr/local/bin paths: clion, goland, idea, phpstorm, and
webstorm.

Comment thread ee/maintained-apps/outputs/tower/windows.json Outdated
Tower's winget manifest declares a placeholder ProductCode ("MSI:Tower")
instead of the real GUID, so the generated uninstall script failed with
msiexec exit 1619. Uninstall via the MSI's stable UpgradeCode instead
(extracted from the installer with msiinfo).

Also fix the exists/patched queries: the registry DisplayName is exactly
"Tower" (fuzzy LIKE 'Tower %' never matches) and the registry Publisher
is the MSI Manufacturer "saas.group", not the winget locale's
"SaaS.Group".
@github-actions

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/outputs/arc/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/arc/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/aws-cli/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/brave-browser/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/browserstacklocal/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/claude/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/clion/darwin.json

=== Install Script (no changes) ===
=== Uninstall // efb3480e -> 51845cc5 ===

--- /tmp/old.b6E3Cp	2026-07-17 03:14:30.948845639 +0000
+++ /tmp/new.UITtDG	2026-07-17 03:14:30.948845639 +0000
@@ -54,8 +54,8 @@
 
 sudo rm -rf "$APPDIR/CLion.app"
 sudo rm -rf 'clion'
-trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/CLion2026.1'
-trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/CLion2026.1'
-trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/CLion2026.1'
+trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/CLion2026.2'
+trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/CLion2026.2'
+trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/CLion2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.CLion.plist'
 trash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.CLion.savedState'

ee/maintained-apps/outputs/clockify/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/cursor/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/datagrip/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/datagrip/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/devolutions-workspace/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/discord/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/discord/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/dockside/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/drawio/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/egnyte/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/epic-games/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/epic-games/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/focusrite-control-2/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/gdevelop/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/goland/darwin.json

=== Install Script (no changes) ===
=== Uninstall // c7ca278d -> 20571185 ===

--- /tmp/old.XwuNSC	2026-07-17 03:14:31.528844173 +0000
+++ /tmp/new.cnQkHy	2026-07-17 03:14:31.528844173 +0000
@@ -55,9 +55,9 @@
 sudo rm -rf "$APPDIR/GoLand.app"
 sudo rm -rf 'goland'
 trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/GoLand'
-trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/GoLand2026.1'
-trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/GoLand2026.1'
-trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/GoLand2026.1'
+trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/GoLand2026.2'
+trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/GoLand2026.2'
+trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/GoLand2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.goland.plist'
-trash $LOGGED_IN_USER '~/Library/Preferences/GoLand2026.1'
+trash $LOGGED_IN_USER '~/Library/Preferences/GoLand2026.2'
 trash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.goland.SavedState'

ee/maintained-apps/outputs/goland/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/granola/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/granola/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/intellij-idea/darwin.json

=== Install Script (no changes) ===
=== Uninstall // 188d226d -> acfd723a ===

--- /tmp/old.OqVl6e	2026-07-17 03:14:31.683843781 +0000
+++ /tmp/new.XXT7ze	2026-07-17 03:14:31.683843781 +0000
@@ -54,10 +54,10 @@
 
 sudo rm -rf "$APPDIR/IntelliJ IDEA.app"
 sudo rm -rf 'idea'
-trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/IntelliJIdea2026.1'
-trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/IntelliJIdea2026.1'
-trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/IntelliJIdea2026.1'
+trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/IntelliJIdea2026.2'
+trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/IntelliJIdea2026.2'
+trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/IntelliJIdea2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.intellij.plist'
-trash $LOGGED_IN_USER '~/Library/Preferences/IntelliJIdea2026.1'
+trash $LOGGED_IN_USER '~/Library/Preferences/IntelliJIdea2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/jetbrains.idea.*.plist'
 trash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.intellij.savedState'

ee/maintained-apps/outputs/lenovo-dock-manager/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/loom/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/loom/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/masscode/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/okta-advanced-server-access/darwin.json

=== Install // 29769d7b -> eba4ced9 ===

--- /tmp/old.qdG8B9	2026-07-17 03:14:31.898843237 +0000
+++ /tmp/new.sWRONR	2026-07-17 03:14:31.898843237 +0000
@@ -96,5 +96,5 @@
 
 # install pkg files
 quit_and_track_application 'com.scaleft.ScaleFT'
-sudo installer -pkg "$TMPDIR/ScaleFT-1.108.0.pkg" -target /
+sudo installer -pkg "$TMPDIR/ScaleFT-1.109.0.pkg" -target /
 relaunch_application 'com.scaleft.ScaleFT'

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ollama/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/ollama/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/opencode-desktop/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/phpstorm/darwin.json

=== Install Script (no changes) ===
=== Uninstall // bdde2409 -> f215b72e ===

--- /tmp/old.wClJ35	2026-07-17 03:14:32.049842855 +0000
+++ /tmp/new.yaOpDo	2026-07-17 03:14:32.049842855 +0000
@@ -55,8 +55,8 @@
 sudo rm -rf "$APPDIR/PhpStorm.app"
 sudo rm -rf 'phpstorm'
 trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/consentOptions'
-trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/PhpStorm2026.1'
-trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/PhpStorm2026.1'
-trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/PhpStorm2026.1'
+trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/PhpStorm2026.2'
+trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/PhpStorm2026.2'
+trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/PhpStorm2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.PhpStorm.plist'
 trash $LOGGED_IN_USER '~/Library/Preferences/jetbrains.jetprofile.asset.plist'

ee/maintained-apps/outputs/phpstorm/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/redcine-x-pro/darwin.json

=== Install // 2ffae6d6 -> e488f825 ===

--- /tmp/old.Kqy5qt	2026-07-17 03:14:32.153842592 +0000
+++ /tmp/new.ehWVKm	2026-07-17 03:14:32.153842592 +0000
@@ -96,5 +96,5 @@
 
 # install pkg files
 quit_and_track_application 'com.red.RED-Tether'
-sudo installer -pkg "$TMPDIR/REDCINE-X_PRO_Build_65.1.3.pkg" -target /
+sudo installer -pkg "$TMPDIR/REDCINE-X_PRO_Build_65.2.1.pkg" -target /
 relaunch_application 'com.red.RED-Tether'

=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/remote-desktop-manager/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/spokenly/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/spotify/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/surge/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/tower/windows.json

=== Install Script (no changes) ===
=== Uninstall // 4f4283d4 -> 1c38382b ===

--- /tmp/old.0tg3iG	2026-07-17 03:14:32.344842109 +0000
+++ /tmp/new.3atgNm	2026-07-17 03:14:32.344842109 +0000
@@ -1,26 +1,31 @@
-$product_code = 'MSI:Tower'
-$timeoutSeconds = 300  # 5 minute timeout
-
-# Fleet uninstalls app using product code that's extracted on upload
-$process = Start-Process msiexec -ArgumentList @("/quiet", "/x", $product_code, "/norestart") -PassThru
-
-# Wait for process with timeout
-$completed = $process.WaitForExit($timeoutSeconds * 1000)
-
-if (-not $completed) {
-    Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue
-    Exit 1603  # ERROR_UNINSTALL_FAILURE
-}
+# Fleet uninstalls app by finding all related product codes for the specified upgrade code.
+# Tower's winget manifest declares a placeholder ProductCode ("MSI:Tower") instead of the
+# real GUID, so the default product-code-based uninstall fails with 1619. The MSI's
+# UpgradeCode is stable across releases, so uninstall via RelatedProducts instead.
+$inst = New-Object -ComObject "WindowsInstaller.Installer"
+$timeoutSeconds = 300  # 5 minute timeout per product
 
 # MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,
 # 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.
 $successCodes = @(0, 3010, 1641)
 
-# Check exit code and output result
-if ($successCodes -contains $process.ExitCode) {
-    Write-Output "Exit 0"
-    Exit 0
-} else {
-    Write-Output "Exit $($process.ExitCode)"
-    Exit $process.ExitCode
+foreach ($product_code in $inst.RelatedProducts('{871FD9D0-41D3-52BE-AF69-12F8B08740C0}')) {
+    $process = Start-Process msiexec -ArgumentList @("/quiet", "/x", $product_code, "/norestart") -PassThru
+
+    # Wait for process with timeout
+    $completed = $process.WaitForExit($timeoutSeconds * 1000)
+
+    if (-not $completed) {
+        Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue
+        Exit 1603  # ERROR_UNINSTALL_FAILURE
+    }
+
+    # If the uninstall failed, bail
+    if ($successCodes -notcontains $process.ExitCode) {
+        Write-Output "Uninstall for $($product_code) exited $($process.ExitCode)"
+        Exit $process.ExitCode
+    }
 }
+
+# All uninstalls succeeded; exit success
+Exit 0

ee/maintained-apps/outputs/voiceink/darwin.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

ee/maintained-apps/outputs/webstorm/darwin.json

=== Install Script (no changes) ===
=== Uninstall // c0791a1f -> 6d11a5af ===

--- /tmp/old.gk17Nx	2026-07-17 03:14:32.460841816 +0000
+++ /tmp/new.ksSrli	2026-07-17 03:14:32.460841816 +0000
@@ -54,12 +54,12 @@
 
 sudo rm -rf "$APPDIR/WebStorm.app"
 sudo rm -rf 'webstorm'
-trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/WebStorm2026.1'
+trash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/WebStorm2026.2'
 trash $LOGGED_IN_USER '~/Library/Caches/com.apple.nsurlsessiond/Downloads/com.jetbrains.WebStorm'
-trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/WebStorm2026.1'
-trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/WebStorm2026.1'
+trash $LOGGED_IN_USER '~/Library/Caches/JetBrains/WebStorm2026.2'
+trash $LOGGED_IN_USER '~/Library/Logs/JetBrains/WebStorm2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.WebStorm.plist'
 trash $LOGGED_IN_USER '~/Library/Preferences/jetbrains.webstorm.*.plist'
-trash $LOGGED_IN_USER '~/Library/Preferences/WebStorm2026.1'
+trash $LOGGED_IN_USER '~/Library/Preferences/WebStorm2026.2'
 trash $LOGGED_IN_USER '~/Library/Preferences/webstorm.plist'
 trash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.WebStorm.savedState'

ee/maintained-apps/outputs/webstorm/windows.json

=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===

@allenhouchins
allenhouchins merged commit efcc073 into main Jul 17, 2026
16 checks passed
@allenhouchins
allenhouchins deleted the fma-2607170019 branch July 17, 2026 03:37
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.

2 participants