Skip to content

Commit 6ee299d

Browse files
Add Spotify as macOS Fleet-maintained app (#35336)
Introduces Spotify as a maintained app for macOS, including input and output JSON definitions, install/uninstall scripts, an icon component, and the app icon image. Updates the apps.json to list Spotify with relevant metadata and description. <!-- Add the related story/sub-task/bug number, like Resolves #123, or remove if NA --> **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))
1 parent d519a9c commit 6ee299d

File tree

5 files changed

+50
-0
lines changed

5 files changed

+50
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"name": "Spotify",
3+
"unique_identifier": "com.spotify.client",
4+
"token": "spotify",
5+
"installer_format": "dmg",
6+
"slug": "spotify/darwin",
7+
"default_categories": ["Productivity"]
8+
}

ee/maintained-apps/outputs/apps.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,13 @@
351351
"unique_identifier": "Slack",
352352
"description": "Slack is a team communication and collaboration software for modern workplaces."
353353
},
354+
{
355+
"name": "Spotify",
356+
"slug": "spotify/darwin",
357+
"platform": "darwin",
358+
"unique_identifier": "com.spotify.client",
359+
"description": "Spotify is a music streaming app."
360+
},
354361
{
355362
"name": "Sublime Text",
356363
"slug": "sublime-text/darwin",
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"versions": [
3+
{
4+
"version": "1.2.76.298",
5+
"queries": {
6+
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.spotify.client';"
7+
},
8+
"installer_url": "https://download.scdn.co/SpotifyARM64.dmg",
9+
"install_script_ref": "9b6cfba3",
10+
"uninstall_script_ref": "e81cd8fe",
11+
"sha256": "no_check",
12+
"default_categories": [
13+
"Productivity"
14+
]
15+
}
16+
],
17+
"refs": {
18+
"9b6cfba3": "#!/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\u003e/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 \u0026\u0026 \"$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 \u003c timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" \u003e/dev/null 2\u003e\u00261; then\n if ! pgrep -f \"$bundle_id\" \u003e/dev/null 2\u003e\u00261; 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.spotify.client'\nif [ -d \"$APPDIR/Spotify.app\" ]; then\n\tsudo mv \"$APPDIR/Spotify.app\" \"$TMPDIR/Spotify.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Spotify.app\" \"$APPDIR\"\n",
19+
"e81cd8fe": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil \u003c\u003c\u003c \"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 if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2\u003e/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 \u0026\u0026 \"$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 \u003c timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" \u003e/dev/null 2\u003e\u00261; then\n if ! pgrep -f \"$bundle_id\" \u003e/dev/null 2\u003e\u00261; 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\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2\u003e/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\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_launchctl_service '*.spotify.client.*'\nremove_launchctl_service 'com.spotify.client.startuphelper'\nremove_launchctl_service 'com.spotify.webhelper'\nquit_application 'com.spotify.client'\nsudo rm -rf \"$APPDIR/Spotify.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.spotify.client.startuphelper.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Spotify'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.spotify.client'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.spotify.client.helper'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.spotify.client.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.spotify.client'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.spotify.client.helper'\ntrash $LOGGED_IN_USER '~/Library/Logs/Spotify'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.spotify.client.helper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.spotify.client.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.spotify.client.savedState'\n"
20+
}
21+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import * as React from "react";
2+
3+
import type { SVGProps } from "react";
4+
5+
const Spotify = (props: SVGProps<SVGSVGElement>) => (
6+
<svg xmlns="http://www.w3.org/2000/svg" width={32} height={32} {...props}>
7+
<image
8+
width={32}
9+
height={32}
10+
href="data:image/png;base64,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"
11+
/>
12+
</svg>
13+
);
14+
export default Spotify;
4.11 KB
Loading

0 commit comments

Comments
 (0)