This commit is contained in:
Søren Theilgaard
2021-10-14 21:42:11 +02:00
45 changed files with 577 additions and 215 deletions

View File

@@ -1,4 +1,4 @@
## v0.7 - pre-release
## v0.7
- default for `BLOCKING_PROCESS_ACTION`is now `BLOCKING_PROCESS_ACTION=tell_user` and not `prompt_user`. It will demand the user to quit the app to get it updated, and not present any option to skip it. In considering various use cases in different MDM solutions this is the best option going forward. Users usually choose to update, and is most often not bothered much with this information. If it's absoultely a bad time, then they can move the dialog box to the side, and click it when ready.
- script is now assembled from fragments. This helps avoid merging conflicts on git and allows the core team to work on the script logic while also accepting new labels. See the "Assemble Script ReadMe" for details.

View File

@@ -34,7 +34,7 @@ NOTIFY=success
# behavior when blocking processes are found
BLOCKING_PROCESS_ACTION=prompt_user
BLOCKING_PROCESS_ACTION=tell_user
# options:
# - ignore continue even when blocking processes are found
# - quit app will be told to quit nicely, if running
@@ -51,6 +51,9 @@ BLOCKING_PROCESS_ACTION=prompt_user
# - prompt_user_loop
# Like prompt-user, but clicking "Not Now", will just wait an hour,
# and then it will ask again.
# WARNING! It might block the MDM agent on the machine, as
# the scripts gets stuct in waiting until the hour has passed,
# possibly blocking for other management actions in this time.
# - tell_user User will be showed a notification about the important update,
# but user is only allowed to quit and continue, and then we
# ask the app to quit.
@@ -68,7 +71,20 @@ LOGO=appstore
# - mosyleb Mosyle Business
# - mosylem Mosyle Manager (Education)
# - addigy Addigy
# path can also be set in the command call, and if file exists, it will be used, like 'LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"' (spaces are escaped).
# path can also be set in the command call, and if file exists, it will be used.
# Like 'LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"'
# (spaces have to be escaped).
# App Store apps handling
IGNORE_APP_STORE_APPS=no
# options:
# - no If installed app is from App Store (which include VPP installed apps)
# it will not be touched, no matter it's version (default)
# - yes Replace App Store (and VPP) version of app and handle future
# updates using Installomator, even if latest version.
# Shouldnt give any problems for the user in most cases.
# Known bad example: Slack will loose all settings.
# install behavior
@@ -185,8 +201,8 @@ REOPEN="yes"
# - updateToolRunAsCurrentUser:
# When this variable is set (any value), $updateTool will be run as the current user.
#
VERSION="0.7.0b1"
VERSIONDATE="2021-08-17"
VERSION="0.7.0"
VERSIONDATE="2021-10-14"
# MARK: Functions
@@ -363,6 +379,16 @@ getAppVersion() {
#appversion=$(mdls -name kMDItemVersion -raw $installedAppPath )
appversion=$(defaults read $installedAppPath/Contents/Info.plist $versionKey) #Not dependant on Spotlight indexing
printlog "found app at $installedAppPath, version $appversion"
# Is current app from App Store
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"
appversion=0
else
cleanupAndExit 1 "App previously installed from App Store, and we respect that"
fi
fi
else
printlog "could not determine location of $appName"
fi
@@ -963,6 +989,13 @@ airserver)
#appNewVersion=$() # Cannot find version history or release notes on home page
expectedTeamID="6C755KS5W3"
;;
airtame)
name="Airtame"
type="dmg"
downloadURL="$(curl -fs https://airtame.com/download/ | grep -i platform=mac | head -1 | grep -o -i -E "https.*" | cut -d '"' -f1)"
appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i ^location | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g')"
expectedTeamID="4TPSP88HN2"
;;
aldente)
name="AlDente"
type="dmg"
@@ -1032,14 +1065,14 @@ appcleaner)
applenyfonts)
name="Apple New York Font Collection"
type="pkgInDmg"
downloadURL="https://devimages-cdn.apple.com/design/resources/download/NY-Font.dmg"
downloadURL="https://devimages-cdn.apple.com/design/resources/download/NY.dmg"
packageID="com.apple.pkg.NYFonts"
expectedTeamID="Development Update"
;;
applesfcompact)
name="San Francisco Compact"
type="pkgInDmg"
downloadURL="https://devimages-cdn.apple.com/design/resources/download/SF-Font-Compact.dmg"
downloadURL="https://devimages-cdn.apple.com/design/resources/download/SF-Compact.dmg"
packageID="com.apple.pkg.SanFranciscoCompact"
expectedTeamID="Development Update"
;;
@@ -1053,10 +1086,17 @@ applesfmono)
applesfpro)
name="San Francisco Pro"
type="pkgInDmg"
downloadURL="https://devimages-cdn.apple.com/design/resources/download/SF-Font-Pro.dmg"
downloadURL="https://devimages-cdn.apple.com/design/resources/download/SF-Pro.dmg"
packageID="com.apple.pkg.SanFranciscoPro"
expectedTeamID="Development Update"
;;
applesfsymbols|\
sfsymbols)
name="SF Symbols"
type="pkgInDmg"
downloadURL="https://developer.apple.com/design/downloads/SF-Symbols.dmg"
expectedTeamID="Software Update"
;;
aquaskk)
# credit: Tadayuki Onishi (@kenchan0130)
name="aquaskk"
@@ -1103,6 +1143,13 @@ audacity)
appNewVersion=$(versionFromGit audacity audacity)
expectedTeamID="T3N4JQ7YY6"
;;
authydesktop)
name="Authy Desktop"
type="dmg"
downloadURL="https://electron.authy.com/download?channel=stable&arch=x64&platform=darwin&version=latest&product=authy"
appNewVersion="$(curl -sfL --output /dev/null -r 0-0 "${downloadURL}" --remote-header-name --remote-name -w "%{url_effective}\n" | grep -o -E '([a-zA-Z0-9\_.%-]*)\.(dmg|pkg|zip|tbz)$' | sed -E 's/.*-([0-9.]*)\.dmg/\1/g')"
expectedTeamID="9EVH78F4V4"
;;
autodmg)
# credit: Mischa van der Bent (@mischavdbent)
name="AutoDMG"
@@ -1197,7 +1244,7 @@ bitwarden)
blender)
name="blender"
type="dmg"
downloadURL=$(redirect=$(curl -sfL https://www.blender.org/download/ | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) && curl -sfL "$redirect" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg)
downloadURL=$(redirect=$(curl -sfL https://www.blender.org/download/ | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) && curl -sfL "$redirect" | sed 's/.*href="//' | sed 's/".*//' | grep -m1 .dmg)
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)-.*/\1/g' )
expectedTeamID="68UA947AUU"
;;
@@ -1224,12 +1271,19 @@ boxdrive)
fi
expectedTeamID="M683GB7CPW"
;;
boxsync)
name="Box Sync"
type="dmg"
downloadURL="https://e3.boxcdn.net/box-installers/sync/Sync+4+External/Box%20Sync%20Installer.dmg"
expectedTeamID="M683GB7CPW"
;;
boxtools)
name="Box Tools"
type="pkg"
downloadURL="https://box-installers.s3.amazonaws.com/boxedit/mac/currentrelease/BoxToolsInstaller.pkg"
expectedTeamID="M683GB7CPW"
;;brave)
name="Box Tools"
type="pkg"
downloadURL="https://box-installers.s3.amazonaws.com/boxedit/mac/currentrelease/BoxToolsInstaller.pkg"
expectedTeamID="M683GB7CPW"
;;
brave)
# credit: @securitygeneration
name="Brave Browser"
type="dmg"
@@ -1265,6 +1319,10 @@ calibre)
type="dmg"
downloadURL="https://calibre-ebook.com/dist/osx"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g' )
#Maybe change to GitHub for this title. Looks like 5.28.0 release is the first to also release a binary, so maybe see what the next release will be to decide if we should switch.
#downloadURL=$(downloadURLFromGit kovidgoyal calibre )
#appNewVersion=$(versionFromGit kovidgoyal calibre )
#archiveName="OS X dmg"
expectedTeamID="NTY7FVCEKP"
;;
camostudio)
@@ -1281,6 +1339,13 @@ camtasia)
downloadURL=https://download.techsmith.com/camtasiamac/releases/Camtasia.dmg
expectedTeamID="7TQL462TU8"
;;
cisdem-documentreader)
name="cisdem-documentreader"
type="dmg"
downloadURL="https://download.cisdem.com/cisdem-documentreader.dmg"
expectedTeamID="5HGV8EX6BQ"
appName="Cisdem Document Reader.app"
;;
citrixworkspace)
#credit: Erik Stam (@erikstam) and #Philipp on MacAdmins Slack
name="Citrix Workspace"
@@ -1290,10 +1355,9 @@ citrixworkspace)
expectedTeamID="S272Y5R93J"
;;
clevershare2)
# credit: Søren Theilgaard (@theilgaard)
name="Clevershare"
type="dmg"
downloadURL=$(curl -fs https://archive.clevertouch.com/clevershare2g | grep -i "_Mac" | tr '"' "\n" | grep "^http.*dmg")
downloadURL=$(curl -fs https://www.clevertouch.com/eu/clevershare2g | grep -i -o -E "https.*Mac.*\.dmg")
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z-]*_Mac\.([0-9.]*)\.[0-9]*\.dmg$/\1/g' )
expectedTeamID="P76M9BE8DQ"
;;
@@ -1304,6 +1368,13 @@ clickshare)
downloadURL=https://www.barco.com$(curl -fs "https://www.barco.com/en/clickshare/app" | grep -E -o '(\/\S*Download\?FileNumber=R3306192\S*ShowDownloadPage=False)' | tail -1)
expectedTeamID="P6CDJZR997"
;;
cloudya)
name="Cloudya"
type="appInDmgInZip"
downloadURL="$(curl -fs https://www.nfon.com/de/service/downloads | grep -i -E -o "https://cdn.cloudya.com/Cloudya-[.0-9]+-mac.zip")"
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"
;;
code42)
# credit: Isaac Ordonez, Mann consulting (@mannconsulting)
name="Code42"
@@ -1320,13 +1391,14 @@ coderunner)
expectedTeamID="R4GD98AJF9"
;;
colourcontrastanalyser)
name="Colour Contrast Analyser (CCA)"
type="dmg"
downloadURL=$(downloadURLFromGit ThePacielloGroup CCAe)
appNewVersion=$(versionFromGit ThePacielloGroup CCAe)
expectedTeamID="34RS4UC3M6"
blockingProcesses=( NONE )
;;cormorant)
name="Colour Contrast Analyser (CCA)"
type="dmg"
downloadURL=$(downloadURLFromGit ThePacielloGroup CCAe)
appNewVersion=$(versionFromGit ThePacielloGroup CCAe)
expectedTeamID="34RS4UC3M6"
blockingProcesses=( NONE )
;;
cormorant)
# credit: Søren Theilgaard (@theilgaard)
name="Cormorant"
type="zip"
@@ -1334,6 +1406,14 @@ colourcontrastanalyser)
appNewVersion=$(curl -fs https://eclecticlight.co/downloads/ | grep zip | grep -o -E "$name [0-9.]*" | awk '{print $2}')
expectedTeamID="QWY4LRW926"
;;
craftmanager)
name="CraftManager"
type="zip"
#downloadURL="https://craft-assets.invisionapp.com/CraftManager/production/CraftManager.zip"
downloadURL="$(curl -fs https://craft-assets.invisionapp.com/CraftManager/production/appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
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"
;;
cryptomator)
name="Cryptomator"
type="dmg"
@@ -1416,7 +1496,14 @@ devonthink)
appNewVersion=$( echo ${downloadURL} | tr '/' '\n' | grep "[0-9]" | grep "[.]" | head -1 )
expectedTeamID="679S2QUWR8"
;;
dialpad)
dialog)
name="Dialog"
type="pkg"
downloadURL=$(downloadURLFromGit bartreardon Dialog-public )
appNewVersion=$(versionFromGit bartreardon Dialog-public )
expectedTeamID="PWA5E9TQ59"
;;
dialpad)
# credit: @ehosaka
name="Dialpad"
type="dmg"
@@ -1538,7 +1625,12 @@ ferdi)
figma)
name="Figma"
type="zip"
downloadURL="https://desktop.figma.com/mac/Figma.zip"
if [[ $(arch) == "arm64" ]]; then
downloadURL="https://desktop.figma.com/mac-arm/Figma.zip"
elif [[ $(arch) == "i386" ]]; then
downloadURL="https://desktop.figma.com/mac/Figma.zip"
fi
appNewVersion="$(curl -fsL https://desktop.figma.com/mac/RELEASE.json | awk -F '"' '{ print $8 }')"
expectedTeamID="T8RA8NE3B7"
;;
firefox)
@@ -1620,6 +1712,14 @@ firefoxpkg)
expectedTeamID="43AQ936H96"
blockingProcesses=( firefox )
;;
flowjo)
name="FlowJo-OSX64-10.8.0"
type="dmg"
downloadURL="$(curl -fs "https://www.flowjo.com/solutions/flowjo/downloads" | grep -i -o -E "https.*\.dmg")"
appNewVersion=$(echo "${downloadURL}" | tr "-" "\n" | grep dmg | sed -E 's/([0-9.]*)\.dmg/\1/g')
expectedTeamID="C79HU5AD9V"
appName="FlowJo.app"
;;
front)
name="Front"
type="dmg"
@@ -1667,11 +1767,11 @@ googlechrome)
if [[ $(arch) != "i386" ]]; then
printlog "Architecture: arm64 (not i386)"
downloadURL="https://dl.google.com/chrome/mac/universal/stable/GGRO/googlechrome.dmg"
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}') # Credit: William Smith (@meck)
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}')
else
printlog "Architecture: i386"
downloadURL="https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg"
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac,stable/{print $3; exit}') # Credit: William Smith (@meck)
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac,stable/{print $3; exit}')
fi
expectedTeamID="EQHXZ8M8AV"
;;
@@ -1791,9 +1891,8 @@ hancock)
handbrake)
name="HandBrake"
type="dmg"
downloadURL=$(curl --silent --fail "https://api.github.com/repos/HandBrake/HandBrake/releases/latest" \
| awk -F '"' "/browser_download_url/ && /dmg/ && ! /sig/ && ! /CLI/ { print \$4 }")
appNewVersion=$(curl -sf "https://api.github.com/repos/HandBrake/HandBrake/releases/latest" | awk -F '"' "/tag_name/ { print \$4 }")
downloadURL=$(downloadURLFromGit HandBrake HandBrake )
appNewVersion=$(versionFromGit HandBrake HandBrake )
expectedTeamID="5X9DE89KYV"
;;
hazel)
@@ -1839,7 +1938,7 @@ icons)
expectedTeamID="7R5ZEU67FQ"
;;
imazingprofileeditor)
# Credit: Bilal Habib @Pro4TLZZZ
# Credit: Bilal Habib @Pro4TLZZ
name="iMazing Profile Editor"
type="dmg"
downloadURL="https://downloads.imazing.com/mac/iMazing-Profile-Editor/iMazingProfileEditorMac.dmg"
@@ -1853,6 +1952,13 @@ inkscape)
#appNewVersion=$(curl -fsJL https://inkscape.org/release/ | grep "<h2>Inkscape" | cut -d '>' -f 3 | cut -d '<' -f 1 | sed 's/[^0-9.]*//g') # Can't figure out where exact new version is found. Currently returns 1.0, but version is "1.0.0 (4035a4f)"
expectedTeamID="SW3D6BB6A6"
;;
insomnia)
name="insomnia"
type="dmg"
downloadURL=$(downloadURLFromGit kong insomnia)
appNewVersion=$(versionFromGit kong insomnia)
expectedTeamID="FX44YY62GV"
;;
installomator_theile)
# credit: Søren Theilgaard (@theilgaard)
name="Installomator"
@@ -1883,7 +1989,7 @@ iterm2)
;;
jabradirect)
name="Jabra Direct"
type="dmg"
type="pkgInDmg"
downloadURL="https://jabraxpressonlineprdstor.blob.core.windows.net/jdo/JabraDirectSetup.dmg"
expectedTeamID="55LV32M29R"
appNewVersion=$(curl -fs https://www.jabra.com/Support/release-notes/release-note-jabra-direct | grep -o "Jabra Direct macOS:*.*<" | head -1 | cut -d ":" -f2 | cut -d " " -f2 | cut -d "<" -f1)
@@ -1895,6 +2001,12 @@ jamfconnect)
downloadURL="https://files.jamfconnect.com/JamfConnect.dmg"
expectedTeamID="483DWKW443"
;;
jamfconnectconfiguration)
name="Jamf Connect Configuration"
type="dmg"
downloadURL="https://files.jamfconnect.com/JamfConnect.dmg"
expectedTeamID="483DWKW443"
;;
jamfmigrator)
# credit: Mischa van der Bent
name="jamf-migrator"
@@ -1919,64 +2031,119 @@ jamfreenroller)
#appNewVersion=$(versionFromGit jamf ReEnroller)
expectedTeamID="PS2F6S478M"
;;
jetbrainsclion)
name="CLion"
type="dmg"
jetbrainscode="CL"
jetbrainsdistribution="mac"
if [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;
jetbrainsdatagrip)
# credit: AP Orlebeke (@apizz)
name="DataGrip"
type="dmg"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=DG&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3)
if [[ $(arch) == "arm64" ]]; then
downloadURL=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=DG&latest=true&type=release" | grep -o 'macM1*.*,' | cut -d '"' -f5)
elif [[ $(arch) == "i386" ]]; then
downloadURL=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=DG&latest=true&type=release" | grep -o 'mac*.*,' | cut -d '"' -f5)
fi
expectedTeamID="2ZEFAR8TH3"
;;jetbrainsintellijidea)
# credit: Gabe Marchan (gabemarchan.com - @darklink87)
name="DataGrip"
type="dmg"
jetbrainscode="DG"
if [[ $(arch) == i386 ]]; then
jetbrainsdistribution="mac"
elif [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;
jetbrainsintellijidea)
name="IntelliJ IDEA"
type="dmg"
downloadURL="https://download.jetbrains.com/product?code=II&latest&distribution=mac"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=II&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3)
jetbrainscode="II"
if [[ $(arch) == i386 ]]; then
jetbrainsdistribution="mac"
elif [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;
jetbrainsintellijideace|\
intellijideace)
name="IntelliJ IDEA CE"
type="dmg"
downloadURL="https://download.jetbrains.com/product?code=IIC&latest&distribution=mac"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=IIC&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3)
jetbrainscode="IIC"
if [[ $(arch) == i386 ]]; then
jetbrainsdistribution="mac"
elif [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;
jetbrainsphpstorm)
# credit: Casey Jensen (@cajenson01 on MacAdmins Slack)Appended by Skylar Damiano @catdad on MacAdmins Slack
name="JetBrains PHPStorm"
name="PHPStorm"
type="dmg"
downloadURL=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=PS&latest=true&type=release" | grep -o "mac*.*.dmg" | cut -d '"' -f5)
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=PS&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3)
jetbrainscode="PS"
if [[ $(arch) == i386 ]]; then
jetbrainsdistribution="mac"
elif [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;
jetbrainspycharm)
# This is the Pro version of PyCharm.
# Do not confuse with PyCharm CE.
# This is the Pro version of PyCharm. Do not confuse with PyCharm CE.
name="PyCharm"
type="dmg"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=PCP&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3)
if [[ $(arch) == i386 ]]; then
downloadURL="https://download.jetbrains.com/product?code=PCP&latest&distribution=mac"
elif [[ $(arch) == arm64 ]]; then
downloadURL="https://download.jetbrains.com/product?code=PCP&latest&distribution=macM1"
jetbrainscode="PCP"
jetbrainsdistribution="mac"
if [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;
jetbrainspycharmce|\
pycharmce)
name="PyCharm CE"
type="dmg"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=PCC&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3)
if [[ $(arch) == i386 ]]; then
downloadURL="https://download.jetbrains.com/product?code=PCC&latest&distribution=mac"
elif [[ $(arch) == arm64 ]]; then
downloadURL="https://download.jetbrains.com/product?code=PCC&latest&distribution=macM1"
jetbrainscode="PCC"
jetbrainsdistribution="mac"
if [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;
jetbrainstoolbox)
name="JetBrains Toolbox"
type="dmg"
jetbrainscode="TBA"
jetbrainsdistribution="mac"
if [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;
jetbrainswebstorm)
name="Webstorm"
type="dmg"
jetbrainscode="WS"
jetbrainsdistribution="mac"
if [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;
karabinerelements)
@@ -2006,6 +2173,12 @@ keka)
appNewVersion=$(versionFromGit aonez Keka)
expectedTeamID="4FG648TM2A"
;;
keybase)
name="Keybase"
type="dmg"
downloadURL=$(curl -s https://keybase.io/docs/the_app/install_macos | grep data-target | cut -d '"' -f2)
expectedTeamID="99229SGT5K"
;;
keyboardmaestro)
# credit: Søren Theilgaard (@theilgaard)
name="Keyboard Maestro"
@@ -2103,8 +2276,10 @@ lucifer)
lulu)
name="LuLu"
type="dmg"
downloadURL=$( curl -fs "https://objective-see.com/products/lulu.html" | grep https | grep "$type" | head -1 | tr '"' "\n" | grep "^http" )
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*_([0-9.]*)\..*/\1/g' )
#downloadURL=$( curl -fs "https://objective-see.com/products/lulu.html" | grep https | grep "$type" | head -1 | tr '"' "\n" | grep "^http" )
#appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*_([0-9.]*)\..*/\1/g' )
downloadURL=$(downloadURLFromGit objective-see LuLu)
appNewVersion=$(versionFromGit objective-see LuLu)
expectedTeamID="VBG97UB4TA"
;;
macfuse)
@@ -2152,6 +2327,14 @@ microsoftautoupdate)
#updateTool="/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate"
#updateToolArguments=( --install --apps MSau04 )
;;
microsoftazurestorageexplorer)
name="Microsoft Azure Storage Explorer"
type="zip"
downloadURL=$(downloadURLFromGit microsoft AzureStorageExplorer )
appNewVersion=$(versionFromGit microsoft AzureStorageExplorer )
expectedTeamID="UBF8T346G9"
archiveName="Mac_StorageExplorer.zip"
;;
microsoftcompanyportal)
name="Company Portal"
type="pkg"
@@ -2229,6 +2412,7 @@ microsoftofficebusinesspro)
name="MicrosoftOfficeBusinessPro"
type="pkg"
downloadURL="https://go.microsoft.com/fwlink/?linkid=2009112"
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i location: | grep -o "/Microsoft_.*pkg" | cut -d "_" -f 3)
expectedTeamID="UBF8T346G9"
# using MS PowerPoint as the 'stand-in' for the entire suite
appName="Microsoft PowerPoint.app"
@@ -2310,10 +2494,8 @@ microsoftteams)
type="pkg"
packageID="com.microsoft.teams"
downloadURL="https://go.microsoft.com/fwlink/?linkid=869428"
#appNewVersion=$(curl -fs https://macadmins.software/latest.xml | xpath '//latest/package[id="com.microsoft.teams.standalone"]/version' 2>/dev/null | sed -E 's/<version>([0-9.]*) .*/\1/')
# Still using macadmin.software for version, as the path does not contain the version in a matching format. packageID can be used, but version is the same.
appNewVersion=$(curl -fs https://macadmins.software/latest.xml | xpath '//latest/package[id="com.microsoft.teams.standalone"]/version' 2>/dev/null | sed -E 's/<version>([0-9.]*) .*/\1/')
# Looks like macadmin.software has package ID version. At least on 2021-05-28 version 1.00.411161 is matched on installed version and homepage.
# Looks like macadmin.software has package ID version. At least on 202105-28 version 1.00.411161 is matched on installed version and homepage.
expectedTeamID="UBF8T346G9"
blockingProcesses=( Teams "Microsoft Teams Helper" )
# Commenting out msupdate as it is not really supported *yet* for teams
@@ -2358,6 +2540,14 @@ miro)
downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg"
expectedTeamID="M3GM7MFY7U"
;;
montereyblocker)
name="montereyblocker"
type="pkg"
packageID="dk.envo-it.montereyblocker"
downloadURL=$(downloadURLFromGit Theile montereyblocker )
appNewVersion=$(versionFromGit Theile montereyblocker )
expectedTeamID="FXW6QXBFW5"
;;
musescore)
name="MuseScore 3"
type="dmg"
@@ -2365,6 +2555,13 @@ musescore)
appNewVersion=$(versionFromGit musescore MuseScore)
expectedTeamID="6EPAF2X3PR"
;;
muzzle)
name="Muzzle"
type="zip"
downloadURL="https://muzzleapp.com/binaries/muzzle.zip"
appNewVersion=$(curl -fs https://muzzleapp.com/updates/ | grep -io 'h2.*Version.* [0-9.]*.*h2' | head -1 | sed -E 's/.*ersion *([0-9.]*).*/\1/g')
expectedTeamID="49EYHPJ4Q3"
;;
netnewswire)
name="NetNewsWire"
type="zip"
@@ -2544,6 +2741,12 @@ pacifist)
downloadURL="https://charlessoft.com/cgi-bin/pacifist_download.cgi?type=dmg"
expectedTeamID="HRLUCP7QP4"
;;
parsec)
name="Parsec"
type="pkg"
downloadURL="https://builds.parsecgaming.com/package/parsec-macos.pkg"
expectedTeamID="Y9MY52XZDB"
;;
pdfsam)
name="PDFsam Basic"
type="dmg"
@@ -2551,6 +2754,13 @@ pdfsam)
appNewVersion=$(versionFromGit torakiki pdfsam)
expectedTeamID="8XM3GHX436"
;;
perimeter81)
name="Perimeter 81"
type="pkg"
downloadURL="https://static.perimeter81.com/agents/mac/snapshot/latest/Perimeter81.pkg"
appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i ^x-amz-meta-version | sed -E 's/x-amz-meta-version: //' | cut -d"." -f1-3)"
expectedTeamID="924635PD62"
;;
pitch)
name="Pitch"
type="dmg"
@@ -2565,12 +2775,13 @@ plantronicshub)
appNewVersion=$(curl -fs "https://www.poly.com/in/en/support/knowledge-base/kb-article-page?lang=en_US&urlName=Hub-Release-Notes&type=Product_Information__kav" | grep -o "(*.*<span>)" | head -1 | cut -d "(" -f2 | sed 's/\<\/span\>//g' | cut -d "<" -f1)
;;
platypus)
name="Platypus"
type="zip"
downloadURL=$(downloadURLFromGit sveinbjornt Platypus)
appNewVersion=$(versionFromGit sveinbjornt Platypus)
expectedTeamID="55GP2M789L"
;;plisteditpro)
name="Platypus"
type="zip"
downloadURL=$(downloadURLFromGit sveinbjornt Platypus)
appNewVersion=$(versionFromGit sveinbjornt Platypus)
expectedTeamID="55GP2M789L"
;;
plisteditpro)
name="PlistEdit Pro"
type="zip"
downloadURL="https://www.fatcatsoftware.com/plisteditpro/PlistEditPro.zip"
@@ -2589,7 +2800,6 @@ prism9)
type="dmg"
downloadURL="https://cdn.graphpad.com/downloads/prism/9/InstallPrism9.dmg"
expectedTeamID="YQ2D36NS9M"
Company="GraphPad Software"
;;
privileges)
# credit: Erik Stam (@erikstam)
@@ -2722,11 +2932,19 @@ rocketchat)
expectedTeamID="S6UPZG7ZR3"
blockingProcesses=( Rocket.Chat )
;;
rodeconnect)
name="RODE Connect"
type="pkgInZip"
#packageID="com.rodeconnect.installer" #Versioned wrong as 0 in 1.1.0 pkg
downloadURL="https://cdn1.rode.com/rodeconnect_installer_mac.zip"
appNewVersion="$(curl -fs https://rode.com/software/rode-connect | grep -i -o ">Current version .*<" | cut -d " " -f4)"
expectedTeamID="Z9T72PWTJA"
;;
royaltsx)
name="Royal TSX"
type="dmg"
downloadURL=$(curl -fs https://royaltsx-v4.royalapps.com/updates_stable | xpath '//rss/channel/item[1]/enclosure/@url' 2>/dev/null | cut -d '"' -f 2)
appNewVersion=$(curl -fs https://royaltsx-v4.royalapps.com/updates_stable | xpath '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f 2)
downloadURL=$(curl -fs https://royaltsx-v5.royalapps.com/updates_stable | xpath '//rss/channel/item[1]/enclosure/@url' 2>/dev/null | cut -d '"' -f 2)
appNewVersion=$(curl -fs https://royaltsx-v5.royalapps.com/updates_stable | xpath '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f 2)
expectedTeamID="VXP8K9EDP6"
;;
rstudio)
@@ -2746,37 +2964,34 @@ santa)
expectedTeamID="EQHXZ8M8AV"
;;
scaleft)
name="ScaleFT"
type="pkg"
downloadURL="https://dist.scaleft.com/client-tools/mac/latest/ScaleFT.pkg"
appNewVersion=$(curl -sf "https://dist.scaleft.com/client-tools/mac/" | awk '/dir/{i++}i==2' | sed -nre 's/^[^0-9]*(([0-9]+\.)*[0-9]+).*/\1/p')
expectedTeamID="HV2G9Z3RP5"
blockingProcesses=( ScaleFT )
;;screamingfrogseospider)
name="ScaleFT"
type="pkg"
downloadURL="https://dist.scaleft.com/client-tools/mac/latest/ScaleFT.pkg"
appNewVersion=$(curl -sf "https://dist.scaleft.com/client-tools/mac/" | awk '/dir/{i++}i==2' | sed -nre 's/^[^0-9]*(([0-9]+\.)*[0-9]+).*/\1/p')
expectedTeamID="HV2G9Z3RP5"
blockingProcesses=( ScaleFT )
;;
screamingfrogseospider)
name="Screaming Frog SEO Spider"
type="dmg"
downloadURL="https://download.screamingfrog.co.uk/products/seo-spider/ScreamingFrogSEOSpider-14.3.dmg"
downloadURL=$(curl -fs "https://www.screamingfrog.co.uk/wp-content/themes/screamingfrog/inc/download-modal.php" | grep -i -o "https.*\.dmg" | head -1)
appNewVersion=$(print "$downloadURL" | sed -E 's/https.*\/[a-zA-Z]*-([0-9.]*)\.dmg/\1/g')".0"
expectedTeamID="CAHEVC3HZC"
;;
screencloudplayer)
# credit: AP Orlebeke (@apizz)
name="ScreenCloud Player"
type="dmg"
downloadURL=$(curl -sL "https://screencloud.com/download" | sed -n 's/^.*"url":"\([^"]*\)".*$/\1/p')
expectedTeamID="3C4F953K6P"
;;screenflick)
# credit: AP Orlebeke (@apizz)
name="ScreenCloud Player"
type="dmg"
downloadURL=$(curl -sL "https://screencloud.com/download" | sed -n 's/^.*"url":"\([^"]*\)".*$/\1/p')
expectedTeamID="3C4F953K6P"
;;
screenflick)
# credit: Gabe Marchan (gabemarchan.com - @darklink87)
name="Screenflick"
type="zip"
downloadURL="https://www.araelium.com/screenflick/downloads/Screenflick.zip"
expectedTeamID="28488A87JB"
;;
sfsymbols)
name="SF Symbols"
type="pkgInDmg"
downloadURL="https://developer.apple.com/design/downloads/SF-Symbols.dmg"
expectedTeamID="Software Update"
;;
shield)
# credit: Søren Theilgaard (@theilgaard)
name="Shield"
@@ -2825,12 +3040,12 @@ sizeup)
expectedTeamID="GVZ7RF955D"
;;
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')
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"
;;
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')
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"
;;
skype)
name="Skype"
type="dmg"
@@ -2843,14 +3058,16 @@ slack)
name="Slack"
type="dmg"
downloadURL="https://slack.com/ssb/download-osx-universal" # Universal
# if [[ $(arch) == "arm64" ]]; then
# downloadURL="https://slack.com/ssb/download-osx-silicon"
# elif [[ $(arch) == "i386" ]]; then
# downloadURL="https://slack.com/ssb/download-osx"
# fi
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | tr -d '\r\n' | sed -E 's/.*macos\/([0-9.]*)\/.*/\1/g' )
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | cut -d "/" -f6 )
expectedTeamID="BQR82RBBHL"
;;
smartgit)
name="SmartGit"
type="dmg"
downloadURL="https://www.syntevo.com$(curl -fs "https://www.syntevo.com/smartgit/download/" | grep -i -o -E "/downloads/.*/smartgit.*\.dmg")"
appNewVersion="$(curl -fs "https://www.syntevo.com/smartgit/changelog.txt" | grep -i -E "SmartGit *[0-9.]* *.*" | head -1 | awk '{print $2}')"
expectedTeamID="PHMY45PTNW"
;;
snagit|\
snagit2021|\
snagit2020)
@@ -2887,10 +3104,20 @@ sourcetree)
appNewVersion=$(echo "${downloadURL}" | sed -E 's/.*\/Sourcetree_([0-9.]*)_[0-9]*\.zip/\1/g')
expectedTeamID="UPXU4CQZ5P"
;;
splashtopsos)
name="Splashtop SOS"
type="dmg"
downloadURL="https://download.splashtop.com/sos/SplashtopSOS.dmg"
expectedTeamID="CPQQ3AW49Y"
;;
spotify)
name="Spotify"
type="dmg"
downloadURL="https://download.scdn.co/Spotify.dmg"
if [[ $(arch) == arm64 ]]; then
downloadURL="https://download.scdn.co/SpotifyARM64.dmg"
elif [[ $(arch) == i386 ]]; then
downloadURL="https://download.scdn.co/Spotify.dmg"
fi
# appNewVersion=$(curl -fs https://www.spotify.com/us/opensource/ | cat | grep -o "<td>.*.</td>" | head -1 | cut -d ">" -f2 | cut -d "<" -f1) # does not result in the same version as downloaded
expectedTeamID="2FNC3A47ZF"
;;
@@ -2926,6 +3153,13 @@ swiftruntimeforcommandlinetools)
downloadURL="https://updates.cdn-apple.com/2019/cert/061-41823-20191025-5efc5a59-d7dc-46d3-9096-396bb8cb4a73/SwiftRuntimeForCommandLineTools.dmg"
expectedTeamID="Software Update"
;;
sync)
name="Sync"
type="dmg"
downloadURL="https://www.sync.com/download/apple/Sync.dmg"
appNewVersion="$(curl -fs "https://www.sync.com/blog/category/desktop/feed/" | xpath '(//channel/item/title)[1]' 2>/dev/null | sed -E 's/^.* ([0-9.]*) .*$/\1/g')"
expectedTeamID="7QR39CMJ3W"
;;
tableaudesktop)
name="Tableau Desktop"
type="pkgInDmg"
@@ -2940,6 +3174,13 @@ tableaureader)
downloadURL="https://www.tableau.com/downloads/reader/mac"
expectedTeamID="QJ4XPRK37C"
;;
tageditor)
name="Tag Editor"
type="dmg"
downloadURL="https://amvidia.com/downloads/tag-editor-mac.dmg"
appNewVersion=curl -sf "https://amvidia.com/tag-editor" | grep -o -E '"softwareVersion":.'"{8}" | sed 's/\"//g' | awk -F ': ' '{print $2}'
expectedTeamID="F2TH9XX9CJ"
;;
taskpaper)
# credit: Drew Diver (@grumpydrew on MacAdmins Slack)
name="TaskPaper"
@@ -3024,12 +3265,6 @@ thunderbird)
expectedTeamID="43AQ936H96"
blockingProcesses=( thunderbird )
;;
tigervnc)
name="TigerVNC Viewer"
type="dmg"
downloadURL=https://dl.bintray.com/tigervnc/stable/$(curl -s -l https://dl.bintray.com/tigervnc/stable/ | grep .dmg | sed 's/<pre><a onclick="navi(event)" href="://' | sed 's/".*//' | sort -V | tail -1)
expectedTeamID="S5LX88A9BW"
;;
toggltrack)
name="Toggl Track"
type="dmg"
@@ -3037,6 +3272,13 @@ toggltrack)
appNewVersion=$(versionFromGit toggl-open-source toggldesktop )
expectedTeamID="B227VTMZ94"
;;
tom4aconverter)
name="To M4A Converter"
type="dmg"
downloadURL="https://amvidia.com/downloads/to-m4a-converter-mac.dmg"
appNewVersion=curl -sf "https://amvidia.com/to-m4a-converter" | grep -o -E '"softwareVersion":.'"{8}" | sed 's/\"//g' | awk -F ': ' '{print $2}'
expectedTeamID="F2TH9XX9CJ"
;;
torbrowser)
# credit: Søren Theilgaard (@theilgaard)
name="Tor Browser"
@@ -3086,6 +3328,13 @@ 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"
;;
utm)
name="UTM"
type="dmg"
downloadURL=$(downloadURLFromGit utmapp UTM )
appNewVersion=$(versionFromGit utmapp UTM )
expectedTeamID="WDNLXAD4W8"
;;
vagrant)
# credit: AP Orlebeke (@apizz)
name="Vagrant"
@@ -3148,11 +3397,10 @@ vlc)
expectedTeamID="75GAHG3SZQ"
;;
vmwarehorizonclient)
# credit: Oh4sh0 https://github.com/Oh4sh0
name="VMware Horizon Client"
type="dmg"
downloadURL=$(curl -fs "https://my.vmware.com/channel/public/api/v1.0/dlg/details?locale=en_US&downloadGroup=CART21FQ2_MAC_800&productId=1027&rPId=48989" | grep -o 'Url.*..dmg"' | cut -d '"' -f3)
appNewVersion=$(curl -fs "https://my.vmware.com/channel/public/api/v1.0/dlg/details?locale=en_US&downloadGroup=CART21FQ2_MAC_800&productId=1027&rPId=48989" | sed 's/.*-\(.*\)-.*/\1/')
downloadURL=$(curl -fsL "https://my.vmware.com/channel/public/api/v1.0/dlg/details?locale=en_US&downloadGroup=CART21FQ2_MAC_800&productId=1027&rPId=48989" | grep -o 'Url.*..dmg"' | cut -d '"' -f3)
appNewVersion=$(curl -fsL "https://my.vmware.com/channel/public/api/v1.0/dlg/details?locale=en_US&downloadGroup=CART21FQ2_MAC_800&productId=1027&rPId=48989" | sed 's/.*-\(.*\)-.*/\1/')
expectedTeamID="EG7KH642X6"
;;
vscodium)
@@ -3166,6 +3414,14 @@ vscodium)
appName="VSCodium.app"
blockingProcesses=( Electron )
;;
wallyezflash)
name="Wally"
type="dmg"
downloadURL="https://configure.zsa.io/wally/osx"
#appNewVersion=$(curl -fsIL "${downloadURL}" | grep -i ^location | head -1 | sed -E 's/.*\/[a-zA-Z\-]*-([0-9.]*)\..*/\1/g')
expectedTeamID="V32BWKSNYH"
#versionKey="CFBundleVersion"
;;
webex|\
webexteams)
# credit: Erik Stam (@erikstam)
@@ -3188,13 +3444,6 @@ webexmeetings)
#blockingProcessesMaxCPU="5"
blockingProcesses=( Webex )
;;
webexteams)
# credit: Erik Stam (@erikstam)
name="Webex Teams"
type="dmg"
downloadURL="https://binaries.webex.com/WebexTeamsDesktop-MACOS-Gold/WebexTeams.dmg"
expectedTeamID="DE8Y96K9QP"
;;
whatsapp)
name="WhatsApp"
type="dmg"
@@ -3254,6 +3503,14 @@ xquartz)
appNewVersion=$(versionFromGit XQuartz XQuartz)
expectedTeamID="NA574AWV7E"
;;
yed)
# This label assumes accept of these T&Cs: https://www.yworks.com/resources/yed/license.html
name="yEd"
type="dmg"
downloadURL="https://www.yworks.com"$(curl -fs "https://www.yworks.com/products/yed/download" | grep -o -e "/resources/.*\.dmg" | tr " " '\n' | grep -o -e "/resources/.*\.dmg")
appNewVersion=$(echo $downloadURL | sed -E 's/.*-([0-9.]*)_.*\.dmg/\1/')
expectedTeamID="JD89S887M2"
;;
yubikeymanagerqt)
# credit: Tadayuki Onishi (@kenchan0130)
name="YubiKey Manager GUI"
@@ -3269,14 +3526,29 @@ zappy)
downloadURL="https://zappy.zapier.com/releases/zappy-latest.zip"
expectedTeamID="6LS97Q5E79"
;;
zeplin)
name="Zeplin"
type="zip"
downloadURL="https://zpl.io/download-mac"
appNewVersion="$(curl -fs "https://api.appcenter.ms/v0.1/public/sparkle/apps/8926efff-e734-b6d3-03d0-9f41d90c34fc" | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | cut -d '"' -f 2)"
expectedTeamID="8U3Y4X5WDQ"
;;
zohoworkdrive)
# Using this label expects you to agree to these:
# License Areemant: https://www.zoho.com/workdrive/zohoworkdrive-license-agreement.html
# Privacy policy: https://www.zoho.com/privacy.html
name="Zoho WorkDrive"
type="dmg"
lines=$(curl -fs https://www.zohowebstatic.com/sites/all/themes/zoho/scripts/workdrive.js | grep files-accl.zohopublic.com | tr '"' "\n")
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"
;;
zoom)
# credit: Isaac Ordonez, Mann consulting (@mannconsulting)
name="Zoom.us"
name="zoom.us"
type="pkg"
downloadURL="https://zoom.us/client/latest/ZoomInstallerIT.pkg"
appNewVersion=$(curl -fs -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" "https://zoom.us/download" | grep Version | head -n 1 | sed -E 's/.* ([0-9.]* \(.*\)).*/\1/') # credit: Søren Theilgaard (@theilgaard)
appNewVersion="$(curl -fsIL ${downloadURL} | grep -i ^location | cut -d "/" -f5)"
expectedTeamID="BJ4HAAB9B3"
blockingProcesses=( zoom.us )
;;
zoomclient)
name="zoom.us"
@@ -3292,15 +3564,22 @@ zoomclient)
blockingProcesses=( zoom.us )
#blockingProcessesMaxCPU="5"
;;
zoomgov)
name="zoom.us"
type="pkg"
downloadURL="https://www.zoomgov.com/client/latest/ZoomInstallerIT.pkg"
appNewVersion="$(curl -fsIL ${downloadURL} | grep -i ^location | cut -d "/" -f5)"
expectedTeamID="BJ4HAAB9B3"
;;
zoomrooms)
   name="ZoomRooms"
   type="pkg"
   packageID="us.zoom.pkg.zp"
   downloadURL="https://zoom.us/client/latest/ZoomRooms.pkg"
   appNewVersion="$(curl -fsIL ${downloadURL} | grep -i location | cut -d "/" -f5)"
   expectedTeamID="BJ4HAAB9B3"
name="ZoomRooms"
type="pkg"
packageID="us.zoom.pkg.zp"
downloadURL="https://zoom.us/client/latest/ZoomRooms.pkg"
appNewVersion="$(curl -fsIL ${downloadURL} | grep -i location | cut -d "/" -f5)"
expectedTeamID="BJ4HAAB9B3"
blockingProcesses=( "ZoomPresence" )
   ;;
;;
zulujdk11)
name="Zulu JDK 11"
type="pkgInDmg"
@@ -3341,18 +3620,18 @@ zulujdk15)
appNewVersion=$(echo "$downloadURL" | cut -d "-" -f 1 | sed -e "s/.*zulu//") # Cannot be compared to anything
;;
zulujdk8)
name="Zulu JDK 8"
type="pkgInDmg"
packageID="com.azulsystems.zulu.8"
if [[ $(arch) == i386 ]]; then
downloadURL=https://cdn.azul.com/zulu/bin/$(curl -fs "https://cdn.azul.com/zulu/bin/" | grep -Eio '">zulu8.*ca-jdk8.*x64.dmg(.*)' | cut -c3- | sed 's/<\/a>//' | sed -E 's/([0-9.]*)M//' | awk '{print $2 $1}' | sort | cut -c11- | tail -1)
elif [[ $(arch) == arm64 ]]; then
downloadURL=https://cdn.azul.com/zulu/bin/$(curl -fs "https://cdn.azul.com/zulu/bin/" | grep -Eio '">zulu8.*ca-jdk8.*aarch64.dmg(.*)' | cut -c3- | sed 's/<\/a>//' | sed -E 's/([0-9.]*)M//' | awk '{print $2 $1}' | sort | cut -c11- | tail -1)
fi
expectedTeamID="TDTHCUPYFR"
appCustomVersion(){ if [ -f "/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Info.plist" ]; then /usr/bin/defaults read "/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Info.plist" "CFBundleName" | sed 's/Zulu //'; fi }
appNewVersion=$(echo "$downloadURL" | cut -d "-" -f 1 | sed -e "s/.*zulu//") # Cannot be compared to anything
;;
name="Zulu JDK 8"
type="pkgInDmg"
packageID="com.azulsystems.zulu.8"
if [[ $(arch) == i386 ]]; then
downloadURL=https://cdn.azul.com/zulu/bin/$(curl -fs "https://cdn.azul.com/zulu/bin/" | grep -Eio '">zulu8.*ca-jdk8.*x64.dmg(.*)' | cut -c3- | sed 's/<\/a>//' | sed -E 's/([0-9.]*)M//' | awk '{print $2 $1}' | sort | cut -c11- | tail -1)
elif [[ $(arch) == arm64 ]]; then
downloadURL=https://cdn.azul.com/zulu/bin/$(curl -fs "https://cdn.azul.com/zulu/bin/" | grep -Eio '">zulu8.*ca-jdk8.*aarch64.dmg(.*)' | cut -c3- | sed 's/<\/a>//' | sed -E 's/([0-9.]*)M//' | awk '{print $2 $1}' | sort | cut -c11- | tail -1)
fi
expectedTeamID="TDTHCUPYFR"
appCustomVersion(){ if [ -f "/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Info.plist" ]; then /usr/bin/defaults read "/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Info.plist" "CFBundleName" | sed 's/Zulu //'; fi }
appNewVersion=$(echo "$downloadURL" | cut -d "-" -f 1 | sed -e "s/.*zulu//") # Cannot be compared to anything
;;
*)
# unknown label
#printlog "unknown label $label"

View File

@@ -58,6 +58,7 @@ cisdem-documentreader
citrixworkspace
clevershare2
clickshare
cloudya
code42
coderunner
colourcontrastanalyser
@@ -74,7 +75,7 @@ depnotify
desktoppr
detectxswift
devonthink
dialpad
dialog
discord
docker
drift
@@ -134,9 +135,11 @@ istatmenus
iterm2
jabradirect
jamfconnect
jamfconnectconfiguration
jamfmigrator
jamfpppcutility
jamfreenroller
jetbrainsclion
jetbrainsdatagrip
jetbrainsintellijidea
jetbrainsintellijideace
@@ -144,6 +147,7 @@ jetbrainsphpstorm
jetbrainspycharm
jetbrainspycharmce
jetbrainstoolbox
jetbrainswebstorm
karabinerelements
keepassxc
keka
@@ -188,6 +192,7 @@ microsoftvisualstudiocode
microsoftword
microsoftyammer
miro
montereyblocker
musescore
muzzle
netnewswire
@@ -215,6 +220,7 @@ opera
pacifist
parsec
pdfsam
perimeter81
pitch
plantronicshub
platypus
@@ -276,6 +282,7 @@ swiftruntimeforcommandlinetools
sync
tableaudesktop
tableaureader
tageditor
taskpaper
teamviewer
teamviewerhost
@@ -288,6 +295,7 @@ theunarchiver
things
thunderbird
toggltrack
tom4aconverter
torbrowser
trex
tunnelbear
@@ -295,6 +303,7 @@ tunnelblick
umbrellaroamingclient
uniconverter
universaltypeclient
utm
vagrant
vanilla
veracrypt

View File

@@ -1,7 +1,5 @@
# Installomator
__Please note, that if you are contributing to this project with new labels or other suggestions in PRs, please put your changes in the fragmented files, not the full `Installomator.sh` script. The full script is now a build of the fragments, and will be overwritten.__
_The one installer script to rule them all._
![](https://img.shields.io/github/v/release/scriptingosx/Installomator)&nbsp;![](https://img.shields.io/github/downloads/scriptingosx/Installomator/latest/total)&nbsp;![](https://img.shields.io/badge/macOS-10.14%2B-success)&nbsp;![](https://img.shields.io/github/license/scriptingosx/Installomator)
@@ -14,6 +12,8 @@ I have put a lot of work into making it stable and safe, but I cannot - of cours
## Support and Contributing
__Please note, that if you are contributing to this project with new labels or other suggestions in PRs, please put your changes in the fragmented files, not the full `Installomator.sh` script. The full script is now a build of the fragments, and will be overwritten. See the REAMDME.md file in the `utils` directory for detailed instructions.__
Discussion, support and advice around Installomator happens in the `#installomator` channel in the [MacAdmins.org Slack](https://macadmins.org). Go there for support questions.
Do not create an issue just when you have a questions, but do file an issue or pull request (PR) for bugs or wrong behavior. When in doubt, ask in the above Slack channel.

View File

@@ -0,0 +1,6 @@
jamfconnectconfiguration)
name="Jamf Connect Configuration"
type="dmg"
downloadURL="https://files.jamfconnect.com/JamfConnect.dmg"
expectedTeamID="483DWKW443"
;;

View File

@@ -0,0 +1,12 @@
jetbrainsclion)
name="CLion"
type="dmg"
jetbrainscode="CL"
jetbrainsdistribution="mac"
if [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;

View File

@@ -1,11 +1,13 @@
jetbrainsdatagrip)
name="DataGrip"
type="dmg"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=DG&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3)
if [[ $(arch) == "arm64" ]]; then
downloadURL=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=DG&latest=true&type=release" | grep -o 'macM1*.*,' | cut -d '"' -f5)
elif [[ $(arch) == "i386" ]]; then
downloadURL=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=DG&latest=true&type=release" | grep -o 'mac*.*,' | cut -d '"' -f5)
jetbrainscode="DG"
if [[ $(arch) == i386 ]]; then
jetbrainsdistribution="mac"
elif [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;

View File

@@ -1,7 +1,13 @@
jetbrainsintellijidea)
name="IntelliJ IDEA"
type="dmg"
downloadURL="https://download.jetbrains.com/product?code=II&latest&distribution=mac"
jetbrainscode="II"
if [[ $(arch) == i386 ]]; then
jetbrainsdistribution="mac"
elif [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;

View File

@@ -2,7 +2,13 @@ jetbrainsintellijideace|\
intellijideace)
name="IntelliJ IDEA CE"
type="dmg"
downloadURL="https://download.jetbrains.com/product?code=IIC&latest&distribution=mac"
jetbrainscode="IIC"
if [[ $(arch) == i386 ]]; then
jetbrainsdistribution="mac"
elif [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;

View File

@@ -1,7 +1,13 @@
jetbrainsphpstorm)
name="PHPStorm"
type="dmg"
downloadURL="https://download.jetbrains.com/product?code=PS&latest&distribution=mac"
jetbrainscode="PS"
if [[ $(arch) == i386 ]]; then
jetbrainsdistribution="mac"
elif [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;

View File

@@ -2,11 +2,12 @@ jetbrainspycharm)
# This is the Pro version of PyCharm. Do not confuse with PyCharm CE.
name="PyCharm"
type="dmg"
if [[ $(arch) == i386 ]]; then
downloadURL="https://download.jetbrains.com/product?code=PCP&latest&distribution=mac"
elif [[ $(arch) == arm64 ]]; then
downloadURL="https://download.jetbrains.com/product?code=PCP&latest&distribution=macM1"
jetbrainscode="PCP"
jetbrainsdistribution="mac"
if [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;

View File

@@ -2,11 +2,12 @@ jetbrainspycharmce|\
pycharmce)
name="PyCharm CE"
type="dmg"
if [[ $(arch) == i386 ]]; then
downloadURL="https://download.jetbrains.com/product?code=PCC&latest&distribution=mac"
elif [[ $(arch) == arm64 ]]; then
downloadURL="https://download.jetbrains.com/product?code=PCC&latest&distribution=macM1"
jetbrainscode="PCC"
jetbrainsdistribution="mac"
if [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;

View File

@@ -1,11 +1,12 @@
jetbrainstoolbox)
name="JetBrains Toolbox"
type="dmg"
if [[ $(arch) == i386 ]]; then
downloadURL="https://download.jetbrains.com/product?code=TB&latest&distribution=mac"
elif [[ $(arch) == arm64 ]]; then
downloadURL="https://download.jetbrains.com/product?code=TB&latest&distribution=macM1"
jetbrainscode="TBA"
jetbrainsdistribution="mac"
if [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;

View File

@@ -0,0 +1,12 @@
jetbrainswebstorm)
name="Webstorm"
type="dmg"
jetbrainscode="WS"
jetbrainsdistribution="mac"
if [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3"
;;

View File

@@ -0,0 +1,7 @@
perimeter81)
name="Perimeter 81"
type="pkg"
downloadURL="https://static.perimeter81.com/agents/mac/snapshot/latest/Perimeter81.pkg"
appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i ^x-amz-meta-version | sed -E 's/x-amz-meta-version: //' | cut -d"." -f1-3)"
expectedTeamID="924635PD62"
;;

View File

@@ -0,0 +1,7 @@
tageditor)
name="Tag Editor"
type="dmg"
downloadURL="https://amvidia.com/downloads/tag-editor-mac.dmg"
appNewVersion=curl -sf "https://amvidia.com/tag-editor" | grep -o -E '"softwareVersion":.'"{8}" | sed 's/\"//g' | awk -F ': ' '{print $2}'
expectedTeamID="F2TH9XX9CJ"
;;

View File

@@ -0,0 +1,7 @@
tom4aconverter)
name="To M4A Converter"
type="dmg"
downloadURL="https://amvidia.com/downloads/to-m4a-converter-mac.dmg"
appNewVersion=curl -sf "https://amvidia.com/to-m4a-converter" | grep -o -E '"softwareVersion":.'"{8}" | sed 's/\"//g' | awk -F ': ' '{print $2}'
expectedTeamID="F2TH9XX9CJ"
;;

View File

@@ -1 +1 @@
0.7.0b1
0.8.0