diff --git a/ee/maintained-apps/outputs/bruno/darwin.json b/ee/maintained-apps/outputs/bruno/darwin.json index b1811cebdb..bff1a53644 100644 --- a/ee/maintained-apps/outputs/bruno/darwin.json +++ b/ee/maintained-apps/outputs/bruno/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "3.4.1", + "version": "3.4.2", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.usebruno.app';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.usebruno.app' AND version_compare(bundle_short_version, '3.4.1') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.usebruno.app' AND version_compare(bundle_short_version, '3.4.2') < 0);" }, - "installer_url": "https://github.com/usebruno/bruno/releases/download/v3.4.1/bruno_3.4.1_arm64_mac.dmg", + "installer_url": "https://github.com/usebruno/bruno/releases/download/v3.4.2/bruno_3.4.2_arm64_mac.dmg", "install_script_ref": "162ba575", "uninstall_script_ref": "334673a8", - "sha256": "c86e9bde676edcb628f5f78f538861782278798e576df9d5382b039240fca7b0", + "sha256": "4878884cca0a03db2ff293eb5463e1d73ae24e82a168d37eb0314c21516f5ee4", "default_categories": [ "Developer tools" ] diff --git a/ee/maintained-apps/outputs/claude/windows.json b/ee/maintained-apps/outputs/claude/windows.json index bf65f30350..cdbfd0b104 100644 --- a/ee/maintained-apps/outputs/claude/windows.json +++ b/ee/maintained-apps/outputs/claude/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.8555.2", + "version": "1.9255.0", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Claude' AND publisher = 'Anthropic, PBC';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Claude' AND publisher = 'Anthropic, PBC' AND version_compare(version, '1.8555.2') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Claude' AND publisher = 'Anthropic, PBC' AND version_compare(version, '1.9255.0') < 0);" }, - "installer_url": "https://downloads.claude.ai/releases/win32/x64/1.8555.2/Claude-a476c316c741715263e34f9c9d2bc45b6d0f21c7.msix", + "installer_url": "https://downloads.claude.ai/releases/win32/x64/1.9255.0/Claude-a22af1fabbbc85af5502e695ed8fbea9f74276fc.msix", "install_script_ref": "218aa85b", "uninstall_script_ref": "03f72055", - "sha256": "1c1c645f170314588e9249307a251ab77cdd007f5d5bc85ddf645cd7009c10b8", + "sha256": "0cb8ea99eab90cc6347b2553eec1f7799ff228187b1c04b69eecfbc7c7c08815", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/discord/darwin.json b/ee/maintained-apps/outputs/discord/darwin.json index 7faa6a91d9..dcc08c5aaf 100644 --- a/ee/maintained-apps/outputs/discord/darwin.json +++ b/ee/maintained-apps/outputs/discord/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "0.0.391", + "version": "0.0.392", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.hnc.Discord';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hnc.Discord' AND version_compare(bundle_short_version, '0.0.391') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hnc.Discord' AND version_compare(bundle_short_version, '0.0.392') < 0);" }, - "installer_url": "https://dl.discordapp.net/apps/osx/0.0.391/Discord.dmg", + "installer_url": "https://dl.discordapp.net/apps/osx/0.0.392/Discord.dmg", "install_script_ref": "57ec7b28", "uninstall_script_ref": "64f1f6c2", - "sha256": "195076fabbd5fe76e21ec9a84459adf23ce035cd7a9271cf5cdb2dbf03aaef1d", + "sha256": "95c77ec4ae4299921fd80841c4ff3d78e3d1b56f3646902daf2f7106ffc492eb", "default_categories": [ "Communication" ] diff --git a/ee/maintained-apps/outputs/github-desktop/windows.json b/ee/maintained-apps/outputs/github-desktop/windows.json index da6d8c97cd..715a04bda4 100644 --- a/ee/maintained-apps/outputs/github-desktop/windows.json +++ b/ee/maintained-apps/outputs/github-desktop/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "3.5.10", + "version": "3.5.11", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'GitHub Desktop' AND publisher = 'GitHub, Inc.';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'GitHub Desktop' AND publisher = 'GitHub, Inc.' AND version_compare(version, '3.5.10') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'GitHub Desktop' AND publisher = 'GitHub, Inc.' AND version_compare(version, '3.5.11') < 0);" }, - "installer_url": "https://desktop.githubusercontent.com/releases/3.5.10-497192a5/GitHubDesktopSetup-x64.msi", + "installer_url": "https://desktop.githubusercontent.com/releases/3.5.11-0435ec91/GitHubDesktopSetup-x64.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "f0fcaa82", - "sha256": "15d72d9fa7b412d56181f3ce59bd8389e7a57badfcc1b6f577608c07301d30ec", + "sha256": "21254eccada7f7496ec5804a0e4310a17bdd9797b01fda53469b6d46445dcca0", "default_categories": [ "Developer tools" ], diff --git a/ee/maintained-apps/outputs/granola/windows.json b/ee/maintained-apps/outputs/granola/windows.json index fbe85b2c4e..aac7fe65ad 100644 --- a/ee/maintained-apps/outputs/granola/windows.json +++ b/ee/maintained-apps/outputs/granola/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "7.255.6", + "version": "7.269.0", "queries": { "exists": "SELECT 1 FROM programs WHERE name LIKE 'Granola %' AND publisher = 'Granola';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Granola %' AND publisher = 'Granola' AND version_compare(version, '7.255.6') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Granola %' AND publisher = 'Granola' AND version_compare(version, '7.269.0') < 0);" }, - "installer_url": "https://dr2v7l5emb758.cloudfront.net/7.255.6/Granola-7.255.6-win-x64.exe", + "installer_url": "https://dr2v7l5emb758.cloudfront.net/7.269.0/Granola-7.269.0-win-x64.exe", "install_script_ref": "3f66ac53", "uninstall_script_ref": "a4fab3f5", - "sha256": "d5d47b969639bba37af72b9d826dc6f65fa4084945d8eb568f3e88abed56a698", + "sha256": "ecd407e1ea46bc3ec25275ef73b37308cf357b29e8a96e052f22d260579bf274", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/microsoft-outlook/darwin.json b/ee/maintained-apps/outputs/microsoft-outlook/darwin.json index 770fdb8ede..fee147957f 100644 --- a/ee/maintained-apps/outputs/microsoft-outlook/darwin.json +++ b/ee/maintained-apps/outputs/microsoft-outlook/darwin.json @@ -1,22 +1,22 @@ { "versions": [ { - "version": "16.109.1", + "version": "16.109", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Outlook';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Outlook' AND version_compare(bundle_short_version, '16.109.1') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Outlook' AND version_compare(bundle_short_version, '16.109') < 0);" }, - "installer_url": "https://officecdnmac.microsoft.com/pr/C1297A47-86C4-4C1F-97FA-950631F94777/MacAutoupdate/Microsoft_Outlook_16.109.26051717_Installer.pkg", - "install_script_ref": "ffaf9fe6", + "installer_url": "https://officecdnmac.microsoft.com/pr/C1297A47-86C4-4C1F-97FA-950631F94777/MacAutoupdate/Microsoft_Outlook_16.109.26052523_Installer.pkg", + "install_script_ref": "0e4e4b82", "uninstall_script_ref": "36c26399", - "sha256": "f2ad674436d001b80625252bf4f51805e784bff368ab3a8a151d187868733d0f", + "sha256": "f02cc11e6f7f107d161395a6eb2ed3e1d3c1ac191949a3934f427e55998b8108", "default_categories": [ "Developer tools" ] } ], "refs": { - "36c26399": "#!/bin/bash\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\nquit_application() {\n local bundle_id=\"$1\"\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 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 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\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>/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\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 '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/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_launchctl_service 'com.microsoft.office.licensingV2.helper'\nquit_application 'com.microsoft.autoupdate2'\nremove_pkg_files 'com.microsoft.package.Microsoft_Outlook.app'\nforget_pkg 'com.microsoft.package.Microsoft_Outlook.app'\nremove_pkg_files 'com.microsoft.pkg.licensing'\nforget_pkg 'com.microsoft.pkg.licensing'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.microsoft.Outlook'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.microsoft.Outlook'\n", - "ffaf9fe6": "#!/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# install pkg files\nquit_and_track_application 'com.microsoft.Outlook'\n\nCHOICE_XML=$(mktemp /tmp/choice_xml_XXX)\n\ncat << EOF > \"$CHOICE_XML\"\n\n\n\n\n \n attributeSetting\n 0\n choiceAttribute\n selected\n choiceIdentifier\n com.microsoft.autoupdate\n \n\n\n\nEOF\n\nsudo installer -pkg \"$TMPDIR\"/Microsoft_Outlook_16.109.26051717_Installer.pkg -target / -applyChoiceChangesXML \"$CHOICE_XML\"\n\nrelaunch_application 'com.microsoft.Outlook'\n" + "0e4e4b82": "#!/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# install pkg files\nquit_and_track_application 'com.microsoft.Outlook'\n\nCHOICE_XML=$(mktemp /tmp/choice_xml_XXX)\n\ncat << EOF > \"$CHOICE_XML\"\n\n\n\n\n \n attributeSetting\n 0\n choiceAttribute\n selected\n choiceIdentifier\n com.microsoft.autoupdate\n \n\n\n\nEOF\n\nsudo installer -pkg \"$TMPDIR\"/Microsoft_Outlook_16.109.26052523_Installer.pkg -target / -applyChoiceChangesXML \"$CHOICE_XML\"\n\nrelaunch_application 'com.microsoft.Outlook'\n", + "36c26399": "#!/bin/bash\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\nquit_application() {\n local bundle_id=\"$1\"\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 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 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\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>/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\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 '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/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_launchctl_service 'com.microsoft.office.licensingV2.helper'\nquit_application 'com.microsoft.autoupdate2'\nremove_pkg_files 'com.microsoft.package.Microsoft_Outlook.app'\nforget_pkg 'com.microsoft.package.Microsoft_Outlook.app'\nremove_pkg_files 'com.microsoft.pkg.licensing'\nforget_pkg 'com.microsoft.pkg.licensing'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.microsoft.Outlook'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.microsoft.Outlook'\n" } } diff --git a/ee/maintained-apps/outputs/notion/darwin.json b/ee/maintained-apps/outputs/notion/darwin.json index 08f2c41eb5..e4b8322f0c 100644 --- a/ee/maintained-apps/outputs/notion/darwin.json +++ b/ee/maintained-apps/outputs/notion/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "7.18.0", + "version": "7.19.0", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'notion.id';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'notion.id' AND version_compare(bundle_short_version, '7.18.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'notion.id' AND version_compare(bundle_short_version, '7.19.0') < 0);" }, - "installer_url": "https://desktop-release.notion-static.com/Notion-7.18.0-arm64.dmg", + "installer_url": "https://desktop-release.notion-static.com/Notion-7.19.0-arm64.dmg", "install_script_ref": "d8e3e0c4", "uninstall_script_ref": "f4afbeb5", - "sha256": "df1322d5848b04c8b71705dc084786e3cb99f0019d2d58751b5d4e7eb7333f6e", + "sha256": "7cb0d4f8a7e97e531ddef0e8795b1f57e4d5e2da54d63ae2a4d9f4c846bae1a7", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/openvpn-connect/darwin.json b/ee/maintained-apps/outputs/openvpn-connect/darwin.json index 4280517e0e..51ab37024e 100644 --- a/ee/maintained-apps/outputs/openvpn-connect/darwin.json +++ b/ee/maintained-apps/outputs/openvpn-connect/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "3.8.1", + "version": "3.8.2", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.openvpn.client.app';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.openvpn.client.app' AND version_compare(bundle_short_version, '3.8.1') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.openvpn.client.app' AND version_compare(bundle_short_version, '3.8.2') < 0);" }, - "installer_url": "https://swupdate.openvpn.net/downloads/connect/openvpn-connect-3.8.1.5790_signed.dmg", + "installer_url": "https://swupdate.openvpn.net/downloads/connect/openvpn-connect-3.8.2.6009_signed.dmg", "install_script_ref": "2ebecc60", "uninstall_script_ref": "d66adb9e", - "sha256": "8dbf5f3cc82d8214fcdbdb1257cdb5dcae891d1ec1859d64b6e8aa7ee9d8a983", + "sha256": "8d50036510859956d20d1f50e43171be53417431104c6befb1352ff5187c248a", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/slack/darwin.json b/ee/maintained-apps/outputs/slack/darwin.json index c08c36174b..17806be57d 100644 --- a/ee/maintained-apps/outputs/slack/darwin.json +++ b/ee/maintained-apps/outputs/slack/darwin.json @@ -1,10 +1,10 @@ { "versions": [ { - "version": "4.50.121", + "version": "4.50.128", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.tinyspeck.slackmacgap';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.tinyspeck.slackmacgap' AND version_compare(bundle_short_version, '4.50.121') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.tinyspeck.slackmacgap' AND version_compare(bundle_short_version, '4.50.128') < 0);" }, "installer_url": "https://slack.com/api/desktop.latestRelease?redirect=1&variant=pkg&arch=universal", "install_script_ref": "6025885d", diff --git a/ee/maintained-apps/outputs/slack/windows.json b/ee/maintained-apps/outputs/slack/windows.json index 51de261934..4715d7ad56 100644 --- a/ee/maintained-apps/outputs/slack/windows.json +++ b/ee/maintained-apps/outputs/slack/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "4.50.121", + "version": "4.50.128", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Slack' AND publisher = 'Slack Technologies Inc.';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Slack' AND publisher = 'Slack Technologies Inc.' AND version_compare(version, '4.50.121') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Slack' AND publisher = 'Slack Technologies Inc.' AND version_compare(version, '4.50.128') < 0);" }, - "installer_url": "https://downloads.slack-edge.com/desktop-releases/windows/x64/4.50.121/Slack.msix", + "installer_url": "https://downloads.slack-edge.com/desktop-releases/windows/x64/4.50.128/Slack.msix", "install_script_ref": "8b41f934", "uninstall_script_ref": "ae79ce28", - "sha256": "2e53dfa92197518c3095d9aa9b36e29cde74f1dd614fa4be33face9b7f90a5d5", + "sha256": "418297aa7ee085b72194eac0c5b4aff8e30740b81498e15f4b7603aaf335477b", "default_categories": [ "Communication" ] diff --git a/ee/maintained-apps/outputs/tableau/darwin.json b/ee/maintained-apps/outputs/tableau/darwin.json index 6b87820701..7f39ce1652 100644 --- a/ee/maintained-apps/outputs/tableau/darwin.json +++ b/ee/maintained-apps/outputs/tableau/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2026.1.1", + "version": "2026.1.2", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.tableausoftware.Desktop.app';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.tableausoftware.Desktop.app' AND version_compare(bundle_short_version, '2026.1.1') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.tableausoftware.Desktop.app' AND version_compare(bundle_short_version, '2026.1.2') < 0);" }, - "installer_url": "https://downloads.tableau.com/esdalt/2026.1.1/TableauDesktop-2026-1-1-arm64.dmg", + "installer_url": "https://downloads.tableau.com/esdalt/2026.1.2/TableauDesktop-2026-1-2-arm64.dmg", "install_script_ref": "3d60fdfd", "uninstall_script_ref": "432d1cbf", - "sha256": "05eeb4022c389f06f8193f37bb8e8feba0a29e4e3da5609fc6d5c9f438854d10", + "sha256": "3ec517f935adef87325b4adff8a0c6510550fbdb7eabcba96cf63fbd27e91793", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/thunderbird/darwin.json b/ee/maintained-apps/outputs/thunderbird/darwin.json index 101b304f5e..de60fb638e 100644 --- a/ee/maintained-apps/outputs/thunderbird/darwin.json +++ b/ee/maintained-apps/outputs/thunderbird/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "151.0", + "version": "151.0.1", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.mozilla.thunderbird';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.mozilla.thunderbird' AND version_compare(bundle_short_version, '151.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.mozilla.thunderbird' AND version_compare(bundle_short_version, '151.0.1') < 0);" }, - "installer_url": "https://download-installer.cdn.mozilla.net/pub/thunderbird/releases/151.0/mac/en-US/Thunderbird%20151.0.dmg", + "installer_url": "https://download-installer.cdn.mozilla.net/pub/thunderbird/releases/151.0.1/mac/en-US/Thunderbird%20151.0.1.dmg", "install_script_ref": "158d6bf3", "uninstall_script_ref": "2b20efbb", - "sha256": "c17659dc6893cfaacf00e92fb3028a396db6b1d135d3a33f02d8990a67264f12", + "sha256": "161efae828f7cb85acc7e7490c88042a22c0867f3c6bb616b73319bea834a378", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/thunderbird/windows.json b/ee/maintained-apps/outputs/thunderbird/windows.json index 5a9044f35f..3f9123ae14 100644 --- a/ee/maintained-apps/outputs/thunderbird/windows.json +++ b/ee/maintained-apps/outputs/thunderbird/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "151.0", + "version": "151.0.1", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Mozilla Thunderbird (x64 en-US)' AND publisher = 'Mozilla';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Mozilla Thunderbird (x64 en-US)' AND publisher = 'Mozilla' AND version_compare(version, '151.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Mozilla Thunderbird (x64 en-US)' AND publisher = 'Mozilla' AND version_compare(version, '151.0.1') < 0);" }, - "installer_url": "https://download-installer.cdn.mozilla.net/pub/thunderbird/releases/151.0/win64/en-US/Thunderbird%20Setup%20151.0.exe", + "installer_url": "https://download-installer.cdn.mozilla.net/pub/thunderbird/releases/151.0.1/win64/en-US/Thunderbird%20Setup%20151.0.1.exe", "install_script_ref": "26f2daf8", "uninstall_script_ref": "96113731", - "sha256": "f4b6c722627967ff17fd96daa0cadea5ffe1b95fb280afc670d3fd2a46944dcd", + "sha256": "552d33f9b1b7a35bc04c64efa1aea3439e47d6889f1b85fef0534772aa1154c6", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/webex/darwin.json b/ee/maintained-apps/outputs/webex/darwin.json index 98214f0a8d..423f3f7187 100644 --- a/ee/maintained-apps/outputs/webex/darwin.json +++ b/ee/maintained-apps/outputs/webex/darwin.json @@ -1,10 +1,10 @@ { "versions": [ { - "version": "46.5.0.34931", + "version": "46.5.0.35006", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'Cisco-Systems.Spark';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'Cisco-Systems.Spark' AND version_compare(bundle_short_version, '46.5.0.34931') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'Cisco-Systems.Spark' AND version_compare(bundle_short_version, '46.5.0.35006') < 0);" }, "installer_url": "https://binaries.webex.com/webex-macos-apple-silicon/Webex.dmg", "install_script_ref": "1fe5b1af",