Skip to content

Update Fleet-maintained apps - #50867

Merged
allenhouchins merged 3 commits into
mainfrom
fma-2608101212
Aug 10, 2026
Merged

Update Fleet-maintained apps#50867
allenhouchins merged 3 commits into
mainfrom
fma-2608101212

Conversation

@fleet-release

@fleet-release fleet-release commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Automated ingestion of latest Fleet-maintained app data.

Summary by CodeRabbit

  • New Features

    • Added support for the latest releases of numerous macOS and Windows applications, including Docker Desktop, Firefox Nightly, Readest, Reqable, Rize, WhatsApp, Zoom Rooms, and others.
    • Refreshed download information and integrity checks to ensure installers use current release packages.
  • Bug Fixes

    • Improved OK JSON removal by also clearing its associated application data during uninstall.

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

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/outputs/cherry-studio/darwin.json

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

ee/maintained-apps/outputs/cisco-jabber/darwin.json

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

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

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

ee/maintained-apps/outputs/docker-desktop/darwin.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/duckduckgo/darwin.json

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

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

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

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

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

ee/maintained-apps/outputs/firefox@nightly/darwin.json

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

ee/maintained-apps/outputs/firefox@nightly/windows.json

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

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

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

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

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

ee/maintained-apps/outputs/hive-app/darwin.json

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

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

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

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

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

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

=== Install Script (no changes) ===
=== Uninstall // d7538dde -> dbbae48b ===

--- /tmp/old.FQILeV	2026-08-10 12:23:04.509752266 +0000
+++ /tmp/new.zDpjBD	2026-08-10 12:23:04.509752266 +0000
@@ -55,3 +55,4 @@
 sudo rm -rf "$APPDIR/OK JSON.app"
 trash $LOGGED_IN_USER '~/Library/Containers/net.shinystone.OKJSON'
 trash $LOGGED_IN_USER '~/Library/Group Containers/group.net.shinystone.OKJSON'
+trash $LOGGED_IN_USER '~/Library/Group Containers/S8MRM84X6F.group.net.shinystone.OKJSON'

ee/maintained-apps/outputs/openaudible/darwin.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/readest/windows.json

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

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

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

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

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

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

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

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

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

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

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

ee/maintained-apps/outputs/zoom-rooms/windows.json

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

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Maintained app output manifests update release versions or installer builds, patch-version queries, installer URLs, and SHA-256 checksums for Darwin and Windows packages. The OK JSON manifest now references a different uninstall script. That script also moves the S8MRM84X6F.group.net.shinystone.OKJSON group container to the logged-in user’s Trash.

Possibly related PRs

  • fleetdm/fleet#50839: Updates Firefox Nightly macOS installer metadata in the same maintained-app output.
  • fleetdm/fleet#50778: Updates overlapping maintained-app manifests with newer release metadata.
  • fleetdm/fleet#50851: Overlaps with this PR on maintained-app metadata files and release fields.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description states the automation purpose but omits the required issue reference and checklist or testing details. Add the related issue or mark it not applicable, then complete or remove applicable checklist sections and document testing.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the primary change: updating 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-2608101212

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/glyphs/darwin.json`:
- Around line 10-13: Update the Glyphs 3.5 entry’s patched predicate to compare
the installed bundle_version against build 3531 instead of using
bundle_short_version, while keeping the public Fleet version as 3.5.

In `@ee/maintained-apps/outputs/ok-json/darwin.json`:
- Line 21: Update the embedded uninstall script by enabling failure propagation
and explicitly checking the destructive operations: ensure sudo rm -rf and every
mv in trash return non-zero on failure, including failures while processing glob
matches. Preserve the existing missing-path behavior, but make any failed
removal cause the script to fail; then regenerate the manifest reference.
🪄 Autofix

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 Plus

Run ID: 34fb5d51-3c74-49d2-86b0-6cf8d9e70e69

📥 Commits

Reviewing files that changed from the base of the PR and between cc13bb2 and 559b0b3.

📒 Files selected for processing (25)
  • ee/maintained-apps/outputs/cherry-studio/darwin.json
  • ee/maintained-apps/outputs/cisco-jabber/darwin.json
  • ee/maintained-apps/outputs/codexbar/darwin.json
  • ee/maintained-apps/outputs/docker-desktop/darwin.json
  • ee/maintained-apps/outputs/dockside/darwin.json
  • ee/maintained-apps/outputs/duckduckgo/darwin.json
  • ee/maintained-apps/outputs/emclient/darwin.json
  • ee/maintained-apps/outputs/emclient/windows.json
  • ee/maintained-apps/outputs/firefox@nightly/darwin.json
  • ee/maintained-apps/outputs/firefox@nightly/windows.json
  • ee/maintained-apps/outputs/gitify/darwin.json
  • ee/maintained-apps/outputs/glyphs/darwin.json
  • ee/maintained-apps/outputs/hive-app/darwin.json
  • ee/maintained-apps/outputs/melodics/darwin.json
  • ee/maintained-apps/outputs/nordpass/darwin.json
  • ee/maintained-apps/outputs/ok-json/darwin.json
  • ee/maintained-apps/outputs/openaudible/darwin.json
  • ee/maintained-apps/outputs/opencode-desktop/darwin.json
  • ee/maintained-apps/outputs/readest/windows.json
  • ee/maintained-apps/outputs/reqable/darwin.json
  • ee/maintained-apps/outputs/reqable/windows.json
  • ee/maintained-apps/outputs/rize/darwin.json
  • ee/maintained-apps/outputs/termius/darwin.json
  • ee/maintained-apps/outputs/whatsapp/darwin.json
  • ee/maintained-apps/outputs/zoom-rooms/windows.json

Comment on lines +10 to +13
"installer_url": "https://updates.glyphsapp.com/Glyphs3.5-3531.zip",
"install_script_ref": "82042f03",
"uninstall_script_ref": "b1245f10",
"sha256": "1f74005b720fbf0b0aa9b0546c0fe1381cbab5f1ad3ef5f48ddeed140872b999",
"sha256": "1f8b0de72f1d6c10c5ab93994fcf01db148b2c896fff11e80b379abb77b42c66",

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 | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

fd -i glyphs ee/maintained-apps
rg -n -C 8 'Glyphs3|3530|3531|bundle_short_version|bundle_version|version_compare' ee/maintained-apps

Repository: fleetdm/fleet

Length of output: 50370


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Glyphs output =="
cat -n ee/maintained-apps/outputs/glyphs/darwin.json

echo
echo "== Glyphs source input candidates =="
fd -i 'glyphs|glyphsapp|glyphs3' ee/maintained-apps -t f
for f in $(fd -i 'glyphs|glyphsapp|glyphs3' ee/maintained-apps -t f); do
  echo "--- $f"
  sed -n '1,220p' "$f"
done

echo
echo "== focused searches =="
rg -n -C 5 'bundle_short_version|bundle_version|glyphs.*3\.5|3530|3531|version_compare|default.*query|patched' ee/maintained-apps/glyphs ee/maintained-apps/outputs/glyphs 2>/dev/null || true

Repository: fleetdm/fleet

Length of output: 9283


🌐 Web query:

Glyphs 3 3530 build bundle_short_version bundle_version CFBundleShortVersionString

💡 Result:

In the context of the Glyphs font editor, Glyphs 3 version 3530 refers to a specific build of the application, officially identified as Glyphs 3.5 (3530) [1]. Technical definitions for the terms mentioned are as follows: 1. Build Number: Glyphs uses a unique build number to identify specific releases [2]. This number is displayed in the About Glyphs window (e.g., 3530) and is often used to differentiate versions, especially when multiple versions are installed simultaneously [2][3]. 2. CFBundleShortVersionString: This corresponds to the user-facing version number of a macOS application (the bundle_short_version) [4][5]. It typically represents the release version, such as 3.5 [6][7]. 3. CFBundleVersion: This corresponds to the internal build version of the application (the bundle_version) [4][5]. In the context of Glyphs, this is often the specific build number (e.g., 3530) used by the system and update mechanisms [2]. In software management tools like osquery or Fleet, these fields are often used in conjunction to track software inventory. A common practice for determining the version of an application is to use a SQL query similar to COALESCE(NULLIF(bundle_short_version, ''), bundle_version), which prioritizes the user-facing version string and falls back to the internal build version if the former is empty [8][9].

Citations:


🌐 Web query:

Fleet dm apps table bundle_short_version bundle_version schema

💡 Result:

In Fleet DM, the apps table is an osquery-based table that gathers information about installed applications, primarily on macOS [1]. The table schema includes specific columns derived from the application's Info.plist properties [1]. The two relevant version-related columns are: 1. bundle_short_version: Corresponds to the CFBundleShortVersionString label, typically representing the public-facing "short" version number (e.g., 16.1.0) [1][2]. 2. bundle_version: Corresponds to the CFBundleVersion label, representing the raw build number of the application (e.g., 16.1.26021521) [1][2]. Fleet often uses a COALESCE function when querying these fields to prioritize the short version while falling back to the raw build number if the short version is missing [3][2]: COALESCE(NULLIF(bundle_short_version, ''), bundle_version) AS version This approach ensures that the application version reported in Fleet's UI or inventory is the most human-readable version available [3][2]. In some cases, mismatches between these versions (or between reported versions and package manager metadata) can occur, which may impact update detection logic [4][2].

Citations:


🌐 Web query:

github fleetdm fleet apps table bundle_short_version CFBundleShortVersionString

💡 Result:

In Fleet, the apps table—which originates from the osquery project—contains a bundle_short_version column that maps directly to the CFBundleShortVersionString key found in a macOS application's Info.plist file [1][2][3]. Key Technical Details: - Purpose: CFBundleShortVersionString is the user-visible version number of the application [4]. The bundle_short_version column in the apps table provides this value for reporting and inventory purposes [1][2]. - Osquery Implementation: The apps table is populated by scanning macOS applications in known search paths (e.g., /Applications). The data mapping is explicitly defined in osquery's source code, where CFBundleShortVersionString is assigned to bundle_short_version [2][3]. - Data Collation: As of recent versions, the bundle_short_version column uses COLLATE VERSION [5]. This ensures that when querying the database (e.g., in Fleet), version strings are compared numerically (e.g., "1.10" > "1.9") rather than alphabetically [5]. - Common Usage in Fleet: Fleet frequently uses this column to determine software versions for compliance and inventory [6][7]. Because some applications (notably Microsoft products) may use non-standard versioning schemes or maintain internal build numbers that differ from the CFBundleShortVersionString, developers often use COALESCE(NULLIF(bundle_short_version, ''), bundle_version) in SQL queries to fall back to the raw CFBundleVersion (build number) if the short version is missing or insufficient [6][4][7]. Reported Issues: Users have encountered scenarios where the reported bundle_short_version does not match the version expected by management tools or update policies [8][9]. This often happens when developers pack complex or multi-component version numbers into the CFBundleShortVersionString field, or when applications are managed via alternative package managers like Homebrew, which may track a different build-specific version [6][4][9].

Citations:


🌐 Web query:

site:updates.glyphsapp.com Glyphs3.5-3530 zip CFBundleShortVersionString

💡 Result:

In the context of the Glyphs application, the identifier CFBundleShortVersionString within the application's Info.plist file corresponds to the public release version number of the software. For Glyphs 3.5, build 3530, the CFBundleShortVersionString is typically set to "3.5". While the build number (in this case, 3530) differentiates specific development or maintenance releases, the CFBundleShortVersionString remains consistent across the 3.5 release cycle to denote the major/minor version [1][2]. These version details are standard for macOS applications, allowing the system to identify the application version [1][3].

Citations:


Use a build-aware installed version for Glyphs patch detection.

bundle_short_version maps to CFBundleShortVersionString, which stays 3.5 across Glyphs 3.5 build releases. A host with build 3530 satisfies the patched query and will not install Glyphs3.5-3531; build 3531 is also 3.5. Keep the public version shown to Fleet as 3.5, but compare the installed bundle_version against the build in the patched predicate.

🤖 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/glyphs/darwin.json` around lines 10 - 13, Update
the Glyphs 3.5 entry’s patched predicate to compare the installed bundle_version
against build 3531 instead of using bundle_short_version, while keeping the
public Fleet version as 3.5.

"refs": {
"239cd7a4": "#!/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 'net.shinystone.OKJSON'\nif [ -d \"$APPDIR/OK JSON.app\" ]; then\n\tsudo mv \"$APPDIR/OK JSON.app\" \"$TMPDIR/OK JSON.app.bkp\" || exit $?\nfi\nif ! sudo cp -R \"$TMPDIR/OK JSON.app\" \"$APPDIR\"; then\n\t# remove the partial copy so a failed install isn't inventoried as the new\n\t# version, then restore the previous version if there was one\n\tsudo rm -rf \"$APPDIR/OK JSON.app\"\n\tif [ -d \"$TMPDIR/OK JSON.app.bkp\" ]; then\n\t\tsudo mv \"$TMPDIR/OK JSON.app.bkp\" \"$APPDIR/OK JSON.app\"\n\tfi\n\texit 1\nfi\nrelaunch_application 'net.shinystone.OKJSON'\n",
"d7538dde": "#!/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/OK JSON.app\"\ntrash $LOGGED_IN_USER '~/Library/Containers/net.shinystone.OKJSON'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/group.net.shinystone.OKJSON'\n"
"dbbae48b": "#!/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/OK JSON.app\"\ntrash $LOGGED_IN_USER '~/Library/Containers/net.shinystone.OKJSON'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/group.net.shinystone.OKJSON'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/S8MRM84X6F.group.net.shinystone.OKJSON'\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.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Propagate uninstall failures.

The script does not enable set -e and does not check sudo rm -rf or mv. If removal fails, later missing-path branches return success, so the uninstaller can report success while the application or containers remain. Check each destructive operation and return a non-zero status on failure, then regenerate the manifest reference.

🤖 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/ok-json/darwin.json` at line 21, Update the
embedded uninstall script by enabling failure propagation and explicitly
checking the destructive operations: ensure sudo rm -rf and every mv in trash
return non-zero on failure, including failures while processing glob matches.
Preserve the existing missing-path behavior, but make any failed removal cause
the script to fail; then regenerate the manifest reference.

@allenhouchins
allenhouchins merged commit 3b47482 into main Aug 10, 2026
13 checks passed
@allenhouchins
allenhouchins deleted the fma-2608101212 branch August 10, 2026 12:56
@github-actions

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/outputs/cherry-studio/darwin.json

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

ee/maintained-apps/outputs/cisco-jabber/darwin.json

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

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

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

ee/maintained-apps/outputs/docker-desktop/darwin.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/duckduckgo/darwin.json

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

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

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

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

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

ee/maintained-apps/outputs/firefox@nightly/darwin.json

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

ee/maintained-apps/outputs/firefox@nightly/windows.json

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

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

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

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

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

ee/maintained-apps/outputs/hive-app/darwin.json

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

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

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

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

=== Install Script (no changes) ===
=== Uninstall // d7538dde -> dbbae48b ===

--- /tmp/old.8Xk3rr	2026-08-10 12:57:32.457239777 +0000
+++ /tmp/new.h2gJN5	2026-08-10 12:57:32.458239787 +0000
@@ -55,3 +55,4 @@
 sudo rm -rf "$APPDIR/OK JSON.app"
 trash $LOGGED_IN_USER '~/Library/Containers/net.shinystone.OKJSON'
 trash $LOGGED_IN_USER '~/Library/Group Containers/group.net.shinystone.OKJSON'
+trash $LOGGED_IN_USER '~/Library/Group Containers/S8MRM84X6F.group.net.shinystone.OKJSON'

ee/maintained-apps/outputs/openaudible/darwin.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/readest/windows.json

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

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

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

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

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

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

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

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

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

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

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

ee/maintained-apps/outputs/zoom-rooms/windows.json

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

@github-actions

Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/outputs/cherry-studio/darwin.json

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

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

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

ee/maintained-apps/outputs/docker-desktop/darwin.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/duckduckgo/darwin.json

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

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

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

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

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

ee/maintained-apps/outputs/firefox@nightly/darwin.json

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

ee/maintained-apps/outputs/firefox@nightly/windows.json

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

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

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

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

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

ee/maintained-apps/outputs/hive-app/darwin.json

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

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

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

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

=== Install Script (no changes) ===
=== Uninstall // d7538dde -> dbbae48b ===

--- /tmp/old.aN9v4X	2026-08-10 12:58:05.922861196 +0000
+++ /tmp/new.iUZsCK	2026-08-10 12:58:05.922861196 +0000
@@ -55,3 +55,4 @@
 sudo rm -rf "$APPDIR/OK JSON.app"
 trash $LOGGED_IN_USER '~/Library/Containers/net.shinystone.OKJSON'
 trash $LOGGED_IN_USER '~/Library/Group Containers/group.net.shinystone.OKJSON'
+trash $LOGGED_IN_USER '~/Library/Group Containers/S8MRM84X6F.group.net.shinystone.OKJSON'

ee/maintained-apps/outputs/openaudible/darwin.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/readest/windows.json

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

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

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

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

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

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

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

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

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

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

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

ee/maintained-apps/outputs/zoom-rooms/windows.json

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

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