Update Fleet-maintained apps - #44337
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/figma/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/firefox/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/firefox/windows.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/firefox@esr/darwin.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/microsoft-outlook/darwin.json=== Install // fbfafe33 -> 5039e9ab ===
--- /tmp/old.96rnks 2026-04-28 21:30:56.641086134 +0000
+++ /tmp/new.QeylCG 2026-04-28 21:30:56.642086119 +0000
@@ -117,6 +117,6 @@
EOF
-sudo installer -pkg "$TMPDIR"/Microsoft_Outlook_16.108.26041915_Installer.pkg -target / -applyChoiceChangesXML "$CHOICE_XML"
+sudo installer -pkg "$TMPDIR"/Microsoft_Outlook_16.108.26042616_Installer.pkg -target / -applyChoiceChangesXML "$CHOICE_XML"
relaunch_application 'com.microsoft.Outlook'
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/notion/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/ollama/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/podman-desktop/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/pycharm/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) ===ee/maintained-apps/outputs/warp/darwin.json=== Install Script (no changes) ===
=== Uninstall Script (no changes) === |
WalkthroughThis pull request updates configuration metadata for twelve maintained applications across macOS and Windows platforms. Each update modifies JSON files in 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: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
ee/maintained-apps/outputs/pycharm/darwin.json (2)
20-20:⚠️ Potential issue | 🟠 MajorUninstall script uses a relative
rm -rf 'pycharm'(potentially deletes unintended paths).The uninstall script includes:
sudo rm -rf 'pycharm'This is a relative path and depends on the script’s current working directory. That can be dangerous if the execution context changes.
🛠️ Proposed fix
- sudo rm -rf 'pycharm' + # Remove only the intended path(s). If you meant /Applications/pycharm, use an absolute path. + sudo rm -rf "$APPDIR/pycharm"If
/Applications/pycharmis not the intended location, then the safest change is to remove this line entirely.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@ee/maintained-apps/outputs/pycharm/darwin.json` at line 20, The script contains a dangerous relative deletion command (sudo rm -rf 'pycharm') that can remove unintended files depending on CWD; remove that line (or replace it with a safe absolute path such as "$APPDIR/pycharm" only if that is the intended target) and keep the rest of the trash() usages intact to ensure removals use explicit user-scoped paths; reference the literal sudo rm -rf 'pycharm' in the file and the trash() helper when making the change.
20-20:⚠️ Potential issue | 🟠 MajorUninstall script wildcard paths are quoted, so globs won’t expand → files won’t be removed.
In
refs.ed7c065c(uninstall script), you call:
trash $LOGGED_IN_USER '~/Library/Preferences/jetbrains.pc.*.plist'trash $LOGGED_IN_USER '~/Library/Preferences/jetbrains.py.*.plist'trash $LOGGED_IN_USER '~/Library/Preferences/jetbrains.pycharm.*.plist'Because those patterns are wrapped in single quotes, the shell will not expand
*before thetrash()function runs. Insidetrash(), the code uses[[ -e "$target_file" ]]and therefore will look for a literal filename containing*, which will almost always fail—so the uninstall likely misses these files.Also,
trash()currently only uses$2as a single target path, so even if globs did expand to multiple matches, only the first match would be processed.🛠️ Proposed fix: make `trash()` accept multiple expanded targets and unquote glob patterns
"ed7c065c": "#!/bin/sh @@ -trash() { - local logged_in_user=\"$1\" - local target_file=\"$2\" +trash() { + local logged_in_user=\"$1\" + shift local timestamp=\"$(date +%Y-%m-%d-%s)\" local rand=\"$(jot -r 1 0 99999)\" - # replace ~ with /Users/$logged_in_user - if [[ \"$target_file\" == ~* ]]; then - target_file=\"/Users/$logged_in_user${target_file:1}\" - fi - - local trash=\"/Users/$logged_in_user/.Trash\" - local file_name=\"$(basename \"${target_file}\")\" - - if [[ -e \"$target_file\" ]]; then - echo \"removing $target_file.\" - mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\" - else - echo \"$target_file doesn't exist.\" - fi + local trash_dir=\"/Users/$logged_in_user/.Trash\" + local target_file + for target_file in \"$@\"; do + # replace ~ with /Users/$logged_in_user + if [[ \"$target_file\" == ~* ]]; then + target_file=\"/Users/$logged_in_user${target_file:1}\" + fi + + local file_name=\"$(basename \"${target_file}\")\" + if [[ -e \"$target_file\" ]]; then + echo \"removing $target_file.\" + mv -f \"$target_file\" \"$trash_dir/${file_name}_${timestamp}_${rand}\" + else + echo \"$target_file doesn't exist.\" + fi + done } @@ -trash $LOGGED_IN_USER '~/Library/Preferences/jetbrains.pc.*.plist' -trash $LOGGED_IN_USER '~/Library/Preferences/jetbrains.py.*.plist' -trash $LOGGED_IN_USER '~/Library/Preferences/jetbrains.pycharm.*.plist' +trash \"$LOGGED_IN_USER\" ~/Library/Preferences/jetbrains.pc.*.plist +trash \"$LOGGED_IN_USER\" ~/Library/Preferences/jetbrains.py.*.plist +trash \"$LOGGED_IN_USER\" ~/Library/Preferences/jetbrains.pycharm.*.plist🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@ee/maintained-apps/outputs/pycharm/darwin.json` at line 20, The uninstall misses wildcard matches because glob patterns are passed quoted and trash() only handles a single $2; unquote the glob arguments in the calls (e.g. use ~/Library/Preferences/jetbrains.pc.*.plist) and update trash() to accept and iterate over multiple targets (use "$@" or loop over all args after the user param), performing the existing tilde-expansion and existence check per target and moving each match into the user's .Trash; keep references to LOGGED_IN_USER, trash(), target_file, and the timestamp/rand logic when implementing the loop.
🧹 Nitpick comments (2)
ee/maintained-apps/outputs/ollama/darwin.json (1)
19-19: Potential installer fragility: it assumes the ZIP extractsOllama.appdirectly to$TMPDIR/Ollama.app.The embedded installer string unzips into
"$TMPDIR"and then runssudo cp -R "$TMPDIR/Ollama.app" "$APPDIR". If the 0.22.0 ZIP introduces a new top-level folder (e.g.,Ollama-darwin/Ollama.app), installs would fail. Please confirm the archive structure during the SHA verification (same script can checkunzip -loutput).If you want to harden this long-term, consider adjusting the installer script to copy the first matching
Ollama.appfound under$TMPDIR(e.g., withfind "$TMPDIR" -name "Ollama.app" -maxdepth ... -print -quit).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@ee/maintained-apps/outputs/ollama/darwin.json` at line 19, The script unzips via unzip "$INSTALLER_PATH" -d "$TMPDIR" and then blindly copies sudo cp -R "$TMPDIR/Ollama.app" "$APPDIR", which fails if the archive nests the .app inside a top-level folder; modify the installer to (1) inspect the archive (unzip -l "$INSTALLER_PATH") or after extraction use a robust discovery step (e.g., use find "$TMPDIR" -name "Ollama.app" -print -quit) to locate the first Ollama.app path, (2) use that discovered path for backup/move/copy instead of the fixed "$TMPDIR/Ollama.app", and ensure quit_and_track_application and relaunch_application still receive the bundle id 'com.electron.ollama' as before.ee/maintained-apps/outputs/pycharm/darwin.json (1)
19-19: Install script: quote$INSTALLER_PATHwhen callingrealpathfor correctness/robustness.In the install script referenced by
d6824d32, TMPDIR is computed as:
TMPDIR=$(dirname "$(realpath $INSTALLER_PATH)")If
$INSTALLER_PATHever contains spaces or unusual characters, the unquoted$INSTALLER_PATHcan breakrealpathargument parsing.♻️ Proposed fix
- TMPDIR=$(dirname "$(realpath $INSTALLER_PATH)") + TMPDIR=$(dirname "$(realpath "$INSTALLER_PATH")")🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@ee/maintained-apps/outputs/pycharm/darwin.json` at line 19, The TMPDIR assignment uses realpath with an unquoted $INSTALLER_PATH which will break on paths with spaces; update the TMPDIR computation (the TMPDIR variable assignment) to quote the variable when calling realpath (i.e., use "$(realpath \"$INSTALLER_PATH\")" or equivalent), ensuring the rest of the script (functions quit_and_track_application and relaunch_application that rely on TMPDIR) still work with the quoted value.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@ee/maintained-apps/outputs/warp/darwin.json`:
- Around line 4-9: The installer_url path segment does not match the declared
"version" (0.2026.04.27.15.32.02) — update the "installer_url" value so its v...
path uses the identical version token (e.g., v0.2026.04.27.15.32.02/...) or
alternatively update the "version" field to include the actual release suffix
used in the URL (e.g., change version to 0.2026.04.27.15.32.stable_02) so that
"version", "queries.patched", and "installer_url" are consistent (check the
installer_url, version, and queries.patched entries).
---
Outside diff comments:
In `@ee/maintained-apps/outputs/pycharm/darwin.json`:
- Line 20: The script contains a dangerous relative deletion command (sudo rm
-rf 'pycharm') that can remove unintended files depending on CWD; remove that
line (or replace it with a safe absolute path such as "$APPDIR/pycharm" only if
that is the intended target) and keep the rest of the trash() usages intact to
ensure removals use explicit user-scoped paths; reference the literal sudo rm
-rf 'pycharm' in the file and the trash() helper when making the change.
- Line 20: The uninstall misses wildcard matches because glob patterns are
passed quoted and trash() only handles a single $2; unquote the glob arguments
in the calls (e.g. use ~/Library/Preferences/jetbrains.pc.*.plist) and update
trash() to accept and iterate over multiple targets (use "$@" or loop over all
args after the user param), performing the existing tilde-expansion and
existence check per target and moving each match into the user's .Trash; keep
references to LOGGED_IN_USER, trash(), target_file, and the timestamp/rand logic
when implementing the loop.
---
Nitpick comments:
In `@ee/maintained-apps/outputs/ollama/darwin.json`:
- Line 19: The script unzips via unzip "$INSTALLER_PATH" -d "$TMPDIR" and then
blindly copies sudo cp -R "$TMPDIR/Ollama.app" "$APPDIR", which fails if the
archive nests the .app inside a top-level folder; modify the installer to (1)
inspect the archive (unzip -l "$INSTALLER_PATH") or after extraction use a
robust discovery step (e.g., use find "$TMPDIR" -name "Ollama.app" -print -quit)
to locate the first Ollama.app path, (2) use that discovered path for
backup/move/copy instead of the fixed "$TMPDIR/Ollama.app", and ensure
quit_and_track_application and relaunch_application still receive the bundle id
'com.electron.ollama' as before.
In `@ee/maintained-apps/outputs/pycharm/darwin.json`:
- Line 19: The TMPDIR assignment uses realpath with an unquoted $INSTALLER_PATH
which will break on paths with spaces; update the TMPDIR computation (the TMPDIR
variable assignment) to quote the variable when calling realpath (i.e., use
"$(realpath \"$INSTALLER_PATH\")" or equivalent), ensuring the rest of the
script (functions quit_and_track_application and relaunch_application that rely
on TMPDIR) still work with the quoted value.
🪄 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: e0088bb5-7a50-4b8c-9ba7-06fc8a8b608e
📒 Files selected for processing (12)
ee/maintained-apps/outputs/figma/darwin.jsonee/maintained-apps/outputs/firefox/darwin.jsonee/maintained-apps/outputs/firefox/windows.jsonee/maintained-apps/outputs/firefox@esr/darwin.jsonee/maintained-apps/outputs/granola/darwin.jsonee/maintained-apps/outputs/granola/windows.jsonee/maintained-apps/outputs/microsoft-outlook/darwin.jsonee/maintained-apps/outputs/notion/darwin.jsonee/maintained-apps/outputs/ollama/darwin.jsonee/maintained-apps/outputs/podman-desktop/darwin.jsonee/maintained-apps/outputs/pycharm/darwin.jsonee/maintained-apps/outputs/warp/darwin.json
| "version": "0.2026.04.27.15.32.02", | ||
| "queries": { | ||
| "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'dev.warp.Warp-Stable';", | ||
| "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'dev.warp.Warp-Stable' AND version_compare(bundle_short_version, '0.2026.04.22.08.46.03') < 0);" | ||
| "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'dev.warp.Warp-Stable' AND version_compare(bundle_short_version, '0.2026.04.27.15.32.02') < 0);" | ||
| }, | ||
| "installer_url": "https://releases.warp.dev/stable/v0.2026.04.22.08.46.stable_03/Warp.dmg", | ||
| "installer_url": "https://releases.warp.dev/stable/v0.2026.04.27.15.32.stable_02/Warp.dmg", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Read-only verification: find whether other maintained-app entries use the same
# "patched" semantics and how version strings map to bundle_short_version.
set -euo pipefail
# 1) Compare patterns of `queries.patched` across maintained apps.
rg -n --type=json '"patched"\s*:\s*"SELECT 1' ee/maintained-apps/outputs | head -n 50
# 2) Check Warp entries for other OS / other files (if present) to see how version/bundle_short_version is represented.
rg -n --type=json "dev\.warp\.Warp-Stable" ee/maintained-apps/outputs || true
# 3) Confirm which apps use `NOT EXISTS (...)` vs direct `SELECT ... FROM apps WHERE ...` patterns for `patched`.
rg -n --type=json '"patched"\s*:\s*".*NOT EXISTS' ee/maintained-apps/outputs | head -n 50Repository: fleetdm/fleet
Length of output: 28421
Verify the installer URL path matches the updated version string.
The version (0.2026.04.27.15.32.02) and queries.patched threshold are correctly aligned, following the standard maintained-app pattern. However, the installer_url contains a path segment v0.2026.04.27.15.32.stable_02 where the suffix is stable_02, while the version string ends with plain .02. This mismatch could cause Fleet's installer logic to fail if it validates the downloaded artifact against the version metadata. Ensure the URL path component matches the expected version format, or update the version string to include the stable_ prefix if that is Warp's actual release identifier.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@ee/maintained-apps/outputs/warp/darwin.json` around lines 4 - 9, The
installer_url path segment does not match the declared "version"
(0.2026.04.27.15.32.02) — update the "installer_url" value so its v... path uses
the identical version token (e.g., v0.2026.04.27.15.32.02/...) or alternatively
update the "version" field to include the actual release suffix used in the URL
(e.g., change version to 0.2026.04.27.15.32.stable_02) so that "version",
"queries.patched", and "installer_url" are consistent (check the installer_url,
version, and queries.patched entries).
Automated ingestion of latest Fleet-maintained app data.
Summary by CodeRabbit