Skip to content

Update Fleet-maintained apps#44554

Merged
allenhouchins merged 2 commits intomainfrom
fma-2604302128
May 1, 2026
Merged

Update Fleet-maintained apps#44554
allenhouchins merged 2 commits intomainfrom
fma-2604302128

Conversation

@fleet-release
Copy link
Copy Markdown
Contributor

@fleet-release fleet-release commented Apr 30, 2026

Automated ingestion of latest Fleet-maintained app data.

Summary by CodeRabbit

  • Chores

    • Updated Arc to version 1.145.0
    • Updated ExpressVPN to version 14.1.0
    • Updated LibreOffice to version 26.2.3
    • Updated Loom to version 0.346.4
    • Updated Microsoft Edge to version 147.0.3912.98
    • Updated Zen to version 1.19.11b
    • Switched Dialpad installer format to pkg
  • Bug Fixes

    • Dialpad: installer integrity check disabled (no_check) and uninstall now uses package receipt-aware removal instead of direct app deletion

Generated automatically with cmd/maintained-apps.
Copy link
Copy Markdown

@claude claude Bot left a comment

Choose a reason for hiding this comment

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

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.

@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/dialpad/darwin.json

=== Install // 4c1cf23f -> 4f288bf9 ===

--- /tmp/old.B5SGEK	2026-04-30 21:34:34.712357060 +0000
+++ /tmp/new.L9KEZY	2026-04-30 21:34:34.712357060 +0000
@@ -96,10 +96,7 @@
 
 # extract contents
 unzip "$INSTALLER_PATH" -d "$TMPDIR"
-# copy to the applications folder
+# install pkg files
 quit_and_track_application 'com.electron.dialpad'
-if [ -d "$APPDIR/Dialpad.app" ]; then
-	sudo mv "$APPDIR/Dialpad.app" "$TMPDIR/Dialpad.app.bkp"
-fi
-sudo cp -R "$TMPDIR/Dialpad.app" "$APPDIR"
+sudo installer -pkg "$TMPDIR/dialpad.pkg" -target /
 relaunch_application 'com.electron.dialpad'

=== Uninstall // baa2497a -> b293e759 ===

--- /tmp/old.JfqICn	2026-04-30 21:34:34.733357251 +0000
+++ /tmp/new.ZNTzGy	2026-04-30 21:34:34.734357260 +0000
@@ -1,10 +1,76 @@
 #!/bin/sh
 
 # variables
-APPDIR="/Applications/"
 LOGGED_IN_USER=$(scutil <<< "show State:/Users/ConsoleUser" | awk '/Name :/ { print $3 }')
 # functions
 
+expand_pkgid_and_map() {
+  local PKGID="$1"
+  local FUNC="$2"
+  if [[ "$PKGID" == *"*" ]]; then
+    local prefix="${PKGID%\*}"
+    echo "Expanding wildcard for PKGID: $PKGID"
+    for receipt in $(pkgutil --pkgs | grep "^${prefix}"); do
+      echo "Processing $receipt"
+      "$FUNC" "$receipt"
+    done
+  else
+    "$FUNC" "$PKGID"
+  fi
+}
+
+forget_pkg() {
+  local PKGID="$1"
+  expand_pkgid_and_map "$PKGID" forget_receipt
+}
+
+forget_receipt() {
+  local PKGID="$1"
+  sudo pkgutil --forget "$PKGID"
+}
+
+remove_pkg_files() {
+  local PKGID="$1"
+  expand_pkgid_and_map "$PKGID" remove_receipt_files
+}
+
+remove_receipt_files() {
+  local PKGID="$1"
+  local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION
+
+  echo "pkgutil --pkg-info-plist \"$PKGID\""
+  PKGINFO=$(pkgutil --pkg-info-plist "$PKGID")
+  VOLUME=$(echo "$PKGINFO" | awk '/<key>volume<\/key>/ {getline; gsub(/.*<string>|<\/string>.*/, ""); print}')
+  INSTALL_LOCATION=$(echo "$PKGINFO" | awk '/<key>install-location<\/key>/ {getline; gsub(/.*<string>|<\/string>.*/, ""); print}')
+
+  if [ -z "$INSTALL_LOCATION" ] || [ "$INSTALL_LOCATION" = "/" ]; then
+    FULL_INSTALL_LOCATION="$VOLUME"
+  else
+    FULL_INSTALL_LOCATION="$VOLUME/$INSTALL_LOCATION"
+    FULL_INSTALL_LOCATION=$(echo "$FULL_INSTALL_LOCATION" | sed 's|//|/|g')
+  fi
+
+  echo "sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | tr '\\\\n' '\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf"
+  sudo pkgutil --only-files --files "$PKGID" | sed "s|^|/${INSTALL_LOCATION}/|" | tr '\n' '\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf
+
+  echo "sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\\\n' '\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf"
+  sudo pkgutil --only-dirs --files "$PKGID" | sed "s|^|${FULL_INSTALL_LOCATION}/|" | grep '\.app$' | tr '\n' '\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf
+
+  root_app_dir=$(
+    sudo pkgutil --only-dirs --files "$PKGID" \
+      | sed "s|^|${FULL_INSTALL_LOCATION}/|" \
+      | grep 'Applications' \
+      | awk '{ print length, $0 }' \
+      | sort -n \
+      | head -n1 \
+      | cut -d' ' -f2-
+  )
+  if [ -n "$root_app_dir" ]; then
+    echo "sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :"
+    sudo rmdir -p "$root_app_dir" 2>/dev/null || :
+  fi
+}
+
 trash() {
   local logged_in_user="$1"
   local target_file="$2"
@@ -27,7 +93,8 @@
   fi
 }
 
-sudo rm -rf "$APPDIR/Dialpad.app"
+remove_pkg_files 'com.dialpad.Dialpad.pkg'
+forget_pkg 'com.dialpad.Dialpad.pkg'
 trash $LOGGED_IN_USER '~/Library/Application Support/Dialpad'
 trash $LOGGED_IN_USER '~/Library/Caches/com.electron.dialpad*'
 trash $LOGGED_IN_USER '~/Library/HTTPStorages/com.electron.dialpad'

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

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

ee/maintained-apps/outputs/libreoffice/darwin.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/microsoft-edge/darwin.json

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

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

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

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 30, 2026

Walkthrough

This PR updates maintained-apps metadata for multiple macOS apps: bumps Arc to 1.145.0, ExpressVPN to 14.1.0.13058, LibreOffice to 26.2.3, Loom to 0.346.4, Microsoft Edge to 147.0.3912.98, and Zen to 1.19.11b (each updating version, patched SQL threshold, installer_url, and sha256). Dialpad changes switch installer_format from zip to pkg, replace the install flow with a pkg-based installer invocation (sha256 set to no_check), and replace the uninstall flow to remove files registered by pkg receipts and then trash user-level artifacts.

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description lacks required template sections (related issue, checklist items). Only a brief statement 'Automated ingestion of latest Fleet-maintained app data' is provided, missing validation, testing, and other required documentation. Complete the PR description template by filling in required sections including input validation, testing confirmations, and related issue references as applicable.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Update Fleet-maintained apps' accurately summarizes the main change—updating multiple Fleet-maintained app configurations to their latest versions.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fma-2604302128

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
Review rate limit: 7/8 reviews remaining, refill in 7 minutes and 30 seconds.

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

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 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/dialpad/darwin.json`:
- Around line 9-12: The manifest currently disables integrity checks by setting
"sha256": "no_check"; replace that with the real SHA-256 hex checksum for the
PKG at the "installer_url" so the downloader verifies the file. Fetch the
installer from the URL (https://download.dialpad.com/osx/arm64/dialpad.pkg),
compute its SHA-256 digest, and update the "sha256" field in
ee/maintained-apps/outputs/dialpad/darwin.json with the lowercase hex checksum
string (ensuring it matches the actual PKG you uploaded); after updating, re-run
the manifest validation/installer fetch to confirm the checksum matches.
- Around line 9-10: The install flow is still unzipping the downloaded file even
though installer_url now points to a .pkg, so update the install script
referenced by install_script_ref "4f288bf9" to install the PKG directly instead
of unzipping: stop extracting $INSTALLER_PATH into $TMPDIR/dialpad.pkg and call
the system installer (e.g., installer -pkg "$INSTALLER_PATH" -target / or
equivalent) or ensure the script moves the downloaded file to the expected path
before installing; update any references to $TMPDIR/dialpad.pkg accordingly so
the script works with a .pkg URL.
- Around line 19-20: The scripts declare #!/bin/sh but use Bash-only features
(e.g. [[ ]], local, <<<, $EUID, parameter slicing) causing failures; update each
script's shebang to #!/bin/bash or refactor the Bash-specific constructs to
POSIX-compliant equivalents. Locate the Bash usages in functions like
quit_and_track_application and relaunch_application (uses [[ ]], local, $EUID),
and in expand_pkgid_and_map, remove_receipt_files, trash (uses <<<, local,
${target_file:1}, [[ ]]) and either change the top-line to #!/bin/bash or
systematically replace Bashisms (use POSIX test [, avoid local, replace
here-strings, use printf/awk for slicing, etc.) so the installer and uninstaller
run under /bin/sh-compatible shells.
🪄 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: c9e8e0b0-8ea4-4562-b014-5bf840db04dc

📥 Commits

Reviewing files that changed from the base of the PR and between 3ce6db7 and 1035479.

📒 Files selected for processing (7)
  • ee/maintained-apps/outputs/arc/darwin.json
  • ee/maintained-apps/outputs/dialpad/darwin.json
  • ee/maintained-apps/outputs/expressvpn/darwin.json
  • ee/maintained-apps/outputs/libreoffice/darwin.json
  • ee/maintained-apps/outputs/loom/darwin.json
  • ee/maintained-apps/outputs/microsoft-edge/darwin.json
  • ee/maintained-apps/outputs/zen/darwin.json

Comment on lines +9 to +12
"installer_url": "https://download.dialpad.com/osx/arm64/dialpad.pkg",
"install_script_ref": "4f288bf9",
"uninstall_script_ref": "b293e759",
"sha256": "no_check",
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.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Pin a real checksum for the PKG.

"sha256": "no_check" disables installer integrity verification for this manifest. The downloader accepts whatever bytes the URL returns, so this change would execute an unverified package on hosts if the download path is ever tampered with.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@ee/maintained-apps/outputs/dialpad/darwin.json` around lines 9 - 12, The
manifest currently disables integrity checks by setting "sha256": "no_check";
replace that with the real SHA-256 hex checksum for the PKG at the
"installer_url" so the downloader verifies the file. Fetch the installer from
the URL (https://download.dialpad.com/osx/arm64/dialpad.pkg), compute its
SHA-256 digest, and update the "sha256" field in
ee/maintained-apps/outputs/dialpad/darwin.json with the lowercase hex checksum
string (ensuring it matches the actual PKG you uploaded); after updating, re-run
the manifest validation/installer fetch to confirm the checksum matches.

Comment thread ee/maintained-apps/outputs/dialpad/darwin.json Outdated
Comment on lines +19 to +20
"4f288bf9": "#!/bin/sh\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\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# install pkg files\nquit_and_track_application 'com.electron.dialpad'\nsudo installer -pkg \"$TMPDIR/dialpad.pkg\" -target /\nrelaunch_application 'com.electron.dialpad'\n",
"b293e759": "#!/bin/sh\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/<key>volume<\\/key>/ {getline; gsub(/.*<string>|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/<key>install-location<\\/key>/ {getline; gsub(/.*<string>|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\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\nremove_pkg_files 'com.dialpad.Dialpad.pkg'\nforget_pkg 'com.dialpad.Dialpad.pkg'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Dialpad'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.electron.dialpad*'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.electron.dialpad'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.electron.dialpad.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.electron.dialpad.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.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

python - <<'PY'
import json, re

path = "ee/maintained-apps/outputs/dialpad/darwin.json"
patterns = {
    r"\[\[": "[[ ]] test",
    r"\blocal\b": "local keyword",
    r"<<<": "here-string",
    r"\$EUID\b": "$EUID",
    r"\$\{[^}]+:[0-9]+\}": "substring expansion",
}

with open(path) as f:
    data = json.load(f)

for ref, script in data["refs"].items():
    print(f"== {ref} ==")
    print("shebang:", script.splitlines()[0] if script else "<empty>")
    for pattern, label in patterns.items():
        if re.search(pattern, script):
            print("  bashism:", label)
PY

Repository: fleetdm/fleet

Length of output: 290


Fix shebang to match actual shell implementation.

Both scripts declare #!/bin/sh but use bash-only features: [[ ... ]], local, <<<, $EUID, and ${target_file:1}. This causes install/uninstall to fail on systems where /bin/sh is not bash. Change the shebang to #!/bin/bash or rewrite both scripts to use only POSIX shell.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@ee/maintained-apps/outputs/dialpad/darwin.json` around lines 19 - 20, The
scripts declare #!/bin/sh but use Bash-only features (e.g. [[ ]], local, <<<,
$EUID, parameter slicing) causing failures; update each script's shebang to
#!/bin/bash or refactor the Bash-specific constructs to POSIX-compliant
equivalents. Locate the Bash usages in functions like quit_and_track_application
and relaunch_application (uses [[ ]], local, $EUID), and in
expand_pkgid_and_map, remove_receipt_files, trash (uses <<<, local,
${target_file:1}, [[ ]]) and either change the top-line to #!/bin/bash or
systematically replace Bashisms (use POSIX test [, avoid local, replace
here-strings, use printf/awk for slicing, etc.) so the installer and uninstaller
run under /bin/sh-compatible shells.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 1, 2026

Script Diff Results

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

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

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

=== Install // 4f288bf9 -> d3e137fc ===

--- /tmp/old.4Dk8Wk	2026-05-01 02:05:12.462097844 +0000
+++ /tmp/new.xXWpk2	2026-05-01 02:05:12.462097844 +0000
@@ -94,8 +94,6 @@
 }
 
 
-# extract contents
-unzip "$INSTALLER_PATH" -d "$TMPDIR"
 # install pkg files
 quit_and_track_application 'com.electron.dialpad'
 sudo installer -pkg "$TMPDIR/dialpad.pkg" -target /

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

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

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

ee/maintained-apps/outputs/libreoffice/darwin.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/microsoft-edge/darwin.json

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

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

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

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
ee/maintained-apps/outputs/dialpad/darwin.json (1)

20-20: ⚠️ Potential issue | 🟡 Minor

Use $INSTALLER_PATH directly for more robust installer handling.

The script assumes the downloaded file is named dialpad.pkg, which is fragile. The zoom installer in the same repository uses the more robust pattern of passing $INSTALLER_PATH directly to the installer command, eliminating the filename assumption.

🔧 Proposed fix
-sudo installer -pkg "$TMPDIR/dialpad.pkg" -target /
+sudo installer -pkg "$INSTALLER_PATH" -target /

The TMPDIR variable can also be removed as it's no longer used:

-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/dialpad/darwin.json` at line 20, The installer
invocation is fragile because it hardcodes "$TMPDIR/dialpad.pkg"; update the
script to call installer with "$INSTALLER_PATH" directly (replace the sudo
installer -pkg "$TMPDIR/dialpad.pkg" -target / line with sudo installer -pkg
"$INSTALLER_PATH" -target / or just installer depending on current usage) and
remove the now-unused TMPDIR assignment; adjust nearby code that assumes TMPDIR
if any. Target locations: the installer invocation line and the TMPDIR variable
definition near the top, within the same script that defines
quit_and_track_application and relaunch_application.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@ee/maintained-apps/outputs/dialpad/darwin.json`:
- Line 20: The installer invocation is fragile because it hardcodes
"$TMPDIR/dialpad.pkg"; update the script to call installer with
"$INSTALLER_PATH" directly (replace the sudo installer -pkg
"$TMPDIR/dialpad.pkg" -target / line with sudo installer -pkg "$INSTALLER_PATH"
-target / or just installer depending on current usage) and remove the
now-unused TMPDIR assignment; adjust nearby code that assumes TMPDIR if any.
Target locations: the installer invocation line and the TMPDIR variable
definition near the top, within the same script that defines
quit_and_track_application and relaunch_application.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: ba9f97e6-d49b-4efe-9c8c-fc61af15f4fe

📥 Commits

Reviewing files that changed from the base of the PR and between 1035479 and ec9536c.

📒 Files selected for processing (2)
  • ee/maintained-apps/inputs/homebrew/dialpad.json
  • ee/maintained-apps/outputs/dialpad/darwin.json
✅ Files skipped from review due to trivial changes (1)
  • ee/maintained-apps/inputs/homebrew/dialpad.json

@allenhouchins allenhouchins merged commit 81e6f11 into main May 1, 2026
14 checks passed
@allenhouchins allenhouchins deleted the fma-2604302128 branch May 1, 2026 02:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants