From 09ec5d0cc326514c7608267751c96168081beb06 Mon Sep 17 00:00:00 2001 From: fleet-release <80479975+fleet-release@users.noreply.github.com> Date: Wed, 22 Jul 2026 09:39:48 -0500 Subject: [PATCH] Update Fleet-maintained apps (#49732) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Automated ingestion of latest Fleet-maintained app data. ## Summary by CodeRabbit * **New Features** * Added support for the latest releases of numerous desktop applications across macOS and Windows, including Amazon Corretto, Claude, Kiro, Postman, Tableau, Thunderbird, and others. * Updated installer downloads and integrity checks for newly available versions. * **Bug Fixes** * Improved app removal by quitting running applications before cleanup for select apps. * Updated uninstall cleanup paths for newer application versions. * **Maintenance** * Refreshed version detection and upgrade checks across the maintained application catalog. * Updated Telegram’s download source for improved installation reliability. --------- Co-authored-by: allenhouchins <32207388+allenhouchins@users.noreply.github.com> --- ee/maintained-apps/outputs/adlock/darwin.json | 4 ++-- .../outputs/amazon-corretto-11/windows.json | 8 ++++---- .../outputs/amazon-corretto-17/windows.json | 8 ++++---- .../outputs/amazon-corretto-21/windows.json | 8 ++++---- .../outputs/amazon-corretto-25/windows.json | 8 ++++---- .../outputs/amazon-corretto-26/windows.json | 8 ++++---- .../outputs/amazon-corretto-8/windows.json | 8 ++++---- .../outputs/amazon-corretto-jre-8/windows.json | 8 ++++---- ee/maintained-apps/outputs/aws-cli/windows.json | 8 ++++---- .../outputs/azul-zulu-25-jdk/windows.json | 14 +++++++------- ee/maintained-apps/outputs/badgeify/darwin.json | 8 ++++---- ee/maintained-apps/outputs/binance/darwin.json | 8 ++++---- ee/maintained-apps/outputs/chatgpt/darwin.json | 8 ++++---- .../outputs/cisco-jabber/windows.json | 8 ++++---- ee/maintained-apps/outputs/claude/darwin.json | 8 ++++---- ee/maintained-apps/outputs/claude/windows.json | 8 ++++---- .../outputs/devolutions-launcher/windows.json | 8 ++++---- ee/maintained-apps/outputs/drawio/darwin.json | 8 ++++---- ee/maintained-apps/outputs/emclient/darwin.json | 8 ++++---- ee/maintained-apps/outputs/emclient/windows.json | 8 ++++---- ee/maintained-apps/outputs/figma/windows.json | 8 ++++---- ee/maintained-apps/outputs/filen/darwin.json | 8 ++++---- .../outputs/firefox@nightly/darwin.json | 4 ++-- .../outputs/firefox@nightly/windows.json | 8 ++++---- ee/maintained-apps/outputs/flexoptix/darwin.json | 8 ++++---- ee/maintained-apps/outputs/gitify/darwin.json | 8 ++++---- .../outputs/google-chrome/darwin.json | 4 ++-- .../outputs/google-chrome/windows.json | 4 ++-- ee/maintained-apps/outputs/hive-app/darwin.json | 8 ++++---- ee/maintained-apps/outputs/kiro/darwin.json | 8 ++++---- ee/maintained-apps/outputs/kiro/windows.json | 8 ++++---- ee/maintained-apps/outputs/mailspring/darwin.json | 8 ++++---- ee/maintained-apps/outputs/megasync/darwin.json | 4 ++-- .../outputs/microsoft-excel/darwin.json | 4 ++-- .../outputs/microsoft-onenote/darwin.json | 4 ++-- .../outputs/microsoft-powerpoint/darwin.json | 4 ++-- .../outputs/microsoft-word/darwin.json | 4 ++-- ee/maintained-apps/outputs/milanote/darwin.json | 8 ++++---- ee/maintained-apps/outputs/miro/darwin.json | 4 ++-- ee/maintained-apps/outputs/notion/darwin.json | 4 ++-- ee/maintained-apps/outputs/postman/darwin.json | 8 ++++---- ee/maintained-apps/outputs/postman/windows.json | 8 ++++---- ee/maintained-apps/outputs/power-bi/windows.json | 8 ++++---- .../outputs/prisma-browser/darwin.json | 8 ++++---- ee/maintained-apps/outputs/qlab/darwin.json | 8 ++++---- .../outputs/remote-desktop-manager/windows.json | 8 ++++---- ee/maintained-apps/outputs/rive/darwin.json | 8 ++++---- ee/maintained-apps/outputs/rustrover/darwin.json | 12 ++++++------ .../outputs/tableau-prep/darwin.json | 14 +++++++------- ee/maintained-apps/outputs/tableau/darwin.json | 8 ++++---- ee/maintained-apps/outputs/telegram/windows.json | 2 +- ee/maintained-apps/outputs/thunderbird/darwin.json | 8 ++++---- ee/maintained-apps/outputs/webex/darwin.json | 4 ++-- ee/maintained-apps/outputs/wispr-flow/darwin.json | 8 ++++---- ee/maintained-apps/outputs/zed/darwin.json | 4 ++-- 55 files changed, 199 insertions(+), 199 deletions(-) diff --git a/ee/maintained-apps/outputs/adlock/darwin.json b/ee/maintained-apps/outputs/adlock/darwin.json index b0abd46866..f911e9dc47 100644 --- a/ee/maintained-apps/outputs/adlock/darwin.json +++ b/ee/maintained-apps/outputs/adlock/darwin.json @@ -1,10 +1,10 @@ { "versions": [ { - "version": "2.1.8.8", + "version": "2.1.8.9", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.hankuper.adlock.desktop';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hankuper.adlock.desktop' AND version_compare(bundle_short_version, '2.1.8.8') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hankuper.adlock.desktop' AND version_compare(bundle_short_version, '2.1.8.9') < 0);" }, "installer_url": "https://downloads.adlock.com/mac/AdLock_Installer.dmg", "install_script_ref": "ec52d1d9", diff --git a/ee/maintained-apps/outputs/amazon-corretto-11/windows.json b/ee/maintained-apps/outputs/amazon-corretto-11/windows.json index b24f356ae8..6453236229 100644 --- a/ee/maintained-apps/outputs/amazon-corretto-11/windows.json +++ b/ee/maintained-apps/outputs/amazon-corretto-11/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "11.0.31.11", + "version": "11.0.32.9", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '11.%';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '11.%' AND version_compare(version, '11.0.31.11') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '11.%' AND version_compare(version, '11.0.32.9') < 0);" }, - "installer_url": "https://corretto.aws/downloads/resources/11.0.31.11.1/amazon-corretto-11.0.31.11.1-windows-x64.msi", + "installer_url": "https://corretto.aws/downloads/resources/11.0.32.9.1/amazon-corretto-11.0.32.9.1-windows-x64.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "ea6e5144", - "sha256": "c941f6d876cda84e7d7bbad78df2f27fcb75f5d68dec276c38f2408fbe0f1286", + "sha256": "e621ee7dc09dbfef27fdd0374f228c8987620833fe05114931c7e35cd0408776", "default_categories": [ "Developer tools" ], diff --git a/ee/maintained-apps/outputs/amazon-corretto-17/windows.json b/ee/maintained-apps/outputs/amazon-corretto-17/windows.json index 6d5fc876c8..774d96cca8 100644 --- a/ee/maintained-apps/outputs/amazon-corretto-17/windows.json +++ b/ee/maintained-apps/outputs/amazon-corretto-17/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "17.0.19.10", + "version": "17.0.20.8", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '17.%';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '17.%' AND version_compare(version, '17.0.19.10') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '17.%' AND version_compare(version, '17.0.20.8') < 0);" }, - "installer_url": "https://corretto.aws/downloads/resources/17.0.19.10.1/amazon-corretto-17.0.19.10.1-windows-x64.msi", + "installer_url": "https://corretto.aws/downloads/resources/17.0.20.8.1/amazon-corretto-17.0.20.8.1-windows-x64.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "d85741a4", - "sha256": "7ecbfdd4b9897eed776df131c84fb128f5091aa482dec7e41aadf1979072c93d", + "sha256": "ed15f0773a080771e5d183db8be7ac43eae468082d800c0563f67ce954b9a0ad", "default_categories": [ "Developer tools" ], diff --git a/ee/maintained-apps/outputs/amazon-corretto-21/windows.json b/ee/maintained-apps/outputs/amazon-corretto-21/windows.json index f66ec236e9..6aae7515d5 100644 --- a/ee/maintained-apps/outputs/amazon-corretto-21/windows.json +++ b/ee/maintained-apps/outputs/amazon-corretto-21/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "21.0.11.10", + "version": "21.0.12.8", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '21.%';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '21.%' AND version_compare(version, '21.0.11.10') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '21.%' AND version_compare(version, '21.0.12.8') < 0);" }, - "installer_url": "https://corretto.aws/downloads/resources/21.0.11.10.1/amazon-corretto-21.0.11.10.1-windows-x64.msi", + "installer_url": "https://corretto.aws/downloads/resources/21.0.12.8.1/amazon-corretto-21.0.12.8.1-windows-x64.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "291bae71", - "sha256": "df8d443f0ab1eca0d1b95177d3d45a100616ecfab93226a2f126dd1f3baafb50", + "sha256": "c74844499e9c234050b1fbd89027fee94f99a0139dc4648acc2b461a63d333c0", "default_categories": [ "Developer tools" ], diff --git a/ee/maintained-apps/outputs/amazon-corretto-25/windows.json b/ee/maintained-apps/outputs/amazon-corretto-25/windows.json index 3addcc0467..02ae1226c0 100644 --- a/ee/maintained-apps/outputs/amazon-corretto-25/windows.json +++ b/ee/maintained-apps/outputs/amazon-corretto-25/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "25.0.3.9", + "version": "25.0.4.7", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '25.%';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '25.%' AND version_compare(version, '25.0.3.9') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '25.%' AND version_compare(version, '25.0.4.7') < 0);" }, - "installer_url": "https://corretto.aws/downloads/resources/25.0.3.9.1/amazon-corretto-25.0.3.9.1-windows-x64.msi", + "installer_url": "https://corretto.aws/downloads/resources/25.0.4.7.1/amazon-corretto-25.0.4.7.1-windows-x64.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "59d14df9", - "sha256": "41af78c39715773ae153b9147a0bcaef6cc408d69423437a5d07c1c67613762d", + "sha256": "253ec64847a11444d3a5e70b15e56cced476b61c5eac40a3b7488b6679c720ac", "default_categories": [ "Developer tools" ], diff --git a/ee/maintained-apps/outputs/amazon-corretto-26/windows.json b/ee/maintained-apps/outputs/amazon-corretto-26/windows.json index 64215c5fa2..00e9fc9777 100644 --- a/ee/maintained-apps/outputs/amazon-corretto-26/windows.json +++ b/ee/maintained-apps/outputs/amazon-corretto-26/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "26.0.1.8", + "version": "26.0.2.10", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '26.%';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '26.%' AND version_compare(version, '26.0.1.8') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto (x64)' AND publisher = 'Amazon' AND version LIKE '26.%' AND version_compare(version, '26.0.2.10') < 0);" }, - "installer_url": "https://corretto.aws/downloads/resources/26.0.1.8.1/amazon-corretto-26.0.1.8.1-windows-x64.msi", + "installer_url": "https://corretto.aws/downloads/resources/26.0.2.10.1/amazon-corretto-26.0.2.10.1-windows-x64.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "f237f56e", - "sha256": "a1085f5c34196c080b196881d13bc92e022759743d18829f10c962419ad683ad", + "sha256": "e5bf4c5879cd76ec53e70c74375f9a3fddcb27df32aeaa9ee6f941a954c6c346", "default_categories": [ "Developer tools" ], diff --git a/ee/maintained-apps/outputs/amazon-corretto-8/windows.json b/ee/maintained-apps/outputs/amazon-corretto-8/windows.json index 06c2814985..597fb83cf8 100644 --- a/ee/maintained-apps/outputs/amazon-corretto-8/windows.json +++ b/ee/maintained-apps/outputs/amazon-corretto-8/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.8.0.492", + "version": "1.8.0.502", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Amazon Corretto 8 (x64)' AND publisher = 'Amazon';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto 8 (x64)' AND publisher = 'Amazon' AND version_compare(version, '1.8.0.492') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto 8 (x64)' AND publisher = 'Amazon' AND version_compare(version, '1.8.0.502') < 0);" }, - "installer_url": "https://corretto.aws/downloads/resources/8.492.09.2/amazon-corretto-8.492.09.2-windows-x64-jdk.msi", + "installer_url": "https://corretto.aws/downloads/resources/8.502.07.1/amazon-corretto-8.502.07.1-windows-x64-jdk.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "1586ea27", - "sha256": "b091276b5fc250597b0a940473c10f72d4f37a8aac86eca5f7cd652a45890071", + "sha256": "b13b5787b60715aabf0fbafe3ee18efa824c5f633ded0756c7e17a9cac48386e", "default_categories": [ "Developer tools" ], diff --git a/ee/maintained-apps/outputs/amazon-corretto-jre-8/windows.json b/ee/maintained-apps/outputs/amazon-corretto-jre-8/windows.json index e55f77a89c..1e2a9503e8 100644 --- a/ee/maintained-apps/outputs/amazon-corretto-jre-8/windows.json +++ b/ee/maintained-apps/outputs/amazon-corretto-jre-8/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.8.0.492", + "version": "1.8.0.502", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Amazon Corretto JRE 8 (x64)' AND publisher = 'Amazon';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto JRE 8 (x64)' AND publisher = 'Amazon' AND version_compare(version, '1.8.0.492') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Amazon Corretto JRE 8 (x64)' AND publisher = 'Amazon' AND version_compare(version, '1.8.0.502') < 0);" }, - "installer_url": "https://corretto.aws/downloads/resources/8.492.09.2/amazon-corretto-8.492.09.2-windows-x64-jre.msi", + "installer_url": "https://corretto.aws/downloads/resources/8.502.07.1/amazon-corretto-8.502.07.1-windows-x64-jre.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "a91b27a6", - "sha256": "9777acb74091b23f075e0bfb98326c44c0e84e698c8d916c3582d3fdcd0cd37c", + "sha256": "c3cc682c34fd9cf1a50606f9185f97abc1a2ff11323456b070034357bb049063", "default_categories": [ "Developer tools" ], diff --git a/ee/maintained-apps/outputs/aws-cli/windows.json b/ee/maintained-apps/outputs/aws-cli/windows.json index 95e6b10c55..c845db65fd 100644 --- a/ee/maintained-apps/outputs/aws-cli/windows.json +++ b/ee/maintained-apps/outputs/aws-cli/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2.36.4", + "version": "2.36.5", "queries": { "exists": "SELECT 1 FROM programs WHERE name LIKE 'AWS Command Line Interface v2 %' AND publisher = 'Amazon Web Services';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'AWS Command Line Interface v2 %' AND publisher = 'Amazon Web Services' AND version_compare(version, '2.36.4') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'AWS Command Line Interface v2 %' AND publisher = 'Amazon Web Services' AND version_compare(version, '2.36.5') < 0);" }, - "installer_url": "https://awscli.amazonaws.com/AWSCLIV2-2.36.4.msi", + "installer_url": "https://awscli.amazonaws.com/AWSCLIV2-2.36.5.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "58bcd016", - "sha256": "efd30424b75807bd0f4b79f090cedcec8a370fdd030e7c0d3514a42c6d9a22c7", + "sha256": "8e8e680058fa17e0a4c71c8dcce4c51463095f23c776a8dd6d44f00c9fe1b390", "default_categories": [ "Developer tools" ], diff --git a/ee/maintained-apps/outputs/azul-zulu-25-jdk/windows.json b/ee/maintained-apps/outputs/azul-zulu-25-jdk/windows.json index 6345c4d11b..e9b302d3a1 100644 --- a/ee/maintained-apps/outputs/azul-zulu-25-jdk/windows.json +++ b/ee/maintained-apps/outputs/azul-zulu-25-jdk/windows.json @@ -1,22 +1,22 @@ { "versions": [ { - "version": "25.34.17", + "version": "25.36.15", "queries": { "exists": "SELECT 1 FROM programs WHERE name LIKE 'Azul Zulu JDK %' AND publisher = 'Azul Systems, Inc.' AND version LIKE '25.%';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Azul Zulu JDK %' AND publisher = 'Azul Systems, Inc.' AND version LIKE '25.%' AND version_compare(version, '25.34.17') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Azul Zulu JDK %' AND publisher = 'Azul Systems, Inc.' AND version LIKE '25.%' AND version_compare(version, '25.36.15') < 0);" }, - "installer_url": "https://cdn.azul.com/zulu/bin/zulu25.34.17-ca-jdk25.0.3-win_x64.msi", + "installer_url": "https://cdn.azul.com/zulu/bin/zulu25.36.15-ca-jdk25.0.4-win_x64.msi", "install_script_ref": "8959087b", - "uninstall_script_ref": "a2dce35a", - "sha256": "e92ebafaa1166fde201e556b2885a68bba276a1837975947c0d3899b8f5b8d97", + "uninstall_script_ref": "86b4409e", + "sha256": "91a9518d9b9723d48330d52b6c149758e2d3b896542c77d3e3c2ab0fd30c9200", "default_categories": [ "Developer tools" ] } ], "refs": { - "8959087b": "$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv ${logFile} /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n", - "a2dce35a": "$product_code = '{78F5F8F4-405D-4479-9797-23AD3914CA77}'\n$timeoutSeconds = 300 # 5 minute timeout\n\n# Fleet uninstalls app using product code that's extracted on upload\n$process = Start-Process msiexec -ArgumentList @(\"/quiet\", \"/x\", $product_code, \"/norestart\") -PassThru\n\n# Wait for process with timeout\n$completed = $process.WaitForExit($timeoutSeconds * 1000)\n\nif (-not $completed) {\n Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue\n Exit 1603 # ERROR_UNINSTALL_FAILURE\n}\n\n# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,\n# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.\n$successCodes = @(0, 3010, 1641)\n\n# Check exit code and output result\nif ($successCodes -contains $process.ExitCode) {\n Write-Output \"Exit 0\"\n Exit 0\n} else {\n Write-Output \"Exit $($process.ExitCode)\"\n Exit $process.ExitCode\n}\n" + "86b4409e": "$product_code = '{EBD36C05-81B7-43E4-BF66-33A0F793234B}'\n$timeoutSeconds = 300 # 5 minute timeout\n\n# Fleet uninstalls app using product code that's extracted on upload\n$process = Start-Process msiexec -ArgumentList @(\"/quiet\", \"/x\", $product_code, \"/norestart\") -PassThru\n\n# Wait for process with timeout\n$completed = $process.WaitForExit($timeoutSeconds * 1000)\n\nif (-not $completed) {\n Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue\n Exit 1603 # ERROR_UNINSTALL_FAILURE\n}\n\n# MSI exit codes that indicate success. 3010 = ERROR_SUCCESS_REBOOT_REQUIRED,\n# 1641 = ERROR_SUCCESS_REBOOT_INITIATED. Treat these as success rather than failure.\n$successCodes = @(0, 3010, 1641)\n\n# Check exit code and output result\nif ($successCodes -contains $process.ExitCode) {\n Write-Output \"Exit 0\"\n Exit 0\n} else {\n Write-Output \"Exit $($process.ExitCode)\"\n Exit $process.ExitCode\n}\n", + "8959087b": "$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv ${logFile} /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n" } } diff --git a/ee/maintained-apps/outputs/badgeify/darwin.json b/ee/maintained-apps/outputs/badgeify/darwin.json index 3c0aa8d6ac..1231f681b3 100644 --- a/ee/maintained-apps/outputs/badgeify/darwin.json +++ b/ee/maintained-apps/outputs/badgeify/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.14.0", + "version": "1.14.1", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'studio.techflow.badgeify';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'studio.techflow.badgeify' AND version_compare(bundle_short_version, '1.14.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'studio.techflow.badgeify' AND version_compare(bundle_short_version, '1.14.1') < 0);" }, - "installer_url": "https://api.badgeify.app/release/download/darwin/universal/1.14.0", + "installer_url": "https://api.badgeify.app/release/download/darwin/universal/1.14.1", "install_script_ref": "c91686bf", "uninstall_script_ref": "9d0f29ae", - "sha256": "54edec479637c89bb1bde509e93d78cb41252d389535847c723305bd6aa2fa11", + "sha256": "3d0bd3620e3703d76ec1fc83432858fae93eb3c4e97f7e2d410f6346f4dd32e0", "default_categories": [ "Utilities" ] diff --git a/ee/maintained-apps/outputs/binance/darwin.json b/ee/maintained-apps/outputs/binance/darwin.json index 07cd78e6bd..0cb38a38d6 100644 --- a/ee/maintained-apps/outputs/binance/darwin.json +++ b/ee/maintained-apps/outputs/binance/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2.3.1", + "version": "2.4.1", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.binance.BinanceDesktop';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.binance.BinanceDesktop' AND version_compare(bundle_short_version, '2.3.1') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.binance.BinanceDesktop' AND version_compare(bundle_short_version, '2.4.1') < 0);" }, - "installer_url": "https://ftp.binance.com/electron-desktop/mac/production/binance-2.3.1-arm64.dmg", + "installer_url": "https://ftp.binance.com/electron-desktop/mac/production/binance-2.4.1-arm64.dmg", "install_script_ref": "ca033eac", "uninstall_script_ref": "6006366b", - "sha256": "3671790022117d6cd584fc70c3d55b15ea78759c4ff3819cf22ab7c05878981a", + "sha256": "19564f74e7d9d6cacd326d0ba2b64cef8aa24d47d78bdf3bd44bd513730919b8", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/chatgpt/darwin.json b/ee/maintained-apps/outputs/chatgpt/darwin.json index ec071a0687..283311305d 100644 --- a/ee/maintained-apps/outputs/chatgpt/darwin.json +++ b/ee/maintained-apps/outputs/chatgpt/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "26.715.70719", + "version": "26.715.72359", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.openai.chat';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.openai.chat' AND version_compare(bundle_short_version, '26.715.70719') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.openai.chat' AND version_compare(bundle_short_version, '26.715.72359') < 0);" }, - "installer_url": "https://persistent.oaistatic.com/codex-app-prod/ChatGPT-darwin-arm64-26.715.70719.zip", + "installer_url": "https://persistent.oaistatic.com/codex-app-prod/ChatGPT-darwin-arm64-26.715.72359.zip", "install_script_ref": "6872008e", "uninstall_script_ref": "678e6cf0", - "sha256": "ef4a5cc09e546ca1f89c5c3e88f50b9d46847e7da21369944980806078c27ee2", + "sha256": "bb599bc22331bebb6ca85e8e9493433a495d44f461efcede3e7054f326b047ef", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/cisco-jabber/windows.json b/ee/maintained-apps/outputs/cisco-jabber/windows.json index 25f73741a8..c3f68c8e2f 100644 --- a/ee/maintained-apps/outputs/cisco-jabber/windows.json +++ b/ee/maintained-apps/outputs/cisco-jabber/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "15.2.3.61008", + "version": "15.3.0.61167", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Cisco Jabber' AND publisher = 'Cisco Systems, Inc';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Cisco Jabber' AND publisher = 'Cisco Systems, Inc' AND version_compare(version, '15.2.3.61008') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Cisco Jabber' AND publisher = 'Cisco Systems, Inc' AND version_compare(version, '15.3.0.61167') < 0);" }, - "installer_url": "https://binaries.webex.com/jabberclientwindows/20260527035625/CiscoJabberSetup.msi", + "installer_url": "https://binaries.webex.com/jabberclientwindows/20260721091017/CiscoJabberSetup.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "45ec9a61", - "sha256": "1390c7ce325ab92ae52d194ace1b84e7667d80a0d290ab7a22f089579ba1e4ce", + "sha256": "0a6f8305cd3c01e63ae1eb468e5b8d17376f167ed7d801ec6c7b8127fa75b46e", "default_categories": [ "Communication" ], diff --git a/ee/maintained-apps/outputs/claude/darwin.json b/ee/maintained-apps/outputs/claude/darwin.json index d15be5eee5..76d503772d 100644 --- a/ee/maintained-apps/outputs/claude/darwin.json +++ b/ee/maintained-apps/outputs/claude/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.24012.0", + "version": "1.24012.1", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.anthropic.claudefordesktop';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.anthropic.claudefordesktop' AND version_compare(bundle_short_version, '1.24012.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.anthropic.claudefordesktop' AND version_compare(bundle_short_version, '1.24012.1') < 0);" }, - "installer_url": "https://downloads.claude.ai/releases/darwin/universal/1.24012.0/Claude-44be967d07ffab39b371cc3297a6a71a5ef92fa9.zip", + "installer_url": "https://downloads.claude.ai/releases/darwin/universal/1.24012.1/Claude-0adcaed55041a881be363f2c4a4729f67a8b27d7.zip", "install_script_ref": "8b957973", "uninstall_script_ref": "421baa98", - "sha256": "769efc63a1c91ac8a6894b453f279a1ce4a01d19aae9bc0ebf4797a6aaa4cb10", + "sha256": "de2833b60daabdbf0e9237d9f8f3b8102ef19418e354117b19b321d0a3a12e6f", "default_categories": [ "Developer tools" ] diff --git a/ee/maintained-apps/outputs/claude/windows.json b/ee/maintained-apps/outputs/claude/windows.json index 891037ef91..be057c1b7c 100644 --- a/ee/maintained-apps/outputs/claude/windows.json +++ b/ee/maintained-apps/outputs/claude/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.22209.3", + "version": "1.24012.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.22209.3') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Claude' AND publisher = 'Anthropic, PBC' AND version_compare(version, '1.24012.0') < 0);" }, - "installer_url": "https://downloads.claude.ai/releases/win32/x64/1.22209.3/Claude-babe11577dfefe3e209c06bd674628d862f0dbae.msix", + "installer_url": "https://downloads.claude.ai/releases/win32/x64/1.24012.0/Claude-44be967d07ffab39b371cc3297a6a71a5ef92fa9.msix", "install_script_ref": "16c020cc", "uninstall_script_ref": "03f72055", - "sha256": "8fbe26fea90c5077de6bfe4848748ff7ca7646475a713b6b997acf14d5a64dcd", + "sha256": "7600470f2e94fecf67030ae4595b116613941291dbebcebcaaf4ce0047946284", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/devolutions-launcher/windows.json b/ee/maintained-apps/outputs/devolutions-launcher/windows.json index 05ef5a9d9a..d8fa04a0d8 100644 --- a/ee/maintained-apps/outputs/devolutions-launcher/windows.json +++ b/ee/maintained-apps/outputs/devolutions-launcher/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2026.2.14.0", + "version": "2026.2.16.0", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Devolutions Launcher' AND publisher = 'Devolutions inc.';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Devolutions Launcher' AND publisher = 'Devolutions inc.' AND version_compare(version, '2026.2.14.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Devolutions Launcher' AND publisher = 'Devolutions inc.' AND version_compare(version, '2026.2.16.0') < 0);" }, - "installer_url": "https://cdn.devolutions.net/download/Setup.Devolutions.Launcher.2026.2.14.0.msi", + "installer_url": "https://cdn.devolutions.net/download/Setup.Devolutions.Launcher.2026.2.16.0.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "532bd615", - "sha256": "b372e0dd767dcff116ef56ef405553da836ab0843d5c018eb005e77de66ec99b", + "sha256": "dcc93186906171c38212fbf9540c685a831274c6085d8fd22904eb361d4d1f72", "default_categories": [ "Productivity" ], diff --git a/ee/maintained-apps/outputs/drawio/darwin.json b/ee/maintained-apps/outputs/drawio/darwin.json index 1db6790a4e..2fdc8bb78b 100644 --- a/ee/maintained-apps/outputs/drawio/darwin.json +++ b/ee/maintained-apps/outputs/drawio/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "30.3.14", + "version": "30.4.1", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.jgraph.drawio.desktop';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.jgraph.drawio.desktop' AND version_compare(bundle_short_version, '30.3.14') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.jgraph.drawio.desktop' AND version_compare(bundle_short_version, '30.4.1') < 0);" }, - "installer_url": "https://github.com/jgraph/drawio-desktop/releases/download/v30.3.14/draw.io-arm64-30.3.14.dmg", + "installer_url": "https://github.com/jgraph/drawio-desktop/releases/download/v30.4.1/draw.io-arm64-30.4.1.dmg", "install_script_ref": "1f3003b7", "uninstall_script_ref": "19c87f7a", - "sha256": "2d695296b4eaf90efd38aacd9110e488c18c5896e75b1fd55c6a27b09747f244", + "sha256": "445ef3db8ce81e3e0c337cac404baefeb4715efd47ca0b048c5deb48ad842fb9", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/emclient/darwin.json b/ee/maintained-apps/outputs/emclient/darwin.json index 98ba80f499..6117105e90 100644 --- a/ee/maintained-apps/outputs/emclient/darwin.json +++ b/ee/maintained-apps/outputs/emclient/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "10.4.5608", + "version": "10.4.5642", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.emclient.mail.client';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.emclient.mail.client' AND version_compare(bundle_short_version, '10.4.5608') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.emclient.mail.client' AND version_compare(bundle_short_version, '10.4.5642') < 0);" }, - "installer_url": "https://cdn-dist.emclient.com/dist/v10.4.5608_Mac/setup.pkg", + "installer_url": "https://cdn-dist.emclient.com/dist/v10.4.5642_Mac/setup.pkg", "install_script_ref": "82810e95", "uninstall_script_ref": "eded2ade", - "sha256": "646bcf6b01a2d3735356ff90c726e257616ddc1c9fd8f791f6f590e803fe2506", + "sha256": "5efe5170e12b971c859f4059cbd8ad5bc1e1e4669492794ed65a019d05c34a08", "default_categories": [ "Communication" ] diff --git a/ee/maintained-apps/outputs/emclient/windows.json b/ee/maintained-apps/outputs/emclient/windows.json index cac78f1b0e..f94386c94c 100644 --- a/ee/maintained-apps/outputs/emclient/windows.json +++ b/ee/maintained-apps/outputs/emclient/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "10.4.5606", + "version": "10.4.5642", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'eM Client' AND publisher = 'eM Client s.r.o.';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'eM Client' AND publisher = 'eM Client s.r.o.' AND version_compare(version, '10.4.5606') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'eM Client' AND publisher = 'eM Client s.r.o.' AND version_compare(version, '10.4.5642') < 0);" }, - "installer_url": "https://www.emclient.com/dist/v10.4.5606/setup.msi", + "installer_url": "https://www.emclient.com/dist/v10.4.5642/setup.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "04c930bd", - "sha256": "9f08f2cbb5a87c1c4950788f4fceffb4edfbe96d8e0940487b28c0884f99b993", + "sha256": "6598b679ed601b88a5009ccd3cd085972a8e621698c29c198a60d528a7274b1b", "default_categories": [ "Communication" ], diff --git a/ee/maintained-apps/outputs/figma/windows.json b/ee/maintained-apps/outputs/figma/windows.json index 2768a2db67..e3165b389e 100644 --- a/ee/maintained-apps/outputs/figma/windows.json +++ b/ee/maintained-apps/outputs/figma/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "126.7.6", + "version": "126.7.8", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Figma' AND publisher = 'Figma, Inc.';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Figma' AND publisher = 'Figma, Inc.' AND version_compare(version, '126.7.6') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Figma' AND publisher = 'Figma, Inc.' AND version_compare(version, '126.7.8') < 0);" }, - "installer_url": "https://desktop.figma.com/win/build/Figma-126.7.6.exe", + "installer_url": "https://desktop.figma.com/win/build/Figma-126.7.8.exe", "install_script_ref": "442d71b3", "uninstall_script_ref": "e33afd6b", - "sha256": "d403632410e40023f32439ac660c316a3194001a0540ce91b1c2e603fd3e8b5f", + "sha256": "27b1550172b4e18054ae03a8e8691e786fa45d3a13fa1643b3f35ea261a9f484", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/filen/darwin.json b/ee/maintained-apps/outputs/filen/darwin.json index 0e7454a9d5..4b8dc48cc2 100644 --- a/ee/maintained-apps/outputs/filen/darwin.json +++ b/ee/maintained-apps/outputs/filen/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "3.0.52", + "version": "3.0.53", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'io.filen.desktop';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'io.filen.desktop' AND version_compare(bundle_short_version, '3.0.52') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'io.filen.desktop' AND version_compare(bundle_short_version, '3.0.53') < 0);" }, - "installer_url": "https://cdn.filen.io/@filen/desktop/release/v3.0.52/Filen_mac_arm64.dmg", + "installer_url": "https://cdn.filen.io/@filen/desktop/release/v3.0.53/Filen_mac_arm64.dmg", "install_script_ref": "a77addd7", "uninstall_script_ref": "357adb6a", - "sha256": "8ce4e9cba97686b4715d3c261dd1b93a36299e90b0ade9b66ed283859ac228bd", + "sha256": "d2a34dc111746abacdf27a684d8e7f9987e0d7279d1989d89a6dcef25842b233", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/firefox@nightly/darwin.json b/ee/maintained-apps/outputs/firefox@nightly/darwin.json index 96ad12af97..5bc6bb63af 100644 --- a/ee/maintained-apps/outputs/firefox@nightly/darwin.json +++ b/ee/maintained-apps/outputs/firefox@nightly/darwin.json @@ -6,10 +6,10 @@ "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.mozilla.nightly';", "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.mozilla.nightly' AND version_compare(bundle_version, '15526.7.21') < 0);" }, - "installer_url": "https://ftp.mozilla.org/pub/firefox/nightly/2026/07/2026-07-21-09-46-48-mozilla-central/firefox-155.0a1.en-US.mac.dmg", + "installer_url": "https://ftp.mozilla.org/pub/firefox/nightly/2026/07/2026-07-21-20-23-27-mozilla-central/firefox-155.0a1.en-US.mac.dmg", "install_script_ref": "418c9331", "uninstall_script_ref": "d7c711ad", - "sha256": "9d33b42372f73ee68c76b7c7ea3247a3ef2590ab44bed743efcbab154f525d7c", + "sha256": "7aed87246486b561daa4a72dc6165acdbd1a767fdb6174d506dce10d372caadd", "default_categories": [ "Browsers" ] diff --git a/ee/maintained-apps/outputs/firefox@nightly/windows.json b/ee/maintained-apps/outputs/firefox@nightly/windows.json index ce0765f98e..10cb16f641 100644 --- a/ee/maintained-apps/outputs/firefox@nightly/windows.json +++ b/ee/maintained-apps/outputs/firefox@nightly/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "154.2607.2009.0", + "version": "155.2607.2120.0", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Firefox Nightly' AND publisher = 'Mozilla Corporation';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Firefox Nightly' AND publisher = 'Mozilla Corporation' AND version_compare(version, '154.2607.2009.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Firefox Nightly' AND publisher = 'Mozilla Corporation' AND version_compare(version, '155.2607.2120.0') < 0);" }, - "installer_url": "https://ftp.mozilla.org/pub/firefox/nightly/2026/07/2026-07-20-09-21-50-mozilla-central/firefox-154.0a1.multi.win64.installer.msix", + "installer_url": "https://ftp.mozilla.org/pub/firefox/nightly/2026/07/2026-07-21-20-23-27-mozilla-central/firefox-155.0a1.multi.win64.installer.msix", "install_script_ref": "255e7c51", "uninstall_script_ref": "f0d0fed1", - "sha256": "dd09241635cdb4f82ea57dea0b32654ae2d106e9584099901f321d93a331e3f9", + "sha256": "1a2dbd9e870f921cc511a04864624a83abc9fcab2fc2a4b9af9a45299753c391", "default_categories": [ "Browsers" ] diff --git a/ee/maintained-apps/outputs/flexoptix/darwin.json b/ee/maintained-apps/outputs/flexoptix/darwin.json index 299c2968b1..4be2bccf32 100644 --- a/ee/maintained-apps/outputs/flexoptix/darwin.json +++ b/ee/maintained-apps/outputs/flexoptix/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "5.65.1-latest", + "version": "5.66.0-latest", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'net.flexoptix.flexoptix.app';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'net.flexoptix.flexoptix.app' AND version_compare(bundle_short_version, '5.65.1-latest') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'net.flexoptix.flexoptix.app' AND version_compare(bundle_short_version, '5.66.0-latest') < 0);" }, - "installer_url": "https://flexbox.reconfigure.me/download/electron/mac/arm64/FLEXOPTIX%20App-5.65.1-latest-arm64.dmg", + "installer_url": "https://flexbox.reconfigure.me/download/electron/mac/arm64/FLEXOPTIX%20App-5.66.0-latest-arm64.dmg", "install_script_ref": "f02733f2", "uninstall_script_ref": "38a5d563", - "sha256": "415ee5dc9c0e2ea22f885ec587006ba59f4eda0e959668fdf10577270b246dce", + "sha256": "86749fee72e420611191ba9e52bec5101aec5fc105f34df63309c3662fa79eb0", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/gitify/darwin.json b/ee/maintained-apps/outputs/gitify/darwin.json index 2afe1342c3..7f94bbec0c 100644 --- a/ee/maintained-apps/outputs/gitify/darwin.json +++ b/ee/maintained-apps/outputs/gitify/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "6.20.0", + "version": "7.0.0", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.gitify';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.gitify' AND version_compare(bundle_short_version, '6.20.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.gitify' AND version_compare(bundle_short_version, '7.0.0') < 0);" }, - "installer_url": "https://github.com/gitify-app/gitify/releases/download/v6.20.0/Gitify-6.20.0-universal-mac.zip", + "installer_url": "https://github.com/gitify-app/gitify/releases/download/v7.0.0/Gitify-7.0.0-universal-mac.zip", "install_script_ref": "4dfde5cf", "uninstall_script_ref": "65bf9482", - "sha256": "8fc383a66b7190e33b488bdd208178e35e4cbc9d22eb8bd3d3931ab9f3e77a1b", + "sha256": "2c6f2a64323cedc5b02edfc8798908457f93930e5e97dc80c75b557ae6dbd91b", "default_categories": [ "Utilities" ] diff --git a/ee/maintained-apps/outputs/google-chrome/darwin.json b/ee/maintained-apps/outputs/google-chrome/darwin.json index 5f05db018e..4aa9f7baa2 100644 --- a/ee/maintained-apps/outputs/google-chrome/darwin.json +++ b/ee/maintained-apps/outputs/google-chrome/darwin.json @@ -1,10 +1,10 @@ { "versions": [ { - "version": "150.0.7871.129", + "version": "150.0.7871.182", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.google.Chrome';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.google.Chrome' AND version_compare(bundle_short_version, '150.0.7871.129') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.google.Chrome' AND version_compare(bundle_short_version, '150.0.7871.182') < 0);" }, "installer_url": "https://dl.google.com/dl/chrome/mac/universal/stable/gcem/GoogleChrome.pkg", "install_script_ref": "bf744c88", diff --git a/ee/maintained-apps/outputs/google-chrome/windows.json b/ee/maintained-apps/outputs/google-chrome/windows.json index 9bc0dfafb5..4ddae9ce7f 100644 --- a/ee/maintained-apps/outputs/google-chrome/windows.json +++ b/ee/maintained-apps/outputs/google-chrome/windows.json @@ -1,10 +1,10 @@ { "versions": [ { - "version": "150.0.7871.129", + "version": "150.0.7871.182", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Google Chrome' AND publisher = 'Google LLC';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Google Chrome' AND publisher = 'Google LLC' AND version_compare(version, '150.0.7871.129') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Google Chrome' AND publisher = 'Google LLC' AND version_compare(version, '150.0.7871.182') < 0);" }, "installer_url": "https://dl.google.com/dl/chrome/install/googlechromestandaloneenterprise64.msi", "install_script_ref": "8959087b", diff --git a/ee/maintained-apps/outputs/hive-app/darwin.json b/ee/maintained-apps/outputs/hive-app/darwin.json index 3b11bbe53b..6df0436c87 100644 --- a/ee/maintained-apps/outputs/hive-app/darwin.json +++ b/ee/maintained-apps/outputs/hive-app/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.2.19", + "version": "1.2.20", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.hive.app';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hive.app' AND version_compare(bundle_short_version, '1.2.19') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hive.app' AND version_compare(bundle_short_version, '1.2.20') < 0);" }, - "installer_url": "https://github.com/morapelker/hive/releases/download/v1.2.19/Hive-1.2.19-arm64.dmg", + "installer_url": "https://github.com/morapelker/hive/releases/download/v1.2.20/Hive-1.2.20-arm64.dmg", "install_script_ref": "6b39e7ad", "uninstall_script_ref": "78bb4e43", - "sha256": "3990dc3c56c60a32a5693f3ad9b507ef56798b2bf5dec59b26d87d39eb061a1f", + "sha256": "e0023d701ba2fc8f195dcee11624e0e46fed86888f8c1ed73fffb4d53d9b96e7", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/kiro/darwin.json b/ee/maintained-apps/outputs/kiro/darwin.json index 2de82d9062..32edd50dc9 100644 --- a/ee/maintained-apps/outputs/kiro/darwin.json +++ b/ee/maintained-apps/outputs/kiro/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.0.182", + "version": "1.0.198", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'dev.kiro.desktop';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'dev.kiro.desktop' AND version_compare(bundle_short_version, '1.0.182') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'dev.kiro.desktop' AND version_compare(bundle_short_version, '1.0.198') < 0);" }, - "installer_url": "https://prod.download.desktop.kiro.dev/releases/stable/darwin-arm64/signed/1.0.182/kiro-ide-1.0.182-stable-darwin-arm64.dmg", + "installer_url": "https://prod.download.desktop.kiro.dev/releases/stable/darwin-arm64/signed/1.0.198/kiro-ide-1.0.198-stable-darwin-arm64.dmg", "install_script_ref": "28c3d1eb", "uninstall_script_ref": "b5d79db0", - "sha256": "afe063cafd94622daf9844b37572826948a096cb46754a3ce3cd4bc131bd0dea", + "sha256": "172605f2faf84ec4047d5e7890306fda2df5149a8ee9abd52bbd848bcc7ba556", "default_categories": [ "Developer tools" ] diff --git a/ee/maintained-apps/outputs/kiro/windows.json b/ee/maintained-apps/outputs/kiro/windows.json index 2faef32c23..5816a8e4e1 100644 --- a/ee/maintained-apps/outputs/kiro/windows.json +++ b/ee/maintained-apps/outputs/kiro/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.0.182", + "version": "1.0.198", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Kiro (User)' AND publisher = 'Amazon Web Services';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Kiro (User)' AND publisher = 'Amazon Web Services' AND version_compare(version, '1.0.182') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Kiro (User)' AND publisher = 'Amazon Web Services' AND version_compare(version, '1.0.198') < 0);" }, - "installer_url": "https://prod.download.desktop.kiro.dev/releases/stable/win32-x64/signed/1.0.182/kiro-ide-1.0.182-stable-win32-x64.exe", + "installer_url": "https://prod.download.desktop.kiro.dev/releases/stable/win32-x64/signed/1.0.198/kiro-ide-1.0.198-stable-win32-x64.exe", "install_script_ref": "c5bc3c21", "uninstall_script_ref": "afe8f2fa", - "sha256": "8e82d97f492961fbeef41db2bb0636a7e173b1ea05402eb744068d994f1c687d", + "sha256": "b7614f5c9b11df95c8628d70c54b038ec02415555699dcb081ba86199b2c7f77", "default_categories": [ "Developer tools" ] diff --git a/ee/maintained-apps/outputs/mailspring/darwin.json b/ee/maintained-apps/outputs/mailspring/darwin.json index cb2310d957..19c345900f 100644 --- a/ee/maintained-apps/outputs/mailspring/darwin.json +++ b/ee/maintained-apps/outputs/mailspring/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.22.0", + "version": "1.23.0", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.mailspring.mailspring';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.mailspring.mailspring' AND version_compare(bundle_short_version, '1.22.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.mailspring.mailspring' AND version_compare(bundle_short_version, '1.23.0') < 0);" }, - "installer_url": "https://github.com/Foundry376/Mailspring/releases/download/1.22.0/Mailspring-AppleSilicon.zip", + "installer_url": "https://github.com/Foundry376/Mailspring/releases/download/1.23.0/Mailspring-AppleSilicon.zip", "install_script_ref": "486cead2", "uninstall_script_ref": "d87f7bb0", - "sha256": "c1097dd6f520c4e245f0b08014ed24ee544b7990332463b512970d13d0cd8be3", + "sha256": "a9f641d9dfc9a5f0a3ecb87b3492ab416c0a8cbdfcd3ec424d7ae99e180886ea", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/megasync/darwin.json b/ee/maintained-apps/outputs/megasync/darwin.json index ee008e96b2..1a038ad37a 100644 --- a/ee/maintained-apps/outputs/megasync/darwin.json +++ b/ee/maintained-apps/outputs/megasync/darwin.json @@ -1,10 +1,10 @@ { "versions": [ { - "version": "6.4.0.2", + "version": "6.5.0.2", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'mega.mac';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'mega.mac' AND version_compare(bundle_short_version, '6.4.0.2') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'mega.mac' AND version_compare(bundle_short_version, '6.5.0.2') < 0);" }, "installer_url": "https://mega.nz/MEGAsyncSetupArm64.dmg", "install_script_ref": "eabe95a2", diff --git a/ee/maintained-apps/outputs/microsoft-excel/darwin.json b/ee/maintained-apps/outputs/microsoft-excel/darwin.json index 730a3460ce..13543f19c9 100644 --- a/ee/maintained-apps/outputs/microsoft-excel/darwin.json +++ b/ee/maintained-apps/outputs/microsoft-excel/darwin.json @@ -1,10 +1,10 @@ { "versions": [ { - "version": "16.111", + "version": "16.111.1", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Excel';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Excel' AND version_compare(bundle_short_version, '16.111') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Excel' AND version_compare(bundle_short_version, '16.111.1') < 0);" }, "installer_url": "https://res.public.onecdn.static.microsoft/mro1cdnstorage/C1297A47-86C4-4C1F-97FA-950631F94777/MacAutoupdate/Microsoft_Excel_16.111.26071913_Installer.pkg", "install_script_ref": "a058ee4b", diff --git a/ee/maintained-apps/outputs/microsoft-onenote/darwin.json b/ee/maintained-apps/outputs/microsoft-onenote/darwin.json index f7a81815f9..7e08178cde 100644 --- a/ee/maintained-apps/outputs/microsoft-onenote/darwin.json +++ b/ee/maintained-apps/outputs/microsoft-onenote/darwin.json @@ -1,10 +1,10 @@ { "versions": [ { - "version": "16.111", + "version": "16.111.1", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.onenote.mac';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.onenote.mac' AND version_compare(bundle_short_version, '16.111') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.onenote.mac' AND version_compare(bundle_short_version, '16.111.1') < 0);" }, "installer_url": "https://res.public.onecdn.static.microsoft/mro1cdnstorage/C1297A47-86C4-4C1F-97FA-950631F94777/MacAutoupdate/Microsoft_OneNote_16.111.26071913_Updater.pkg", "install_script_ref": "fe16d50a", diff --git a/ee/maintained-apps/outputs/microsoft-powerpoint/darwin.json b/ee/maintained-apps/outputs/microsoft-powerpoint/darwin.json index 28f8b49484..bc4b8b28c1 100644 --- a/ee/maintained-apps/outputs/microsoft-powerpoint/darwin.json +++ b/ee/maintained-apps/outputs/microsoft-powerpoint/darwin.json @@ -1,10 +1,10 @@ { "versions": [ { - "version": "16.111", + "version": "16.111.1", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Powerpoint';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Powerpoint' AND version_compare(bundle_short_version, '16.111') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Powerpoint' AND version_compare(bundle_short_version, '16.111.1') < 0);" }, "installer_url": "https://res.public.onecdn.static.microsoft/mro1cdnstorage/C1297A47-86C4-4C1F-97FA-950631F94777/MacAutoupdate/Microsoft_PowerPoint_16.111.26071913_Installer.pkg", "install_script_ref": "daf855a0", diff --git a/ee/maintained-apps/outputs/microsoft-word/darwin.json b/ee/maintained-apps/outputs/microsoft-word/darwin.json index 529661b575..c6b59a5744 100644 --- a/ee/maintained-apps/outputs/microsoft-word/darwin.json +++ b/ee/maintained-apps/outputs/microsoft-word/darwin.json @@ -1,10 +1,10 @@ { "versions": [ { - "version": "16.111", + "version": "16.111.1", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Word';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Word' AND version_compare(bundle_short_version, '16.111') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.microsoft.Word' AND version_compare(bundle_short_version, '16.111.1') < 0);" }, "installer_url": "https://res.public.onecdn.static.microsoft/mro1cdnstorage/C1297A47-86C4-4C1F-97FA-950631F94777/MacAutoupdate/Microsoft_Word_16.111.26071913_Installer.pkg", "install_script_ref": "e06030dd", diff --git a/ee/maintained-apps/outputs/milanote/darwin.json b/ee/maintained-apps/outputs/milanote/darwin.json index cd1e3d591a..9e3e56b93c 100644 --- a/ee/maintained-apps/outputs/milanote/darwin.json +++ b/ee/maintained-apps/outputs/milanote/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "3.18.115", + "version": "3.18.116", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.milanote.app';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.milanote.app' AND version_compare(bundle_short_version, '3.18.115') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.milanote.app' AND version_compare(bundle_short_version, '3.18.116') < 0);" }, - "installer_url": "https://milanote-app-releases.s3.amazonaws.com/Milanote-3.18.115.dmg", + "installer_url": "https://milanote-app-releases.s3.amazonaws.com/Milanote-3.18.116.dmg", "install_script_ref": "ed82e649", "uninstall_script_ref": "19269206", - "sha256": "b28cf995c3740544686c31aa19284937691bf001bbe90dc442386a3fca302d48", + "sha256": "8948ea92837da5889f29144db8096981ceb0cfa2363db7b7e7f39d5da1087a5c", "default_categories": [ "Developer tools" ] diff --git a/ee/maintained-apps/outputs/miro/darwin.json b/ee/maintained-apps/outputs/miro/darwin.json index 73fb74fe3d..92ca86bd11 100644 --- a/ee/maintained-apps/outputs/miro/darwin.json +++ b/ee/maintained-apps/outputs/miro/darwin.json @@ -1,10 +1,10 @@ { "versions": [ { - "version": "0.11.160", + "version": "0.11.162", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.realtimeboard';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.realtimeboard' AND version_compare(bundle_short_version, '0.11.160') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.realtimeboard' AND version_compare(bundle_short_version, '0.11.162') < 0);" }, "installer_url": "https://desktop.miro.com/platforms/darwin-arm64/Install-Miro.dmg", "install_script_ref": "ea60f0ac", diff --git a/ee/maintained-apps/outputs/notion/darwin.json b/ee/maintained-apps/outputs/notion/darwin.json index cdaad5aca0..58a57003bf 100644 --- a/ee/maintained-apps/outputs/notion/darwin.json +++ b/ee/maintained-apps/outputs/notion/darwin.json @@ -8,7 +8,7 @@ }, "installer_url": "https://desktop-release.notion-static.com/Notion-7.27.0-arm64.dmg", "install_script_ref": "20b617ec", - "uninstall_script_ref": "5400135a", + "uninstall_script_ref": "ac52c373", "sha256": "436d41aa3171252138de5b45c57cd85b9c7150d4c0b08c4e8d171e13700d4994", "default_categories": [ "Productivity" @@ -17,6 +17,6 @@ ], "refs": { "20b617ec": "#!/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 'notion.id'\nif [ -d \"$APPDIR/Notion.app\" ]; then\n\tsudo mv \"$APPDIR/Notion.app\" \"$TMPDIR/Notion.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Notion.app\" \"$APPDIR\"\nrelaunch_application 'notion.id'\n", - "5400135a": "#!/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/Notion.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Caches/notion-updater'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/notion.id.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Notion'\ntrash $LOGGED_IN_USER '~/Library/Caches/notion.id*'\ntrash $LOGGED_IN_USER '~/Library/Logs/Notion'\ntrash $LOGGED_IN_USER '~/Library/Preferences/ByHost/notion.id.*'\ntrash $LOGGED_IN_USER '~/Library/Preferences/notion.id.*'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/notion.id.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/notion.id'\n" + "ac52c373": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"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 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\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\nquit_application 'notion.id'\nsudo rm -rf \"$APPDIR/Notion.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Caches/notion-updater'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/notion.id.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Notion'\ntrash $LOGGED_IN_USER '~/Library/Caches/notion.id*'\ntrash $LOGGED_IN_USER '~/Library/Logs/Notion'\ntrash $LOGGED_IN_USER '~/Library/Preferences/ByHost/notion.id.*'\ntrash $LOGGED_IN_USER '~/Library/Preferences/notion.id.*'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/notion.id.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/notion.id'\n" } } diff --git a/ee/maintained-apps/outputs/postman/darwin.json b/ee/maintained-apps/outputs/postman/darwin.json index 13ee7bf7ac..e754980d9c 100644 --- a/ee/maintained-apps/outputs/postman/darwin.json +++ b/ee/maintained-apps/outputs/postman/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "12.20.1", + "version": "12.20.2", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.postmanlabs.mac';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.postmanlabs.mac' AND version_compare(bundle_short_version, '12.20.1') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.postmanlabs.mac' AND version_compare(bundle_short_version, '12.20.2') < 0);" }, - "installer_url": "https://dl.pstmn.io/download/version/12.20.1/osx_arm64", + "installer_url": "https://dl.pstmn.io/download/version/12.20.2/osx_arm64", "install_script_ref": "96d73870", "uninstall_script_ref": "966b2fa5", - "sha256": "3a664372c2f10f3160ea4fba2ca28618bdb0297170d8093b7eda06710eb4a2c0", + "sha256": "11ad485ab8fa266f8e155df4619ab49dea0b4df894fb35256ebf3d15685072da", "default_categories": [ "Developer tools" ] diff --git a/ee/maintained-apps/outputs/postman/windows.json b/ee/maintained-apps/outputs/postman/windows.json index 62119ded18..2357eb3350 100644 --- a/ee/maintained-apps/outputs/postman/windows.json +++ b/ee/maintained-apps/outputs/postman/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "12.20.1", + "version": "12.20.2", "queries": { "exists": "SELECT 1 FROM programs WHERE name LIKE 'Postman x64 %' AND publisher = 'Postman';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Postman x64 %' AND publisher = 'Postman' AND version_compare(version, '12.20.1') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Postman x64 %' AND publisher = 'Postman' AND version_compare(version, '12.20.2') < 0);" }, - "installer_url": "https://dl.pstmn.io/download/version/12.20.1/windows_64", + "installer_url": "https://dl.pstmn.io/download/version/12.20.2/windows_64", "install_script_ref": "8594f0bc", "uninstall_script_ref": "fd59d029", - "sha256": "7df7a40a51aa88fe0c97e946dfd2b882b6ac98007235a07579369df985d3eefd", + "sha256": "4d1b199005f2c564a08be89af7252ec716e36aa1bb82e74e7fc13ed449bbb615", "default_categories": [ "Developer tools" ] diff --git a/ee/maintained-apps/outputs/power-bi/windows.json b/ee/maintained-apps/outputs/power-bi/windows.json index 96953e4411..0f159b72d9 100644 --- a/ee/maintained-apps/outputs/power-bi/windows.json +++ b/ee/maintained-apps/outputs/power-bi/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2.155.756.0", + "version": "2.156.951.0", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Microsoft Power BI Desktop (x64)' AND publisher = 'Microsoft Corporation';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Microsoft Power BI Desktop (x64)' AND publisher = 'Microsoft Corporation' AND version_compare(version, '2.155.756.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Microsoft Power BI Desktop (x64)' AND publisher = 'Microsoft Corporation' AND version_compare(version, '2.156.951.0') < 0);" }, - "installer_url": "https://download.microsoft.com/download/8/8/0/880BCA75-79DD-466A-927D-1ABF1F5454B0/PBIDesktopSetup-2026-06_x64.exe", + "installer_url": "https://download.microsoft.com/download/8/8/0/880BCA75-79DD-466A-927D-1ABF1F5454B0/PBIDesktopSetup-2026-07_x64.exe", "install_script_ref": "cc478c11", "uninstall_script_ref": "abc3b459", - "sha256": "d73aaadbb3e22095057be5eae8d3b8ac96b33be17d18d41e58c4c39493e3d185", + "sha256": "ff265b2dd4a52e77475452de014ed5babb4c73b83284fc17adda7d774a62c5c4", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/prisma-browser/darwin.json b/ee/maintained-apps/outputs/prisma-browser/darwin.json index 016fa01f4a..db20e4f9fb 100644 --- a/ee/maintained-apps/outputs/prisma-browser/darwin.json +++ b/ee/maintained-apps/outputs/prisma-browser/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "150.49.5.129", + "version": "150.49.7.182", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.talon-sec.Work';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.talon-sec.Work' AND version_compare(bundle_short_version, '150.49.5.129') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.talon-sec.Work' AND version_compare(bundle_short_version, '150.49.7.182') < 0);" }, - "installer_url": "https://updates.talon-sec.com/releases/Prisma%20Access%20Browser/mac/packaged/universal/Prisma%20Access%20Browser-150.49.5.129-6a8a165d.pkg", + "installer_url": "https://updates.talon-sec.com/releases/Prisma%20Access%20Browser/mac/packaged/universal/Prisma%20Access%20Browser-150.49.7.182-c674b580.pkg", "install_script_ref": "7381dac4", "uninstall_script_ref": "ff947f47", - "sha256": "4bcf5d4532851a02a62cbcd84adcb3ca50cc1b2670102f16639e78f0a2672943", + "sha256": "1a4c888b95cd435877ee58a6e030fa4af71de45c0a16b0012e6b32e18b88f0fe", "default_categories": [ "Browsers" ] diff --git a/ee/maintained-apps/outputs/qlab/darwin.json b/ee/maintained-apps/outputs/qlab/darwin.json index a122719b03..999317c6da 100644 --- a/ee/maintained-apps/outputs/qlab/darwin.json +++ b/ee/maintained-apps/outputs/qlab/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "5.6.2", + "version": "5.6.3", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.figure53.QLab.5';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.figure53.QLab.5' AND version_compare(bundle_short_version, '5.6.2') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.figure53.QLab.5' AND version_compare(bundle_short_version, '5.6.3') < 0);" }, - "installer_url": "https://qlab.app/downloads/archive/QLab-5.6.2.zip", + "installer_url": "https://qlab.app/downloads/archive/QLab-5.6.3.zip", "install_script_ref": "00ad3e5d", "uninstall_script_ref": "a60a2320", - "sha256": "923df9c0ef8c0b659439fdfb0111b022dd841692e4b0672a34a56b7e439436fa", + "sha256": "fa655221b20f5add503faedfacd1d8d3b37a24f0ac7b05736c3e61e905300dea", "default_categories": [ "Developer tools" ] diff --git a/ee/maintained-apps/outputs/remote-desktop-manager/windows.json b/ee/maintained-apps/outputs/remote-desktop-manager/windows.json index fb943dd78a..096c2582eb 100644 --- a/ee/maintained-apps/outputs/remote-desktop-manager/windows.json +++ b/ee/maintained-apps/outputs/remote-desktop-manager/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2026.2.14.0", + "version": "2026.2.16.0", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Remote Desktop Manager' AND publisher = 'Devolutions inc.';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Remote Desktop Manager' AND publisher = 'Devolutions inc.' AND version_compare(version, '2026.2.14.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Remote Desktop Manager' AND publisher = 'Devolutions inc.' AND version_compare(version, '2026.2.16.0') < 0);" }, - "installer_url": "https://cdn.devolutions.net/download/Setup.RemoteDesktopManager.win-x64.2026.2.14.0.msi", + "installer_url": "https://cdn.devolutions.net/download/Setup.RemoteDesktopManager.win-x64.2026.2.16.0.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "df5e7f6c", - "sha256": "96c855f8941eefeba9893f33b1d71c3191e67f76db901e8fd69fa943996542b2", + "sha256": "8caa52f37bda1a03f984f89b80af54154b6cb501f27951ff9f669ebd27090f5e", "default_categories": [ "Productivity" ], diff --git a/ee/maintained-apps/outputs/rive/darwin.json b/ee/maintained-apps/outputs/rive/darwin.json index 5dcba120aa..32e88a0565 100644 --- a/ee/maintained-apps/outputs/rive/darwin.json +++ b/ee/maintained-apps/outputs/rive/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "0.8.5165", + "version": "0.8.5252", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'app.rive.editor';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'app.rive.editor' AND version_compare(bundle_short_version, '0.8.5165') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'app.rive.editor' AND version_compare(bundle_short_version, '0.8.5252') < 0);" }, - "installer_url": "https://releases.rive.app/macos/0.8.5165/Rive.dmg", + "installer_url": "https://releases.rive.app/macos/0.8.5252/Rive.dmg", "install_script_ref": "2bbfee4e", "uninstall_script_ref": "8f862785", - "sha256": "c5d4ee7488cc2eaccc7a3d545b5fb98b4899b22885475e65bd1acd1585612cf0", + "sha256": "6029962923dd8ff06f37f17df2ec86e50dd517a82ba8b4f83f23b9e793ee8f53", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/rustrover/darwin.json b/ee/maintained-apps/outputs/rustrover/darwin.json index 96d38d636c..50be414fd7 100644 --- a/ee/maintained-apps/outputs/rustrover/darwin.json +++ b/ee/maintained-apps/outputs/rustrover/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2026.1.4", + "version": "2026.2", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.jetbrains.rustrover';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.jetbrains.rustrover' AND version_compare(bundle_short_version, '2026.1.4') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.jetbrains.rustrover' AND version_compare(bundle_short_version, '2026.2') < 0);" }, - "installer_url": "https://download.jetbrains.com/rustrover/RustRover-2026.1.4-aarch64.dmg", + "installer_url": "https://download.jetbrains.com/rustrover/RustRover-2026.2-aarch64.dmg", "install_script_ref": "250e5b10", - "uninstall_script_ref": "bfcf7fb3", - "sha256": "1e5cb8341bfd9a0fd1326c4233a9bdc39792fc243bc9cc69ed5d95419c321901", + "uninstall_script_ref": "42cbf565", + "sha256": "fdc76f5dfd2a617c60222fae87d3ba23428800e57b67b410fa5579636c54372d", "default_categories": [ "Developer tools" ] @@ -17,6 +17,6 @@ ], "refs": { "250e5b10": "#!/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 'com.jetbrains.rustrover'\nif [ -d \"$APPDIR/RustRover.app\" ]; then\n\tsudo mv \"$APPDIR/RustRover.app\" \"$TMPDIR/RustRover.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/RustRover.app\" \"$APPDIR\"\nrelaunch_application 'com.jetbrains.rustrover'\n", - "bfcf7fb3": "#!/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/RustRover.app\"\nsudo rm -rf 'rustrover'\ntrash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/RustRover2026.1'\ntrash $LOGGED_IN_USER '~/Library/Caches/JetBrains/RustRover2026.1'\ntrash $LOGGED_IN_USER '~/Library/Logs/JetBrains/RustRover2026.1'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.rustrover.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.rustrover.savedState'\n" + "42cbf565": "#!/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/RustRover.app\"\nsudo rm -rf 'rustrover'\ntrash $LOGGED_IN_USER '~/Library/Application Support/JetBrains/RustRover2026.2'\ntrash $LOGGED_IN_USER '~/Library/Caches/JetBrains/RustRover2026.2'\ntrash $LOGGED_IN_USER '~/Library/Logs/JetBrains/RustRover2026.2'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.jetbrains.rustrover.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.jetbrains.rustrover.savedState'\n" } } diff --git a/ee/maintained-apps/outputs/tableau-prep/darwin.json b/ee/maintained-apps/outputs/tableau-prep/darwin.json index 04e0b66581..46a83611f1 100644 --- a/ee/maintained-apps/outputs/tableau-prep/darwin.json +++ b/ee/maintained-apps/outputs/tableau-prep/darwin.json @@ -1,22 +1,22 @@ { "versions": [ { - "version": "2026.2.0", + "version": "2026.2.1", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.tableau.Tableau-Prep-tableau-2026-1';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.tableau.Tableau-Prep-tableau-2026-1' AND version_compare(bundle_short_version, '2026.2.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.tableau.Tableau-Prep-tableau-2026-1' AND version_compare(bundle_short_version, '2026.2.1') < 0);" }, - "installer_url": "https://downloads.tableau.com/esdalt/tableau_prep/2026.2.0/TableauPrep-2026-2-0-arm64.dmg", + "installer_url": "https://downloads.tableau.com/esdalt/tableau_prep/2026.2.1/TableauPrep-2026-2-1-arm64.dmg", "install_script_ref": "42b99ade", - "uninstall_script_ref": "0e43d8e1", - "sha256": "9ca590ae9e2a77b1a8469942708465314ccda4e48a23b21e822144f1ffed42be", + "uninstall_script_ref": "a510632b", + "sha256": "b4d450c3b4c4de918abd292b37825c8c46dd8d00ce45501587f1bdb365f80834", "default_categories": [ "Productivity" ] } ], "refs": { - "0e43d8e1": "#!/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\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\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\nremove_pkg_files 'com.amazon.redshiftodbc'\nforget_pkg 'com.amazon.redshiftodbc'\nremove_pkg_files 'com.simba.sparkodbc'\nforget_pkg 'com.simba.sparkodbc'\nremove_pkg_files 'com.simba.sqlserverodbc'\nforget_pkg 'com.simba.sqlserverodbc'\nremove_pkg_files 'com.tableausoftware.desktopShortcut'\nforget_pkg 'com.tableausoftware.desktopShortcut'\nremove_pkg_files 'com.tableausoftware.FLEXNet.11.*'\nforget_pkg 'com.tableausoftware.FLEXNet.11.*'\nremove_pkg_files 'com.tableausoftware.Maestro.app'\nforget_pkg 'com.tableausoftware.Maestro.app'\nremove_pkg_files 'com.tableausoftware.oracle'\nforget_pkg 'com.tableausoftware.oracle'\nremove_pkg_files 'com.tableausoftware.postgresql'\nforget_pkg 'com.tableausoftware.postgresql'\nremove_pkg_files 'com.tableausoftware.telemetry'\nforget_pkg 'com.tableausoftware.telemetry'\nremove_pkg_files 'simba.sparkodbc'\nforget_pkg 'simba.sparkodbc'\nsudo rm -rf '/Library/Application Support/Tableau Prep Builder'\nsudo rm -rf '/Library/Preferences/FLEXnet Publisher'\ntrash $LOGGED_IN_USER '~/Documents/My Tableau Prep Repository'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Tableau Prep Builder 2026.2.0'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.tableau.caching'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.tableau.Tableau-Prep-tableau-2026-2.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.tableausoftware.tableauprep.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.tableausoftware.tabminerva.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.tableausoftware.tableauprep.savedState'\ntrash $LOGGED_IN_USER '~/Library/Tableau'\n", - "42b99ade": "#!/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# install pkg files\nquit_and_track_application 'com.tableau.Tableau-Prep-tableau-2026-1'\nsudo installer -pkg \"$TMPDIR/Tableau Prep Builder.pkg\" -target /\nrelaunch_application 'com.tableau.Tableau-Prep-tableau-2026-1'\n" + "42b99ade": "#!/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# install pkg files\nquit_and_track_application 'com.tableau.Tableau-Prep-tableau-2026-1'\nsudo installer -pkg \"$TMPDIR/Tableau Prep Builder.pkg\" -target /\nrelaunch_application 'com.tableau.Tableau-Prep-tableau-2026-1'\n", + "a510632b": "#!/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\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\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\nremove_pkg_files 'com.amazon.redshiftodbc'\nforget_pkg 'com.amazon.redshiftodbc'\nremove_pkg_files 'com.simba.sparkodbc'\nforget_pkg 'com.simba.sparkodbc'\nremove_pkg_files 'com.simba.sqlserverodbc'\nforget_pkg 'com.simba.sqlserverodbc'\nremove_pkg_files 'com.tableausoftware.desktopShortcut'\nforget_pkg 'com.tableausoftware.desktopShortcut'\nremove_pkg_files 'com.tableausoftware.FLEXNet.11.*'\nforget_pkg 'com.tableausoftware.FLEXNet.11.*'\nremove_pkg_files 'com.tableausoftware.Maestro.app'\nforget_pkg 'com.tableausoftware.Maestro.app'\nremove_pkg_files 'com.tableausoftware.oracle'\nforget_pkg 'com.tableausoftware.oracle'\nremove_pkg_files 'com.tableausoftware.postgresql'\nforget_pkg 'com.tableausoftware.postgresql'\nremove_pkg_files 'com.tableausoftware.telemetry'\nforget_pkg 'com.tableausoftware.telemetry'\nremove_pkg_files 'simba.sparkodbc'\nforget_pkg 'simba.sparkodbc'\nsudo rm -rf '/Library/Application Support/Tableau Prep Builder'\nsudo rm -rf '/Library/Preferences/FLEXnet Publisher'\ntrash $LOGGED_IN_USER '~/Documents/My Tableau Prep Repository'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Tableau Prep Builder 2026.2.1'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.tableau.caching'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.tableau.Tableau-Prep-tableau-2026-2.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.tableausoftware.tableauprep.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.tableausoftware.tabminerva.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.tableausoftware.tableauprep.savedState'\ntrash $LOGGED_IN_USER '~/Library/Tableau'\n" } } diff --git a/ee/maintained-apps/outputs/tableau/darwin.json b/ee/maintained-apps/outputs/tableau/darwin.json index 700618fe7d..cb300d9895 100644 --- a/ee/maintained-apps/outputs/tableau/darwin.json +++ b/ee/maintained-apps/outputs/tableau/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2026.2.0", + "version": "2026.2.1", "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.2.0') < 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.2.1') < 0);" }, - "installer_url": "https://downloads.tableau.com/esdalt/2026.2.0/TableauDesktop-2026-2-0-arm64.dmg", + "installer_url": "https://downloads.tableau.com/esdalt/2026.2.1/TableauDesktop-2026-2-1-arm64.dmg", "install_script_ref": "ee6c171c", "uninstall_script_ref": "95e2ce5d", - "sha256": "e2f60f6853461bd0a11098cb9df479a07df9c2bf263bc7a4a3c09d8b5d145571", + "sha256": "c5710b65cda0b902009f035983e8b4b1705645e3b9e578afe79dee370954d595", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/telegram/windows.json b/ee/maintained-apps/outputs/telegram/windows.json index dbe252fb39..36ae55aa6c 100644 --- a/ee/maintained-apps/outputs/telegram/windows.json +++ b/ee/maintained-apps/outputs/telegram/windows.json @@ -6,7 +6,7 @@ "exists": "SELECT 1 FROM programs WHERE name = 'Telegram Desktop' AND publisher = 'Telegram FZ-LLC';", "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Telegram Desktop' AND publisher = 'Telegram FZ-LLC' AND version_compare(version, '7.0.4') < 0);" }, - "installer_url": "https://td.telegram.org/tx64/tsetup-x64.7.0.4.exe", + "installer_url": "https://github.com/telegramdesktop/tdesktop/releases/download/v7.0.4/tsetup-x64.7.0.4.exe", "install_script_ref": "0b88a95e", "uninstall_script_ref": "42311f1b", "sha256": "f70bdb9ca2bf45cc4c33c83bc898b2e43a919ee013f71307976b66210b3171f7", diff --git a/ee/maintained-apps/outputs/thunderbird/darwin.json b/ee/maintained-apps/outputs/thunderbird/darwin.json index 422f360c59..0acb67d9f0 100644 --- a/ee/maintained-apps/outputs/thunderbird/darwin.json +++ b/ee/maintained-apps/outputs/thunderbird/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "152.0.1", + "version": "153.0", "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, '152.0.1') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.mozilla.thunderbird' AND version_compare(bundle_short_version, '153.0') < 0);" }, - "installer_url": "https://download-installer.cdn.mozilla.net/pub/thunderbird/releases/152.0.1/mac/en-US/Thunderbird%20152.0.1.dmg", + "installer_url": "https://download-installer.cdn.mozilla.net/pub/thunderbird/releases/153.0/mac/en-US/Thunderbird%20153.0.dmg", "install_script_ref": "7cfa15ee", "uninstall_script_ref": "88749f85", - "sha256": "2ddb04427a7153e2c25f2f118ba42d5904f73b8e8b7599a0761a30c774fc00c6", + "sha256": "b6941531638a0fe09e5ad30bf2aeba14fb5a73bb5e40511b505d0c8063463f6c", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/webex/darwin.json b/ee/maintained-apps/outputs/webex/darwin.json index 196e9da299..3d8f0a8dc6 100644 --- a/ee/maintained-apps/outputs/webex/darwin.json +++ b/ee/maintained-apps/outputs/webex/darwin.json @@ -1,10 +1,10 @@ { "versions": [ { - "version": "46.7.0.35381", + "version": "46.7.0.35472", "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.7.0.35381') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'Cisco-Systems.Spark' AND version_compare(bundle_short_version, '46.7.0.35472') < 0);" }, "installer_url": "https://binaries.webex.com/webex-macos-apple-silicon/Webex.dmg", "install_script_ref": "d105863f", diff --git a/ee/maintained-apps/outputs/wispr-flow/darwin.json b/ee/maintained-apps/outputs/wispr-flow/darwin.json index 20ae49335a..437b7cefaa 100644 --- a/ee/maintained-apps/outputs/wispr-flow/darwin.json +++ b/ee/maintained-apps/outputs/wispr-flow/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.6.168", + "version": "1.6.182", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.wispr-flow';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.wispr-flow' AND version_compare(bundle_short_version, '1.6.168') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.wispr-flow' AND version_compare(bundle_short_version, '1.6.182') < 0);" }, - "installer_url": "https://dl.wisprflow.com/wispr-flow/darwin/arm64/dmgs/Flow-v1.6.168.dmg", + "installer_url": "https://dl.wisprflow.com/wispr-flow/darwin/arm64/dmgs/Flow-v1.6.182.dmg", "install_script_ref": "3a49fcfd", "uninstall_script_ref": "e0cf2e96", - "sha256": "a70a7438125b9119608c4b9ee7bdb29d181a54a6ac3cb18e9a140e48d13b880a", + "sha256": "397e3ffcdf349fdce7fd45a321522a6a21a646aaeec55e3e734ff793bc3acc8d", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/zed/darwin.json b/ee/maintained-apps/outputs/zed/darwin.json index 7c94f57ed1..4c750e809b 100644 --- a/ee/maintained-apps/outputs/zed/darwin.json +++ b/ee/maintained-apps/outputs/zed/darwin.json @@ -8,7 +8,7 @@ }, "installer_url": "https://zed.dev/api/releases/stable/1.11.3/Zed-aarch64.dmg", "install_script_ref": "ad597b79", - "uninstall_script_ref": "2a2c7eb8", + "uninstall_script_ref": "9e70631b", "sha256": "0a4957f81595056a80088a2f9f52e9d16e8d0e94bc0cc0f2b2d1d40615bb8d35", "default_categories": [ "Developer tools" @@ -16,7 +16,7 @@ } ], "refs": { - "2a2c7eb8": "#!/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/Zed.app\"\nsudo rm -rf 'zed'\ntrash $LOGGED_IN_USER '~/.config/zed'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/dev.zed.zed.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Zed'\ntrash $LOGGED_IN_USER '~/Library/Caches/dev.zed.Zed'\ntrash $LOGGED_IN_USER '~/Library/Caches/Zed'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/dev.zed.Zed'\ntrash $LOGGED_IN_USER '~/Library/Logs/Zed'\ntrash $LOGGED_IN_USER '~/Library/Preferences/dev.zed.Zed.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/dev.zed.Zed.savedState'\n", + "9e70631b": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"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 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\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/Zed.app\"\nsudo rm -rf 'zed'\nquit_application 'dev.zed.Zed'\ntrash $LOGGED_IN_USER '~/.config/zed'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/dev.zed.zed.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Zed'\ntrash $LOGGED_IN_USER '~/Library/Caches/dev.zed.Zed'\ntrash $LOGGED_IN_USER '~/Library/Caches/Zed'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/dev.zed.Zed'\ntrash $LOGGED_IN_USER '~/Library/Logs/Zed'\ntrash $LOGGED_IN_USER '~/Library/Preferences/dev.zed.Zed.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/dev.zed.Zed.savedState'\n", "ad597b79": "#!/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 'dev.zed.Zed'\nif [ -d \"$APPDIR/Zed.app\" ]; then\n\tsudo mv \"$APPDIR/Zed.app\" \"$TMPDIR/Zed.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Zed.app\" \"$APPDIR\"\nrelaunch_application 'dev.zed.Zed'\nmkdir -p .\n/bin/ln -h -f -s -- \"$APPDIR/Zed.app/Contents/MacOS/cli\" \"zed\"\n" } }