From 8f4ca430fb4f269cabd7c7704e05abff83a3e266 Mon Sep 17 00:00:00 2001 From: Allen Houchins <32207388+allenhouchins@users.noreply.github.com> Date: Wed, 19 Nov 2025 18:48:00 -0600 Subject: [PATCH] Add IntelliJ IDEA CE and Ultimate as macOS FMAs (#36026) Introduces maintained app definitions, install/uninstall scripts, and icons for IntelliJ IDEA Community Edition and Ultimate. Updates the app catalog and frontend assets to include both editions. **Related issue:** Resolves # # Checklist for submitter If some of the following don't apply, delete the relevant line. - [ ] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files) for more information. - [ ] Input data is properly validated, `SELECT *` is avoided, SQL injection is prevented (using placeholders for values in statements) - [ ] If paths of existing endpoints are modified without backwards compatibility, checked the frontend/CLI for any necessary changes ## Testing - [ ] Added/updated automated tests - [ ] Where appropriate, [automated tests simulate multiple hosts and test for host isolation](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/reference/patterns-backend.md#unit-testing) (updates to one hosts's records do not affect another) - [ ] QA'd all new/changed functionality manually For unreleased bug fixes in a release candidate, one of: - [ ] Confirmed that the fix is not expected to adversely impact load test results - [ ] Alerted the release DRI if additional load testing is needed ## Database migrations - [ ] Checked schema for all modified table for columns that will auto-update timestamps during migration. - [ ] Confirmed that updating the timestamps is acceptable, and will not cause unwanted side effects. - [ ] Ensured the correct collation is explicitly set for character columns (`COLLATE utf8mb4_unicode_ci`). ## New Fleet configuration settings - [ ] Setting(s) is/are explicitly excluded from GitOps If you didn't check the box above, follow this checklist for GitOps-enabled settings: - [ ] Verified that the setting is exported via `fleetctl generate-gitops` - [ ] Verified the setting is documented in a separate PR to [the GitOps documentation](https://github.com/fleetdm/fleet/blob/main/docs/Configuration/yaml-files.md#L485) - [ ] Verified that the setting is cleared on the server if it is not supplied in a YAML file (or that it is documented as being optional) - [ ] Verified that any relevant UI is disabled when GitOps mode is enabled ## fleetd/orbit/Fleet Desktop - [ ] Verified compatibility with the latest released version of Fleet (see [Must rule](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/workflows/fleetd-development-and-release-strategy.md)) - [ ] If the change applies to only one platform, confirmed that `runtime.GOOS` is used as needed to isolate changes - [ ] Verified that fleetd runs on macOS, Linux and Windows - [ ] Verified auto-update works from the released version of component to the new version (see [tools/tuf/test](../tools/tuf/test/README.md)) --- .../inputs/homebrew/intellij-idea-ce.json | 8 +++++++ .../inputs/homebrew/intellij-idea.json | 8 +++++++ ee/maintained-apps/outputs/apps.json | 14 ++++++++++++ .../outputs/intellij-idea-ce/darwin.json | 21 ++++++++++++++++++ .../outputs/intellij-idea/darwin.json | 21 ++++++++++++++++++ .../components/icons/IntelliJIdea.tsx | 14 ++++++++++++ .../components/icons/IntelliJIdeaCe.tsx | 14 ++++++++++++ .../app-icon-intellij-idea-60x60@2x.png | Bin 0 -> 12980 bytes .../app-icon-intellij-idea-ce-60x60@2x.png | Bin 0 -> 13442 bytes 9 files changed, 100 insertions(+) create mode 100644 ee/maintained-apps/inputs/homebrew/intellij-idea-ce.json create mode 100644 ee/maintained-apps/inputs/homebrew/intellij-idea.json create mode 100644 ee/maintained-apps/outputs/intellij-idea-ce/darwin.json create mode 100644 ee/maintained-apps/outputs/intellij-idea/darwin.json create mode 100644 frontend/pages/SoftwarePage/components/icons/IntelliJIdea.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/IntelliJIdeaCe.tsx create mode 100644 website/assets/images/app-icon-intellij-idea-60x60@2x.png create mode 100644 website/assets/images/app-icon-intellij-idea-ce-60x60@2x.png diff --git a/ee/maintained-apps/inputs/homebrew/intellij-idea-ce.json b/ee/maintained-apps/inputs/homebrew/intellij-idea-ce.json new file mode 100644 index 0000000000..c7d190a0b0 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/intellij-idea-ce.json @@ -0,0 +1,8 @@ +{ + "name": "IntelliJ IDEA CE", + "unique_identifier": "com.jetbrains.intellij.ce", + "token": "intellij-idea-ce", + "installer_format": "dmg", + "slug": "intellij-idea-ce/darwin", + "default_categories": ["Developer tools"] +} diff --git a/ee/maintained-apps/inputs/homebrew/intellij-idea.json b/ee/maintained-apps/inputs/homebrew/intellij-idea.json new file mode 100644 index 0000000000..af06bad583 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/intellij-idea.json @@ -0,0 +1,8 @@ +{ + "name": "IntelliJ IDEA Ultimate", + "unique_identifier": "com.jetbrains.intellij", + "token": "intellij-idea", + "installer_format": "dmg", + "slug": "intellij-idea/darwin", + "default_categories": ["Developer tools"] +} diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 6315f67eef..e420956d25 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -260,6 +260,20 @@ "unique_identifier": "com.DigiDNA.iMazingProfileEditorMac", "description": "iMazing Profile Editor is an app for creating and editing Apple configuration profiles." }, + { + "name": "IntelliJ IDEA CE", + "slug": "intellij-idea-ce/darwin", + "platform": "darwin", + "unique_identifier": "com.jetbrains.intellij.ce", + "description": "IntelliJ IDEA CE is a community edition IDE for Java development by JetBrains." + }, + { + "name": "IntelliJ IDEA Ultimate", + "slug": "intellij-idea/darwin", + "platform": "darwin", + "unique_identifier": "com.jetbrains.intellij", + "description": "IntelliJ IDEA Ultimate is a Java IDE by JetBrains." + }, { "name": "Company Portal", "slug": "intune-company-portal/darwin", diff --git a/ee/maintained-apps/outputs/intellij-idea-ce/darwin.json b/ee/maintained-apps/outputs/intellij-idea-ce/darwin.json new file mode 100644 index 0000000000..6943198dbc --- /dev/null +++ b/ee/maintained-apps/outputs/intellij-idea-ce/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "2025.2.4", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.jetbrains.intellij.ce';" + }, + "installer_url": "https://download.jetbrains.com/idea/ideaIC-2025.2.4-aarch64.dmg", + "install_script_ref": "c9b80231", + "uninstall_script_ref": "e71c8e64", + "sha256": "c4e1ae63bf8683d12d307d6eca13f9ddb688df932608eb258a1c66ee5d45b6c3", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "c9b80231": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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\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_application 'com.jetbrains.intellij.ce'\nif [ -d \"$APPDIR/IntelliJ IDEA CE.app\" ]; then\n\tsudo mv \"$APPDIR/IntelliJ IDEA CE.app\" \"$TMPDIR/IntelliJ IDEA CE.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/IntelliJ IDEA CE.app\" \"$APPDIR\"\n", + "e71c8e64": "#!/bin/sh\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/IntelliJ IDEA CE.app\"\nsudo rm -rf 'idea-ce'\ntrash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/IdeaIC2025.2'\ntrash $LOGGED_IN_USER '~/Library/Caches/JetBrains/IdeaIC2025.2'\ntrash $LOGGED_IN_USER '~/Library/Logs/JetBrains/IdeaIC2025.2'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.intellij.ce.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.intellij.ce.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/intellij-idea/darwin.json b/ee/maintained-apps/outputs/intellij-idea/darwin.json new file mode 100644 index 0000000000..17e4112d7f --- /dev/null +++ b/ee/maintained-apps/outputs/intellij-idea/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "2025.2.4", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.jetbrains.intellij';" + }, + "installer_url": "https://download.jetbrains.com/idea/ideaIU-2025.2.4-aarch64.dmg", + "install_script_ref": "f3bbbc1e", + "uninstall_script_ref": "582cd6de", + "sha256": "2b5504f86c6969ed0564483b6886390cfc1bb1b3ab99e658881d60edf57c481f", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "582cd6de": "#!/bin/sh\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/IntelliJ IDEA.app\"\nsudo rm -rf 'idea'\ntrash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/IntelliJIdea2025.2'\ntrash $LOGGED_IN_USER '~/Library/Caches/JetBrains/IntelliJIdea2025.2'\ntrash $LOGGED_IN_USER '~/Library/Logs/JetBrains/IntelliJIdea2025.2'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.intellij.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/IntelliJIdea2025.2'\ntrash $LOGGED_IN_USER '~/Library/Preferences/jetbrains.idea.*.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.intellij.savedState'\n", + "f3bbbc1e": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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\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_application 'com.jetbrains.intellij'\nif [ -d \"$APPDIR/IntelliJ IDEA.app\" ]; then\n\tsudo mv \"$APPDIR/IntelliJ IDEA.app\" \"$TMPDIR/IntelliJ IDEA.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/IntelliJ IDEA.app\" \"$APPDIR\"\n" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/IntelliJIdea.tsx b/frontend/pages/SoftwarePage/components/icons/IntelliJIdea.tsx new file mode 100644 index 0000000000..5f806388c9 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/IntelliJIdea.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const IntelliJIdea = (props: SVGProps) => ( + + + +); +export default IntelliJIdea; diff --git a/frontend/pages/SoftwarePage/components/icons/IntelliJIdeaCe.tsx b/frontend/pages/SoftwarePage/components/icons/IntelliJIdeaCe.tsx new file mode 100644 index 0000000000..e0094c1334 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/IntelliJIdeaCe.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const IntelliJIdeaCe = (props: SVGProps) => ( + + + +); +export default IntelliJIdeaCe; diff --git a/website/assets/images/app-icon-intellij-idea-60x60@2x.png b/website/assets/images/app-icon-intellij-idea-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..adaa0346eee8f191b85277c1bf9107ff8ace548a GIT binary patch literal 12980 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 G5Bxt{-q6Yb literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-intellij-idea-ce-60x60@2x.png b/website/assets/images/app-icon-intellij-idea-ce-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6e232884b7ee14ed87b479a0e8364ae6f9001041 GIT binary patch literal 13442 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