Update Fleet-maintained apps - #45783
Conversation
Generated automatically with cmd/maintained-apps.
There was a problem hiding this comment.
Claude Code Review
This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.
Tip: disable this comment in your organization's Code Review settings.
Script Diff Resultsee/maintained-apps/outputs/blender/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/claude/darwin.json=== Install Script (no changes) ===
=== Uninstall // d857a128 -> e555285c ===
--- /tmp/old.baFTDx 2026-05-19 09:05:49.306202931 +0000
+++ /tmp/new.OxJ7y6 2026-05-19 09:05:49.306202931 +0000
@@ -5,6 +5,46 @@
LOGGED_IN_USER=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
# functions
+quit_application() {
+ local bundle_id="$1"
+ local timeout_duration=10
+
+ # check if the application is running
+ local app_running
+ app_running=$(osascript -e "application id \"$bundle_id\" is running" 2>/dev/null)
+ if [[ "$app_running" != "true" ]]; then
+ return
+ fi
+
+ local console_user
+ console_user=$(stat -f "%Su" /dev/console)
+ if [[ -z "$console_user" || "$console_user" == "root" || "$console_user" == "loginwindow" ]]; then
+ echo "Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'."
+ return
+ fi
+
+ echo "Quitting application '$bundle_id'..."
+
+ # try to quit the application within the timeout period
+ local quit_success=false
+ SECONDS=0
+ while (( SECONDS < timeout_duration )); do
+ if osascript -e "tell application id \"$bundle_id\" to quit" >/dev/null 2>&1; then
+ if ! pgrep -f "$bundle_id" >/dev/null 2>&1; then
+ echo "Application '$bundle_id' quit successfully."
+ quit_success=true
+ break
+ fi
+ fi
+ sleep 1
+ done
+
+ if [[ "$quit_success" = false ]]; then
+ echo "Application '$bundle_id' did not quit."
+ fi
+}
+
+
trash() {
local logged_in_user="$1"
local target_file="$2"
@@ -27,6 +67,8 @@
fi
}
+quit_application 'com.anthropic.claudefordesktop'
+quit_application 'com.anthropic.claudefordesktop.helper'
sudo rm -rf "$APPDIR/Claude.app"
trash $LOGGED_IN_USER '~/Library/Application Support/Claude'
trash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.anthropic.claudefordesktop.sfl*'ee/maintained-apps/outputs/discord/darwin.json=== Install Script (no changes) ===
=== Uninstall // 72bf55d9 -> 64f1f6c2 ===
--- /tmp/old.C2ZNbB 2026-05-19 09:05:49.354202802 +0000
+++ /tmp/new.KxAq4V 2026-05-19 09:05:49.355202799 +0000
@@ -5,6 +5,46 @@
LOGGED_IN_USER=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
# functions
+quit_application() {
+ local bundle_id="$1"
+ local timeout_duration=10
+
+ # check if the application is running
+ local app_running
+ app_running=$(osascript -e "application id \"$bundle_id\" is running" 2>/dev/null)
+ if [[ "$app_running" != "true" ]]; then
+ return
+ fi
+
+ local console_user
+ console_user=$(stat -f "%Su" /dev/console)
+ if [[ -z "$console_user" || "$console_user" == "root" || "$console_user" == "loginwindow" ]]; then
+ echo "Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'."
+ return
+ fi
+
+ echo "Quitting application '$bundle_id'..."
+
+ # try to quit the application within the timeout period
+ local quit_success=false
+ SECONDS=0
+ while (( SECONDS < timeout_duration )); do
+ if osascript -e "tell application id \"$bundle_id\" to quit" >/dev/null 2>&1; then
+ if ! pgrep -f "$bundle_id" >/dev/null 2>&1; then
+ echo "Application '$bundle_id' quit successfully."
+ quit_success=true
+ break
+ fi
+ fi
+ sleep 1
+ done
+
+ if [[ "$quit_success" = false ]]; then
+ echo "Application '$bundle_id' did not quit."
+ fi
+}
+
+
trash() {
local logged_in_user="$1"
local target_file="$2"
@@ -27,6 +67,9 @@
fi
}
+quit_application 'com.hnc.Discord'
+quit_application 'com.hnc.Discord.helper.Plugin'
+quit_application 'com.hnc.Discord.helper.Renderer'
sudo rm -rf "$APPDIR/Discord.app"
trash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.hnc.discord.sfl*'
trash $LOGGED_IN_USER '~/Library/Application Support/discord'ee/maintained-apps/outputs/postman/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/transmit/darwin.json=== Install Script (no changes) ===
=== Uninstall // 2176f321 -> 16b182db ===
--- /tmp/old.hJb4z0 2026-05-19 09:05:49.426202609 +0000
+++ /tmp/new.TDgltP 2026-05-19 09:05:49.426202609 +0000
@@ -5,6 +5,46 @@
LOGGED_IN_USER=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
# functions
+quit_application() {
+ local bundle_id="$1"
+ local timeout_duration=10
+
+ # check if the application is running
+ local app_running
+ app_running=$(osascript -e "application id \"$bundle_id\" is running" 2>/dev/null)
+ if [[ "$app_running" != "true" ]]; then
+ return
+ fi
+
+ local console_user
+ console_user=$(stat -f "%Su" /dev/console)
+ if [[ -z "$console_user" || "$console_user" == "root" || "$console_user" == "loginwindow" ]]; then
+ echo "Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'."
+ return
+ fi
+
+ echo "Quitting application '$bundle_id'..."
+
+ # try to quit the application within the timeout period
+ local quit_success=false
+ SECONDS=0
+ while (( SECONDS < timeout_duration )); do
+ if osascript -e "tell application id \"$bundle_id\" to quit" >/dev/null 2>&1; then
+ if ! pgrep -f "$bundle_id" >/dev/null 2>&1; then
+ echo "Application '$bundle_id' quit successfully."
+ quit_success=true
+ break
+ fi
+ fi
+ sleep 1
+ done
+
+ if [[ "$quit_success" = false ]]; then
+ echo "Application '$bundle_id' did not quit."
+ fi
+}
+
+
trash() {
local logged_in_user="$1"
local target_file="$2"
@@ -27,6 +67,7 @@
fi
}
+quit_application 'com.panic.Transmit'
sudo rm -rf "$APPDIR/Transmit.app"
trash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.panic.transmit.sfl*'
trash $LOGGED_IN_USER '~/Library/Application Support/com.panic.Transmit'ee/maintained-apps/outputs/warp/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/zotero/darwin.json=== Install Script (no changes) ===
=== Uninstall // 34c55f94 -> 7aa375d3 ===
--- /tmp/old.k9qWaA 2026-05-19 09:05:49.508202389 +0000
+++ /tmp/new.3MQwLN 2026-05-19 09:05:49.508202389 +0000
@@ -5,6 +5,46 @@
LOGGED_IN_USER=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
# functions
+quit_application() {
+ local bundle_id="$1"
+ local timeout_duration=10
+
+ # check if the application is running
+ local app_running
+ app_running=$(osascript -e "application id \"$bundle_id\" is running" 2>/dev/null)
+ if [[ "$app_running" != "true" ]]; then
+ return
+ fi
+
+ local console_user
+ console_user=$(stat -f "%Su" /dev/console)
+ if [[ -z "$console_user" || "$console_user" == "root" || "$console_user" == "loginwindow" ]]; then
+ echo "Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'."
+ return
+ fi
+
+ echo "Quitting application '$bundle_id'..."
+
+ # try to quit the application within the timeout period
+ local quit_success=false
+ SECONDS=0
+ while (( SECONDS < timeout_duration )); do
+ if osascript -e "tell application id \"$bundle_id\" to quit" >/dev/null 2>&1; then
+ if ! pgrep -f "$bundle_id" >/dev/null 2>&1; then
+ echo "Application '$bundle_id' quit successfully."
+ quit_success=true
+ break
+ fi
+ fi
+ sleep 1
+ done
+
+ if [[ "$quit_success" = false ]]; then
+ echo "Application '$bundle_id' did not quit."
+ fi
+}
+
+
trash() {
local logged_in_user="$1"
local target_file="$2"
@@ -27,6 +67,7 @@
fi
}
+quit_application 'org.zotero.zotero'
sudo rm -rf "$APPDIR/Zotero.app"
sudo rmdir '~/Zotero'
trash $LOGGED_IN_USER '~/Library/Application Scripts/org.zotero.SafariExtensionApp.SafariExtension' |
WalkthroughThis PR updates macOS app metadata across six applications in the Fleet maintained-apps registry. Three apps receive version bumps: Blender (5.1.1 → 5.1.2), Postman (12.11.0 → 12.11.2), and Warp (0.2026.05.18.05.32.02), each with corresponding installer URL and SHA256 checksum updates. Four apps—Claude, Discord, Transmit, and Zotero—receive uninstall script enhancements that introduce a common pattern: a Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 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/discord/darwin.json`:
- Line 20: The path passed to the trash function uses URL-encoding and won't
match the filesystem; update the call that currently passes
"~/Library/Application%20Support/discord" to use a literal space
("~/Library/Application Support/discord") so the trash function (trash) can
locate and remove the Discord Application Support folder; ensure no other calls
to trash or string constants reference "%20" for Application Support.
In `@ee/maintained-apps/outputs/warp/darwin.json`:
- Line 12: The JSON entry sets "sha256" to "no_check", which disables integrity
verification; replace the "sha256" value with the actual SHA256 hex of the
Darwin installer (computed from the official download) so the installer is
verified, and if the checksum truly cannot be fixed, add explicit rationale
metadata (e.g., a "sha256_reason" string or documentation entry) explaining why
"no_check" is required and linking to the checksum source; look for the "sha256"
key and the "no_check" value in the Warp darwin manifest to implement this
change.
In `@ee/maintained-apps/outputs/zotero/darwin.json`:
- Line 19: The rmdir call using sudo rmdir '~/Zotero' won't remove the user's
Zotero folder (tilde is single-quoted, rmdir requires empty dir and tilde would
resolve to root if expanded); replace that line with a call to the existing
trash function to mirror other cleanup steps: use trash "$LOGGED_IN_USER"
'~/Zotero' (so the function expands the tilde to the correct user's path and
handles non-empty dirs), and remove the sudo rmdir invocation; reference the
trash function and LOGGED_IN_USER variable when making this change.
🪄 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: b65750d5-2396-4b85-af4d-82cd567f679f
📒 Files selected for processing (7)
ee/maintained-apps/outputs/blender/darwin.jsonee/maintained-apps/outputs/claude/darwin.jsonee/maintained-apps/outputs/discord/darwin.jsonee/maintained-apps/outputs/postman/darwin.jsonee/maintained-apps/outputs/transmit/darwin.jsonee/maintained-apps/outputs/warp/darwin.jsonee/maintained-apps/outputs/zotero/darwin.json
| "refs": { | ||
| "57ec7b28": "#!/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)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_and_track_application 'com.hnc.Discord'\nif [ -d \"$APPDIR/Discord.app\" ]; then\n\tsudo mv \"$APPDIR/Discord.app\" \"$TMPDIR/Discord.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Discord.app\" \"$APPDIR\"\nrelaunch_application 'com.hnc.Discord'\n", | ||
| "72bf55d9": "#!/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 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/Discord.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.hnc.discord.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/discord'\ntrash $LOGGED_IN_USER '~/Library/Application%20Support/discord'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.hnc.Discord'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.hnc.Discord.ShipIt'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.hnc.Discord.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.hnc.Discord'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.hnc.Discord.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.hnc.Discord.helper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.hnc.Discord.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.hnc.Discord.savedState'\n" | ||
| "64f1f6c2": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\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 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 return\n fi\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\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 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\nquit_application 'com.hnc.Discord'\nquit_application 'com.hnc.Discord.helper.Plugin'\nquit_application 'com.hnc.Discord.helper.Renderer'\nsudo rm -rf \"$APPDIR/Discord.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.hnc.discord.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/discord'\ntrash $LOGGED_IN_USER '~/Library/Application%20Support/discord'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.hnc.Discord'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.hnc.Discord.ShipIt'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.hnc.Discord.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.hnc.Discord'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.hnc.Discord.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.hnc.Discord.helper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.hnc.Discord.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.hnc.Discord.savedState'\n" |
There was a problem hiding this comment.
URL-encoded path won't match actual filesystem path.
The path ~/Library/Application%20Support/discord uses URL encoding (%20), but macOS filesystem paths use literal spaces. This path will never exist, so the trash function will silently skip it, leaving Discord's Application Support data behind.
The correct path should have a space:
~/Library/Application Support/discord
Note: The other path ~/Library/Application Support/com.apple.sharedfilelist/... is correct, so this appears to be an oversight just for the discord-specific path.
🤖 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/discord/darwin.json` at line 20, The path passed
to the trash function uses URL-encoding and won't match the filesystem; update
the call that currently passes "~/Library/Application%20Support/discord" to use
a literal space ("~/Library/Application Support/discord") so the trash function
(trash) can locate and remove the Discord Application Support folder; ensure no
other calls to trash or string constants reference "%20" for Application
Support.
| "installer_url": "https://releases.warp.dev/stable/v0.2026.05.18.05.32.stable_02/Warp.dmg", | ||
| "install_script_ref": "4b1c0c37", | ||
| "uninstall_script_ref": "bd923c6f", | ||
| "sha256": "no_check", |
There was a problem hiding this comment.
Security concern: SHA256 checksum verification disabled.
The "no_check" value for sha256 bypasses integrity verification of the downloaded installer. This means the installation will proceed without verifying the file hasn't been tampered with.
If Warp's download URLs are stable and trustworthy, consider obtaining and recording the actual SHA256 checksum to enable integrity verification. If the checksums change frequently or are unpredictable, document why "no_check" is necessary.
🤖 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/warp/darwin.json` at line 12, The JSON entry sets
"sha256" to "no_check", which disables integrity verification; replace the
"sha256" value with the actual SHA256 hex of the Darwin installer (computed from
the official download) so the installer is verified, and if the checksum truly
cannot be fixed, add explicit rationale metadata (e.g., a "sha256_reason" string
or documentation entry) explaining why "no_check" is required and linking to the
checksum source; look for the "sha256" key and the "no_check" value in the Warp
darwin manifest to implement this change.
| ], | ||
| "refs": { | ||
| "34c55f94": "#!/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 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/Zotero.app\"\nsudo rmdir '~/Zotero'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/org.zotero.SafariExtensionApp.SafariExtension'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Zotero'\ntrash $LOGGED_IN_USER '~/Library/Caches/Zotero'\ntrash $LOGGED_IN_USER '~/Library/Containers/org.zotero.SafariExtensionApp.SafariExtension'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.zotero.zotero.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/org.zotero.zotero.savedState'\n", | ||
| "7aa375d3": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\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 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 return\n fi\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\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 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\nquit_application 'org.zotero.zotero'\nsudo rm -rf \"$APPDIR/Zotero.app\"\nsudo rmdir '~/Zotero'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/org.zotero.SafariExtensionApp.SafariExtension'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Zotero'\ntrash $LOGGED_IN_USER '~/Library/Caches/Zotero'\ntrash $LOGGED_IN_USER '~/Library/Containers/org.zotero.SafariExtensionApp.SafariExtension'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.zotero.zotero.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/org.zotero.zotero.savedState'\n", |
There was a problem hiding this comment.
sudo rmdir '~/Zotero' will never work as intended.
This command has multiple issues:
- Single quotes prevent tilde expansion - the path is treated literally as
~/Zotero, not/Users/username/Zotero rmdironly removes empty directories - if the folder contains any files, it fails silently- Even with double quotes and
sudo, the tilde would expand to root's home (/var/root), not the user's
This should use the trash function (which already handles tilde expansion via $LOGGED_IN_USER) for consistency with other cleanup paths:
🐛 Proposed fix
Replace:
-sudo rmdir '~/Zotero'
+trash $LOGGED_IN_USER '~/Zotero'🤖 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/zotero/darwin.json` at line 19, The rmdir call
using sudo rmdir '~/Zotero' won't remove the user's Zotero folder (tilde is
single-quoted, rmdir requires empty dir and tilde would resolve to root if
expanded); replace that line with a call to the existing trash function to
mirror other cleanup steps: use trash "$LOGGED_IN_USER" '~/Zotero' (so the
function expands the tilde to the correct user's path and handles non-empty
dirs), and remove the sudo rmdir invocation; reference the trash function and
LOGGED_IN_USER variable when making this change.
|
Closing in favor of #45786. |
Automated ingestion of latest Fleet-maintained app data.
Summary by CodeRabbit
Bug Fixes
Chores