From 15d376c8ec4038083a86f45573e47a161ced8bb9 Mon Sep 17 00:00:00 2001 From: fleet-release <80479975+fleet-release@users.noreply.github.com> Date: Mon, 22 Jun 2026 21:19:31 -0500 Subject: [PATCH] Update Fleet-maintained apps (#48056) Automated ingestion of latest Fleet-maintained app data. ## Summary by CodeRabbit * **Chores** * Updated version metadata and installer references for 25+ applications including Adobe Acrobat Pro, Antigravity IDE, AWS CLI, BoltAI, ChatGPT, ClickUp, Discord, Docker Desktop, DuckDuckGo, Figma, Genesys Cloud, LookAway, Loom, Nextcloud, Okta Verify, Podman Desktop, PortfolioPerformance, Rive, Superhuman, Sync, Teleport Connect, Teleport Suite, and Tuple across macOS and Windows platforms. --------- Co-authored-by: allenhouchins <32207388+allenhouchins@users.noreply.github.com> --- .../outputs/antigravity-ide/darwin.json | 8 ++++---- .../outputs/antigravity-ide/windows.json | 8 ++++---- ee/maintained-apps/outputs/aws-cli/windows.json | 8 ++++---- ee/maintained-apps/outputs/boltai/darwin.json | 8 ++++---- ee/maintained-apps/outputs/chatgpt/darwin.json | 8 ++++---- ee/maintained-apps/outputs/clickup/darwin.json | 8 ++++---- ee/maintained-apps/outputs/clickup/windows.json | 8 ++++---- ee/maintained-apps/outputs/discord/darwin.json | 8 ++++---- ee/maintained-apps/outputs/discord/windows.json | 8 ++++---- .../outputs/docker-desktop/darwin.json | 8 ++++---- ee/maintained-apps/outputs/duckduckgo/darwin.json | 8 ++++---- ee/maintained-apps/outputs/figma/darwin.json | 8 ++++---- .../outputs/genesys-cloud/windows.json | 8 ++++---- ee/maintained-apps/outputs/lookaway/darwin.json | 8 ++++---- ee/maintained-apps/outputs/loom/darwin.json | 8 ++++---- ee/maintained-apps/outputs/loom/windows.json | 8 ++++---- ee/maintained-apps/outputs/nextcloud/darwin.json | 14 +++++++------- ee/maintained-apps/outputs/okta-verify/darwin.json | 12 ++++++------ .../outputs/podman-desktop/darwin.json | 8 ++++---- .../outputs/portfolioperformance/darwin.json | 8 ++++---- ee/maintained-apps/outputs/rive/darwin.json | 8 ++++---- ee/maintained-apps/outputs/superhuman/darwin.json | 8 ++++---- ee/maintained-apps/outputs/sync/darwin.json | 8 ++++---- .../outputs/teleport-connect/darwin.json | 8 ++++---- .../outputs/teleport-connect/windows.json | 8 ++++---- .../outputs/teleport-suite/darwin.json | 12 ++++++------ ee/maintained-apps/outputs/tuple/darwin.json | 8 ++++---- 27 files changed, 115 insertions(+), 115 deletions(-) diff --git a/ee/maintained-apps/outputs/antigravity-ide/darwin.json b/ee/maintained-apps/outputs/antigravity-ide/darwin.json index e80b826ae3..2c24c7448c 100644 --- a/ee/maintained-apps/outputs/antigravity-ide/darwin.json +++ b/ee/maintained-apps/outputs/antigravity-ide/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2.0.4", + "version": "2.1.1", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.google.antigravity-ide';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.google.antigravity-ide' AND version_compare(bundle_short_version, '2.0.4') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.google.antigravity-ide' AND version_compare(bundle_short_version, '2.1.1') < 0);" }, - "installer_url": "https://edgedl.me.gvt1.com/edgedl/release2/j0qc3/antigravity/stable/2.0.4-6381998290370560/darwin-arm/Antigravity%20IDE.dmg", + "installer_url": "https://edgedl.me.gvt1.com/edgedl/release2/j0qc3/antigravity/stable/2.1.1-6123990880747520/darwin-arm/Antigravity%20IDE.dmg", "install_script_ref": "d4aa2ac0", "uninstall_script_ref": "c9689968", - "sha256": "dc5edf73ee1f094fe4135e4272e736d5e1fe875cc4d5bbc144510b77fe94e1ee", + "sha256": "e0a132f335c368e2df874662f589eafca29697a51402017aeb7471026bdd1b29", "default_categories": [ "Developer tools" ] diff --git a/ee/maintained-apps/outputs/antigravity-ide/windows.json b/ee/maintained-apps/outputs/antigravity-ide/windows.json index 4b906ecd9e..697b5ef63a 100644 --- a/ee/maintained-apps/outputs/antigravity-ide/windows.json +++ b/ee/maintained-apps/outputs/antigravity-ide/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2.0.4", + "version": "2.1.1", "queries": { "exists": "SELECT 1 FROM programs WHERE name LIKE 'Antigravity IDE %' AND publisher = 'Google';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Antigravity IDE %' AND publisher = 'Google' AND version_compare(version, '2.0.4') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Antigravity IDE %' AND publisher = 'Google' AND version_compare(version, '2.1.1') < 0);" }, - "installer_url": "https://edgedl.me.gvt1.com/edgedl/release2/j0qc3/antigravity/stable/2.0.4-6381998290370560/windows-x64/Antigravity%20IDE.exe", + "installer_url": "https://edgedl.me.gvt1.com/edgedl/release2/j0qc3/antigravity/stable/2.1.1-6123990880747520/windows-x64/Antigravity%20IDE.exe", "install_script_ref": "8b15c4d0", "uninstall_script_ref": "65cab11a", - "sha256": "c4a83fe97ca159d9e67f4908955526ab6eb03fc747cab4af1a8d05f803e3bc6d", + "sha256": "d6d17a8f91c70f349505086847a79f60271a6ecdd851252e95ff0469dd5ad985", "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 64a90871e4..676d68e26b 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.35.9", + "version": "2.35.10", "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.35.9') < 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.35.10') < 0);" }, - "installer_url": "https://awscli.amazonaws.com/AWSCLIV2-2.35.9.msi", + "installer_url": "https://awscli.amazonaws.com/AWSCLIV2-2.35.10.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "58bcd016", - "sha256": "c0e945b8674a7cd85930d452dd02a695eeb3e65ea1f341159b0d42123c26520f", + "sha256": "fc78ac60c93842c93a9dad5415c2b60684a0ce8e01eb2022a3644cb7de6f4669", "default_categories": [ "Developer tools" ], diff --git a/ee/maintained-apps/outputs/boltai/darwin.json b/ee/maintained-apps/outputs/boltai/darwin.json index 859d2b66a7..33e19b4f07 100644 --- a/ee/maintained-apps/outputs/boltai/darwin.json +++ b/ee/maintained-apps/outputs/boltai/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2.13.5", + "version": "2.13.6", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'co.podzim.boltai-mobile';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'co.podzim.boltai-mobile' AND version_compare(bundle_short_version, '2.13.5') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'co.podzim.boltai-mobile' AND version_compare(bundle_short_version, '2.13.6') < 0);" }, - "installer_url": "https://updates.boltai.com/dmg/BoltAI-2.13.5.dmg", + "installer_url": "https://updates.boltai.com/dmg/BoltAI-2.13.6.dmg", "install_script_ref": "fbb1d678", "uninstall_script_ref": "8c3f3ae8", - "sha256": "b19baf624711724e961dc1f6bbe656acc506a0a4690b023e5384bdc593004de2", + "sha256": "5e5155033037386db348990b0fca8c449823e5c54b0e8587c661be62783a18db", "default_categories": [ "Communication" ] diff --git a/ee/maintained-apps/outputs/chatgpt/darwin.json b/ee/maintained-apps/outputs/chatgpt/darwin.json index 5a02188f13..277ba6b6b2 100644 --- a/ee/maintained-apps/outputs/chatgpt/darwin.json +++ b/ee/maintained-apps/outputs/chatgpt/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.2026.153", + "version": "1.2026.160", "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, '1.2026.153') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.openai.chat' AND version_compare(bundle_short_version, '1.2026.160') < 0);" }, - "installer_url": "https://persistent.oaistatic.com/sidekick/public/ChatGPT_Desktop_public_1.2026.153_1780942906.dmg", + "installer_url": "https://persistent.oaistatic.com/sidekick/public/ChatGPT_Desktop_public_1.2026.160_1781312926.dmg", "install_script_ref": "61140545", "uninstall_script_ref": "a941291b", - "sha256": "bf0b98a45bff614ddc926080e72a8e3eb51de3f1017a1c8c501c7e9fdf308214", + "sha256": "37e043abd3ffa592c4c2ba9ce8494bc3fa3b157ae4e6f7872a792ffd089edf07", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/clickup/darwin.json b/ee/maintained-apps/outputs/clickup/darwin.json index 85cdc2d970..0a6749b3fe 100644 --- a/ee/maintained-apps/outputs/clickup/darwin.json +++ b/ee/maintained-apps/outputs/clickup/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "3.5.208", + "version": "3.5.230", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.clickup.desktop-app';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.clickup.desktop-app' AND version_compare(bundle_short_version, '3.5.208') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.clickup.desktop-app' AND version_compare(bundle_short_version, '3.5.230') < 0);" }, - "installer_url": "https://download.todesktop.com/221003ra4tebclw/ClickUp%203.5.208%20-%20Build%20260505zrf6t7imk-arm64.dmg", + "installer_url": "https://download.todesktop.com/221003ra4tebclw/ClickUp%203.5.230%20-%20Build%20260616wecrh5vza-arm64.dmg", "install_script_ref": "e936dc60", "uninstall_script_ref": "f272dcb6", - "sha256": "aaeecdee1e6be0a304c00f0c09e958de4de5733420a0896c079c8a7409be4d16", + "sha256": "283531cae233999a80735db81844bf4005aa047ab59be40c92685663caf0081e", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/clickup/windows.json b/ee/maintained-apps/outputs/clickup/windows.json index 79f382c908..e63d353b2d 100644 --- a/ee/maintained-apps/outputs/clickup/windows.json +++ b/ee/maintained-apps/outputs/clickup/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "3.5.208", + "version": "3.5.230", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'ClickUp' AND publisher = 'ClickUp';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'ClickUp' AND publisher = 'ClickUp' AND version_compare(version, '3.5.208') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'ClickUp' AND publisher = 'ClickUp' AND version_compare(version, '3.5.230') < 0);" }, - "installer_url": "https://download.todesktop.com/221003ra4tebclw/ClickUp-3.5.208-build-260505zrf6t7imk-x64.msi", + "installer_url": "https://download.todesktop.com/221003ra4tebclw/ClickUp-3.5.230-build-260616wecrh5vza-x64.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "38f3af4a", - "sha256": "875f5da2e8a24366a642f8847d7471cb8f231554a795b93894ad6d9b9762c55a", + "sha256": "ff83290f29366d73a4098c5400f6a8289da9428e6e9f2df9a71e3d62dfae521b", "default_categories": [ "Productivity" ], diff --git a/ee/maintained-apps/outputs/discord/darwin.json b/ee/maintained-apps/outputs/discord/darwin.json index 67903c2958..da68f4d44e 100644 --- a/ee/maintained-apps/outputs/discord/darwin.json +++ b/ee/maintained-apps/outputs/discord/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "0.0.395", + "version": "0.0.396", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.hnc.Discord';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hnc.Discord' AND version_compare(bundle_short_version, '0.0.395') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hnc.Discord' AND version_compare(bundle_short_version, '0.0.396') < 0);" }, - "installer_url": "https://dl.discordapp.net/apps/osx/0.0.395/Discord.dmg", + "installer_url": "https://dl.discordapp.net/apps/osx/0.0.396/Discord.dmg", "install_script_ref": "de3e67db", "uninstall_script_ref": "46a242eb", - "sha256": "7f079acc4cc54a426dc8892a5257b7ac3302e10d1b65bb213ab9dfa98e404f27", + "sha256": "a518c6684fed2f00fd37c95824e98861c0c3cc6646e602ce02f7accc37473d01", "default_categories": [ "Communication" ] diff --git a/ee/maintained-apps/outputs/discord/windows.json b/ee/maintained-apps/outputs/discord/windows.json index bd5811fa44..6d3345c6e0 100644 --- a/ee/maintained-apps/outputs/discord/windows.json +++ b/ee/maintained-apps/outputs/discord/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.0.9242", + "version": "1.0.9243", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Discord' AND publisher = 'Discord Inc.';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Discord' AND publisher = 'Discord Inc.' AND version_compare(version, '1.0.9242') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Discord' AND publisher = 'Discord Inc.' AND version_compare(version, '1.0.9243') < 0);" }, - "installer_url": "https://stable.dl2.discordapp.net/distro/app/stable/win/x64/1.0.9242/DiscordSetup.exe", + "installer_url": "https://stable.dl2.discordapp.net/distro/app/stable/win/x64/1.0.9243/DiscordSetup.exe", "install_script_ref": "fd04e860", "uninstall_script_ref": "73fc6eff", - "sha256": "3ee7967fc974f0f0d3c829d196f6c9846331815d3ab1c3b61b972306b60e1e71", + "sha256": "7fdd1c416efdb090942c22e3e5ab16aeb1d3f2b1f881690d7336af083d4303de", "default_categories": [ "Communication" ] diff --git a/ee/maintained-apps/outputs/docker-desktop/darwin.json b/ee/maintained-apps/outputs/docker-desktop/darwin.json index 791b884577..c12a593fe1 100644 --- a/ee/maintained-apps/outputs/docker-desktop/darwin.json +++ b/ee/maintained-apps/outputs/docker-desktop/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "4.78.0", + "version": "4.79.0", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.dockerdesktop';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.dockerdesktop' AND path NOT LIKE '%.back' AND version_compare(bundle_short_version, '4.78.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.electron.dockerdesktop' AND path NOT LIKE '%.back' AND version_compare(bundle_short_version, '4.79.0') < 0);" }, - "installer_url": "https://desktop.docker.com/mac/main/arm64/229452/Docker.dmg", + "installer_url": "https://desktop.docker.com/mac/main/arm64/230596/Docker.dmg", "install_script_ref": "2c3a200a", "uninstall_script_ref": "dd14c72d", - "sha256": "094e6a2613b6e391602ed48400f8129b64d5e9799445b039bfcc65a8011be5a4", + "sha256": "43930db6d7cf6fd34a563c9489d40f733d62d1e32a48221428f26a68697b7782", "default_categories": [ "Developer tools" ] diff --git a/ee/maintained-apps/outputs/duckduckgo/darwin.json b/ee/maintained-apps/outputs/duckduckgo/darwin.json index 62beb2a099..9bce84f6b3 100644 --- a/ee/maintained-apps/outputs/duckduckgo/darwin.json +++ b/ee/maintained-apps/outputs/duckduckgo/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.194.0", + "version": "1.195.0", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.duckduckgo.macos.browser';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.duckduckgo.macos.browser' AND version_compare(bundle_short_version, '1.194.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.duckduckgo.macos.browser' AND version_compare(bundle_short_version, '1.195.0') < 0);" }, - "installer_url": "https://staticcdn.duckduckgo.com/macos-desktop-browser/duckduckgo-1.194.0.737.dmg", + "installer_url": "https://staticcdn.duckduckgo.com/macos-desktop-browser/duckduckgo-1.195.0.743.dmg", "install_script_ref": "c6bf9cce", "uninstall_script_ref": "b6f097db", - "sha256": "54f45d1ba694b8c23c50d6b63ba080db53b852ffc557bd8ea35bf4eed5905b46", + "sha256": "8e395284e403d697b14c70b60c0d3b9b702d8f6f91f4c2a80921bbb6ed6977fa", "default_categories": [ "Browsers" ] diff --git a/ee/maintained-apps/outputs/figma/darwin.json b/ee/maintained-apps/outputs/figma/darwin.json index bc0580a029..73a0923ae1 100644 --- a/ee/maintained-apps/outputs/figma/darwin.json +++ b/ee/maintained-apps/outputs/figma/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "126.5.6", + "version": "126.6.9", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.figma.Desktop';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.figma.Desktop' AND version_compare(bundle_short_version, '126.5.6') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.figma.Desktop' AND version_compare(bundle_short_version, '126.6.9') < 0);" }, - "installer_url": "https://desktop.figma.com/mac-arm/Figma-126.5.6.zip", + "installer_url": "https://desktop.figma.com/mac-arm/Figma-126.6.9.zip", "install_script_ref": "f0952230", "uninstall_script_ref": "7dcd0304", - "sha256": "ad5e572b2eefeb1eb2bb1564f001d6a38261ba759c9fdc708df1b970a511a223", + "sha256": "b3fb9f51dfdd8acbb116a1be93e0bc572438a96a84f42f014708485eac3e4f5c", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/genesys-cloud/windows.json b/ee/maintained-apps/outputs/genesys-cloud/windows.json index 3d0787ca78..356df8ecf4 100644 --- a/ee/maintained-apps/outputs/genesys-cloud/windows.json +++ b/ee/maintained-apps/outputs/genesys-cloud/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2.50.909.0", + "version": "2.51.912.0", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'GenesysCloud' AND publisher = 'Genesys Inc.';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'GenesysCloud' AND publisher = 'Genesys Inc.' AND version_compare(version, '2.50.909.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'GenesysCloud' AND publisher = 'Genesys Inc.' AND version_compare(version, '2.51.912.0') < 0);" }, - "installer_url": "https://app.mypurecloud.com/directory-windows/build-assets/2.50.909-243/genesys-cloud-windows-2.50.909-x86.msi", + "installer_url": "https://app.mypurecloud.com/directory-windows/build-assets/2.51.912-245/genesys-cloud-windows-2.51.912-x86.msi", "install_script_ref": "8959087b", "uninstall_script_ref": "3d56a699", - "sha256": "7897e8fbe3453ef9281dde9ab12c0833962ce8f8c441d09ee8c429f8b8e65f9e", + "sha256": "8b00d99a1545d7ca21209e6642de26540cc863ca1f3ffff40b4e971821e6dab1", "default_categories": [ "Communication" ], diff --git a/ee/maintained-apps/outputs/lookaway/darwin.json b/ee/maintained-apps/outputs/lookaway/darwin.json index b0e25c4e71..0eaa8faa2e 100644 --- a/ee/maintained-apps/outputs/lookaway/darwin.json +++ b/ee/maintained-apps/outputs/lookaway/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2.1.2", + "version": "2.2.0", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.mysticalbits.lookaway';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.mysticalbits.lookaway' AND version_compare(bundle_short_version, '2.1.2') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.mysticalbits.lookaway' AND version_compare(bundle_short_version, '2.2.0') < 0);" }, - "installer_url": "https://github.com/mysticalbits/lookaway-releases/releases/download/2.1.2/LookAway.dmg", + "installer_url": "https://github.com/mysticalbits/lookaway-releases/releases/download/2.2.0/LookAway.dmg", "install_script_ref": "8e23d582", "uninstall_script_ref": "edb6da69", - "sha256": "cb93998ae580dfbefaa2692135f9a33da56a78142b150d6b358a64a570e2344f", + "sha256": "4cdb7d0be0bac75bdda34c53629e7dea0d4f152bbfbf6ed10557f97fc8c97f40", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/loom/darwin.json b/ee/maintained-apps/outputs/loom/darwin.json index 0574f70684..cf5ed79615 100644 --- a/ee/maintained-apps/outputs/loom/darwin.json +++ b/ee/maintained-apps/outputs/loom/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "0.354.2", + "version": "0.355.2", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.loom.desktop';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.loom.desktop' AND version_compare(bundle_short_version, '0.354.2') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.loom.desktop' AND version_compare(bundle_short_version, '0.355.2') < 0);" }, - "installer_url": "https://packages.loom.com/desktop-packages/Loom-0.354.2-arm64.dmg", + "installer_url": "https://packages.loom.com/desktop-packages/Loom-0.355.2-arm64.dmg", "install_script_ref": "bd0f7905", "uninstall_script_ref": "f408ec47", - "sha256": "e284d3589f334639d08ca0b326ef3f6971a4419f94a24e9cbe6fcf8263112554", + "sha256": "7999f8af8c4fd2798c39fb8e6dbf2662202694012239da8a8848ae05c54e1c1d", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/loom/windows.json b/ee/maintained-apps/outputs/loom/windows.json index 97647c876f..7cd1731418 100644 --- a/ee/maintained-apps/outputs/loom/windows.json +++ b/ee/maintained-apps/outputs/loom/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "0.354.2", + "version": "0.355.2", "queries": { "exists": "SELECT 1 FROM programs WHERE name = 'Loom' AND publisher = 'Loom, Inc.';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Loom' AND publisher = 'Loom, Inc.' AND version_compare(version, '0.354.2') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'Loom' AND publisher = 'Loom, Inc.' AND version_compare(version, '0.355.2') < 0);" }, - "installer_url": "https://cdn.loom.com/desktop-packages/Loom%20Setup%200.354.2.exe", + "installer_url": "https://cdn.loom.com/desktop-packages/Loom%20Setup%200.355.2.exe", "install_script_ref": "77327cbf", "uninstall_script_ref": "b012f1e7", - "sha256": "448ac01cc9e38c1ac0c5ccaa60877c7e3972757cb6e3ee7a4eb354996a434ebf", + "sha256": "f6c0c671f6d95eda5981cbfa687ff9e56b08f9d7f3677f66e8a8283edf98aa2e", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/nextcloud/darwin.json b/ee/maintained-apps/outputs/nextcloud/darwin.json index 7dd70053cf..0d1c7652e5 100644 --- a/ee/maintained-apps/outputs/nextcloud/darwin.json +++ b/ee/maintained-apps/outputs/nextcloud/darwin.json @@ -1,22 +1,22 @@ { "versions": [ { - "version": "33.0.5", + "version": "33.0.6", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.nextcloud.desktopclient';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.nextcloud.desktopclient' AND version_compare(bundle_short_version, '33.0.5') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.nextcloud.desktopclient' AND version_compare(bundle_short_version, '33.0.6') < 0);" }, - "installer_url": "https://github.com/nextcloud-releases/desktop/releases/download/v33.0.5/Nextcloud-33.0.5.pkg", - "install_script_ref": "bd3b0770", + "installer_url": "https://github.com/nextcloud-releases/desktop/releases/download/v33.0.6/Nextcloud-33.0.6.pkg", + "install_script_ref": "19e01bca", "uninstall_script_ref": "a2c351cf", - "sha256": "3e6a56873f34c7b605805eff5713444351fc69a8006c3660e8d26c8f0f7c2fed", + "sha256": "fcfb393eb10934fe12b0e5c4d80dbca63f6bf38d22a10033b71bd5891378324f", "default_categories": [ "Productivity" ] } ], "refs": { - "a2c351cf": "#!/bin/bash\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\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_launchctl_service 'com.nextcloud.desktopclient'\nquit_application 'com.nextcloud.desktopclient'\nremove_pkg_files 'com.nextcloud.desktopclient'\nforget_pkg 'com.nextcloud.desktopclient'\nsudo rm -rf '/Applications/Nextcloud.app'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.nextcloud.desktopclient.FinderSyncExt'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Nextcloud'\ntrash $LOGGED_IN_USER '~/Library/Caches/Nextcloud'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.nextcloud.desktopclient.FinderSyncExt'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/com.nextcloud.desktopclient'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.nextcloud.desktopclient.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/Nextcloud'\n", - "bd3b0770": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# install pkg files\nquit_and_track_application 'com.nextcloud.desktopclient'\nsudo installer -pkg \"$TMPDIR/Nextcloud-33.0.5.pkg\" -target /\nrelaunch_application 'com.nextcloud.desktopclient'\n" + "19e01bca": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# install pkg files\nquit_and_track_application 'com.nextcloud.desktopclient'\nsudo installer -pkg \"$TMPDIR/Nextcloud-33.0.6.pkg\" -target /\nrelaunch_application 'com.nextcloud.desktopclient'\n", + "a2c351cf": "#!/bin/bash\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\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_launchctl_service 'com.nextcloud.desktopclient'\nquit_application 'com.nextcloud.desktopclient'\nremove_pkg_files 'com.nextcloud.desktopclient'\nforget_pkg 'com.nextcloud.desktopclient'\nsudo rm -rf '/Applications/Nextcloud.app'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.nextcloud.desktopclient.FinderSyncExt'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Nextcloud'\ntrash $LOGGED_IN_USER '~/Library/Caches/Nextcloud'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.nextcloud.desktopclient.FinderSyncExt'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/com.nextcloud.desktopclient'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.nextcloud.desktopclient.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/Nextcloud'\n" } } diff --git a/ee/maintained-apps/outputs/okta-verify/darwin.json b/ee/maintained-apps/outputs/okta-verify/darwin.json index 84a5fcb1dc..dfee7d54f1 100644 --- a/ee/maintained-apps/outputs/okta-verify/darwin.json +++ b/ee/maintained-apps/outputs/okta-verify/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "9.63.0", + "version": "9.65.2", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.okta.mobile';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.okta.mobile' AND version_compare(bundle_short_version, '9.63.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.okta.mobile' AND version_compare(bundle_short_version, '9.65.2') < 0);" }, - "installer_url": "https://okta.okta.com/artifacts/OKTA_VERIFY_MACOS/9.63.0/OktaVerify-9.63.0-6186-0c33212.pkg", - "install_script_ref": "9061389b", + "installer_url": "https://okta.okta.com/artifacts/OKTA_VERIFY_MACOS/9.65.2/OktaVerify-9.65.2-6267-e16ccd4.pkg", + "install_script_ref": "a0f408e0", "uninstall_script_ref": "5dbba669", - "sha256": "0a40d8af3a8cf2eb2a6e0125821b557416f88c2ff59f6fe49c0d7c6318be82ee", + "sha256": "d81ccc36deb3af3b9ba9334859c1523f697a30dc943fe0efa28d85eaff91f31f", "default_categories": [ "Productivity" ] @@ -17,6 +17,6 @@ ], "refs": { "5dbba669": "#!/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_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\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_launchctl_service 'com.okta.authentication.service'\nremove_launchctl_service 'com.okta.autoupdate.daemon'\nremove_launchctl_service 'com.okta.deviceaccess.servicedaemon'\nremove_pkg_files 'com.okta.mobile'\nforget_pkg 'com.okta.mobile'\nsudo rm -rf '/Applications/Okta Verify.app'\nsudo rm -rf '/Library/Application Support/com.okta.deviceaccess.servicedaemon'\nsudo rm -rf '/Library/LaunchDaemons/com.okta.authentication.service.plist'\nsudo rm -rf '/Library/LaunchDaemons/com.okta.autoupdate.daemon.plist'\nsudo rm -rf '/Library/LaunchDaemons/com.okta.deviceaccess.servicedaemon.plist'\nsudo rm -rf '/Library/Security/SecurityAgentPlugins/OktaDAAuthPlugin.bundle'\nsudo rm -rf '/usr/local/bin/AutoUpdateDaemon'\nsudo rm -rf '/usr/local/bin/OktaDAServiceDaemon'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.okta.mobile'\ntrash $LOGGED_IN_USER '~/Library/Preferences/B7F62B65BN.group.okta.verify.shared.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.okta.mobile.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/group.com.okta.mobile.firebase.plist'\n", - "9061389b": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# install pkg files\nquit_and_track_application 'com.okta.mobile'\nsudo installer -pkg \"$TMPDIR/OktaVerify-9.63.0-6186-0c33212.pkg\" -target /\nrelaunch_application 'com.okta.mobile'\n" + "a0f408e0": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# install pkg files\nquit_and_track_application 'com.okta.mobile'\nsudo installer -pkg \"$TMPDIR/OktaVerify-9.65.2-6267-e16ccd4.pkg\" -target /\nrelaunch_application 'com.okta.mobile'\n" } } diff --git a/ee/maintained-apps/outputs/podman-desktop/darwin.json b/ee/maintained-apps/outputs/podman-desktop/darwin.json index 258a55ed8e..a39f8d8819 100644 --- a/ee/maintained-apps/outputs/podman-desktop/darwin.json +++ b/ee/maintained-apps/outputs/podman-desktop/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1.27.2", + "version": "1.28.2", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'io.podmandesktop.PodmanDesktop';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'io.podmandesktop.PodmanDesktop' AND version_compare(bundle_short_version, '1.27.2') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'io.podmandesktop.PodmanDesktop' AND version_compare(bundle_short_version, '1.28.2') < 0);" }, - "installer_url": "https://github.com/containers/podman-desktop/releases/download/v1.27.2/podman-desktop-1.27.2-arm64.dmg", + "installer_url": "https://github.com/containers/podman-desktop/releases/download/v1.28.2/podman-desktop-1.28.2-arm64.dmg", "install_script_ref": "78a723c6", "uninstall_script_ref": "d4656e95", - "sha256": "bbacf1a268c8f7ac8a67c6e24ea500c96dfb0e2b825ae2a187a60434a37cb045", + "sha256": "d7851363cd244dfb3e77a5fd5375b37ded086d587ea921bb650e7a12ce84fc1a", "default_categories": [ "Developer tools" ] diff --git a/ee/maintained-apps/outputs/portfolioperformance/darwin.json b/ee/maintained-apps/outputs/portfolioperformance/darwin.json index 398f53f334..8c63ef9d69 100644 --- a/ee/maintained-apps/outputs/portfolioperformance/darwin.json +++ b/ee/maintained-apps/outputs/portfolioperformance/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "0.84.0", + "version": "0.84.2", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'name.abuchen.portfolio.distro.product';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'name.abuchen.portfolio.distro.product' AND version_compare(bundle_short_version, '0.84.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'name.abuchen.portfolio.distro.product' AND version_compare(bundle_short_version, '0.84.2') < 0);" }, - "installer_url": "https://github.com/buchen/portfolio/releases/download/0.84.0/PortfolioPerformance-0.84.0-aarch64.dmg", + "installer_url": "https://github.com/buchen/portfolio/releases/download/0.84.2/PortfolioPerformance-0.84.2-aarch64.dmg", "install_script_ref": "b401344a", "uninstall_script_ref": "987c225a", - "sha256": "04bce9b838406e8fb888fad36f042bf4b1265069bc0c0bc13b1f36e434d8acf1", + "sha256": "e042fb42c237d8fb78bf3d7968a54362227bbf601f779f4265fc1f9a3aa6226b", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/rive/darwin.json b/ee/maintained-apps/outputs/rive/darwin.json index 21cc490361..b9b97769d8 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.5086", + "version": "0.8.5094", "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.5086') < 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.5094') < 0);" }, - "installer_url": "https://releases.rive.app/macos/0.8.5086/Rive.dmg", + "installer_url": "https://releases.rive.app/macos/0.8.5094/Rive.dmg", "install_script_ref": "2bbfee4e", "uninstall_script_ref": "8f862785", - "sha256": "e1afeeb1e96c8e368d54876518268418b2c49b9d37a56229815fc5f72ba379fa", + "sha256": "7287f9520e329316f989a3f0a420e0bb081f3a18a3b8bb66c89ac68df16748dd", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/superhuman/darwin.json b/ee/maintained-apps/outputs/superhuman/darwin.json index e1ca24ae91..4778603cee 100644 --- a/ee/maintained-apps/outputs/superhuman/darwin.json +++ b/ee/maintained-apps/outputs/superhuman/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "1041.0.13", + "version": "1041.0.14", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.superhuman.mail';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.superhuman.mail' AND version_compare(bundle_short_version, '1041.0.13') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.superhuman.mail' AND version_compare(bundle_short_version, '1041.0.14') < 0);" }, - "installer_url": "https://storage.googleapis.com/download.superhuman.com/supertron-update/Superhuman-1041.0.13-arm64-latest-mac.zip", + "installer_url": "https://storage.googleapis.com/download.superhuman.com/supertron-update/Superhuman-1041.0.14-arm64-latest-mac.zip", "install_script_ref": "b7ebe5bf", "uninstall_script_ref": "1809183d", - "sha256": "e0fbff6e3e38a8d862734bfe450b277e187ad4f3b982fee02a313933ab2697ff", + "sha256": "4c994a644d6ca2cb6e1ca02872574061a6ce736bddd1eeb1e94982751d6abf45", "default_categories": [ "Communication" ] diff --git a/ee/maintained-apps/outputs/sync/darwin.json b/ee/maintained-apps/outputs/sync/darwin.json index f4457736a0..ec577e1c31 100644 --- a/ee/maintained-apps/outputs/sync/darwin.json +++ b/ee/maintained-apps/outputs/sync/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "2.2.58", + "version": "2.2.60", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.sync.desktop';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.sync.desktop' AND version_compare(bundle_short_version, '2.2.58') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.sync.desktop' AND version_compare(bundle_short_version, '2.2.60') < 0);" }, - "installer_url": "https://www10.sync.com/download/apple/Sync-2.2.58.dmg", + "installer_url": "https://www10.sync.com/download/apple/Sync-2.2.60.dmg", "install_script_ref": "1bd1b08b", "uninstall_script_ref": "0beaaab1", - "sha256": "94a75a4c0f5033dc8b60e723f10135708d965922cb453da3bfcfdaff1b913028", + "sha256": "4140c5fd9c6fb748329b43986113bafe71b6073bd844590167ab8c7d1651a1cf", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/teleport-connect/darwin.json b/ee/maintained-apps/outputs/teleport-connect/darwin.json index b46cb0b13c..a341bbc9c2 100644 --- a/ee/maintained-apps/outputs/teleport-connect/darwin.json +++ b/ee/maintained-apps/outputs/teleport-connect/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "18.9.0", + "version": "18.9.1", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'gravitational.teleport.connect';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'gravitational.teleport.connect' AND version_compare(bundle_short_version, '18.9.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'gravitational.teleport.connect' AND version_compare(bundle_short_version, '18.9.1') < 0);" }, - "installer_url": "https://cdn.teleport.dev/Teleport%20Connect-18.9.0.dmg", + "installer_url": "https://cdn.teleport.dev/Teleport%20Connect-18.9.1.dmg", "install_script_ref": "671bf444", "uninstall_script_ref": "e96ff37d", - "sha256": "667fb9834df0f448bbb6e27caca93b69688a1cda474eb0c8a1a901a98b87ac27", + "sha256": "0b8388e9179533c041a1e707ceb6c688fd26209a88924633c3ce6f38bdd9eb56", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/teleport-connect/windows.json b/ee/maintained-apps/outputs/teleport-connect/windows.json index 3cfe56260f..3ae276f413 100644 --- a/ee/maintained-apps/outputs/teleport-connect/windows.json +++ b/ee/maintained-apps/outputs/teleport-connect/windows.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "18.9.0", + "version": "18.9.1", "queries": { "exists": "SELECT 1 FROM programs WHERE name LIKE 'Teleport Connect %' AND publisher = 'Gravitational, Inc.';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Teleport Connect %' AND publisher = 'Gravitational, Inc.' AND version_compare(version, '18.9.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name LIKE 'Teleport Connect %' AND publisher = 'Gravitational, Inc.' AND version_compare(version, '18.9.1') < 0);" }, - "installer_url": "https://cdn.teleport.dev/Teleport%20Connect%20Setup-18.9.0.exe", + "installer_url": "https://cdn.teleport.dev/Teleport%20Connect%20Setup-18.9.1.exe", "install_script_ref": "5203db2b", "uninstall_script_ref": "df260b5b", - "sha256": "6c5abb734804b6ae0a3ab4bbc6e533c447f2da2f79dd8ecc1473f751be977da1", + "sha256": "f8ec957bf9f1d0673d6eae3806f7d7246c58175d12a66565a81fbbfea121f49a", "default_categories": [ "Productivity" ] diff --git a/ee/maintained-apps/outputs/teleport-suite/darwin.json b/ee/maintained-apps/outputs/teleport-suite/darwin.json index 083b37b9b0..a75e9a5446 100644 --- a/ee/maintained-apps/outputs/teleport-suite/darwin.json +++ b/ee/maintained-apps/outputs/teleport-suite/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "18.9.0", + "version": "18.9.1", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.gravitational.teleport.tsh';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.gravitational.teleport.tsh' AND version_compare(bundle_short_version, '18.9.0') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.gravitational.teleport.tsh' AND version_compare(bundle_short_version, '18.9.1') < 0);" }, - "installer_url": "https://cdn.teleport.dev/teleport-18.9.0.pkg", - "install_script_ref": "e0d09de0", + "installer_url": "https://cdn.teleport.dev/teleport-18.9.1.pkg", + "install_script_ref": "6a29411f", "uninstall_script_ref": "343cb8f4", - "sha256": "a474850bf22a869c4a09df17f0bf7ac93178ea7627c7217fff5082808b4a9887", + "sha256": "3650dd8bb747e60937867124d0281fd7183e1a876bdc730ab6d48f50a82ce1cf", "default_categories": [ "Developer tools" ] @@ -17,6 +17,6 @@ ], "refs": { "343cb8f4": "#!/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 # Convert (.*) to .* for regex matching to handle patterns like (.*).com.example.app\n local regex_pattern=$(echo \"$prefix\" | sed 's/(\\.\\*)/.*/g')\n echo \"Expanding wildcard for PKGID: $PKGID (pattern: ^${regex_pattern})\"\n for receipt in $(pkgutil --pkgs | grep -E \"^${regex_pattern}\"); 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|^|${FULL_INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\n# Remove teleport-suite packages (handles wildcard patterns with (.*))\nremove_pkg_files '(.*).com.gravitational.teleport.tctl'\nforget_pkg '(.*).com.gravitational.teleport.tctl'\nremove_pkg_files '(.*).com.gravitational.teleport.tsh'\nforget_pkg '(.*).com.gravitational.teleport.tsh'\nremove_pkg_files 'com.gravitational.teleport'\nforget_pkg 'com.gravitational.teleport'\n\n# Explicitly remove apps from /Applications (in case pkgutil removal didn't catch them)\nsudo rm -rf '/Applications/tctl.app'\nsudo rm -rf '/Applications/tsh.app'\n\n# Remove binaries\nsudo rm -rf '/usr/local/bin/fdpass-teleport'\nsudo rm -rf '/usr/local/bin/tbot'\nsudo rm -rf '/usr/local/bin/tctl'\nsudo rm -rf '/usr/local/bin/teleport'\nsudo rm -rf '/usr/local/bin/tsh'\n\n# Remove user data\ntrash $LOGGED_IN_USER '~/.tsh'\n\n", - "e0d09de0": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# install pkg files\nquit_and_track_application 'com.gravitational.teleport.tsh'\nsudo installer -pkg \"$TMPDIR/teleport-18.9.0.pkg\" -target /\nrelaunch_application 'com.gravitational.teleport.tsh'\n" + "6a29411f": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# install pkg files\nquit_and_track_application 'com.gravitational.teleport.tsh'\nsudo installer -pkg \"$TMPDIR/teleport-18.9.1.pkg\" -target /\nrelaunch_application 'com.gravitational.teleport.tsh'\n" } } diff --git a/ee/maintained-apps/outputs/tuple/darwin.json b/ee/maintained-apps/outputs/tuple/darwin.json index 0bb4449727..58f9bfdebc 100644 --- a/ee/maintained-apps/outputs/tuple/darwin.json +++ b/ee/maintained-apps/outputs/tuple/darwin.json @@ -1,15 +1,15 @@ { "versions": [ { - "version": "3.0.7", + "version": "3.0.8", "queries": { "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'app.tuple.app';", - "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'app.tuple.app' AND version_compare(bundle_short_version, '3.0.7') < 0);" + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'app.tuple.app' AND version_compare(bundle_short_version, '3.0.8') < 0);" }, - "installer_url": "https://d32ifkf9k9ezcg.cloudfront.net/production/sparkle/tuple-3.0.7-2026-06-18-36909a4c63.zip", + "installer_url": "https://d32ifkf9k9ezcg.cloudfront.net/production/sparkle/tuple-3.0.8-2026-06-22-7ab704b60a.zip", "install_script_ref": "ff9821fc", "uninstall_script_ref": "03815558", - "sha256": "1a187d86ce8495b63a4c1e6a5ec050bd2c9e014d0a37ce0cbc20574c4373558f", + "sha256": "bf289935a02c3194381b0e59efa1e0318ddcb65abd47a209323eb8ad4a5e2984", "default_categories": [ "Productivity" ]