FMA - Another Redis Desktop Manager (#46495)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Another Redis Desktop Manager support has been added with full
installation, update, and uninstallation capabilities for both macOS and
Windows operating systems.
* Integrated application icon, branding, and user interface components
throughout the platform for easy identification and seamless
integration.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/46495?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Allen Houchins <32207388+allenhouchins@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
This commit is contained in:
Harrison Ravazzolo
2026-05-29 20:41:49 -05:00
committed by GitHub
co-authored by Allen Houchins coderabbitai[bot]
parent 3a0904cd79
commit ffb9d876a1
10 changed files with 191 additions and 0 deletions
@@ -0,0 +1,8 @@
{
"name": "Another Redis Desktop Manager",
"unique_identifier": "me.qii404.another-redis-desktop-manager",
"token": "another-redis-desktop-manager",
"installer_format": "dmg",
"slug": "another-redis-desktop-manager/darwin",
"default_categories": ["Developer tools"]
}
@@ -0,0 +1,13 @@
{
"name": "Another Redis Desktop Manager",
"slug": "another-redis-desktop-manager/windows",
"package_identifier": "qishibo.AnotherRedisDesktopManager",
"unique_identifier": "Another Redis Desktop Manager",
"fuzzy_match_name": true,
"installer_arch": "x64",
"installer_type": "exe",
"installer_scope": "machine",
"default_categories": ["Developer tools"],
"install_script_path": "ee/maintained-apps/inputs/winget/scripts/another-redis-desktop-manager_install.ps1",
"uninstall_script_path": "ee/maintained-apps/inputs/winget/scripts/another-redis-desktop-manager_uninstall.ps1"
}
@@ -0,0 +1,21 @@
$exeFilePath = "${env:INSTALLER_PATH}"
try {
$processOptions = @{
FilePath = "$exeFilePath"
ArgumentList = "/S", "/ALLUSERS"
PassThru = $true
Wait = $true
}
$process = Start-Process @processOptions
$exitCode = $process.ExitCode
Write-Host "Install exit code: $exitCode"
Exit $exitCode
} catch {
Write-Host "Error: $_"
Exit 1
}
@@ -0,0 +1,75 @@
$displayNameLike = "Another Redis Desktop Manager*"
$publisher = "Another"
$paths = @(
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',
'HKCU:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall'
)
$uninstall = $null
foreach ($p in $paths) {
$items = Get-ItemProperty "$p\*" -ErrorAction SilentlyContinue | Where-Object {
$_.DisplayName -like $displayNameLike -and $_.Publisher -like "$publisher*"
}
if ($items) { $uninstall = $items | Select-Object -First 1; break }
}
if (-not $uninstall -or (-not $uninstall.UninstallString -and -not $uninstall.QuietUninstallString)) {
Write-Host "Uninstall entry not found"
Exit 0
}
Stop-Process -Name "Another Redis Desktop Manager" -Force -ErrorAction SilentlyContinue
$uninstallCommand = if ($uninstall.QuietUninstallString) {
$uninstall.QuietUninstallString
} else {
$uninstall.UninstallString
}
$exePath = ""
$existingArgs = ""
if ($uninstallCommand -match '^\s*"([^"]+)"\s*(.*)$') {
$exePath = $matches[1]
$existingArgs = $matches[2].Trim()
} elseif ($uninstallCommand -match '(?i)^\s*(.+?\.exe)\s*(.*)$') {
$exePath = $matches[1]
$existingArgs = $matches[2].Trim()
} elseif ($uninstallCommand -match '^\s*(\S+)\s*(.*)$') {
$exePath = $matches[1]
$existingArgs = $matches[2].Trim()
} else {
Throw "Could not parse uninstall string: $uninstallCommand"
}
if ($existingArgs -notmatch '\b/S\b') {
$existingArgs = ("$existingArgs /S").Trim()
}
# Mirror the install: ensure all-users uninstall so the machine-scope ARP
# entry under HKLM is removed (not just the calling user's HKCU view).
if ($existingArgs -notmatch '(?i)/ALLUSERS') {
$existingArgs = ("$existingArgs /ALLUSERS").Trim()
}
Write-Host "Uninstall command: $exePath"
Write-Host "Uninstall args: $existingArgs"
try {
$processOptions = @{
FilePath = $exePath
ArgumentList = $existingArgs
NoNewWindow = $true
PassThru = $true
Wait = $true
}
$process = Start-Process @processOptions
$exitCode = $process.ExitCode
Write-Host "Uninstall exit code: $exitCode"
Exit $exitCode
} catch {
Write-Host "Error running uninstaller: $_"
Exit 1
}
@@ -0,0 +1,22 @@
{
"versions": [
{
"version": "1.7.1",
"queries": {
"exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'me.qii404.another-redis-desktop-manager';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'me.qii404.another-redis-desktop-manager' AND version_compare(bundle_short_version, '1.7.1') < 0);"
},
"installer_url": "https://github.com/qishibo/AnotherRedisDesktopManager/releases/download/v1.7.1/Another-Redis-Desktop-Manager-mac-1.7.1-arm64.dmg",
"install_script_ref": "9ad9a271",
"uninstall_script_ref": "9e4bc4d1",
"sha256": "1833e153cd7d9c66cc6d88ec1448b081dfeb5c122c3c65bcae47be1c4d760235",
"default_categories": [
"Developer tools"
]
}
],
"refs": {
"9ad9a271": "#!/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)\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_and_track_application 'me.qii404.another-redis-desktop-manager'\nif [ -d \"$APPDIR/Another Redis Desktop Manager.app\" ]; then\n\tsudo mv \"$APPDIR/Another Redis Desktop Manager.app\" \"$TMPDIR/Another Redis Desktop Manager.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Another Redis Desktop Manager.app\" \"$APPDIR\"\nrelaunch_application 'me.qii404.another-redis-desktop-manager'\n",
"9e4bc4d1": "#!/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 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/Another Redis Desktop Manager.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/another-redis-desktop-manager'\ntrash $LOGGED_IN_USER '~/Library/Preferences/me.qii404.another-redis-desktop-manager.plist'\n"
}
}
@@ -0,0 +1,22 @@
{
"versions": [
{
"version": "1.7.1",
"queries": {
"exists": "SELECT 1 FROM programs WHERE name LIKE 'Another Redis Desktop Manager %' AND publisher = 'Another';",
"patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Another Redis Desktop Manager %' AND publisher = 'Another' AND version_compare(version, '1.7.1') < 0);"
},
"installer_url": "https://github.com/qishibo/AnotherRedisDesktopManager/releases/download/v1.7.1/Another-Redis-Desktop-Manager-win-1.7.1-x64.exe",
"install_script_ref": "a37c96e2",
"uninstall_script_ref": "a39761e0",
"sha256": "563ee788d1185c6cb8bd244c2532dd506e5e12ec1d77c41f0a645b5e21456c29",
"default_categories": [
"Developer tools"
]
}
],
"refs": {
"a37c96e2": "$exeFilePath = \"${env:INSTALLER_PATH}\"\n\ntry {\n\n$processOptions = @{\n FilePath = \"$exeFilePath\"\n ArgumentList = \"/S\", \"/ALLUSERS\"\n PassThru = $true\n Wait = $true\n}\n\n$process = Start-Process @processOptions\n$exitCode = $process.ExitCode\n\nWrite-Host \"Install exit code: $exitCode\"\nExit $exitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n",
"a39761e0": "$displayNameLike = \"Another Redis Desktop Manager*\"\n$publisher = \"Another\"\n\n$paths = @(\n 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall',\n 'HKLM:\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall',\n 'HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall',\n 'HKCU:\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall'\n)\n\n$uninstall = $null\nforeach ($p in $paths) {\n $items = Get-ItemProperty \"$p\\*\" -ErrorAction SilentlyContinue | Where-Object {\n $_.DisplayName -like $displayNameLike -and $_.Publisher -like \"$publisher*\"\n }\n if ($items) { $uninstall = $items | Select-Object -First 1; break }\n}\n\nif (-not $uninstall -or (-not $uninstall.UninstallString -and -not $uninstall.QuietUninstallString)) {\n Write-Host \"Uninstall entry not found\"\n Exit 0\n}\n\nStop-Process -Name \"Another Redis Desktop Manager\" -Force -ErrorAction SilentlyContinue\n\n$uninstallCommand = if ($uninstall.QuietUninstallString) {\n $uninstall.QuietUninstallString\n} else {\n $uninstall.UninstallString\n}\n\n$exePath = \"\"\n$existingArgs = \"\"\nif ($uninstallCommand -match '^\\s*\"([^\"]+)\"\\s*(.*)$') {\n $exePath = $matches[1]\n $existingArgs = $matches[2].Trim()\n} elseif ($uninstallCommand -match '(?i)^\\s*(.+?\\.exe)\\s*(.*)$') {\n $exePath = $matches[1]\n $existingArgs = $matches[2].Trim()\n} elseif ($uninstallCommand -match '^\\s*(\\S+)\\s*(.*)$') {\n $exePath = $matches[1]\n $existingArgs = $matches[2].Trim()\n} else {\n Throw \"Could not parse uninstall string: $uninstallCommand\"\n}\n\nif ($existingArgs -notmatch '\\b/S\\b') {\n $existingArgs = (\"$existingArgs /S\").Trim()\n}\n# Mirror the install: ensure all-users uninstall so the machine-scope ARP\n# entry under HKLM is removed (not just the calling user's HKCU view).\nif ($existingArgs -notmatch '(?i)/ALLUSERS') {\n $existingArgs = (\"$existingArgs /ALLUSERS\").Trim()\n}\n\nWrite-Host \"Uninstall command: $exePath\"\nWrite-Host \"Uninstall args: $existingArgs\"\n\ntry {\n $processOptions = @{\n FilePath = $exePath\n ArgumentList = $existingArgs\n NoNewWindow = $true\n PassThru = $true\n Wait = $true\n }\n\n $process = Start-Process @processOptions\n $exitCode = $process.ExitCode\n Write-Host \"Uninstall exit code: $exitCode\"\n Exit $exitCode\n} catch {\n Write-Host \"Error running uninstaller: $_\"\n Exit 1\n}\n"
}
}
+14
View File
@@ -169,6 +169,20 @@
"unique_identifier": "com.veertu.anka",
"description": "Anka is a tool for managing and creating virtual machines."
},
{
"name": "Another Redis Desktop Manager",
"slug": "another-redis-desktop-manager/darwin",
"platform": "darwin",
"unique_identifier": "me.qii404.another-redis-desktop-manager",
"description": "Another Redis Desktop Manager is a GUI client for Redis."
},
{
"name": "Another Redis Desktop Manager",
"slug": "another-redis-desktop-manager/windows",
"platform": "windows",
"unique_identifier": "Another Redis Desktop Manager",
"description": "Another Redis Desktop Manager is a GUI client for Redis."
},
{
"name": "AnyDesk",
"slug": "anydesk/darwin",
File diff suppressed because one or more lines are too long
@@ -6,6 +6,7 @@ import { ISoftware } from "interfaces/software";
import { matchLoosePrefixToKey } from "utilities/strings/stringUtils";
import AmazonCorretto25 from "./AmazonCorretto25";
import AnotherRedisDesktopManager from "./AnotherRedisDesktopManager";
import AzulZulu25Jdk from "./AzulZulu25Jdk";
import AzulZulu25Jre from "./AzulZulu25Jre";
import Backblaze from "./Backblaze";
@@ -301,6 +302,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = {
androidPlayStore: AndroidPlayStore,
"android studio": AndroidStudio,
anka: Anka,
"another redis desktop manager": AnotherRedisDesktopManager,
anydesk: AnyDesk,
apparency: Apparency,
appcleaner: AppCleaner,
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB