Skip to content

Add macOS Fleet-maintained apps (G) - #47232

Merged
allenhouchins merged 2 commits into
mainfrom
new-mac-fmas-g
Jun 9, 2026
Merged

Add macOS Fleet-maintained apps (G)#47232
allenhouchins merged 2 commits into
mainfrom
new-mac-fmas-g

Conversation

@allenhouchins

@allenhouchins allenhouchins commented Jun 9, 2026

Copy link
Copy Markdown
Member

Adds 22 Fleet-maintained app(s) whose cask token starts with 'G': inputs, outputs, app icons (TSX + website PNG), and the matching index.ts and apps.json entries.

Summary by CodeRabbit

  • New Features
    • Added support for 22 new macOS applications through Homebrew, including Garmin Express, Godot Engine, GitHub Copilot for Xcode, and others.
    • Added UI icons for all newly supported applications.
    • Enhanced application discovery and management for macOS users.

Adds 22 Fleet-maintained app(s) whose cask token starts with 'G':
inputs, outputs, app icons (TSX + website PNG), and the matching
index.ts and apps.json entries. Split out from #47121.
fleet-release
fleet-release previously approved these changes Jun 9, 2026
@codecov

codecov Bot commented Jun 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 21 lines in your changes missing coverage. Please review.
✅ Project coverage is 67.14%. Comparing base (f7c9331) to head (3d098bb).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
...es/SoftwarePage/components/icons/GarminExpress.tsx 50.00% 1 Missing ⚠️
...end/pages/SoftwarePage/components/icons/Gather.tsx 50.00% 1 Missing ⚠️
...d/pages/SoftwarePage/components/icons/Gdevelop.tsx 50.00% 1 Missing ⚠️
...tend/pages/SoftwarePage/components/icons/Geany.tsx 50.00% 1 Missing ⚠️
.../pages/SoftwarePage/components/icons/Geekbench.tsx 50.00% 1 Missing ⚠️
...tend/pages/SoftwarePage/components/icons/Gephi.tsx 50.00% 1 Missing ⚠️
.../pages/SoftwarePage/components/icons/Gitfinder.tsx 50.00% 1 Missing ⚠️
...arePage/components/icons/GithubCopilotForXcode.tsx 50.00% 1 Missing ⚠️
...end/pages/SoftwarePage/components/icons/Gitify.tsx 50.00% 1 Missing ⚠️
...d/pages/SoftwarePage/components/icons/GitupApp.tsx 50.00% 1 Missing ⚠️
... and 11 more
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #47232      +/-   ##
==========================================
- Coverage   67.14%   67.14%   -0.01%     
==========================================
  Files        3024     3045      +21     
  Lines      226564   226606      +42     
  Branches    11868    11867       -1     
==========================================
+ Hits       152129   152150      +21     
- Misses      60695    60717      +22     
+ Partials    13740    13739       -1     
Flag Coverage Δ
frontend 57.84% <50.00%> (-0.02%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@allenhouchins
allenhouchins marked this pull request as ready for review June 9, 2026 21:36
@allenhouchins
allenhouchins requested a review from a team as a code owner June 9, 2026 21:36
Copilot AI review requested due to automatic review settings June 9, 2026 21:36
@fleet-release
fleet-release requested a review from eashaw June 9, 2026 21:36
@allenhouchins
allenhouchins merged commit 5a9f8fc into main Jun 9, 2026
29 of 30 checks passed
@allenhouchins
allenhouchins deleted the new-mac-fmas-g branch June 9, 2026 21:36
@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 95983673-25e3-4597-aadc-e379f4f191b5

📥 Commits

Reviewing files that changed from the base of the PR and between f7c9331 and 3d098bb.

⛔ Files ignored due to path filters (22)
  • website/assets/images/app-icon-garmin-express-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-gather-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-gdevelop-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-geany-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-geekbench-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-gemini-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-gephi-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-gitfinder-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-github-copilot-for-xcode-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-gitify-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-gitup-app-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-glyphs-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-go2shell-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-godot-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-godspeed-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-gog-galaxy-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-goodsync-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-google-earth-pro-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-gpodder-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-grandperspective-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-grids-60x60@2x.png is excluded by !**/*.png
  • website/assets/images/app-icon-gyazo-60x60@2x.png is excluded by !**/*.png
📒 Files selected for processing (67)
  • ee/maintained-apps/inputs/homebrew/garmin-express.json
  • ee/maintained-apps/inputs/homebrew/gather.json
  • ee/maintained-apps/inputs/homebrew/gdevelop.json
  • ee/maintained-apps/inputs/homebrew/geany.json
  • ee/maintained-apps/inputs/homebrew/geekbench.json
  • ee/maintained-apps/inputs/homebrew/gemini.json
  • ee/maintained-apps/inputs/homebrew/gephi.json
  • ee/maintained-apps/inputs/homebrew/gitfinder.json
  • ee/maintained-apps/inputs/homebrew/github-copilot-for-xcode.json
  • ee/maintained-apps/inputs/homebrew/gitify.json
  • ee/maintained-apps/inputs/homebrew/gitup-app.json
  • ee/maintained-apps/inputs/homebrew/glyphs.json
  • ee/maintained-apps/inputs/homebrew/go2shell.json
  • ee/maintained-apps/inputs/homebrew/godot.json
  • ee/maintained-apps/inputs/homebrew/godspeed.json
  • ee/maintained-apps/inputs/homebrew/gog-galaxy.json
  • ee/maintained-apps/inputs/homebrew/goodsync.json
  • ee/maintained-apps/inputs/homebrew/google-earth-pro.json
  • ee/maintained-apps/inputs/homebrew/gpodder.json
  • ee/maintained-apps/inputs/homebrew/grandperspective.json
  • ee/maintained-apps/inputs/homebrew/grids.json
  • ee/maintained-apps/inputs/homebrew/gyazo.json
  • ee/maintained-apps/outputs/apps.json
  • ee/maintained-apps/outputs/garmin-express/darwin.json
  • ee/maintained-apps/outputs/gather/darwin.json
  • ee/maintained-apps/outputs/gdevelop/darwin.json
  • ee/maintained-apps/outputs/geany/darwin.json
  • ee/maintained-apps/outputs/geekbench/darwin.json
  • ee/maintained-apps/outputs/gemini/darwin.json
  • ee/maintained-apps/outputs/gephi/darwin.json
  • ee/maintained-apps/outputs/gitfinder/darwin.json
  • ee/maintained-apps/outputs/github-copilot-for-xcode/darwin.json
  • ee/maintained-apps/outputs/gitify/darwin.json
  • ee/maintained-apps/outputs/gitup-app/darwin.json
  • ee/maintained-apps/outputs/glyphs/darwin.json
  • ee/maintained-apps/outputs/go2shell/darwin.json
  • ee/maintained-apps/outputs/godot/darwin.json
  • ee/maintained-apps/outputs/godspeed/darwin.json
  • ee/maintained-apps/outputs/gog-galaxy/darwin.json
  • ee/maintained-apps/outputs/goodsync/darwin.json
  • ee/maintained-apps/outputs/google-earth-pro/darwin.json
  • ee/maintained-apps/outputs/gpodder/darwin.json
  • ee/maintained-apps/outputs/grandperspective/darwin.json
  • ee/maintained-apps/outputs/grids/darwin.json
  • ee/maintained-apps/outputs/gyazo/darwin.json
  • frontend/pages/SoftwarePage/components/icons/GarminExpress.tsx
  • frontend/pages/SoftwarePage/components/icons/Gather.tsx
  • frontend/pages/SoftwarePage/components/icons/Gdevelop.tsx
  • frontend/pages/SoftwarePage/components/icons/Geany.tsx
  • frontend/pages/SoftwarePage/components/icons/Geekbench.tsx
  • frontend/pages/SoftwarePage/components/icons/Gephi.tsx
  • frontend/pages/SoftwarePage/components/icons/Gitfinder.tsx
  • frontend/pages/SoftwarePage/components/icons/GithubCopilotForXcode.tsx
  • frontend/pages/SoftwarePage/components/icons/Gitify.tsx
  • frontend/pages/SoftwarePage/components/icons/GitupApp.tsx
  • frontend/pages/SoftwarePage/components/icons/Glyphs.tsx
  • frontend/pages/SoftwarePage/components/icons/Go2Shell.tsx
  • frontend/pages/SoftwarePage/components/icons/Godot.tsx
  • frontend/pages/SoftwarePage/components/icons/Godspeed.tsx
  • frontend/pages/SoftwarePage/components/icons/GogGalaxy.tsx
  • frontend/pages/SoftwarePage/components/icons/Goodsync.tsx
  • frontend/pages/SoftwarePage/components/icons/GoogleEarthPro.tsx
  • frontend/pages/SoftwarePage/components/icons/Gpodder.tsx
  • frontend/pages/SoftwarePage/components/icons/Grandperspective.tsx
  • frontend/pages/SoftwarePage/components/icons/Grids.tsx
  • frontend/pages/SoftwarePage/components/icons/Gyazo.tsx
  • frontend/pages/SoftwarePage/components/icons/index.ts

Walkthrough

This PR adds support for 23 new macOS applications (with names starting with "G") to Fleet's maintained-app catalog. It introduces Homebrew input metadata files defining each app's identifier and distribution format; corresponding output files with version-specific installer metadata and bash scripts for installation, uninstallation, and process management; entries in the central app registry; and frontend React icon components that are wired into the application name-to-icon mapping for UI rendering.

Possibly related PRs

  • fleetdm/fleet#47192: Extends frontend/pages/SoftwarePage/components/icons with new SVG icon components and updates SOFTWARE_NAME_TO_ICON_MAP.
  • fleetdm/fleet#47010: Adds icon registrations to the same SOFTWARE_NAME_TO_ICON_MAP in frontend/pages/SoftwarePage/components/icons/index.ts.
  • fleetdm/fleet#46734: Additive FMA entries that update the same icon registry and introduce per-app metadata files for new macOS applications.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch new-mac-fmas-g

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 and usage tips.

Copilot AI 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.

Pull request overview

This PR expands Fleet’s macOS Fleet-maintained apps catalog for casks whose token starts with “G”, adding corresponding app manifests (inputs/outputs), Software page icons, and catalog entries so these apps show up correctly in the UI and website-generated software catalog data.

Changes:

  • Added/updated Software page icon components and extended the name→icon mapping for the new “G*” apps.
  • Added new Fleet-maintained app manifests under ee/maintained-apps/outputs/**/darwin.json (with install/uninstall script refs).
  • Registered the new apps in ee/maintained-apps/outputs/apps.json and added matching ee/maintained-apps/inputs/homebrew/*.json inputs.

Reviewed changes

Copilot reviewed 67 out of 89 changed files in this pull request and generated 12 comments.

Show a summary per file
File Description
frontend/pages/SoftwarePage/components/icons/index.ts Adds imports and software-name-to-icon map entries for new “G*” apps.
frontend/pages/SoftwarePage/components/icons/Gyazo.tsx Adds Gyazo icon component.
frontend/pages/SoftwarePage/components/icons/Glyphs.tsx Adds Glyphs icon component.
frontend/pages/SoftwarePage/components/icons/GitupApp.tsx Adds GitUp icon component.
frontend/pages/SoftwarePage/components/icons/Gitify.tsx Adds Gitify icon component.
ee/maintained-apps/outputs/gyazo/darwin.json Adds Gyazo macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/grids/darwin.json Adds Grids macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/grandperspective/darwin.json Adds GrandPerspective macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/gpodder/darwin.json Adds gPodder macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/google-earth-pro/darwin.json Adds Google Earth Pro macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/goodsync/darwin.json Adds GoodSync macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/gog-galaxy/darwin.json Adds GOG Galaxy macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/godspeed/darwin.json Adds Godspeed macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/godot/darwin.json Adds Godot macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/go2shell/darwin.json Adds Go2Shell macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/glyphs/darwin.json Adds Glyphs macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/gitup-app/darwin.json Adds GitUp macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/gitify/darwin.json Adds Gitify macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/github-copilot-for-xcode/darwin.json Adds GitHub Copilot for Xcode macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/gitfinder/darwin.json Adds GitFinder macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/gephi/darwin.json Adds Gephi macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/gemini/darwin.json Adds Gemini (MacPaw) macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/geekbench/darwin.json Adds Geekbench macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/geany/darwin.json Adds Geany macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/gdevelop/darwin.json Adds GDevelop macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/gather/darwin.json Adds Gather Town macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/garmin-express/darwin.json Adds Garmin Express macOS maintained app output (version, queries, scripts).
ee/maintained-apps/outputs/apps.json Registers the new apps in the maintained-apps catalog list.
ee/maintained-apps/inputs/homebrew/gyazo.json Adds Homebrew input for Gyazo.
ee/maintained-apps/inputs/homebrew/grids.json Adds Homebrew input for Grids.
ee/maintained-apps/inputs/homebrew/grandperspective.json Adds Homebrew input for GrandPerspective.
ee/maintained-apps/inputs/homebrew/gpodder.json Adds Homebrew input for gPodder.
ee/maintained-apps/inputs/homebrew/google-earth-pro.json Adds Homebrew input for Google Earth Pro.
ee/maintained-apps/inputs/homebrew/goodsync.json Adds Homebrew input for GoodSync.
ee/maintained-apps/inputs/homebrew/gog-galaxy.json Adds Homebrew input for GOG Galaxy.
ee/maintained-apps/inputs/homebrew/godspeed.json Adds Homebrew input for Godspeed.
ee/maintained-apps/inputs/homebrew/godot.json Adds Homebrew input for Godot.
ee/maintained-apps/inputs/homebrew/go2shell.json Adds Homebrew input for Go2Shell.
ee/maintained-apps/inputs/homebrew/glyphs.json Adds Homebrew input for Glyphs.
ee/maintained-apps/inputs/homebrew/gitup-app.json Adds Homebrew input for GitUp.
ee/maintained-apps/inputs/homebrew/gitify.json Adds Homebrew input for Gitify.
ee/maintained-apps/inputs/homebrew/github-copilot-for-xcode.json Adds Homebrew input for GitHub Copilot for Xcode.
ee/maintained-apps/inputs/homebrew/gitfinder.json Adds Homebrew input for GitFinder.
ee/maintained-apps/inputs/homebrew/gephi.json Adds Homebrew input for Gephi.
ee/maintained-apps/inputs/homebrew/gemini.json Adds Homebrew input for Gemini (MacPaw).
ee/maintained-apps/inputs/homebrew/geekbench.json Adds Homebrew input for Geekbench.
ee/maintained-apps/inputs/homebrew/geany.json Adds Homebrew input for Geany.
ee/maintained-apps/inputs/homebrew/gdevelop.json Adds Homebrew input for GDevelop.
ee/maintained-apps/inputs/homebrew/gather.json Adds Homebrew input for Gather Town.
ee/maintained-apps/inputs/homebrew/garmin-express.json Adds Homebrew input for Garmin Express.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +1608 to +1612
"name": "Gemini",
"slug": "gemini/darwin",
"platform": "darwin",
"unique_identifier": "com.macpaw.site.Gemini2",
"description": "Gemini is a disk space cleaner that finds and deletes duplicated and similar files."
"slug": "garmin-express/darwin",
"platform": "darwin",
"unique_identifier": "com.garmin.renu.client",
"description": "Garmin Express is an update maps and software, sync with Garmin Connect and register your device."
"slug": "github-copilot-for-xcode/darwin",
"platform": "darwin",
"unique_identifier": "com.github.CopilotForXcode",
"description": "GitHub Copilot for Xcode is a xcode extension for GitHub Copilot."
"slug": "gitify/darwin",
"platform": "darwin",
"unique_identifier": "com.electron.gitify",
"description": "Gitify is a GitHub notifications on your menu bar."
"slug": "go2shell/darwin",
"platform": "darwin",
"unique_identifier": "com.zipzapmac.Go2Shell",
"description": "Go2Shell is an opens a terminal window to the current directory in Finder."
@@ -0,0 +1,10 @@
{
"name": "Gemini",
}
],
"refs": {
"0ee76fb2": "#!/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/Gemini 2.app\"\nsudo rmdir '~/.gemini'\ntrash $LOGGED_IN_USER '/Users/Shared/Gemini 2'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Gemini*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.macpaw.site.Gemini*'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.macpaw.site.Gemini*.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Logs/com.macpaw.site.Gemini*'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.macpaw.site.Gemini*'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.macpaw.site.Gemini*'\n",
],
"refs": {
"2eef54ed": "#!/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.sourceforge.grandperspectiv'\nif [ -d \"$APPDIR/GrandPerspective.app\" ]; then\n\tsudo mv \"$APPDIR/GrandPerspective.app\" \"$TMPDIR/GrandPerspective.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/GrandPerspective.app\" \"$APPDIR\"\nrelaunch_application 'net.sourceforge.grandperspectiv'\n",
"9cc63336": "#!/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/GrandPerspective.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/net.courceforge.grandperspectiv'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/net.sourceforge.grandperspectiv.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Containers/net.sourceforge.grandperspectiv'\ntrash $LOGGED_IN_USER '~/Library/Preferences/net.sourceforge.grandperspectiv.plist'\n"
}
],
"refs": {
"1a27516d": "#!/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/Geekbench 6.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/com.primatelabs.Geekbench6'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.primatelabs.Geekbench6'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.primatelabs.Geekbench6.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.primeatelabs.Geekbench6.savedState'\n",
Comment on lines +231 to 233
import Gitfinder from "./Gitfinder";
import GithubCopilotForXcode from "./GithubCopilotForXcode";
import GitHubDesktop from "./GitHubDesktop";
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