diff --git a/CHANGELOG.md b/CHANGELOG.md index 51dd579..d927514 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,71 @@ +## v9.2 + +**Note**: Both Google and Mozilla recommend using the pkg installers instead of the dmg downloads for managed deployments. So far, Installomator has provided labels for both. (`googlechrome` and `googlechromepkg` or `firefox` and `firefoxpkg`, respectively) Since there are problems with the dmg downloads, a future release of Installomator will _disable_ the `firefox` and `googlechrome` dmg labels. You should switch to using `googlechromepkg` and `firefoxpkg` labels instead. + +- bug fix (#434) +- documentation updates (#485, #494) +- new labels: + - 1password8 (#514) + - ultimakercura + - androidstudio (#547) + - atextlegacy (#464) + - camtasia2019, camtasia2020 (#499) + - clue, cluefull (#481) + - craftmanagerforsketch + - displaylinkmanager (#448) + - drawio (#480) + - duckduckgo + - egnytewebedit (#512) + - filezilla (#522) + - firefoxpkg_intl + - flycut (#501) + - fontexplorer (#523) + - hype (#524) + - idrive (#507), idrivethin (#509) + - imageoptim (#525) + - linear (#519) + - macoslaps (#502) + - mightymike + - mindmanager (#479) + - pika (#526) + - propresenter7 (#394) + - qgis-pr + - shottr (#516) + - slab (#487) + - snagit2019, snagit2020, snagit2021 (#498) + - sonobus (#490) + - talkdeskcxcloud (#452) + - thunderbird_intl (#497) + - unnaturalscrollwheels (#503) + - wechat (#510) + - xeroxworkcentre7800 (#527) + - zohoworkdrivegenie +- updated labels + - adobereaderdc-update, adobereaderdc (#503) + - amazoncorretto8jdk (#461) + - camtasia (#499) + - citrixworkspace (#508) + - dbeaverce (#450) + - dropbox + - firefox, firefox_da, firefox_intl (#495), firefoxesr_intl (#496), firefoxpkg + - googlechrome, googlechromepkg (#484) + - gpgsuite (#465) + - grammarly (#515) + - logitechoptions (#478) + - onlyofficedesktop (#454) + - postman (#458) + - rancherdesktop (#463) + - remotedesktopmanagerenterprise + - remotedesktopmanagerfree + - ringcentralapp (#492) + - sketch + - snagit (#498) + - talkdeskcallbar (#453) + + + ## v9.1 -**Note**: Both Google and Mozilla recommend using the pkg installers instead of the dmg downloads for managed deployments. So far, Installomator has provided labels for both. (`googlechrome` and `googlechromepkg` or `firefox` and `firefoxpkg`, respectively) Since there are problems with the dmg downloads, a future release of Installomator will _disable_ the `firefox` and `googlechrome` dmg labels. You should switch to using the respective pkg labels instead. - added option for Microsoft Endpoint Manager (Intune) to `LOGO` (#446) - minor fixes (#427, #434, #436) diff --git a/Installomator.sh b/Installomator.sh index 3f64473..4d9f31a 100755 --- a/Installomator.sh +++ b/Installomator.sh @@ -238,7 +238,7 @@ IGNORE_DND_APPS="" # - updateToolArguments: # When Installomator detects an existing installation of the application, # and the updateTool variable is set -# $updateTool $updateArguments +# $updateTool $updateArguments # Will be run instead of of downloading and installing a complete new version. # Use this when the updateTool does differential and optimized downloads. # e.g. msupdate on various Microsoft labels @@ -253,7 +253,7 @@ IGNORE_DND_APPS="" # We need to define `name` for the installed app (to be version checked), as well as # `installerTool` for the installer app (if named differently than `name`. Installomator # will add the path to the folder/disk image with the binary, and it will be called like this: - `$CLIInstaller $CLIArguments` +# $CLIInstaller $CLIArguments # For most installations `CLIInstaller` should contain the `installerTool` for the CLI call # (if it’s the same). # We can support a whole range of other software titles by implementing this. @@ -302,8 +302,8 @@ if [[ $(/usr/bin/arch) == "arm64" ]]; then rosetta2=no fi fi -VERSION="9.1" -VERSIONDATE="2022-03-18" +VERSION="9.2" +VERSIONDATE="2022-05-16" # MARK: Functions @@ -549,8 +549,8 @@ getAppVersion() { # printlog "App(s) found: ${applist}" DEBUG # applist=$(mdfind "kind:application AND name:$appName" -0 ) fi - if [[ -z applist ]]; then - printlog "No previous app found" INFO + if [[ -z $applist ]]; then + printlog "No previous app found" WARN else printlog "App(s) found: ${applist}" INFO fi @@ -572,7 +572,7 @@ getAppVersion() { if [[ -d "$installedAppPath"/Contents/_MASReceipt ]];then printlog "Installed $appName is from App Store, use “IGNORE_APP_STORE_APPS=yes” to replace." if [[ $IGNORE_APP_STORE_APPS == "yes" ]]; then - printlog "Replacing App Store apps, no matter the version" + printlog "Replacing App Store apps, no matter the version" WARN appversion=0 else cleanupAndExit 1 "App previously installed from App Store, and we respect that" ERROR @@ -1302,6 +1302,21 @@ valuesfromarguments) blockingProcesses=( "1Password Extension Helper" "1Password 7" "1Password (Safari)" "1PasswordNativeMessageHost" "1PasswordSafariAppExtension" ) #forcefulQuit=YES ;; +1password8) + name="1Password 8" + appName="1Password.app" + type="zip" + if [[ $(arch) == "arm64" ]]; then + archiveName="1Password-latest-aarch64.zip" + downloadURL="https://downloads.1password.com/mac/1Password-latest-aarch64.zip" + elif [[ $(arch) == "i386" ]]; then + archiveName="1Password-latest-x86_64.zip" + downloadURL="https://downloads.1password.com/mac/1Password-latest-x86_64.zip" + fi + expectedTeamID="2BUA8C4S2C" + blockingProcesses=( "1Password Extension Helper" "1Password 7" "1Password" "1Password (Safari)" "1PasswordNativeMessageHost" "1PasswordSafariAppExtension" ) + #forcefulQuit=YES + ;; 1passwordcli) name="1Password CLI" type="pkg" @@ -1372,7 +1387,7 @@ adobecreativeclouddesktop) adobereaderdc-update) name="Adobe Acrobat Reader DC" type="pkgInDmg" - downloadURL=$(adobecurrent=`curl --fail --silent https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt | tr -d '.'` && echo http://ardownload.adobe.com/pub/adobe/reader/mac/AcrobatDC/"$adobecurrent"/AcroRdrDCUpd"$adobecurrent"_MUI.dmg) + downloadURL=$(adobecurrent=`curl --fail --silent https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt | tr -d '.'` && echo https://ardownload2.adobe.com/pub/adobe/reader/mac/AcrobatDC/"$adobecurrent"/AcroRdrDC_"$adobecurrent"_MUI.dmg) appNewVersion=$(curl -s https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt) #appNewVersion=$(curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" https://get.adobe.com/reader/ | grep ">Version" | sed -E 's/.*Version 20([0-9.]*)<.*/\1/g') # credit: Søren Theilgaard (@theilgaard) expectedTeamID="JQ525L2MZD" @@ -1383,7 +1398,8 @@ adobereaderdc-install) name="Adobe Acrobat Reader DC" type="pkgInDmg" packageID="com.adobe.acrobat.DC.reader.app.pkg.MUI" - downloadURL=$(curl --silent --fail -H "Sec-Fetch-Site: same-origin" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: en-US;q=0.9,en;q=0.8" -H "DNT: 1" -H "Sec-Fetch-Mode: cors" -H "X-Requested-With: XMLHttpRequest" -H "Referer: https://get.adobe.com/reader/enterprise/" -H "Accept: */*" "https://get.adobe.com/reader/webservices/json/standalone/?platform_type=Macintosh&platform_dist=OSX&platform_arch=x86-32&language=English&eventname=readerotherversions" | grep -Eo '"download_url":.*?[^\]",' | head -n 1 | cut -d \" -f 4) + #downloadURL=$(curl --silent --fail -H "Sec-Fetch-Site: same-origin" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: en-US;q=0.9,en;q=0.8" -H "DNT: 1" -H "Sec-Fetch-Mode: cors" -H "X-Requested-With: XMLHttpRequest" -H "Referer: https://get.adobe.com/reader/enterprise/" -H "Accept: */*" "https://get.adobe.com/reader/webservices/json/standalone/?platform_type=Macintosh&platform_dist=OSX&platform_arch=x86-32&language=English&eventname=readerotherversions" | grep -Eo '"download_url":.*?[^\]",' | head -n 1 | cut -d \" -f 4) + downloadURL=$(adobecurrent=`curl --fail --silent https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt | tr -d '.'` && echo https://ardownload2.adobe.com/pub/adobe/reader/mac/AcrobatDC/"$adobecurrent"/AcroRdrDC_"$adobecurrent"_MUI.dmg) appNewVersion=$(curl -s https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt) #appNewVersion=$(curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" https://get.adobe.com/reader/ | grep ">Version" | sed -E 's/.*Version 20([0-9.]*)<.*/\1/g') # credit: Søren Theilgaard (@theilgaard) expectedTeamID="JQ525L2MZD" @@ -1452,8 +1468,13 @@ amazonchime) amazoncorretto8jdk) name="Amazon Corretto 8 JDK" type="pkg" - downloadURL="https://corretto.aws/downloads/latest/amazon-corretto-8-x64-macos-jdk.pkg" - appNewVersion=$(curl -s https://raw.githubusercontent.com/corretto/corretto-8/develop/CHANGELOG.md | grep "## Corretto version" | head -n 1 | awk '{ print $4; exit}') + if [[ $(arch) == "arm64" ]]; then + downloadURL="https://corretto.aws/downloads/latest/amazon-corretto-8-aarch64-macos-jdk.pkg" + appNewVersion=$(curl -s https://raw.githubusercontent.com/corretto/corretto-8/develop/CHANGELOG.md | grep "## Corretto version" | head -n 1 | awk '{ print $4; exit}') + elif [[ $(arch) == "i386" ]]; then + downloadURL="https://corretto.aws/downloads/latest/amazon-corretto-8-x64-macos-jdk.pkg" + appNewVersion=$(curl -s https://raw.githubusercontent.com/corretto/corretto-8/develop/CHANGELOG.md | grep "## Corretto version" | head -n 1 | awk '{ print $4; exit}') + fi expectedTeamID="94KV3E626L" ;; amazonworkspaces) @@ -1470,6 +1491,19 @@ androidfiletransfer) downloadURL="https://dl.google.com/dl/androidjumper/mtp/current/AndroidFileTransfer.dmg" expectedTeamID="EQHXZ8M8AV" ;; +androidstudio) + name="Android Studio" + type="dmg" + if [[ $(arch) == arm64 ]]; then + downloadURL=$(curl -fsL "https://developer.android.com/studio#downloads" | grep -i arm.dmg | head -2 | grep -o -i -E "https.*" | cut -d '"' -f1) + appNewVersion=$( echo "${downloadURL}" | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' ) + elif [[ $(arch) == i386 ]]; then + downloadURL=$(curl -fsL "https://developer.android.com/studio#downloads" | grep -i mac.dmg | head -2 | grep -o -i -E "https.*" | cut -d '"' -f1) + appNewVersion=$( echo "${downloadURL}" | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' ) + fi + expectedTeamID="EQHXZ8M8AV" + blockingProcesses=( androidstudio ) + ;; anydesk) name="AnyDesk" type="dmg" @@ -1564,6 +1598,13 @@ atext) downloadURL="https://trankynam.com/atext/downloads/aText.dmg" expectedTeamID="KHEMQ2FD9E" ;; +atextlegacy) + # credit: Gabe Marchan (gabemarchan.com - @darklink87) + name="aText" + type="dmg" + downloadURL="https://trankynam.com/atext/downloads/aTextLegacy.dmg" + expectedTeamID="KHEMQ2FD9E" + ;; atom) name="Atom" type="zip" @@ -1803,10 +1844,26 @@ camostudio) # Camo Studio will ask for admin permissions to install som plug-ins. that has not been handled. expectedTeamID="Q248YREB53" ;; -camtasia) +camtasia|\ +camtasia2021) + name="Camtasia 2021" + type="dmg" + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2021" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2021" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//') + expectedTeamID="7TQL462TU8" + ;; +camtasia2019) + name="Camtasia 2019" + type="dmg" + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2019" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2019" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//') + expectedTeamID="7TQL462TU8" + ;; + camtasia2020) name="Camtasia 2020" type="dmg" - downloadURL=https://download.techsmith.com/camtasiamac/releases/Camtasia.dmg + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2020" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2020" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//') expectedTeamID="7TQL462TU8" ;; canva) @@ -1839,7 +1896,7 @@ citrixworkspace) name="Citrix Workspace" type="pkgInDmg" downloadURL="https:"$(curl -s -L "https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html#ctx-dl-eula-external" | grep "dmg?" | sed "s/.*rel=.\(.*\)..id=.*/\1/") # http://downloads.citrix.com/18823/CitrixWorkspaceApp.dmg?__gda__=1605791892_edc6786a90eb5197fb226861a8e27aa8 - appNewVersion=$(curl -fs https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html | grep "
Version" | head -1 | cut -d " " -f1 | cut -d ";" -f2 | cut -d "." -f 1-3) + appNewVersion=$(curl -fs https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html | grep "
Version" | head -1 | awk '{print $2}' | cut -d "." -f 1-3) expectedTeamID="S272Y5R93J" ;; clevershare2) @@ -1877,6 +1934,24 @@ cloudya) appNewVersion="$(curl -fs https://www.nfon.com/de/service/downloads | grep -i -E -o "Cloudya Desktop App MAC [0-9.]*" | sed 's/^.*\ \([^ ]\{0,7\}\)$/\1/g')" expectedTeamID="X26F74J8TH" ;; +clue) + #For personal use and students + name="Clue" + type="dmg" + downloadURL=$(curl -fsL https://clue.no/en/download | grep "For personal use and students:" | sed 's/.*href="//' | sed 's/".*//') + appNewVersion="$(echo "${downloadURL}" | sed -E 's/.*Clue*([0-9.]*)\..*/\1/g')" + versionKey="CFBundleVersion" + expectedTeamID="3NX6B9TB2F" + ;; +cluefull) + #For companies and schools + name="Clue" + type="dmg" + downloadURL=$(curl -fsL https://clue.no/en/download | grep "For companies and schools:" | sed 's/.*href="//' | sed 's/".*//') + appNewVersion="$(echo "${downloadURL}" | sed -E 's/.*Clue*([0-9.]*)\F.*/\1/g')" + versionKey="CFBundleVersion" + expectedTeamID="3NX6B9TB2F" + ;; code42) name="Code42" type="pkgInDmg" @@ -1919,6 +1994,13 @@ craftmanager) appNewVersion="$(curl -fs https://craft-assets.invisionapp.com/CraftManager/production/appcast.xml | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)" expectedTeamID="VRXQSNCL5W" ;; +craftmanagerforsketch) + name="CraftManager" + type="zip" + downloadURL="https://craft-assets.invisionapp.com/CraftManager/production/CraftManager.zip" + appNewVersion=$(curl -fs https://craft-assets.invisionapp.com/CraftManager/production/appcast.xml | xpath '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f2) + expectedTeamID="VRXQSNCL5W" + ;; cryptomator) name="Cryptomator" type="dmg" @@ -1958,7 +2040,13 @@ darktable) dbeaverce) name="DBeaver" type="dmg" - downloadURL="https://dbeaver.io/files/dbeaver-ce-latest-macos.dmg" + if [[ $(arch) == "arm64" ]]; then + downloadURL="https://dbeaver.io/files/dbeaver-ce-latest-macos-aarch64.dmg" + appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i ^location | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' | head -1)" + elif [[ $(arch) == "i386" ]]; then + downloadURL="https://dbeaver.io/files/dbeaver-ce-latest-macos.dmg" + appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i ^location | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' | head -1)" + fi expectedTeamID="42B6MDKMW8" blockingProcesses=( dbeaver ) ;; @@ -2039,6 +2127,14 @@ diskspace) appNewVersion="$(versionFromGit scriptingosx diskspace)" expectedTeamID="JME5BW3F3R" ;; +displaylinkmanager) + name="DisplayLink Manager" + type="pkg" + #packageID="com.displaylink.displaylinkmanagerapp" + downloadURL=https://www.synaptics.com$(redirect=$(curl -sfL https://www.synaptics.com/products/displaylink-graphics/downloads/macos | grep 'class="download-link">Download' | head -n 1 | sed 's/.*href="//' | sed 's/".*//') && curl -sfL "https://www.synaptics.com$redirect" | grep Accept | head -n 1 | sed 's/.*href="//' | sed 's/".*//') + appNewVersion=$(curl -sfL https://www.synaptics.com/products/displaylink-graphics/downloads/macos | grep "Release:" | head -n 1 | cut -d ' ' -f2) + expectedTeamID="73YQY62QM3" + ;; docker) name="Docker" type="dmg" @@ -2060,6 +2156,15 @@ dockutil) expectedTeamID="Z5J8CJBUWC" blockingProcesses=( NONE ) ;; +drawio) + name="draw.io" + type="dmg" + archiveName="draw.io-universal-[0-9.]*.dmg" + downloadURL="$(downloadURLFromGit jgraph drawio-desktop)" + appNewVersion="$(versionFromGit jgraph drawio-desktop)" + expectedTeamID="UZEUFB4N53" + blockingProcesses=( draw.io ) + ;; drift) # credit Elena Ackley (@elenaelago) name="Drift" @@ -2071,8 +2176,19 @@ dropbox) name="Dropbox" type="dmg" downloadURL="https://www.dropbox.com/download?plat=mac&full=1" + appNewVersion=$(curl -fsIL "$downloadURL" | grep -i "^location" | sed -E 's/.*%20([0-9.]*)\.dmg/\1/g') expectedTeamID="G7HH3F8CAK" ;; +duckduckgo) + name="DuckDuckGo" + type="dmg" + #downloadURL="https://staticcdn.duckduckgo.com/macos-desktop-browser/duckduckgo.dmg" + #downloadURL=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[last()]' 2>/dev/null | cut -d '"' -f2) + downloadURL=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | cut -d '"' -f2) + #appNewVersion=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/enclosure/@sparkle:version)[last()]' 2>/dev/null | cut -d '"' -f2) + appNewVersion=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/sparkle:shortVersionString)[1]' 2>/dev/null | cut -d ">" -f2 | cut -d "<" -f1) + expectedTeamID="HKE973VLUW" + ;; easeusdatarecoverywizard) # credit: Søren Theilgaard (@theilgaard) name="EaseUS Data Recovery Wizard" @@ -2096,6 +2212,15 @@ egnyte) expectedTeamID="FELUD555VC" blockingProcesses=( NONE ) ;; +egnytewebedit) + name="EgnyteWebEdit" + type="pkg" + downloadURL="https://egnyte-cdn.egnyte.com/webedit/mac/en-us/latest/EgnyteWebEdit.pkg" + expectedTeamID="FELUD555VC" + appName="Egnyte WebEdit.app" + blockingProcesses=( NONE ) + ;; + element) name="Element" type="dmg" @@ -2193,6 +2318,16 @@ figma) appNewVersion="$(curl -fsL https://desktop.figma.com/mac/RELEASE.json | awk -F '"' '{ print $8 }')" expectedTeamID="T8RA8NE3B7" ;; +filezilla) + name="FileZilla" + type="tbz" + packageID="org.filezilla-project.filezilla" + downloadURL=$(curl -fsL https://filezilla-project.org/download.php\?show_all=1 | grep macosx | head -n 1 | awk -F '"' '{print $2}' ) + appNewVersion=$( curl -fsL https://filezilla-project.org/download.php\?show_all=1 | grep macosx | head -n 1 | awk -F '_' '{print $2}' ) + expectedTeamID="5VPGKXL75N" + blockingProcesses=( NONE ) + ;; + findanyfile) name="Find Any File" type="zip" @@ -2207,6 +2342,7 @@ firefox) appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '/dev/null | cut -d '"' -f 2) - expectedTeamID="W8F64X92K3" - appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4) - appName="Grammarly Installer.app" - ;; + name="Grammarly Desktop" + type="dmg" + packageID="com.grammarly.ProjectLlama" + downloadURL=$(curl -fsL "https://download-mac.grammarly.com/appcast.xml" | xpath '//rss/channel/item[1]/enclosure/@url' 2>/dev/null | cut -d '"' -f 2) + expectedTeamID="W8F64X92K3" + appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4) + # appName="Grammarly Installer.app" + installerTool="Grammarly Installer.app" + CLIInstaller="Grammarly Installer.app/Contents/MacOS/Grammarly Desktop" +;; grandperspective) name="GrandPerspective" type="dmg" @@ -2507,6 +2696,15 @@ hpeasystart) downloadURL="https://ftp.hp.com/pub/softlib/software12/HP_Quick_Start/osx/Applications/HP_Easy_Start.app.zip" expectedTeamID="6HB5Y2QTA3" ;; +hype) + name="Hype4" + type="dmg" + packageID="com.tumult.Hype4" + downloadURL="https://static.tumult.com/hype/download/Hype.dmg" + appNewVersion=$( curl -fsL https://tumult.com/hype/download/all/ | grep Ongoing | awk -F '<' '{print $4}' | sed 's/[^0-9.]//g' ) + expectedTeamID="8J356DM772" + blockingProcesses=( NONE ) + ;; hyper) name="Hyper" type="dmg" @@ -2534,6 +2732,24 @@ icons) appNewVersion=$(versionFromGit sap macOS-icon-generator ) expectedTeamID="7R5ZEU67FQ" ;; +idrive) + name="IDrive" + type="pkgInDmg" + pkgName="IDrive.pkg" + downloadURL=$(curl -fs https://static.idriveonlinebackup.com/downloads/version_mac.js | sed -E 's/.*(https.*dmg).*/\1/g') + appNewVersion=$(curl -fs https://static.idriveonlinebackup.com/downloads/version_mac.js | sed -E 's/.*mac_vernum\=\"Version\ ([0-9.]*).*/\1/g') + versionKey="CFBundleVersion" + expectedTeamID="JWDCNYZ922" + ;; +idrivethin) + name="IDrive" + type="pkgInDmg" + pkgName="IDriveThin.pkg" + downloadURL=$(curl -fs https://static.idriveonlinebackup.com/downloads/idrivethin/thin_version.js | sed -E 's/.*thinclient-mac([^;]*).*/\1/g' | sed -E 's/.*(https.*dmg).*/\1/g') + appNewVersion=$(curl -fs https://static.idriveonlinebackup.com/downloads/idrivethin/thin_version.js | sed -E 's/.*thin\_mac\_ver\=\"Version\ ([0-9.]*).*/\1/g') + versionKey="CFBundleVersion" + expectedTeamID="JWDCNYZ922" + ;; iina) name="IINA" type="dmg" @@ -2541,6 +2757,15 @@ iina) appNewVersion=$(versionFromGit iina iina ) expectedTeamID="67CQ77V27R" ;; +imageoptim) + name="imageoptim" + type="tbz" + packageID="net.pornel.ImageOptim" + downloadURL="https://imageoptim.com/ImageOptim.tbz2" + appNewVersion=$( curl -fsL https://imageoptim.com/appcast.xml | grep "title" | tail -n 1 | sed 's/[^0-9.]//g' ) + expectedTeamID="59KZTZA4XR" + blockingProcesses=( NONE ) + ;; imazingprofileeditor) # Credit: Bilal Habib @Pro4TLZZ name="iMazing Profile Editor" @@ -2875,8 +3100,24 @@ libreoffice) expectedTeamID="7P5S3ZLCN7" blockingProcesses=( soffice ) ;; +linear) + name="Linear" + type="dmg" + if [[ $(arch) == "arm64" ]]; then + downloadURL="https://desktop.linear.app/mac/dmg/arm64" + elif [[ $(arch) == "i386" ]]; then + downloadURL="https://desktop.linear.app/mac/dmg" + fi + appNewVersion=$(curl -sIkL $downloadURL | sed -r '/filename=/!d;s/.*filename=(.*)$/\1/' | awk '{print $2}') + expectedTeamID="7VZ2S3V9RV" + versionKey="CFBundleShortVersionString" + appName="Linear.app" + blockingProcesses=( "Linear" ) + ;; + +logioptions|\ logitechoptions) - name="Logitech Options" + name="Logi Options" type="pkgInZip" #downloadURL=$(curl -fs "https://support.logi.com/api/v2/help_center/en-us/articles.json?label_names=webcontent=productdownload,webos=mac-macos-x-11.0" | tr "," "\n" | grep -A 10 "macOS" | grep -oie "https.*/.*/options/.*\.zip" | head -1) downloadURL="https://download01.logi.com/web/ftp/pub/techsupport/options/options_installer.zip" @@ -2957,6 +3198,14 @@ macfuse) appNewVersion=$(versionFromGit osxfuse osxfuse) expectedTeamID="3T5GSNBU6W" ;; +macoslaps) + name="macOSLAPS" + type="pkg" + packageID="edu.psu.macOSLAPS" + downloadURL="$(downloadURLFromGit joshua-d-miller macOSLAPS)" + appNewVersion="$(versionFromGit joshua-d-miller macOSLAPS)" + expectedTeamID="9UYK4F9BSM" + ;; macports) name="MacPorts" type="pkg" @@ -3298,6 +3547,20 @@ microsoftyammer) #updateTool="/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate --list; /Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate" #updateToolArguments=( --install --apps ?????? ) ;; +mightymike) + name="Mighty Mike" + type="dmg" + downloadURL=$(downloadURLFromGit jorio MightyMike) + appNewVersion=$(versionFromGit jorio MightyMike) + expectedTeamID="RVNL7XC27G" + ;; +mindmanager) + name="MindManager" + type="dmg" + downloadURL="https://www.mindmanager.com/mm-mac-dmg" + appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | sed -E 's/.*_Mac_*([0-9.]*)\..*/\1/g')" + expectedTeamID="ZF6ZZ779N5" + ;; miro) # credit: @matins name="Miro" @@ -3585,7 +3848,12 @@ onionshare) onlyofficedesktop) name="ONLYOFFICE" type="dmg" - downloadURL="https://download.onlyoffice.com/install/desktop/editors/mac/distrib/onlyoffice/ONLYOFFICE.dmg" + if [[ $(arch) == "arm64" ]]; then + downloadURL="https://download.onlyoffice.com/install/desktop/editors/mac/arm/distrib/ONLYOFFICE.dmg" + elif [[ $(arch) == "i386" ]]; then + downloadURL="https://download.onlyoffice.com/install/desktop/editors/mac/x86_64/distrib/ONLYOFFICE.dmg" + fi + appNewVersion=$(versionFromGit ONLYOFFICE DesktopEditors) expectedTeamID="2WH24U26GJ" ;; openvpnconnect) @@ -3677,6 +3945,15 @@ perimeter81) appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i ^x-amz-meta-version | sed -E 's/x-amz-meta-version: //' | cut -d"." -f1-3)" expectedTeamID="924635PD62" ;; +pika) + name="Pika" + type="dmg" + packageID="com.superhighfives.Pika" + downloadURL=$(downloadURLFromGit "superhighfives" "pika") + appNewVersion=$(versionFromGit "superhighfives" "pika") + expectedTeamID="TGHU37N6EX" + blockingProcesses=( NONE ) + ;; pitch) name="Pitch" type="dmg" @@ -3704,11 +3981,15 @@ plisteditpro) expectedTeamID="8NQ43ND65V" ;; postman) - # credit: Mischa van der Bent name="Postman" type="zip" - downloadURL="https://dl.pstmn.io/download/latest/osx" - appNewVersion=$(curl -Ifs https://dl.pstmn.io/download/latest/osx | grep "content-disposition:" | sed -n -e 's/^.*Postman-osx-//p' | sed 's/\.zip//' | sed $'s/[^[:print:]\t]//g' ) + if [[ $(arch) == "arm64" ]]; then + downloadURL="https://dl.pstmn.io/download/latest/osx_arm64" + appNewVersion=$(curl -fsL --head "${downloadURL}" | grep "content-disposition:" | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/') + elif [[ $(arch) == "i386" ]]; then + downloadURL="https://dl.pstmn.io/download/latest/osx_64" + appNewVersion=$(curl -fsL --head "${downloadURL}" | grep "content-disposition:" | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/') + fi expectedTeamID="H7H8Q7M5CK" ;; prism9) @@ -3753,6 +4034,15 @@ promiseutilityr) downloadURL="https://www.promise.com/DownloadFile.aspx?DownloadFileUID=6533" expectedTeamID="268CCUR4WN" ;; +propresenter7) + name="ProPresenter 7" + appName="ProPresenter.app" + type="zip" + blockingProcesses="ProPresenter" + downloadURL=$(curl -s "https://api.renewedvision.com/v1/pro/upgrade?platform=macos&osVersion=12&appVersion=771&buildNumber=117899527&includeNotes=false" | grep -Eo '"downloadUrl":.*?[^\]",' | head -n 1 | cut -d \" -f 4 | sed -e 's/\\//g') + appNewVersion=$(curl -s "https://api.renewedvision.com/v1/pro/upgrade?platform=macos&osVersion=12&appVersion=771&buildNumber=117899527&includeNotes=false" | grep -Eo '"version":.*?[^\]",' | head -n 1 | cut -d \" -f 4) + expectedTeamID="97GAAZ6CPX" + ;; protonvpn) name="ProtonVPN" type="dmg" @@ -3774,6 +4064,13 @@ pymol) downloadURL=$(curl -s -L "https://pymol.org/" | grep -m 1 -Eio 'href="https://pymol.org/installers/PyMOL-(.*)-MacOS(.*).dmg"' | cut -c7- | sed -e 's/"$//') expectedTeamID="26SDDJ756N" ;; +qgis-pr) + name="QGIS" + type="dmg" + downloadURL="https://download.qgis.org/downloads/macos/qgis-macos-pr.dmg" + appNewVersion="$(curl -fs "https://www.qgis.org/da/_static/documentation_options.js" | grep -i version | cut -d "'" -f2)" + expectedTeamID="4F7N4UDA22" + ;; r) name="R" type="pkg" @@ -3789,10 +4086,15 @@ ramboxce) expectedTeamID="7F292FPD69" ;; rancherdesktop) - name="Rancher.Desktop-1.0.0-mac" + name="Rancher Desktop" type="zip" - archiveName="Rancher.Desktop-[0-9.]*-mac.zip" - downloadURL="$(downloadURLFromGit rancher-sandbox rancher-desktop)" + if [[ $(arch) == "arm64" ]]; then + archiveName="Rancher.Desktop-[0-9.]*-mac.aarch64.zip" + downloadURL="$(downloadURLFromGit rancher-sandbox rancher-desktop)" + elif [[ $(arch) == "i386" ]]; then + archiveName="Rancher.Desktop-[0-9.]*-mac.x86_64.zip" + downloadURL="$(downloadURLFromGit rancher-sandbox rancher-desktop)" + fi appNewVersion="$(versionFromGit rancher-sandbox rancher-desktop)" expectedTeamID="2Q6FHJR3H3" appName="Rancher Desktop.app" @@ -3815,14 +4117,15 @@ redeye) remotedesktopmanagerenterprise) name="Remote Desktop Manager" type="dmg" - downloadURL=$(curl -fs https://remotedesktopmanager.com/home/thankyou/rdmmacbin | grep -oe "http.*\.dmg" | head -1) + downloadURL=$(curl -fs https://devolutions.net/remote-desktop-manager/home/thankyou/rdmmacbin | grep -oe "http.*\.dmg" | head -1) appNewVersion=$(echo "$downloadURL" | sed -E 's/.*\.Mac\.([0-9.]*)\.dmg/\1/g') expectedTeamID="N592S9ASDB" + blockingProcesses=( "$name" ) ;; remotedesktopmanagerfree) name="Remote Desktop Manager Free" type="dmg" - downloadURL=$(curl -fs https://remotedesktopmanager.com/home/thankyou/rdmmacfreebin | grep -oe "http.*\.dmg" | head -1) + downloadURL=$(curl -fs https://devolutions.net/remote-desktop-manager/home/thankyou/rdmmacfreebin | grep -oe "http.*\.dmg" | head -1) appNewVersion=$(echo "$downloadURL" | sed -E 's/.*\.Mac\.([0-9.]*)\.dmg/\1/g') expectedTeamID="N592S9ASDB" ;; @@ -3863,11 +4166,15 @@ ricohpsprinters) ;; ringcentralapp) # credit: Isaac Ordonez, Mann consulting (@mannconsulting) - name="Glip" - type="dmg" - downloadURL="https://downloads.ringcentral.com/glip/rc/GlipForMac" + name="Ringcentral" + type="pkg" + if [[ $(arch) != "i386" ]]; then + downloadURL="https://app.ringcentral.com/download/RingCentral-arm64.pkg" + else + downloadURL="https://app.ringcentral.com/download/RingCentral.pkg" + fi expectedTeamID="M932RC5J66" - blockingProcesses=( "Glip" ) + blockingProcesses=( "Ringcentral" ) ;; ringcentralclassicapp) name="Glip" @@ -3997,6 +4304,13 @@ shield) appNewVersion=$(versionFromGit theevilbit Shield) expectedTeamID="33YRLYRBYV" ;; +shottr) + name="Shottr" + type="dmg" + downloadURL="https://shottr.cc/dl/Shottr-1.5.3.dmg" + appNewVersion=$( echo ${downloadURL} | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g' ) + expectedTeamID="2Y683PRQWN" + ;; sidekick) name="Sidekick" type="dmg" @@ -4038,7 +4352,7 @@ sizeup) sketch) name="Sketch" type="zip" - downloadURL=$(curl -sf https://www.sketch.com/downloads/mac/ | grep 'href="https://download.sketch.com' | sed -E 's/.*href=\"(.*)\".?/\1/g') + downloadURL=$(curl -sf https://www.sketch.com/downloads/mac/ | grep 'href="https://download.sketch.com' | tr '"' "\n" | grep -E "https.*.zip") appNewVersion=$(curl -fs https://www.sketch.com/updates/ | grep "Sketch Version" | head -1 | sed -E 's/.*Version ([0-9.]*)<.*/\1/g') # version from update page expectedTeamID="WUGMZZ5K46" ;; @@ -4056,6 +4370,18 @@ skype) expectedTeamID="AL798K98FX" Company="Microsoft" ;; +slab) + name="Slab" + type="dmg" + if [[ $(arch) == i386 ]]; then + archiveName="Slab-[0-9.]*-darwin-x64.dmg" + elif [[ $(arch) == arm64 ]]; then + archiveName="Slab-[0-9.]*-darwin-arm64.dmg" + fi + downloadURL=$(downloadURLFromGit slab desktop-releases) + appNewVersion=$(versionFromGit slab desktop-releases) + expectedTeamID="Q67SW996Z5" + ;; slack) name="Slack" type="dmg" @@ -4075,11 +4401,32 @@ smartgit) expectedTeamID="PHMY45PTNW" ;; snagit|\ -snagit2021|\ +snagit2022) + name="Snagit 2022" + type="dmg" + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Snagit (Mac) 2022" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Snagit (Mac) 2022" | sed -e 's/.*Snagit (Mac) //' -e 's/<\/td>.*//') + expectedTeamID="7TQL462TU8" + ;; +snagit2019) + name="Snagit 2019" + type="dmg" + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Snagit (Mac) 2019" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Snagit (Mac) 2019" | sed -e 's/.*Snagit (Mac) //' -e 's/<\/td>.*//') + expectedTeamID="7TQL462TU8" + ;; snagit2020) + name="Snagit 2020" + type="dmg" + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Snagit (Mac) 2020" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Snagit (Mac) 2020" | sed -e 's/.*Snagit (Mac) //' -e 's/<\/td>.*//') + expectedTeamID="7TQL462TU8" + ;; +snagit2021) name="Snagit 2021" type="dmg" - downloadURL="https://download.techsmith.com/snagitmac/releases/Snagit.dmg" + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Snagit (Mac) 2021" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Snagit (Mac) 2021" | sed -e 's/.*Snagit (Mac) //' -e 's/<\/td>.*//') expectedTeamID="7TQL462TU8" ;; snapgeneviewer) @@ -4089,6 +4436,15 @@ snapgeneviewer) appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | tr '/' '\n' | grep -i "dmg" | sed -E 's/[a-zA-Z_]*_([0-9.]*)_mac\.dmg/\1/g' ) expectedTeamID="WVCV9Q8Y78" ;; +sonobus) + name="Sonobus" + type="pkgInDmg" + html_page_source="$(curl -fs 'https://www.sonobus.net')" + downloadFile="$(echo "${html_page_source}" | xmllint --html --xpath "string(//a[contains(@href, 'mac.dmg')]/@href)" - 2> /dev/null)" + downloadURL="https://www.sonobus.net/$downloadFile" + appNewVersion="$(echo "${downloadFile}" | sed 's/releases\/sonobus-//' | sed 's/\-mac.dmg//' )" + expectedTeamID="XCS435894D" + ;; sonos|\ sonoss1) # credit: Erik Stam (@erikstam) @@ -4240,8 +4596,15 @@ tageditor) talkdeskcallbar) name="Callbar" type="dmg" - downloadURL=https://downloadcallbar.talkdesk.com/Callbar-$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version":"\([^"]*\)".*$/\1/p').dmg - appNewVersion=$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version":"\([^"]*\)".*$/\1/p') + appNewVersion=$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p') + downloadURL=https://downloadcallbar.talkdesk.com/Callbar-${appNewVersion}.dmg + expectedTeamID="YGGJX44TB8" + ;; +talkdeskcxcloud) + name="Talkdesk" + type="dmg" + appNewVersion=$(curl -fs https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json | sed -n -e 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p' | head -n 1) + downloadURL="https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-${appNewVersion}.dmg" expectedTeamID="YGGJX44TB8" ;; taskpaper) @@ -4335,6 +4698,31 @@ thunderbird) expectedTeamID="43AQ936H96" blockingProcesses=( thunderbird ) ;; +thunderbird_intl) + # This label will try to figure out the selected language of the user, + # and install corrosponding version of Thunderbird + name="Thunderbird" + type="dmg" + userLanguage=$(runAsUser defaults read .GlobalPreferences AppleLocale | tr '_' '-') + printlog "Found language $userLanguage to be used for $name." + releaseURL="https://ftp.mozilla.org/pub/thunderbird/releases/latest/README.txt" + until curl -fs $releaseURL | grep -q "=$userLanguage"; do + if [ ${#userLanguage} -eq 2 ]; then + break + fi + printlog "No locale matching '$userLanguage', trying '${userLanguage:0:2}'" + userLanguage=${userLanguage:0:2} + done + printlog "Using language '$userLanguage' for download." + downloadURL="https://download.mozilla.org/?product=thunderbird-latest&os=osx&lang=$userLanguage" + if ! curl -sfL --output /dev/null -r 0-0 $downloadURL; then + printlog "Download not found for '$userLanguage', using default ('en-US')." + downloadURL="https://download.mozilla.org/?product=thunderbird-latest&os=osx" + fi + appNewVersion=$(curl -fsIL $downloadURL | awk -F releases/ '/Location:/ {split($2,a,"/"); print a[1]}') + expectedTeamID="43AQ936H96" + blockingProcesses=( thunderbird ) + ;; tidal) name="TIDAL" type="dmg" @@ -4393,6 +4781,14 @@ typora) appNewVersion=$(curl -fs "https://www.typora.io/download/dev_update.xml" | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | cut -d '"' -f2) expectedTeamID="9HWK5273G4" ;; +ultimakercura) + name="Ultimaker Cura" + type="dmg" + downloadURL="$(downloadURLFromGit Ultimaker Cura)" + archiveName="Ultimaker_Cura-[0-9].*-Darwin.dmg" + appNewVersion=$(versionFromGit Ultimaker Cura ) + expectedTeamID="V4B3JXRRQS" + ;; umbrellaroamingclient) # credit: Tadayuki Onishi (@kenchan0130) name="Umbrella Roaming Client" @@ -4414,6 +4810,14 @@ universaltypeclient) downloadURL=https://bin.extensis.com/$( curl -fs https://www.extensis.com/support/universal-type-server-7/ | grep -o "UTC-[0-9].*M.zip" ) expectedTeamID="J6MMHGD9D6" ;; +unnaturalscrollwheels) + name="UnnaturalScrollWheels" + type="dmg" + downloadURL="$(downloadURLFromGit ther0n UnnaturalScrollWheels)" + appNewVersion="$(versionFromGit ther0n UnnaturalScrollWheels)" + expectedTeamID="D6H5W2T379" + blockingProcesses=( UnnaturalScrollWheels ) + ;; utm) name="UTM" type="dmg" @@ -4541,6 +4945,12 @@ webexmeetings) #blockingProcessesMaxCPU="5" blockingProcesses=( Webex ) ;; +wechat) + name="WeChat" + type="dmg" + downloadURL="https://dldir1.qq.com/weixin/mac/WeChatMac.dmg" + expectedTeamID="5A4RE8SF68" + ;; whatsapp) name="WhatsApp" type="dmg" @@ -4596,6 +5006,15 @@ xeroxphaser7800) downloadURL=$(curl -fs "https://www.support.xerox.com/en-us/product/phaser-7800/downloads?platform=macOSx11" | xmllint --html --format - 2>/dev/null | grep -o "https://.*XeroxDrivers.*.dmg") expectedTeamID="G59Y3XFNFR" ;; +xeroxworkcentre7800) + name="XeroxWorkCentre" + type="pkgInDmg" + appCustomVersion(){ lpinfo -m | grep 783 | tail -n 1 | awk -F ', ' '{print $2}' } + appNewVersion=$( curl -fsL "https://www.support.xerox.com/nl-nl/product/workcentre-7800-series/downloads?platform=macOSx11" | grep .dmg | head -n 1 | awk -F '_' '{print $2}' ) + downloadURL=$( curl -fsL "https://www.support.xerox.com/nl-nl/product/workcentre-7800-series/downloads?platform=macOSx11" | xmllint --html --format - 2>/dev/null | grep -o "https://.*XeroxDrivers.*.dmg" ) + expectedTeamID="G59Y3XFNFR" + blockingProcesses=( NONE ) +;; xink) name="Xink" type="pkg" @@ -4660,6 +5079,14 @@ zohoworkdrive) downloadURL=$(echo "$lines" | grep -i "files-accl.zohopublic.com")$(echo "$lines" | grep -i -A17 "files-accl.zohopublic.com" | grep -i -A2 macintosh | tail -1) expectedTeamID="TZ824L8Y37" ;; +zohoworkdrivegenie) + name="Zoho WorkDrive Genie" + type="dmg" + # https://www.zoho.com/workdrive/genie.html + downloadURL="https://www.zoho.com/workdrive/downloads/edit-tool/Zoho_WorkDrive_Genie.dmg" + CLIInstaller="Zoho WorkDrive Genie.app/Contents/MacOS/Zoho WorkDrive Genie" + expectedTeamID="TZ824L8Y37" + ;; zohoworkdrivetruesync) # Using this label expects you to agree to these: # License Areemant: https://www.zoho.com/workdrive/zohoworkdrive-license-agreement.html diff --git a/Labels.txt b/Labels.txt index bf630ff..cabdcf4 100644 --- a/Labels.txt +++ b/Labels.txt @@ -1,4 +1,5 @@ 1password7 +1password8 1passwordcli 4kvideodownloader 8x8 @@ -20,6 +21,7 @@ amazonchime amazoncorretto8jdk amazonworkspaces androidfiletransfer +androidstudio anydesk apparency appcleaner @@ -33,6 +35,7 @@ aquaskk arq7 asana atext +atextlegacy atom audacity authydesktop @@ -64,6 +67,8 @@ calcservice calibre camostudio camtasia +camtasia2019 +camtasia2021 canva chatwork cisdem-documentreader @@ -73,11 +78,14 @@ clickshare clipy closeio cloudya +clue +cluefull code42 coderunner colourcontrastanalyser cormorant craftmanager +craftmanagerforsketch cryptomator cyberduck daisydisk @@ -94,13 +102,17 @@ dialog dialpad discord diskspace +displaylinkmanager docker dockutil +drawio drift dropbox +duckduckgo easeusdatarecoverywizard easyfind egnyte +egnytewebedit element eraseinstall eshareosx @@ -113,6 +125,7 @@ fastscripts favro ferdi figma +filezilla findanyfile firefox firefox_da @@ -121,8 +134,11 @@ firefoxesr firefoxesr_intl firefoxesrpkg firefoxpkg +firefoxpkg_intl flowjo flux +flycut +fontexplorer front fsmonitor gimp @@ -150,10 +166,14 @@ hazel houdahspot hpeasyadmin hpeasystart +hype hyper ibarcoder icons +idrive +idrivethin iina +imageoptim imazingprofileeditor inkscape insomnia @@ -192,6 +212,8 @@ lastpass launchbar lexarrecoverytool libreoffice +linear +logioptions logitechoptions logseq loom @@ -201,6 +223,7 @@ lulu macadminspython maccyapp macfuse +macoslaps macports malwarebytes marathon @@ -232,6 +255,8 @@ microsoftteams microsoftvisualstudiocode microsoftword microsoftyammer +mightymike +mindmanager miro mobikinassistantforandroid mochakeyboard @@ -276,6 +301,7 @@ paretosecurity parsec pdfsam perimeter81 +pika pitch plantronicshub platypus @@ -287,10 +313,12 @@ privileges proctortrack promiseutility promiseutilityr +propresenter7 protonvpn proxyman pycharmce pymol +qgis-pr r ramboxce rancherdesktop @@ -331,12 +359,16 @@ sizeup sketch sketchupviewer skype +slab slack smartgit snagit +snagit2019 snagit2020 snagit2021 +snagit2022 snapgeneviewer +sonobus sonos sonoss1 sonoss2 @@ -359,6 +391,7 @@ tableaupublic tableaureader tageditor talkdeskcallbar +talkdeskcxcloud taskpaper teamviewer teamviewerhost @@ -371,6 +404,7 @@ textmate theunarchiver things thunderbird +thunderbird_intl tidal toggltrack tom4aconverter @@ -379,9 +413,11 @@ trex tunnelbear tunnelblick typora +ultimakercura umbrellaroamingclient uniconverter universaltypeclient +unnaturalscrollwheels utm vagrant vanilla @@ -399,6 +435,7 @@ wallyezflash webex webexmeetings webexteams +wechat whatsapp wickrme wickrpro @@ -406,6 +443,7 @@ wireshark wordservice wwdc xeroxphaser7800 +xeroxworkcentre7800 xink xmenu xquartz @@ -414,6 +452,7 @@ yubikeymanagerqt zappy zeplin zohoworkdrive +zohoworkdrivegenie zohoworkdrivetruesync zoom zoomclient diff --git a/MDM/App script.sh b/MDM/App script.sh index a33a43a..c7b4a10 100755 --- a/MDM/App script.sh +++ b/MDM/App script.sh @@ -5,8 +5,28 @@ what="brave" # enter the software to install # To be used as a script sent out from a MDM. # Fill the variable "what" above with a label. # Script will run this label. +LOGO="appstore" # or "addigy", "microsoft", "mosyleb", "mosylem" +###################################################################### +# Parameters for reinstall/initial install (owner root:wheel): +# "BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force IGNORE_APP_STORE_APPS=yes SYSTEMOWNER=1" +# Parameters for Self Service installed app: +# "BLOCKING_PROCESS_ACTION=prompt_user NOTIFY=all" +# Parameters for security important apps, like browsers (run automaticaly every day): +# "BLOCKING_PROCESS_ACTION=tell_user_then_kill" +# Update of service apps (run automatically): +# "BLOCKING_PROCESS_ACTION=quit_kill NOTIFY=silent" +parameters="BLOCKING_PROCESS_ACTION=tell_user_then_kill NOTIFY=all" ############################################### +# Verify that Installomator has been installed +destFile="/usr/local/Installomator/Installomator.sh" +if [ ! -e "${destFile}" ]; then + echo "Installomator not found here:" + echo "${destFile}" + echo "Exiting." + exit 99 +fi + # No sleeping /usr/bin/caffeinate -d -i -m -u & caffeinatepid=$! @@ -16,18 +36,14 @@ caffexit () { exit $1 } -# Verify that Installomator has been installed -destFile="/usr/local/Installomator/Installomator.sh" -if [ ! -e "${destFile}" ]; then - echo "Installomator not found here:" - echo "${destFile}" - echo "Exiting." - caffexit 99 -fi - -${destFile} ${what} LOGO=mosyleb BLOCKING_PROCESS_ACTION=tell_user #NOTIFY=all #INSTALL=force -if [ $? != 0 ]; then -# This is currently not working in Mosyle, that will ignore script errors. Please request support for this from Mosyle! +cmdOutput="$(${destFile} ${what} LOGO=$LOGO $parameters LOGGING=WARN || true)" +# Check result +exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )" +if [[ ${exitStatus} -ne 0 ]] ; then + echo -e "Error installing ${what}. Exit code ${exitStatus}" + #echo "$cmdOutput" + errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )" + echo "$errorOutput" echo "Error installing ${what}. Exit code $?" caffexit $? fi diff --git a/MDM/App-loop script.sh b/MDM/App-loop script.sh index 17ce761..8fb33e7 100755 --- a/MDM/App-loop script.sh +++ b/MDM/App-loop script.sh @@ -1,11 +1,31 @@ #!/bin/zsh # Installation using Installomator -what="microsoftteams microsoftyammer firefox bravebrowser cyberduck vlc signal" # enter the software to install separated with spaces +whatList="microsoftteams microsoftyammer firefox bravebrowser cyberduck vlc signal" # enter the software to install separated with spaces # To be used as a script sent out from a MDM. -# Fill the variable "what" above with labels separated by space " ". +# Fill the variable "whatList" above with labels separated by space " ". # Script will loop through these labels. +LOGO="appstore" # or "addigy", "microsoft", "mosyleb", "mosylem" ###################################################################### +# Parameters for reinstall/initial install (owner root:wheel): +# "BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force IGNORE_APP_STORE_APPS=yes SYSTEMOWNER=1" +# Parameters for Self Service installed app: +# "BLOCKING_PROCESS_ACTION=prompt_user NOTIFY=all" +# Parameters for security important apps, like browsers (run automaticaly every day): +# "BLOCKING_PROCESS_ACTION=tell_user_then_kill" +# Update of service apps (run automatically): +# "BLOCKING_PROCESS_ACTION=quit_kill NOTIFY=silent" +parameters="BLOCKING_PROCESS_ACTION=tell_user NOTIFY=all" +###################################################################### + +# Verify that Installomator has been installed +destFile="/usr/local/Installomator/Installomator.sh" +if [ ! -e "${destFile}" ]; then + echo "Installomator not found here:" + echo "${destFile}" + echo "Exiting." + exit 99 +fi # No sleeping /usr/bin/caffeinate -d -i -m -u & @@ -19,21 +39,17 @@ caffexit () { # Count errors errorCount=0 -# Verify that Installomator has been installed -destFile="/usr/local/Installomator/Installomator.sh" -if [ ! -e "${destFile}" ]; then - echo "Installomator not found here:" - echo "${destFile}" - echo "Exiting." - caffexit 99 -fi - -for item in $what; do - #echo $item - ${destFile} ${item} LOGO=mosyleb BLOCKING_PROCESS_ACTION=tell_user #NOTIFY=all #INSTALL=force - if [ $? != 0 ]; then - # This is currently not working in Mosyle, that will ignore script errors. Please request support for this from Mosyle! - echo "[$(DATE)] Error installing ${item}. Exit code $?" +for what in $whatList; do + #echo $what + # Install software using Installomator + cmdOutput="$(${destFile} ${what} LOGO=$LOGO $parameters LOGGING=WARN || true)" + # Check result + exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )" + if [[ ${exitStatus} -ne 0 ]] ; then + echo -e "Error installing ${what}. Exit code ${exitStatus}" + #echo "$cmdOutput" + errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )" + echo "$errorOutput" let errorCount++ fi done diff --git a/MDM/Installomator update.sh b/MDM/Installomator update.sh index 70fe71f..5b6bb67 100755 --- a/MDM/Installomator update.sh +++ b/MDM/Installomator update.sh @@ -1,9 +1,18 @@ #!/bin/bash # Updating Installomator # Usefull to push out after deployment if earlier version was deployed in DEP profile -# Currently script uses valuesfromarguments as a label is not included before next release, so this can be used to install to version 0.7 what="installomator" # enter the software to install +LOGO="appstore" # or "addigy", "microsoft", "mosyleb", "mosylem" + +# Verify that Installomator has been installed +destFile="/usr/local/Installomator/Installomator.sh" +if [ ! -e "${destFile}" ]; then + echo "Installomator not found here:" + echo "${destFile}" + echo "Exiting." + exit 99 +fi # No sleeping /usr/bin/caffeinate -d -i -m -u & @@ -14,30 +23,19 @@ caffexit () { exit $1 } -# Verify that Installomator has been installed -destFile="/usr/local/Installomator/Installomator.sh" -if [ ! -e "${destFile}" ]; then - echo "Installomator not found here:" - echo "${destFile}" - echo "Exiting." - caffexit 99 -fi +# Install software using Installomator +cmdOutput="$(${destFile} ${what} LOGO=$LOGO BLOCKING_PROCESS_ACTION=ignore NOTIFY=silent LOGGING=req || true)" -${destFile} valuesfromarguments\ - name=Installomator \ - type=pkg \ - packageID=com.scriptingosx.Installomator \ - downloadURL=https://github.com/Installomator/Installomator/releases/download/v0.7release/Installomator-0.7.0.pkg \ - appNewVersion=0.7 \ - expectedTeamID=JME5BW3F3R \ - BLOCKING_PROCESS_ACTION=ignore \ - NOTIFY=silent - -# ${destFile} ${what} BLOCKING_PROCESS_ACTION=ignore NOTIFY=silent -if [ $? != 0 ]; then -# This is currently not working in Mosyle, that will ignore script errors. Please request support for this from Mosyle! - echo "Error installing ${what}. Exit code $?" - caffexit $? +# Check result +exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )" +if [[ ${exitStatus} -eq 0 ]] ; then + echo -e "${what} succesfully installed.\n" +else + echo -e "Error installing ${what}. Exit code ${exitStatus}\n" + #echo "$cmdOutput" + errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )" + echo "$errorOutput" + caffexit $exitStatus fi echo "[$(DATE)][LOG-END]" diff --git a/MDM/MDMAddigy CustomSoftware.sh b/MDM/MDMAddigy CustomSoftware.sh index 8feb85a..e7918fd 100755 --- a/MDM/MDMAddigy CustomSoftware.sh +++ b/MDM/MDMAddigy CustomSoftware.sh @@ -5,15 +5,34 @@ # Mark: Installation script # Just click “Add” to autogenerate the installer script line by clicking the “Add”-button next to the Installer PKG, replace with first line below -/usr/sbin/installer -pkg "/Library/Addigy/ansible/packages/Installomator (0.7.0)/Installomator-0.7.0.pkg" -target / +/usr/sbin/installer -pkg "/Library/Addigy/ansible/packages/Installomator (9.1.0)/Installomator-9.1.pkg" -target / # Installation using Installomator -what="supportapp xink textmate microsoftedge wwdc keka vlc " # enter the software to installed separated with spaces +whatList="supportapp xink textmate microsoftedge wwdc keka vlc " # enter the software to installed separated with spaces # To be used as a script sent out from a MDM. -# Fill the variable "what" above with labels separated by space " ". +# Fill the variable "whatList" above with labels separated by space " ". # Script will loop through these labels and exit with number of errors. ###################################################################### +# Parameters for reinstall/initial install (owner root:wheel): +# "BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force IGNORE_APP_STORE_APPS=yes SYSTEMOWNER=1" +# Parameters for Self Service installed app: +# "BLOCKING_PROCESS_ACTION=prompt_user NOTIFY=all" +# Parameters for security important apps, like browsers (run automaticaly every day): +# "BLOCKING_PROCESS_ACTION=tell_user_then_kill" +# Update of service apps (run automatically): +# "BLOCKING_PROCESS_ACTION=quit_kill NOTIFY=silent" +parameters="BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force IGNORE_APP_STORE_APPS=yes" +###################################################################### + +# Verify that Installomator has been installed +destFile="/usr/local/Installomator/Installomator.sh" +if [ ! -e "${destFile}" ]; then + echo "Installomator not found here:" + echo "${destFile}" + echo "Exiting." + exit 99 +fi # No sleeping /usr/bin/caffeinate -d -i -m -u & @@ -27,21 +46,17 @@ caffexit () { # Count errors errorCount=0 -# Verify that Installomator has been installed -destFile="/usr/local/Installomator/Installomator.sh" -if [ ! -e "${destFile}" ]; then - echo "Installomator not found here:" - echo "${destFile}" - echo "Exiting." - caffexit 99 -fi - -for item in $what; do - #echo $item - ${destFile} ${item} LOGO=addigy NOTIFY=silent BLOCKING_PROCESS_ACTION=quit_kill #INSTALL=force - if [ $? != 0 ]; then - # Error handling - echo "[$(DATE)] Error installing ${item}. Exit code $?" +for what in $whatList; do + #echo $what + # Install software using Installomator + cmdOutput="$(${destFile} ${what} LOGO=addigy $parameters || true)" + # Check result + exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )" + if [[ ${exitStatus} -ne 0 ]] ; then + echo -e "Error installing ${what}. Exit code ${exitStatus}" + #echo "$cmdOutput" + errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )" + echo "$errorOutput" let errorCount++ fi done @@ -56,7 +71,7 @@ caffexit $errorCount # Install on success # Remember to fill out the correct “TARGET_VERSION” and “PKG_ID”, and click "Install on succes". PKG_ID="com.scriptingosx.Installomator" -TARGET_VERSION="8.0" +TARGET_VERSION="9.1" vercomp () { if [[ $1 == $2 ]]; then diff --git a/MDM/MDMMosyle install.sh b/MDM/MDMMosyle install.sh index 6c6f9ca..27f9d8d 100644 --- a/MDM/MDMMosyle install.sh +++ b/MDM/MDMMosyle install.sh @@ -1,10 +1,11 @@ PKG_ID="com.scriptingosx.Installomator" -TARGET_VERSION="8.0" +TARGET_VERSION="9.1" URLDOWNLOAD="%MosyleCDNFile:blah-blah-blah%" ###################################################################### -# Installation using Installomator (enter the software to install separated with spaces in the "what"-variable) -what="handbrake theunarchiver microsoftoffice365" +# Installation using Installomator (enter the software to install separated with spaces in the "whatList"-variable) +whatList="handbrake theunarchiver microsoftoffice365" # Covered by Mosyle Catalog: "brave firefox googlechrome microsoftedge microsoftteams signal sublimetext vlc webex zoom" among others +LOGO="mosyleb" # or "mosylem" ###################################################################### ## Mark: Code here @@ -56,12 +57,17 @@ if [ ! -e "${destFile}" ]; then caffexit 99 fi -for item in $what; do +for what in $whatList; do #echo $item - ${destFile} ${item} LOGO=mosyle NOTIFY=all BLOCKING_PROCESS_ACTION=tell_user #NOTIFY=silent BLOCKING_PROCESS_ACTION=quit_kill #INSTALL=force - if [ $? != 0 ]; then - # Error handling - echo "[$(DATE)] Error installing ${item}. Exit code $?" + # Install software using Installomator + cmdOutput="$(${destFile} ${what} LOGO=$LOGO NOTIFY=all BLOCKING_PROCESS_ACTION=tell_user || true)" # NOTIFY=silent BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force + # Check result + exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )" + if [[ ${exitStatus} -ne 0 ]] ; then + echo "Error installing ${what}. Exit code ${exitStatus}" + #echo "$cmdOutput" + errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )" + echo "$errorOutput" let errorCount++ fi done diff --git a/MDM/Manual valuesfromarguments.sh b/MDM/Manual valuesfromarguments.sh index 706f81f..ee80291 100755 --- a/MDM/Manual valuesfromarguments.sh +++ b/MDM/Manual valuesfromarguments.sh @@ -1,8 +1,20 @@ #!/bin/bash +# Software + # Installation using Installomator # Example of installing software using valuesfromarguments to install a custom software -what="valuesfromarguments" # enter the software to install +LOGO="appstore" # or "addigy", "microsoft", "mosyleb", "mosylem" +############################################### + +# Verify that Installomator has been installed +destFile="/usr/local/Installomator/Installomator.sh" +if [ ! -e "${destFile}" ]; then + echo "Installomator not found here:" + echo "${destFile}" + echo "Exiting." + exit 99 +fi # No sleeping /usr/bin/caffeinate -d -i -m -u & @@ -13,29 +25,31 @@ caffexit () { exit $1 } -# Verify that Installomator has been installed -destFile="/usr/local/Installomator/Installomator.sh" -if [ ! -e "${destFile}" ]; then - echo "Installomator not found here:" - echo "${destFile}" - echo "Exiting." - caffexit 99 -fi +# Variables to calculate +downloadURL="https://craft-assets.invisionapp.com/CraftManager/production/CraftManager.zip" +appNewVersion=$(curl -fs https://craft-assets.invisionapp.com/CraftManager/production/appcast.xml | xpath -e '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f2) -${destFile} valuesfromarguments \ - name=\"Zoho\ WorkDrive\" \ - type=dmg \ - downloadURL=https://files-accl.zohopublic.com/public/wdbin/download/46f971e4fc4a32b68ad5d7dade38a7d2 \ - appNewVersion=2.6.25 \ - expectedTeamID=TZ824L8Y37 \ - BLOCKING_PROCESS_ACTION=quit \ - NOTIFY=all +# Install software using Installomator +cmdOutput="$(${destFile} valuesfromarguments LOGO=$LOGO \ + name=CraftManager \ + type=zip \ + downloadURL=$downloadURL \ + appNewVersion=$appNewVersion \ + expectedTeamID=VRXQSNCL5W \ + BLOCKING_PROCESS_ACTION=prompt_user \ + LOGGING=REQ \ + NOTIFY=all || true)" -# ${destFile} ${what} BLOCKING_PROCESS_ACTION=ignore NOTIFY=silent -if [ $? != 0 ]; then -# This is currently not working in Mosyle, that will ignore script errors. Please request support for this from Mosyle! - echo "Error installing ${what}. Exit code $?" - caffexit $? +# Check result +exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )" +if [[ ${exitStatus} -eq 0 ]] ; then + echo -e "${what} succesfully installed.\n" +else + echo -e "Error installing ${what}. Exit code ${exitStatus}\n" + #printlog "$cmdOutput" + errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )" + echo "$errorOutput" + caffexit $exitStatus fi echo "[$(DATE)][LOG-END]" diff --git a/README.md b/README.md index 676cbc0..0002ba3 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ _The one installer script to rule them all._ -    +    This script is in the “we find it useful, it is working for us” stage. @@ -13,12 +13,12 @@ We have put a lot of work into making it stable and safe, but we cannot - of cou ## Authors Intallomator was originally inspired by the download scripts from William Smith and Sander Schram, and created by: - Armin Briegel - @scriptingosx +- [Armin Briegel - @scriptingosx](https://github.com/scriptingosx) -Later on a few more contributers came on the project: - Isaac Ordonez - @issacatmann - Søren Theilgaard - @Theile - Adam Codega - @acodega +Later on a few more members came on the project: +- Isaac Ordonez - @issacatmann +- [Søren Theilgaard - @Theile](https://github.com/Theile) +- [Adam Codega - @acodega](https://github.com/acodega) And with numerous contributions from many others. diff --git a/fragments/functions.sh b/fragments/functions.sh index 8dbccb3..9e9e977 100644 --- a/fragments/functions.sh +++ b/fragments/functions.sh @@ -242,8 +242,8 @@ getAppVersion() { # printlog "App(s) found: ${applist}" DEBUG # applist=$(mdfind "kind:application AND name:$appName" -0 ) fi - if [[ -z applist ]]; then - printlog "No previous app found" INFO + if [[ -z $applist ]]; then + printlog "No previous app found" WARN else printlog "App(s) found: ${applist}" INFO fi @@ -265,7 +265,7 @@ getAppVersion() { if [[ -d "$installedAppPath"/Contents/_MASReceipt ]];then printlog "Installed $appName is from App Store, use “IGNORE_APP_STORE_APPS=yes” to replace." if [[ $IGNORE_APP_STORE_APPS == "yes" ]]; then - printlog "Replacing App Store apps, no matter the version" + printlog "Replacing App Store apps, no matter the version" WARN appversion=0 else cleanupAndExit 1 "App previously installed from App Store, and we respect that" ERROR diff --git a/fragments/header.sh b/fragments/header.sh index bde971b..9f4a7cc 100644 --- a/fragments/header.sh +++ b/fragments/header.sh @@ -238,7 +238,7 @@ IGNORE_DND_APPS="" # - updateToolArguments: # When Installomator detects an existing installation of the application, # and the updateTool variable is set -# $updateTool $updateArguments +# $updateTool $updateArguments # Will be run instead of of downloading and installing a complete new version. # Use this when the updateTool does differential and optimized downloads. # e.g. msupdate on various Microsoft labels @@ -253,7 +253,7 @@ IGNORE_DND_APPS="" # We need to define `name` for the installed app (to be version checked), as well as # `installerTool` for the installer app (if named differently than `name`. Installomator # will add the path to the folder/disk image with the binary, and it will be called like this: - `$CLIInstaller $CLIArguments` +# $CLIInstaller $CLIArguments # For most installations `CLIInstaller` should contain the `installerTool` for the CLI call # (if it’s the same). # We can support a whole range of other software titles by implementing this. diff --git a/fragments/labels/1password8.sh b/fragments/labels/1password8.sh new file mode 100644 index 0000000..c426113 --- /dev/null +++ b/fragments/labels/1password8.sh @@ -0,0 +1,15 @@ +1password8) + name="1Password 8" + appName="1Password.app" + type="zip" + if [[ $(arch) == "arm64" ]]; then + archiveName="1Password-latest-aarch64.zip" + downloadURL="https://downloads.1password.com/mac/1Password-latest-aarch64.zip" + elif [[ $(arch) == "i386" ]]; then + archiveName="1Password-latest-x86_64.zip" + downloadURL="https://downloads.1password.com/mac/1Password-latest-x86_64.zip" + fi + expectedTeamID="2BUA8C4S2C" + blockingProcesses=( "1Password Extension Helper" "1Password 7" "1Password" "1Password (Safari)" "1PasswordNativeMessageHost" "1PasswordSafariAppExtension" ) + #forcefulQuit=YES + ;; diff --git a/fragments/labels/adobereaderdc-update.sh b/fragments/labels/adobereaderdc-update.sh index 026c6ab..a409cf5 100644 --- a/fragments/labels/adobereaderdc-update.sh +++ b/fragments/labels/adobereaderdc-update.sh @@ -1,7 +1,7 @@ adobereaderdc-update) name="Adobe Acrobat Reader DC" type="pkgInDmg" - downloadURL=$(adobecurrent=`curl --fail --silent https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt | tr -d '.'` && echo http://ardownload.adobe.com/pub/adobe/reader/mac/AcrobatDC/"$adobecurrent"/AcroRdrDCUpd"$adobecurrent"_MUI.dmg) + downloadURL=$(adobecurrent=`curl --fail --silent https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt | tr -d '.'` && echo https://ardownload2.adobe.com/pub/adobe/reader/mac/AcrobatDC/"$adobecurrent"/AcroRdrDC_"$adobecurrent"_MUI.dmg) appNewVersion=$(curl -s https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt) #appNewVersion=$(curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" https://get.adobe.com/reader/ | grep ">Version" | sed -E 's/.*Version 20([0-9.]*)<.*/\1/g') # credit: Søren Theilgaard (@theilgaard) expectedTeamID="JQ525L2MZD" diff --git a/fragments/labels/adobereaderdc.sh b/fragments/labels/adobereaderdc.sh index 881e69a..48fd518 100644 --- a/fragments/labels/adobereaderdc.sh +++ b/fragments/labels/adobereaderdc.sh @@ -3,7 +3,8 @@ adobereaderdc-install) name="Adobe Acrobat Reader DC" type="pkgInDmg" packageID="com.adobe.acrobat.DC.reader.app.pkg.MUI" - downloadURL=$(curl --silent --fail -H "Sec-Fetch-Site: same-origin" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: en-US;q=0.9,en;q=0.8" -H "DNT: 1" -H "Sec-Fetch-Mode: cors" -H "X-Requested-With: XMLHttpRequest" -H "Referer: https://get.adobe.com/reader/enterprise/" -H "Accept: */*" "https://get.adobe.com/reader/webservices/json/standalone/?platform_type=Macintosh&platform_dist=OSX&platform_arch=x86-32&language=English&eventname=readerotherversions" | grep -Eo '"download_url":.*?[^\]",' | head -n 1 | cut -d \" -f 4) + #downloadURL=$(curl --silent --fail -H "Sec-Fetch-Site: same-origin" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: en-US;q=0.9,en;q=0.8" -H "DNT: 1" -H "Sec-Fetch-Mode: cors" -H "X-Requested-With: XMLHttpRequest" -H "Referer: https://get.adobe.com/reader/enterprise/" -H "Accept: */*" "https://get.adobe.com/reader/webservices/json/standalone/?platform_type=Macintosh&platform_dist=OSX&platform_arch=x86-32&language=English&eventname=readerotherversions" | grep -Eo '"download_url":.*?[^\]",' | head -n 1 | cut -d \" -f 4) + downloadURL=$(adobecurrent=`curl --fail --silent https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt | tr -d '.'` && echo https://ardownload2.adobe.com/pub/adobe/reader/mac/AcrobatDC/"$adobecurrent"/AcroRdrDC_"$adobecurrent"_MUI.dmg) appNewVersion=$(curl -s https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt) #appNewVersion=$(curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" https://get.adobe.com/reader/ | grep ">Version" | sed -E 's/.*Version 20([0-9.]*)<.*/\1/g') # credit: Søren Theilgaard (@theilgaard) expectedTeamID="JQ525L2MZD" diff --git a/fragments/labels/amazoncorretto8jdk.sh b/fragments/labels/amazoncorretto8jdk.sh index 0fc4037..38696f6 100644 --- a/fragments/labels/amazoncorretto8jdk.sh +++ b/fragments/labels/amazoncorretto8jdk.sh @@ -1,7 +1,12 @@ amazoncorretto8jdk) name="Amazon Corretto 8 JDK" type="pkg" - downloadURL="https://corretto.aws/downloads/latest/amazon-corretto-8-x64-macos-jdk.pkg" - appNewVersion=$(curl -s https://raw.githubusercontent.com/corretto/corretto-8/develop/CHANGELOG.md | grep "## Corretto version" | head -n 1 | awk '{ print $4; exit}') + if [[ $(arch) == "arm64" ]]; then + downloadURL="https://corretto.aws/downloads/latest/amazon-corretto-8-aarch64-macos-jdk.pkg" + appNewVersion=$(curl -s https://raw.githubusercontent.com/corretto/corretto-8/develop/CHANGELOG.md | grep "## Corretto version" | head -n 1 | awk '{ print $4; exit}') + elif [[ $(arch) == "i386" ]]; then + downloadURL="https://corretto.aws/downloads/latest/amazon-corretto-8-x64-macos-jdk.pkg" + appNewVersion=$(curl -s https://raw.githubusercontent.com/corretto/corretto-8/develop/CHANGELOG.md | grep "## Corretto version" | head -n 1 | awk '{ print $4; exit}') + fi expectedTeamID="94KV3E626L" ;; diff --git a/fragments/labels/androidstudio.sh b/fragments/labels/androidstudio.sh new file mode 100644 index 0000000..b016f65 --- /dev/null +++ b/fragments/labels/androidstudio.sh @@ -0,0 +1,13 @@ +androidstudio) + name="Android Studio" + type="dmg" + if [[ $(arch) == arm64 ]]; then + downloadURL=$(curl -fsL "https://developer.android.com/studio#downloads" | grep -i arm.dmg | head -2 | grep -o -i -E "https.*" | cut -d '"' -f1) + appNewVersion=$( echo "${downloadURL}" | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' ) + elif [[ $(arch) == i386 ]]; then + downloadURL=$(curl -fsL "https://developer.android.com/studio#downloads" | grep -i mac.dmg | head -2 | grep -o -i -E "https.*" | cut -d '"' -f1) + appNewVersion=$( echo "${downloadURL}" | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' ) + fi + expectedTeamID="EQHXZ8M8AV" + blockingProcesses=( androidstudio ) + ;; diff --git a/fragments/labels/atextlegacy.sh b/fragments/labels/atextlegacy.sh new file mode 100644 index 0000000..59ba49a --- /dev/null +++ b/fragments/labels/atextlegacy.sh @@ -0,0 +1,7 @@ +atextlegacy) + # credit: Gabe Marchan (gabemarchan.com - @darklink87) + name="aText" + type="dmg" + downloadURL="https://trankynam.com/atext/downloads/aTextLegacy.dmg" + expectedTeamID="KHEMQ2FD9E" + ;; diff --git a/fragments/labels/camtasia.sh b/fragments/labels/camtasia.sh index 533a13e..559d772 100644 --- a/fragments/labels/camtasia.sh +++ b/fragments/labels/camtasia.sh @@ -1,6 +1,8 @@ -camtasia) - name="Camtasia 2020" +camtasia|\ +camtasia2021) + name="Camtasia 2021" type="dmg" - downloadURL=https://download.techsmith.com/camtasiamac/releases/Camtasia.dmg + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2021" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2021" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//') expectedTeamID="7TQL462TU8" ;; diff --git a/fragments/labels/camtasia2019.sh b/fragments/labels/camtasia2019.sh new file mode 100644 index 0000000..170c056 --- /dev/null +++ b/fragments/labels/camtasia2019.sh @@ -0,0 +1,8 @@ +camtasia2019) + name="Camtasia 2019" + type="dmg" + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2019" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2019" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//') + expectedTeamID="7TQL462TU8" + ;; + \ No newline at end of file diff --git a/fragments/labels/camtasia2020.sh b/fragments/labels/camtasia2020.sh new file mode 100644 index 0000000..8dba168 --- /dev/null +++ b/fragments/labels/camtasia2020.sh @@ -0,0 +1,7 @@ +camtasia2020) + name="Camtasia 2020" + type="dmg" + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2020" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2020" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//') + expectedTeamID="7TQL462TU8" + ;; diff --git a/fragments/labels/citrixworkspace.sh b/fragments/labels/citrixworkspace.sh index 1f11c5d..ea068d7 100644 --- a/fragments/labels/citrixworkspace.sh +++ b/fragments/labels/citrixworkspace.sh @@ -3,6 +3,6 @@ citrixworkspace) name="Citrix Workspace" type="pkgInDmg" downloadURL="https:"$(curl -s -L "https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html#ctx-dl-eula-external" | grep "dmg?" | sed "s/.*rel=.\(.*\)..id=.*/\1/") # http://downloads.citrix.com/18823/CitrixWorkspaceApp.dmg?__gda__=1605791892_edc6786a90eb5197fb226861a8e27aa8 - appNewVersion=$(curl -fs https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html | grep "
Version" | head -1 | cut -d " " -f1 | cut -d ";" -f2 | cut -d "." -f 1-3) + appNewVersion=$(curl -fs https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html | grep "
Version" | head -1 | awk '{print $2}' | cut -d "." -f 1-3) expectedTeamID="S272Y5R93J" ;; diff --git a/fragments/labels/clue.sh b/fragments/labels/clue.sh new file mode 100644 index 0000000..ef54612 --- /dev/null +++ b/fragments/labels/clue.sh @@ -0,0 +1,9 @@ +clue) + #For personal use and students + name="Clue" + type="dmg" + downloadURL=$(curl -fsL https://clue.no/en/download | grep "For personal use and students:" | sed 's/.*href="//' | sed 's/".*//') + appNewVersion="$(echo "${downloadURL}" | sed -E 's/.*Clue*([0-9.]*)\..*/\1/g')" + versionKey="CFBundleVersion" + expectedTeamID="3NX6B9TB2F" + ;; diff --git a/fragments/labels/cluefull.sh b/fragments/labels/cluefull.sh new file mode 100644 index 0000000..65abbb7 --- /dev/null +++ b/fragments/labels/cluefull.sh @@ -0,0 +1,9 @@ +cluefull) + #For companies and schools + name="Clue" + type="dmg" + downloadURL=$(curl -fsL https://clue.no/en/download | grep "For companies and schools:" | sed 's/.*href="//' | sed 's/".*//') + appNewVersion="$(echo "${downloadURL}" | sed -E 's/.*Clue*([0-9.]*)\F.*/\1/g')" + versionKey="CFBundleVersion" + expectedTeamID="3NX6B9TB2F" + ;; diff --git a/fragments/labels/craftmanagerforsketch.sh b/fragments/labels/craftmanagerforsketch.sh new file mode 100644 index 0000000..26e70d3 --- /dev/null +++ b/fragments/labels/craftmanagerforsketch.sh @@ -0,0 +1,7 @@ +craftmanagerforsketch) + name="CraftManager" + type="zip" + downloadURL="https://craft-assets.invisionapp.com/CraftManager/production/CraftManager.zip" + appNewVersion=$(curl -fs https://craft-assets.invisionapp.com/CraftManager/production/appcast.xml | xpath '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f2) + expectedTeamID="VRXQSNCL5W" + ;; diff --git a/fragments/labels/displaylinkmanager.sh b/fragments/labels/displaylinkmanager.sh new file mode 100644 index 0000000..5ef4427 --- /dev/null +++ b/fragments/labels/displaylinkmanager.sh @@ -0,0 +1,8 @@ +displaylinkmanager) + name="DisplayLink Manager" + type="pkg" + #packageID="com.displaylink.displaylinkmanagerapp" + downloadURL=https://www.synaptics.com$(redirect=$(curl -sfL https://www.synaptics.com/products/displaylink-graphics/downloads/macos | grep 'class="download-link">Download' | head -n 1 | sed 's/.*href="//' | sed 's/".*//') && curl -sfL "https://www.synaptics.com$redirect" | grep Accept | head -n 1 | sed 's/.*href="//' | sed 's/".*//') + appNewVersion=$(curl -sfL https://www.synaptics.com/products/displaylink-graphics/downloads/macos | grep "Release:" | head -n 1 | cut -d ' ' -f2) + expectedTeamID="73YQY62QM3" + ;; diff --git a/fragments/labels/drawio.sh b/fragments/labels/drawio.sh new file mode 100644 index 0000000..bd0241b --- /dev/null +++ b/fragments/labels/drawio.sh @@ -0,0 +1,9 @@ +drawio) + name="draw.io" + type="dmg" + archiveName="draw.io-universal-[0-9.]*.dmg" + downloadURL="$(downloadURLFromGit jgraph drawio-desktop)" + appNewVersion="$(versionFromGit jgraph drawio-desktop)" + expectedTeamID="UZEUFB4N53" + blockingProcesses=( draw.io ) + ;; diff --git a/fragments/labels/dropbox.sh b/fragments/labels/dropbox.sh index 6936d96..06a02b9 100644 --- a/fragments/labels/dropbox.sh +++ b/fragments/labels/dropbox.sh @@ -2,5 +2,6 @@ dropbox) name="Dropbox" type="dmg" downloadURL="https://www.dropbox.com/download?plat=mac&full=1" + appNewVersion=$(curl -fsIL "$downloadURL" | grep -i "^location" | sed -E 's/.*%20([0-9.]*)\.dmg/\1/g') expectedTeamID="G7HH3F8CAK" ;; diff --git a/fragments/labels/duckduckgo.sh b/fragments/labels/duckduckgo.sh new file mode 100644 index 0000000..a5cb4e0 --- /dev/null +++ b/fragments/labels/duckduckgo.sh @@ -0,0 +1,10 @@ +duckduckgo) + name="DuckDuckGo" + type="dmg" + #downloadURL="https://staticcdn.duckduckgo.com/macos-desktop-browser/duckduckgo.dmg" + #downloadURL=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[last()]' 2>/dev/null | cut -d '"' -f2) + downloadURL=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | cut -d '"' -f2) + #appNewVersion=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/enclosure/@sparkle:version)[last()]' 2>/dev/null | cut -d '"' -f2) + appNewVersion=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/sparkle:shortVersionString)[1]' 2>/dev/null | cut -d ">" -f2 | cut -d "<" -f1) + expectedTeamID="HKE973VLUW" + ;; diff --git a/fragments/labels/filezilla.sh b/fragments/labels/filezilla.sh new file mode 100755 index 0000000..5ec9aa1 --- /dev/null +++ b/fragments/labels/filezilla.sh @@ -0,0 +1,10 @@ +filezilla) + name="FileZilla" + type="tbz" + packageID="org.filezilla-project.filezilla" + downloadURL=$(curl -fsL https://filezilla-project.org/download.php\?show_all=1 | grep macosx | head -n 1 | awk -F '"' '{print $2}' ) + appNewVersion=$( curl -fsL https://filezilla-project.org/download.php\?show_all=1 | grep macosx | head -n 1 | awk -F '_' '{print $2}' ) + expectedTeamID="5VPGKXL75N" + blockingProcesses=( NONE ) + ;; + diff --git a/fragments/labels/firefox.sh b/fragments/labels/firefox.sh index 5bfdaef..7b310e5 100644 --- a/fragments/labels/firefox.sh +++ b/fragments/labels/firefox.sh @@ -5,4 +5,5 @@ firefox) appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '/dev/null | cut -d '"' -f 2) - expectedTeamID="W8F64X92K3" - appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4) - appName="Grammarly Installer.app" - ;; + name="Grammarly Desktop" + type="dmg" + packageID="com.grammarly.ProjectLlama" + downloadURL=$(curl -fsL "https://download-mac.grammarly.com/appcast.xml" | xpath '//rss/channel/item[1]/enclosure/@url' 2>/dev/null | cut -d '"' -f 2) + expectedTeamID="W8F64X92K3" + appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4) + # appName="Grammarly Installer.app" + installerTool="Grammarly Installer.app" + CLIInstaller="Grammarly Installer.app/Contents/MacOS/Grammarly Desktop" +;; diff --git a/fragments/labels/hype.sh b/fragments/labels/hype.sh new file mode 100755 index 0000000..2a292cf --- /dev/null +++ b/fragments/labels/hype.sh @@ -0,0 +1,9 @@ +hype) + name="Hype4" + type="dmg" + packageID="com.tumult.Hype4" + downloadURL="https://static.tumult.com/hype/download/Hype.dmg" + appNewVersion=$( curl -fsL https://tumult.com/hype/download/all/ | grep Ongoing | awk -F '<' '{print $4}' | sed 's/[^0-9.]//g' ) + expectedTeamID="8J356DM772" + blockingProcesses=( NONE ) + ;; diff --git a/fragments/labels/idrive.sh b/fragments/labels/idrive.sh new file mode 100644 index 0000000..31dca50 --- /dev/null +++ b/fragments/labels/idrive.sh @@ -0,0 +1,9 @@ +idrive) + name="IDrive" + type="pkgInDmg" + pkgName="IDrive.pkg" + downloadURL=$(curl -fs https://static.idriveonlinebackup.com/downloads/version_mac.js | sed -E 's/.*(https.*dmg).*/\1/g') + appNewVersion=$(curl -fs https://static.idriveonlinebackup.com/downloads/version_mac.js | sed -E 's/.*mac_vernum\=\"Version\ ([0-9.]*).*/\1/g') + versionKey="CFBundleVersion" + expectedTeamID="JWDCNYZ922" + ;; diff --git a/fragments/labels/idrivethin.sh b/fragments/labels/idrivethin.sh new file mode 100644 index 0000000..c6b1cf4 --- /dev/null +++ b/fragments/labels/idrivethin.sh @@ -0,0 +1,9 @@ +idrivethin) + name="IDrive" + type="pkgInDmg" + pkgName="IDriveThin.pkg" + downloadURL=$(curl -fs https://static.idriveonlinebackup.com/downloads/idrivethin/thin_version.js | sed -E 's/.*thinclient-mac([^;]*).*/\1/g' | sed -E 's/.*(https.*dmg).*/\1/g') + appNewVersion=$(curl -fs https://static.idriveonlinebackup.com/downloads/idrivethin/thin_version.js | sed -E 's/.*thin\_mac\_ver\=\"Version\ ([0-9.]*).*/\1/g') + versionKey="CFBundleVersion" + expectedTeamID="JWDCNYZ922" + ;; diff --git a/fragments/labels/imageoptim.sh b/fragments/labels/imageoptim.sh new file mode 100755 index 0000000..7b0b997 --- /dev/null +++ b/fragments/labels/imageoptim.sh @@ -0,0 +1,9 @@ +imageoptim) + name="imageoptim" + type="tbz" + packageID="net.pornel.ImageOptim" + downloadURL="https://imageoptim.com/ImageOptim.tbz2" + appNewVersion=$( curl -fsL https://imageoptim.com/appcast.xml | grep "title" | tail -n 1 | sed 's/[^0-9.]//g' ) + expectedTeamID="59KZTZA4XR" + blockingProcesses=( NONE ) + ;; diff --git a/fragments/labels/linear.sh b/fragments/labels/linear.sh new file mode 100644 index 0000000..3416995 --- /dev/null +++ b/fragments/labels/linear.sh @@ -0,0 +1,15 @@ +linear) + name="Linear" + type="dmg" + if [[ $(arch) == "arm64" ]]; then + downloadURL="https://desktop.linear.app/mac/dmg/arm64" + elif [[ $(arch) == "i386" ]]; then + downloadURL="https://desktop.linear.app/mac/dmg" + fi + appNewVersion=$(curl -sIkL $downloadURL | sed -r '/filename=/!d;s/.*filename=(.*)$/\1/' | awk '{print $2}') + expectedTeamID="7VZ2S3V9RV" + versionKey="CFBundleShortVersionString" + appName="Linear.app" + blockingProcesses=( "Linear" ) + ;; + diff --git a/fragments/labels/logitechoptions.sh b/fragments/labels/logitechoptions.sh index 14a2a8a..ffd4cf9 100644 --- a/fragments/labels/logitechoptions.sh +++ b/fragments/labels/logitechoptions.sh @@ -1,5 +1,6 @@ +logioptions|\ logitechoptions) - name="Logitech Options" + name="Logi Options" type="pkgInZip" #downloadURL=$(curl -fs "https://support.logi.com/api/v2/help_center/en-us/articles.json?label_names=webcontent=productdownload,webos=mac-macos-x-11.0" | tr "," "\n" | grep -A 10 "macOS" | grep -oie "https.*/.*/options/.*\.zip" | head -1) downloadURL="https://download01.logi.com/web/ftp/pub/techsupport/options/options_installer.zip" diff --git a/fragments/labels/macoslaps.sh b/fragments/labels/macoslaps.sh new file mode 100644 index 0000000..06b413c --- /dev/null +++ b/fragments/labels/macoslaps.sh @@ -0,0 +1,8 @@ +macoslaps) + name="macOSLAPS" + type="pkg" + packageID="edu.psu.macOSLAPS" + downloadURL="$(downloadURLFromGit joshua-d-miller macOSLAPS)" + appNewVersion="$(versionFromGit joshua-d-miller macOSLAPS)" + expectedTeamID="9UYK4F9BSM" + ;; diff --git a/fragments/disabled/mightymike.sh b/fragments/labels/mightymike.sh similarity index 100% rename from fragments/disabled/mightymike.sh rename to fragments/labels/mightymike.sh diff --git a/fragments/labels/mindmanager.sh b/fragments/labels/mindmanager.sh new file mode 100644 index 0000000..69e47be --- /dev/null +++ b/fragments/labels/mindmanager.sh @@ -0,0 +1,7 @@ +mindmanager) + name="MindManager" + type="dmg" + downloadURL="https://www.mindmanager.com/mm-mac-dmg" + appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | sed -E 's/.*_Mac_*([0-9.]*)\..*/\1/g')" + expectedTeamID="ZF6ZZ779N5" + ;; diff --git a/fragments/labels/onlyofficedesktop.sh b/fragments/labels/onlyofficedesktop.sh index b1e6174..f5376c7 100644 --- a/fragments/labels/onlyofficedesktop.sh +++ b/fragments/labels/onlyofficedesktop.sh @@ -1,6 +1,11 @@ onlyofficedesktop) name="ONLYOFFICE" type="dmg" - downloadURL="https://download.onlyoffice.com/install/desktop/editors/mac/distrib/onlyoffice/ONLYOFFICE.dmg" + if [[ $(arch) == "arm64" ]]; then + downloadURL="https://download.onlyoffice.com/install/desktop/editors/mac/arm/distrib/ONLYOFFICE.dmg" + elif [[ $(arch) == "i386" ]]; then + downloadURL="https://download.onlyoffice.com/install/desktop/editors/mac/x86_64/distrib/ONLYOFFICE.dmg" + fi + appNewVersion=$(versionFromGit ONLYOFFICE DesktopEditors) expectedTeamID="2WH24U26GJ" ;; diff --git a/fragments/labels/pika.sh b/fragments/labels/pika.sh new file mode 100755 index 0000000..281089b --- /dev/null +++ b/fragments/labels/pika.sh @@ -0,0 +1,9 @@ +pika) + name="Pika" + type="dmg" + packageID="com.superhighfives.Pika" + downloadURL=$(downloadURLFromGit "superhighfives" "pika") + appNewVersion=$(versionFromGit "superhighfives" "pika") + expectedTeamID="TGHU37N6EX" + blockingProcesses=( NONE ) + ;; diff --git a/fragments/labels/postman.sh b/fragments/labels/postman.sh index e2a6685..e59860c 100644 --- a/fragments/labels/postman.sh +++ b/fragments/labels/postman.sh @@ -1,8 +1,12 @@ postman) - # credit: Mischa van der Bent name="Postman" type="zip" - downloadURL="https://dl.pstmn.io/download/latest/osx" - appNewVersion=$(curl -Ifs https://dl.pstmn.io/download/latest/osx | grep "content-disposition:" | sed -n -e 's/^.*Postman-osx-//p' | sed 's/\.zip//' | sed $'s/[^[:print:]\t]//g' ) + if [[ $(arch) == "arm64" ]]; then + downloadURL="https://dl.pstmn.io/download/latest/osx_arm64" + appNewVersion=$(curl -fsL --head "${downloadURL}" | grep "content-disposition:" | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/') + elif [[ $(arch) == "i386" ]]; then + downloadURL="https://dl.pstmn.io/download/latest/osx_64" + appNewVersion=$(curl -fsL --head "${downloadURL}" | grep "content-disposition:" | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/') + fi expectedTeamID="H7H8Q7M5CK" ;; diff --git a/fragments/labels/propresenter7.sh b/fragments/labels/propresenter7.sh index 786ce0b..56a366c 100644 --- a/fragments/labels/propresenter7.sh +++ b/fragments/labels/propresenter7.sh @@ -6,4 +6,4 @@ propresenter7) downloadURL=$(curl -s "https://api.renewedvision.com/v1/pro/upgrade?platform=macos&osVersion=12&appVersion=771&buildNumber=117899527&includeNotes=false" | grep -Eo '"downloadUrl":.*?[^\]",' | head -n 1 | cut -d \" -f 4 | sed -e 's/\\//g') appNewVersion=$(curl -s "https://api.renewedvision.com/v1/pro/upgrade?platform=macos&osVersion=12&appVersion=771&buildNumber=117899527&includeNotes=false" | grep -Eo '"version":.*?[^\]",' | head -n 1 | cut -d \" -f 4) expectedTeamID="97GAAZ6CPX" - ;; \ No newline at end of file + ;; diff --git a/fragments/labels/qgis-pr.sh b/fragments/labels/qgis-pr.sh new file mode 100644 index 0000000..0c29be1 --- /dev/null +++ b/fragments/labels/qgis-pr.sh @@ -0,0 +1,7 @@ +qgis-pr) + name="QGIS" + type="dmg" + downloadURL="https://download.qgis.org/downloads/macos/qgis-macos-pr.dmg" + appNewVersion="$(curl -fs "https://www.qgis.org/da/_static/documentation_options.js" | grep -i version | cut -d "'" -f2)" + expectedTeamID="4F7N4UDA22" + ;; diff --git a/fragments/labels/rancherdesktop.sh b/fragments/labels/rancherdesktop.sh index b61760e..8084be6 100644 --- a/fragments/labels/rancherdesktop.sh +++ b/fragments/labels/rancherdesktop.sh @@ -1,8 +1,13 @@ rancherdesktop) - name="Rancher.Desktop-1.0.0-mac" + name="Rancher Desktop" type="zip" - archiveName="Rancher.Desktop-[0-9.]*-mac.zip" - downloadURL="$(downloadURLFromGit rancher-sandbox rancher-desktop)" + if [[ $(arch) == "arm64" ]]; then + archiveName="Rancher.Desktop-[0-9.]*-mac.aarch64.zip" + downloadURL="$(downloadURLFromGit rancher-sandbox rancher-desktop)" + elif [[ $(arch) == "i386" ]]; then + archiveName="Rancher.Desktop-[0-9.]*-mac.x86_64.zip" + downloadURL="$(downloadURLFromGit rancher-sandbox rancher-desktop)" + fi appNewVersion="$(versionFromGit rancher-sandbox rancher-desktop)" expectedTeamID="2Q6FHJR3H3" appName="Rancher Desktop.app" diff --git a/fragments/labels/remotedesktopmanagerenterprise.sh b/fragments/labels/remotedesktopmanagerenterprise.sh index f058838..4dd975d 100644 --- a/fragments/labels/remotedesktopmanagerenterprise.sh +++ b/fragments/labels/remotedesktopmanagerenterprise.sh @@ -1,7 +1,8 @@ remotedesktopmanagerenterprise) name="Remote Desktop Manager" type="dmg" - downloadURL=$(curl -fs https://remotedesktopmanager.com/home/thankyou/rdmmacbin | grep -oe "http.*\.dmg" | head -1) + downloadURL=$(curl -fs https://devolutions.net/remote-desktop-manager/home/thankyou/rdmmacbin | grep -oe "http.*\.dmg" | head -1) appNewVersion=$(echo "$downloadURL" | sed -E 's/.*\.Mac\.([0-9.]*)\.dmg/\1/g') expectedTeamID="N592S9ASDB" + blockingProcesses=( "$name" ) ;; diff --git a/fragments/labels/remotedesktopmanagerfree.sh b/fragments/labels/remotedesktopmanagerfree.sh index 0d8dd95..60d8e5c 100644 --- a/fragments/labels/remotedesktopmanagerfree.sh +++ b/fragments/labels/remotedesktopmanagerfree.sh @@ -1,7 +1,7 @@ remotedesktopmanagerfree) name="Remote Desktop Manager Free" type="dmg" - downloadURL=$(curl -fs https://remotedesktopmanager.com/home/thankyou/rdmmacfreebin | grep -oe "http.*\.dmg" | head -1) + downloadURL=$(curl -fs https://devolutions.net/remote-desktop-manager/home/thankyou/rdmmacfreebin | grep -oe "http.*\.dmg" | head -1) appNewVersion=$(echo "$downloadURL" | sed -E 's/.*\.Mac\.([0-9.]*)\.dmg/\1/g') expectedTeamID="N592S9ASDB" ;; diff --git a/fragments/labels/shottr.sh b/fragments/labels/shottr.sh index f9723d9..4c59809 100644 --- a/fragments/labels/shottr.sh +++ b/fragments/labels/shottr.sh @@ -4,4 +4,4 @@ shottr) downloadURL="https://shottr.cc/dl/Shottr-1.5.3.dmg" appNewVersion=$( echo ${downloadURL} | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g' ) expectedTeamID="2Y683PRQWN" - ;; \ No newline at end of file + ;; diff --git a/fragments/labels/sketch.sh b/fragments/labels/sketch.sh index 7cf3b9a..c8ab750 100644 --- a/fragments/labels/sketch.sh +++ b/fragments/labels/sketch.sh @@ -1,7 +1,7 @@ sketch) name="Sketch" type="zip" - downloadURL=$(curl -sf https://www.sketch.com/downloads/mac/ | grep 'href="https://download.sketch.com' | sed -E 's/.*href=\"(.*)\".?/\1/g') + downloadURL=$(curl -sf https://www.sketch.com/downloads/mac/ | grep 'href="https://download.sketch.com' | tr '"' "\n" | grep -E "https.*.zip") appNewVersion=$(curl -fs https://www.sketch.com/updates/ | grep "Sketch Version" | head -1 | sed -E 's/.*Version ([0-9.]*)<.*/\1/g') # version from update page expectedTeamID="WUGMZZ5K46" ;; diff --git a/fragments/labels/slab.sh b/fragments/labels/slab.sh new file mode 100644 index 0000000..708b453 --- /dev/null +++ b/fragments/labels/slab.sh @@ -0,0 +1,12 @@ +slab) + name="Slab" + type="dmg" + if [[ $(arch) == i386 ]]; then + archiveName="Slab-[0-9.]*-darwin-x64.dmg" + elif [[ $(arch) == arm64 ]]; then + archiveName="Slab-[0-9.]*-darwin-arm64.dmg" + fi + downloadURL=$(downloadURLFromGit slab desktop-releases) + appNewVersion=$(versionFromGit slab desktop-releases) + expectedTeamID="Q67SW996Z5" + ;; diff --git a/fragments/labels/snagit.sh b/fragments/labels/snagit.sh index 2c65478..c8cb7fc 100644 --- a/fragments/labels/snagit.sh +++ b/fragments/labels/snagit.sh @@ -1,8 +1,8 @@ snagit|\ -snagit2021|\ -snagit2020) - name="Snagit 2021" +snagit2022) + name="Snagit 2022" type="dmg" - downloadURL="https://download.techsmith.com/snagitmac/releases/Snagit.dmg" + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Snagit (Mac) 2022" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Snagit (Mac) 2022" | sed -e 's/.*Snagit (Mac) //' -e 's/<\/td>.*//') expectedTeamID="7TQL462TU8" ;; diff --git a/fragments/labels/snagit2019.sh b/fragments/labels/snagit2019.sh new file mode 100644 index 0000000..baab34f --- /dev/null +++ b/fragments/labels/snagit2019.sh @@ -0,0 +1,7 @@ +snagit2019) + name="Snagit 2019" + type="dmg" + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Snagit (Mac) 2019" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Snagit (Mac) 2019" | sed -e 's/.*Snagit (Mac) //' -e 's/<\/td>.*//') + expectedTeamID="7TQL462TU8" + ;; diff --git a/fragments/labels/snagit2020.sh b/fragments/labels/snagit2020.sh new file mode 100644 index 0000000..7a92964 --- /dev/null +++ b/fragments/labels/snagit2020.sh @@ -0,0 +1,7 @@ +snagit2020) + name="Snagit 2020" + type="dmg" + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Snagit (Mac) 2020" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Snagit (Mac) 2020" | sed -e 's/.*Snagit (Mac) //' -e 's/<\/td>.*//') + expectedTeamID="7TQL462TU8" + ;; diff --git a/fragments/labels/snagit2021.sh b/fragments/labels/snagit2021.sh new file mode 100644 index 0000000..a5f3157 --- /dev/null +++ b/fragments/labels/snagit2021.sh @@ -0,0 +1,7 @@ +snagit2021) + name="Snagit 2021" + type="dmg" + downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Snagit (Mac) 2021" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Snagit (Mac) 2021" | sed -e 's/.*Snagit (Mac) //' -e 's/<\/td>.*//') + expectedTeamID="7TQL462TU8" + ;; diff --git a/fragments/labels/sonobus.sh b/fragments/labels/sonobus.sh new file mode 100644 index 0000000..a5f9508 --- /dev/null +++ b/fragments/labels/sonobus.sh @@ -0,0 +1,9 @@ +sonobus) + name="Sonobus" + type="pkgInDmg" + html_page_source="$(curl -fs 'https://www.sonobus.net')" + downloadFile="$(echo "${html_page_source}" | xmllint --html --xpath "string(//a[contains(@href, 'mac.dmg')]/@href)" - 2> /dev/null)" + downloadURL="https://www.sonobus.net/$downloadFile" + appNewVersion="$(echo "${downloadFile}" | sed 's/releases\/sonobus-//' | sed 's/\-mac.dmg//' )" + expectedTeamID="XCS435894D" + ;; diff --git a/fragments/labels/talkdeskcallbar.sh b/fragments/labels/talkdeskcallbar.sh index 9487d44..fb773b4 100644 --- a/fragments/labels/talkdeskcallbar.sh +++ b/fragments/labels/talkdeskcallbar.sh @@ -1,7 +1,7 @@ talkdeskcallbar) name="Callbar" type="dmg" - downloadURL=https://downloadcallbar.talkdesk.com/Callbar-$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version":"\([^"]*\)".*$/\1/p').dmg - appNewVersion=$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version":"\([^"]*\)".*$/\1/p') + appNewVersion=$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p') + downloadURL=https://downloadcallbar.talkdesk.com/Callbar-${appNewVersion}.dmg expectedTeamID="YGGJX44TB8" ;; diff --git a/fragments/labels/talkdeskcxcloud.sh b/fragments/labels/talkdeskcxcloud.sh new file mode 100644 index 0000000..2326146 --- /dev/null +++ b/fragments/labels/talkdeskcxcloud.sh @@ -0,0 +1,7 @@ +talkdeskcxcloud) + name="Talkdesk" + type="dmg" + appNewVersion=$(curl -fs https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json | sed -n -e 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p' | head -n 1) + downloadURL="https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-${appNewVersion}.dmg" + expectedTeamID="YGGJX44TB8" + ;; diff --git a/fragments/labels/thunderbird_intl.sh b/fragments/labels/thunderbird_intl.sh new file mode 100644 index 0000000..cc3d759 --- /dev/null +++ b/fragments/labels/thunderbird_intl.sh @@ -0,0 +1,25 @@ +thunderbird_intl) + # This label will try to figure out the selected language of the user, + # and install corrosponding version of Thunderbird + name="Thunderbird" + type="dmg" + userLanguage=$(runAsUser defaults read .GlobalPreferences AppleLocale | tr '_' '-') + printlog "Found language $userLanguage to be used for $name." + releaseURL="https://ftp.mozilla.org/pub/thunderbird/releases/latest/README.txt" + until curl -fs $releaseURL | grep -q "=$userLanguage"; do + if [ ${#userLanguage} -eq 2 ]; then + break + fi + printlog "No locale matching '$userLanguage', trying '${userLanguage:0:2}'" + userLanguage=${userLanguage:0:2} + done + printlog "Using language '$userLanguage' for download." + downloadURL="https://download.mozilla.org/?product=thunderbird-latest&os=osx&lang=$userLanguage" + if ! curl -sfL --output /dev/null -r 0-0 $downloadURL; then + printlog "Download not found for '$userLanguage', using default ('en-US')." + downloadURL="https://download.mozilla.org/?product=thunderbird-latest&os=osx" + fi + appNewVersion=$(curl -fsIL $downloadURL | awk -F releases/ '/Location:/ {split($2,a,"/"); print a[1]}') + expectedTeamID="43AQ936H96" + blockingProcesses=( thunderbird ) + ;; diff --git a/fragments/labels/ultimakercura.sh b/fragments/labels/ultimakercura.sh new file mode 100644 index 0000000..ec992ee --- /dev/null +++ b/fragments/labels/ultimakercura.sh @@ -0,0 +1,8 @@ +ultimakercura) + name="Ultimaker Cura" + type="dmg" + downloadURL="$(downloadURLFromGit Ultimaker Cura)" + archiveName="Ultimaker_Cura-[0-9].*-Darwin.dmg" + appNewVersion=$(versionFromGit Ultimaker Cura ) + expectedTeamID="V4B3JXRRQS" + ;; diff --git a/fragments/labels/unnaturalscrollwheels.sh b/fragments/labels/unnaturalscrollwheels.sh new file mode 100644 index 0000000..35cfea0 --- /dev/null +++ b/fragments/labels/unnaturalscrollwheels.sh @@ -0,0 +1,8 @@ +unnaturalscrollwheels) + name="UnnaturalScrollWheels" + type="dmg" + downloadURL="$(downloadURLFromGit ther0n UnnaturalScrollWheels)" + appNewVersion="$(versionFromGit ther0n UnnaturalScrollWheels)" + expectedTeamID="D6H5W2T379" + blockingProcesses=( UnnaturalScrollWheels ) + ;; diff --git a/fragments/labels/wechat.sh b/fragments/labels/wechat.sh new file mode 100644 index 0000000..c03ca63 --- /dev/null +++ b/fragments/labels/wechat.sh @@ -0,0 +1,6 @@ +wechat) + name="WeChat" + type="dmg" + downloadURL="https://dldir1.qq.com/weixin/mac/WeChatMac.dmg" + expectedTeamID="5A4RE8SF68" + ;; diff --git a/fragments/labels/xeroxworkcentre7800.sh b/fragments/labels/xeroxworkcentre7800.sh new file mode 100755 index 0000000..c494c47 --- /dev/null +++ b/fragments/labels/xeroxworkcentre7800.sh @@ -0,0 +1,9 @@ +xeroxworkcentre7800) + name="XeroxWorkCentre" + type="pkgInDmg" + appCustomVersion(){ lpinfo -m | grep 783 | tail -n 1 | awk -F ', ' '{print $2}' } + appNewVersion=$( curl -fsL "https://www.support.xerox.com/nl-nl/product/workcentre-7800-series/downloads?platform=macOSx11" | grep .dmg | head -n 1 | awk -F '_' '{print $2}' ) + downloadURL=$( curl -fsL "https://www.support.xerox.com/nl-nl/product/workcentre-7800-series/downloads?platform=macOSx11" | xmllint --html --format - 2>/dev/null | grep -o "https://.*XeroxDrivers.*.dmg" ) + expectedTeamID="G59Y3XFNFR" + blockingProcesses=( NONE ) +;; diff --git a/fragments/labels/zohoworkdrivegenie.sh b/fragments/labels/zohoworkdrivegenie.sh new file mode 100644 index 0000000..9861324 --- /dev/null +++ b/fragments/labels/zohoworkdrivegenie.sh @@ -0,0 +1,8 @@ +zohoworkdrivegenie) + name="Zoho WorkDrive Genie" + type="dmg" + # https://www.zoho.com/workdrive/genie.html + downloadURL="https://www.zoho.com/workdrive/downloads/edit-tool/Zoho_WorkDrive_Genie.dmg" + CLIInstaller="Zoho WorkDrive Genie.app/Contents/MacOS/Zoho WorkDrive Genie" + expectedTeamID="TZ824L8Y37" + ;; diff --git a/fragments/version.sh b/fragments/version.sh index 11d5a7f..1a2c355 100644 --- a/fragments/version.sh +++ b/fragments/version.sh @@ -1 +1 @@ -10dev +9.2 diff --git a/utils/README.md b/utils/README.md index 7891f2b..dad799a 100644 --- a/utils/README.md +++ b/utils/README.md @@ -59,14 +59,16 @@ Pull requests against the `Installomator.sh` script in the root of the repo will ### When you are familiar with git and GitHub -- Create a new branch in your local Installomator fork repo. +- If you haven't already, create a fork of the Installomator repo. Clone the for to your local Mac. +- Create a new branch in your local Installomator (fork) repo. - Copy the new or modified label file to `fragments/labels`. (replacing the original, when necessary) -- Create a pull request against the main Installomator dev branch. -- Don't use this branch for any other modifications, unless you need to update this particular PR. (Pull Requests are against a _branch_, not a particular commit.) +- Test (push the change to your fork on GitHub. You can check that out on testing devices or vms.) +- Create a pull request against the Installomator `main` branch. +- Don't use this branch for _any_ other modifications, unless you need to update this particular PR. (Pull Requests are against a _branch_, not a particular commit.) -If you have multiple labels you want to contribute, please create a separate local branch and a separate pull request for each label. +If you have multiple labels (or other changes) you want to contribute, please create a _separate_ local branch and a _separate_ pull request for each label. This allows us to accept, modify, or reject each label separately and simplifies the process. -Once your Pull Request is merged into the main repo, you can pull the change to your fork and delete the branch. +Once your Pull Request is merged into the main repo, you can pull the change to your local repo, push it to your fork, and delete the branch, because it should be fully merged. ### When you are not familiar with git and GitHub