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. - 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. - 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 # behavior when blocking processes are found
BLOCKING_PROCESS_ACTION=prompt_user BLOCKING_PROCESS_ACTION=tell_user
# options: # options:
# - ignore continue even when blocking processes are found # - ignore continue even when blocking processes are found
# - quit app will be told to quit nicely, if running # - quit app will be told to quit nicely, if running
@@ -51,6 +51,9 @@ BLOCKING_PROCESS_ACTION=prompt_user
# - prompt_user_loop # - prompt_user_loop
# Like prompt-user, but clicking "Not Now", will just wait an hour, # Like prompt-user, but clicking "Not Now", will just wait an hour,
# and then it will ask again. # 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, # - tell_user User will be showed a notification about the important update,
# but user is only allowed to quit and continue, and then we # but user is only allowed to quit and continue, and then we
# ask the app to quit. # ask the app to quit.
@@ -68,7 +71,20 @@ LOGO=appstore
# - mosyleb Mosyle Business # - mosyleb Mosyle Business
# - mosylem Mosyle Manager (Education) # - mosylem Mosyle Manager (Education)
# - addigy Addigy # - 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 # install behavior
@@ -185,8 +201,8 @@ REOPEN="yes"
# - updateToolRunAsCurrentUser: # - updateToolRunAsCurrentUser:
# When this variable is set (any value), $updateTool will be run as the current user. # When this variable is set (any value), $updateTool will be run as the current user.
# #
VERSION="0.7.0b1" VERSION="0.7.0"
VERSIONDATE="2021-08-17" VERSIONDATE="2021-10-14"
# MARK: Functions # MARK: Functions
@@ -363,6 +379,16 @@ getAppVersion() {
#appversion=$(mdls -name kMDItemVersion -raw $installedAppPath ) #appversion=$(mdls -name kMDItemVersion -raw $installedAppPath )
appversion=$(defaults read $installedAppPath/Contents/Info.plist $versionKey) #Not dependant on Spotlight indexing appversion=$(defaults read $installedAppPath/Contents/Info.plist $versionKey) #Not dependant on Spotlight indexing
printlog "found app at $installedAppPath, version $appversion" 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 else
printlog "could not determine location of $appName" printlog "could not determine location of $appName"
fi fi
@@ -963,6 +989,13 @@ airserver)
#appNewVersion=$() # Cannot find version history or release notes on home page #appNewVersion=$() # Cannot find version history or release notes on home page
expectedTeamID="6C755KS5W3" 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) aldente)
name="AlDente" name="AlDente"
type="dmg" type="dmg"
@@ -1032,14 +1065,14 @@ appcleaner)
applenyfonts) applenyfonts)
name="Apple New York Font Collection" name="Apple New York Font Collection"
type="pkgInDmg" 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" packageID="com.apple.pkg.NYFonts"
expectedTeamID="Development Update" expectedTeamID="Development Update"
;; ;;
applesfcompact) applesfcompact)
name="San Francisco Compact" name="San Francisco Compact"
type="pkgInDmg" 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" packageID="com.apple.pkg.SanFranciscoCompact"
expectedTeamID="Development Update" expectedTeamID="Development Update"
;; ;;
@@ -1053,10 +1086,17 @@ applesfmono)
applesfpro) applesfpro)
name="San Francisco Pro" name="San Francisco Pro"
type="pkgInDmg" 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" packageID="com.apple.pkg.SanFranciscoPro"
expectedTeamID="Development Update" expectedTeamID="Development Update"
;; ;;
applesfsymbols|\
sfsymbols)
name="SF Symbols"
type="pkgInDmg"
downloadURL="https://developer.apple.com/design/downloads/SF-Symbols.dmg"
expectedTeamID="Software Update"
;;
aquaskk) aquaskk)
# credit: Tadayuki Onishi (@kenchan0130) # credit: Tadayuki Onishi (@kenchan0130)
name="aquaskk" name="aquaskk"
@@ -1103,6 +1143,13 @@ audacity)
appNewVersion=$(versionFromGit audacity audacity) appNewVersion=$(versionFromGit audacity audacity)
expectedTeamID="T3N4JQ7YY6" 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) autodmg)
# credit: Mischa van der Bent (@mischavdbent) # credit: Mischa van der Bent (@mischavdbent)
name="AutoDMG" name="AutoDMG"
@@ -1197,7 +1244,7 @@ bitwarden)
blender) blender)
name="blender" name="blender"
type="dmg" 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' ) appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)-.*/\1/g' )
expectedTeamID="68UA947AUU" expectedTeamID="68UA947AUU"
;; ;;
@@ -1224,12 +1271,19 @@ boxdrive)
fi fi
expectedTeamID="M683GB7CPW" 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) boxtools)
name="Box Tools" name="Box Tools"
type="pkg" type="pkg"
downloadURL="https://box-installers.s3.amazonaws.com/boxedit/mac/currentrelease/BoxToolsInstaller.pkg" downloadURL="https://box-installers.s3.amazonaws.com/boxedit/mac/currentrelease/BoxToolsInstaller.pkg"
expectedTeamID="M683GB7CPW" expectedTeamID="M683GB7CPW"
;;brave) ;;
brave)
# credit: @securitygeneration # credit: @securitygeneration
name="Brave Browser" name="Brave Browser"
type="dmg" type="dmg"
@@ -1265,6 +1319,10 @@ calibre)
type="dmg" type="dmg"
downloadURL="https://calibre-ebook.com/dist/osx" 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' ) 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" expectedTeamID="NTY7FVCEKP"
;; ;;
camostudio) camostudio)
@@ -1281,6 +1339,13 @@ camtasia)
downloadURL=https://download.techsmith.com/camtasiamac/releases/Camtasia.dmg downloadURL=https://download.techsmith.com/camtasiamac/releases/Camtasia.dmg
expectedTeamID="7TQL462TU8" 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) citrixworkspace)
#credit: Erik Stam (@erikstam) and #Philipp on MacAdmins Slack #credit: Erik Stam (@erikstam) and #Philipp on MacAdmins Slack
name="Citrix Workspace" name="Citrix Workspace"
@@ -1290,10 +1355,9 @@ citrixworkspace)
expectedTeamID="S272Y5R93J" expectedTeamID="S272Y5R93J"
;; ;;
clevershare2) clevershare2)
# credit: Søren Theilgaard (@theilgaard)
name="Clevershare" name="Clevershare"
type="dmg" 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' ) appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z-]*_Mac\.([0-9.]*)\.[0-9]*\.dmg$/\1/g' )
expectedTeamID="P76M9BE8DQ" 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) 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" 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) code42)
# credit: Isaac Ordonez, Mann consulting (@mannconsulting) # credit: Isaac Ordonez, Mann consulting (@mannconsulting)
name="Code42" name="Code42"
@@ -1320,13 +1391,14 @@ coderunner)
expectedTeamID="R4GD98AJF9" expectedTeamID="R4GD98AJF9"
;; ;;
colourcontrastanalyser) colourcontrastanalyser)
name="Colour Contrast Analyser (CCA)" name="Colour Contrast Analyser (CCA)"
type="dmg" type="dmg"
downloadURL=$(downloadURLFromGit ThePacielloGroup CCAe) downloadURL=$(downloadURLFromGit ThePacielloGroup CCAe)
appNewVersion=$(versionFromGit ThePacielloGroup CCAe) appNewVersion=$(versionFromGit ThePacielloGroup CCAe)
expectedTeamID="34RS4UC3M6" expectedTeamID="34RS4UC3M6"
blockingProcesses=( NONE ) blockingProcesses=( NONE )
;;cormorant) ;;
cormorant)
# credit: Søren Theilgaard (@theilgaard) # credit: Søren Theilgaard (@theilgaard)
name="Cormorant" name="Cormorant"
type="zip" 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}') appNewVersion=$(curl -fs https://eclecticlight.co/downloads/ | grep zip | grep -o -E "$name [0-9.]*" | awk '{print $2}')
expectedTeamID="QWY4LRW926" 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) cryptomator)
name="Cryptomator" name="Cryptomator"
type="dmg" type="dmg"
@@ -1416,7 +1496,14 @@ devonthink)
appNewVersion=$( echo ${downloadURL} | tr '/' '\n' | grep "[0-9]" | grep "[.]" | head -1 ) appNewVersion=$( echo ${downloadURL} | tr '/' '\n' | grep "[0-9]" | grep "[.]" | head -1 )
expectedTeamID="679S2QUWR8" expectedTeamID="679S2QUWR8"
;; ;;
dialpad) dialog)
name="Dialog"
type="pkg"
downloadURL=$(downloadURLFromGit bartreardon Dialog-public )
appNewVersion=$(versionFromGit bartreardon Dialog-public )
expectedTeamID="PWA5E9TQ59"
;;
dialpad)
# credit: @ehosaka # credit: @ehosaka
name="Dialpad" name="Dialpad"
type="dmg" type="dmg"
@@ -1538,7 +1625,12 @@ ferdi)
figma) figma)
name="Figma" name="Figma"
type="zip" 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" expectedTeamID="T8RA8NE3B7"
;; ;;
firefox) firefox)
@@ -1620,6 +1712,14 @@ firefoxpkg)
expectedTeamID="43AQ936H96" expectedTeamID="43AQ936H96"
blockingProcesses=( firefox ) 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) front)
name="Front" name="Front"
type="dmg" type="dmg"
@@ -1667,11 +1767,11 @@ googlechrome)
if [[ $(arch) != "i386" ]]; then if [[ $(arch) != "i386" ]]; then
printlog "Architecture: arm64 (not i386)" printlog "Architecture: arm64 (not i386)"
downloadURL="https://dl.google.com/chrome/mac/universal/stable/GGRO/googlechrome.dmg" 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 else
printlog "Architecture: i386" printlog "Architecture: i386"
downloadURL="https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg" 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 fi
expectedTeamID="EQHXZ8M8AV" expectedTeamID="EQHXZ8M8AV"
;; ;;
@@ -1791,9 +1891,8 @@ hancock)
handbrake) handbrake)
name="HandBrake" name="HandBrake"
type="dmg" type="dmg"
downloadURL=$(curl --silent --fail "https://api.github.com/repos/HandBrake/HandBrake/releases/latest" \ downloadURL=$(downloadURLFromGit HandBrake HandBrake )
| awk -F '"' "/browser_download_url/ && /dmg/ && ! /sig/ && ! /CLI/ { print \$4 }") appNewVersion=$(versionFromGit HandBrake HandBrake )
appNewVersion=$(curl -sf "https://api.github.com/repos/HandBrake/HandBrake/releases/latest" | awk -F '"' "/tag_name/ { print \$4 }")
expectedTeamID="5X9DE89KYV" expectedTeamID="5X9DE89KYV"
;; ;;
hazel) hazel)
@@ -1839,7 +1938,7 @@ icons)
expectedTeamID="7R5ZEU67FQ" expectedTeamID="7R5ZEU67FQ"
;; ;;
imazingprofileeditor) imazingprofileeditor)
# Credit: Bilal Habib @Pro4TLZZZ # Credit: Bilal Habib @Pro4TLZZ
name="iMazing Profile Editor" name="iMazing Profile Editor"
type="dmg" type="dmg"
downloadURL="https://downloads.imazing.com/mac/iMazing-Profile-Editor/iMazingProfileEditorMac.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)" #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" expectedTeamID="SW3D6BB6A6"
;; ;;
insomnia)
name="insomnia"
type="dmg"
downloadURL=$(downloadURLFromGit kong insomnia)
appNewVersion=$(versionFromGit kong insomnia)
expectedTeamID="FX44YY62GV"
;;
installomator_theile) installomator_theile)
# credit: Søren Theilgaard (@theilgaard) # credit: Søren Theilgaard (@theilgaard)
name="Installomator" name="Installomator"
@@ -1883,7 +1989,7 @@ iterm2)
;; ;;
jabradirect) jabradirect)
name="Jabra Direct" name="Jabra Direct"
type="dmg" type="pkgInDmg"
downloadURL="https://jabraxpressonlineprdstor.blob.core.windows.net/jdo/JabraDirectSetup.dmg" downloadURL="https://jabraxpressonlineprdstor.blob.core.windows.net/jdo/JabraDirectSetup.dmg"
expectedTeamID="55LV32M29R" 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) 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" downloadURL="https://files.jamfconnect.com/JamfConnect.dmg"
expectedTeamID="483DWKW443" expectedTeamID="483DWKW443"
;; ;;
jamfconnectconfiguration)
name="Jamf Connect Configuration"
type="dmg"
downloadURL="https://files.jamfconnect.com/JamfConnect.dmg"
expectedTeamID="483DWKW443"
;;
jamfmigrator) jamfmigrator)
# credit: Mischa van der Bent # credit: Mischa van der Bent
name="jamf-migrator" name="jamf-migrator"
@@ -1919,64 +2031,119 @@ jamfreenroller)
#appNewVersion=$(versionFromGit jamf ReEnroller) #appNewVersion=$(versionFromGit jamf ReEnroller)
expectedTeamID="PS2F6S478M" 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) jetbrainsdatagrip)
# credit: AP Orlebeke (@apizz) name="DataGrip"
name="DataGrip" type="dmg"
type="dmg" jetbrainscode="DG"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=DG&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3) if [[ $(arch) == i386 ]]; then
if [[ $(arch) == "arm64" ]]; then jetbrainsdistribution="mac"
downloadURL=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=DG&latest=true&type=release" | grep -o 'macM1*.*,' | cut -d '"' -f5) elif [[ $(arch) == arm64 ]]; then
elif [[ $(arch) == "i386" ]]; then jetbrainsdistribution="macM1"
downloadURL=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=DG&latest=true&type=release" | grep -o 'mac*.*,' | cut -d '"' -f5) fi
fi downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
expectedTeamID="2ZEFAR8TH3" appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
;;jetbrainsintellijidea) expectedTeamID="2ZEFAR8TH3"
# credit: Gabe Marchan (gabemarchan.com - @darklink87) ;;
jetbrainsintellijidea)
name="IntelliJ IDEA" name="IntelliJ IDEA"
type="dmg" type="dmg"
downloadURL="https://download.jetbrains.com/product?code=II&latest&distribution=mac" jetbrainscode="II"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=II&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3) 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" expectedTeamID="2ZEFAR8TH3"
;; ;;
jetbrainsintellijideace|\ jetbrainsintellijideace|\
intellijideace) intellijideace)
name="IntelliJ IDEA CE" name="IntelliJ IDEA CE"
type="dmg" type="dmg"
downloadURL="https://download.jetbrains.com/product?code=IIC&latest&distribution=mac" jetbrainscode="IIC"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=IIC&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3) 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" expectedTeamID="2ZEFAR8TH3"
;; ;;
jetbrainsphpstorm) jetbrainsphpstorm)
# credit: Casey Jensen (@cajenson01 on MacAdmins Slack)Appended by Skylar Damiano @catdad on MacAdmins Slack name="PHPStorm"
name="JetBrains PHPStorm"
type="dmg" 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) jetbrainscode="PS"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=PS&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3) 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" expectedTeamID="2ZEFAR8TH3"
;; ;;
jetbrainspycharm) jetbrainspycharm)
# This is the Pro version of PyCharm. # This is the Pro version of PyCharm. Do not confuse with PyCharm CE.
# Do not confuse with PyCharm CE.
name="PyCharm" name="PyCharm"
type="dmg" type="dmg"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=PCP&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3) jetbrainscode="PCP"
if [[ $(arch) == i386 ]]; then jetbrainsdistribution="mac"
downloadURL="https://download.jetbrains.com/product?code=PCP&latest&distribution=mac" if [[ $(arch) == arm64 ]]; then
elif [[ $(arch) == arm64 ]]; then jetbrainsdistribution="macM1"
downloadURL="https://download.jetbrains.com/product?code=PCP&latest&distribution=macM1"
fi 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" expectedTeamID="2ZEFAR8TH3"
;; ;;
jetbrainspycharmce|\ jetbrainspycharmce|\
pycharmce) pycharmce)
name="PyCharm CE" name="PyCharm CE"
type="dmg" type="dmg"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=PCC&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3) jetbrainscode="PCC"
if [[ $(arch) == i386 ]]; then jetbrainsdistribution="mac"
downloadURL="https://download.jetbrains.com/product?code=PCC&latest&distribution=mac" if [[ $(arch) == arm64 ]]; then
elif [[ $(arch) == arm64 ]]; then jetbrainsdistribution="macM1"
downloadURL="https://download.jetbrains.com/product?code=PCC&latest&distribution=macM1"
fi 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" expectedTeamID="2ZEFAR8TH3"
;; ;;
karabinerelements) karabinerelements)
@@ -2006,6 +2173,12 @@ keka)
appNewVersion=$(versionFromGit aonez Keka) appNewVersion=$(versionFromGit aonez Keka)
expectedTeamID="4FG648TM2A" 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) keyboardmaestro)
# credit: Søren Theilgaard (@theilgaard) # credit: Søren Theilgaard (@theilgaard)
name="Keyboard Maestro" name="Keyboard Maestro"
@@ -2103,8 +2276,10 @@ lucifer)
lulu) lulu)
name="LuLu" name="LuLu"
type="dmg" type="dmg"
downloadURL=$( curl -fs "https://objective-see.com/products/lulu.html" | grep https | grep "$type" | head -1 | tr '"' "\n" | grep "^http" ) #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' ) #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" expectedTeamID="VBG97UB4TA"
;; ;;
macfuse) macfuse)
@@ -2152,6 +2327,14 @@ microsoftautoupdate)
#updateTool="/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate" #updateTool="/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate"
#updateToolArguments=( --install --apps MSau04 ) #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) microsoftcompanyportal)
name="Company Portal" name="Company Portal"
type="pkg" type="pkg"
@@ -2229,6 +2412,7 @@ microsoftofficebusinesspro)
name="MicrosoftOfficeBusinessPro" name="MicrosoftOfficeBusinessPro"
type="pkg" type="pkg"
downloadURL="https://go.microsoft.com/fwlink/?linkid=2009112" 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" expectedTeamID="UBF8T346G9"
# using MS PowerPoint as the 'stand-in' for the entire suite # using MS PowerPoint as the 'stand-in' for the entire suite
appName="Microsoft PowerPoint.app" appName="Microsoft PowerPoint.app"
@@ -2310,10 +2494,8 @@ microsoftteams)
type="pkg" type="pkg"
packageID="com.microsoft.teams" packageID="com.microsoft.teams"
downloadURL="https://go.microsoft.com/fwlink/?linkid=869428" 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/') 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" expectedTeamID="UBF8T346G9"
blockingProcesses=( Teams "Microsoft Teams Helper" ) blockingProcesses=( Teams "Microsoft Teams Helper" )
# Commenting out msupdate as it is not really supported *yet* for teams # 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" downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg"
expectedTeamID="M3GM7MFY7U" expectedTeamID="M3GM7MFY7U"
;; ;;
montereyblocker)
name="montereyblocker"
type="pkg"
packageID="dk.envo-it.montereyblocker"
downloadURL=$(downloadURLFromGit Theile montereyblocker )
appNewVersion=$(versionFromGit Theile montereyblocker )
expectedTeamID="FXW6QXBFW5"
;;
musescore) musescore)
name="MuseScore 3" name="MuseScore 3"
type="dmg" type="dmg"
@@ -2365,6 +2555,13 @@ musescore)
appNewVersion=$(versionFromGit musescore MuseScore) appNewVersion=$(versionFromGit musescore MuseScore)
expectedTeamID="6EPAF2X3PR" 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) netnewswire)
name="NetNewsWire" name="NetNewsWire"
type="zip" type="zip"
@@ -2544,6 +2741,12 @@ pacifist)
downloadURL="https://charlessoft.com/cgi-bin/pacifist_download.cgi?type=dmg" downloadURL="https://charlessoft.com/cgi-bin/pacifist_download.cgi?type=dmg"
expectedTeamID="HRLUCP7QP4" expectedTeamID="HRLUCP7QP4"
;; ;;
parsec)
name="Parsec"
type="pkg"
downloadURL="https://builds.parsecgaming.com/package/parsec-macos.pkg"
expectedTeamID="Y9MY52XZDB"
;;
pdfsam) pdfsam)
name="PDFsam Basic" name="PDFsam Basic"
type="dmg" type="dmg"
@@ -2551,6 +2754,13 @@ pdfsam)
appNewVersion=$(versionFromGit torakiki pdfsam) appNewVersion=$(versionFromGit torakiki pdfsam)
expectedTeamID="8XM3GHX436" 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) pitch)
name="Pitch" name="Pitch"
type="dmg" 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) 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) platypus)
name="Platypus" name="Platypus"
type="zip" type="zip"
downloadURL=$(downloadURLFromGit sveinbjornt Platypus) downloadURL=$(downloadURLFromGit sveinbjornt Platypus)
appNewVersion=$(versionFromGit sveinbjornt Platypus) appNewVersion=$(versionFromGit sveinbjornt Platypus)
expectedTeamID="55GP2M789L" expectedTeamID="55GP2M789L"
;;plisteditpro) ;;
plisteditpro)
name="PlistEdit Pro" name="PlistEdit Pro"
type="zip" type="zip"
downloadURL="https://www.fatcatsoftware.com/plisteditpro/PlistEditPro.zip" downloadURL="https://www.fatcatsoftware.com/plisteditpro/PlistEditPro.zip"
@@ -2589,7 +2800,6 @@ prism9)
type="dmg" type="dmg"
downloadURL="https://cdn.graphpad.com/downloads/prism/9/InstallPrism9.dmg" downloadURL="https://cdn.graphpad.com/downloads/prism/9/InstallPrism9.dmg"
expectedTeamID="YQ2D36NS9M" expectedTeamID="YQ2D36NS9M"
Company="GraphPad Software"
;; ;;
privileges) privileges)
# credit: Erik Stam (@erikstam) # credit: Erik Stam (@erikstam)
@@ -2722,11 +2932,19 @@ rocketchat)
expectedTeamID="S6UPZG7ZR3" expectedTeamID="S6UPZG7ZR3"
blockingProcesses=( Rocket.Chat ) 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) royaltsx)
name="Royal TSX" name="Royal TSX"
type="dmg" 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) 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-v4.royalapps.com/updates_stable | xpath '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 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" expectedTeamID="VXP8K9EDP6"
;; ;;
rstudio) rstudio)
@@ -2746,37 +2964,34 @@ santa)
expectedTeamID="EQHXZ8M8AV" expectedTeamID="EQHXZ8M8AV"
;; ;;
scaleft) scaleft)
name="ScaleFT" name="ScaleFT"
type="pkg" type="pkg"
downloadURL="https://dist.scaleft.com/client-tools/mac/latest/ScaleFT.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') 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" expectedTeamID="HV2G9Z3RP5"
blockingProcesses=( ScaleFT ) blockingProcesses=( ScaleFT )
;;screamingfrogseospider) ;;
screamingfrogseospider)
name="Screaming Frog SEO Spider" name="Screaming Frog SEO Spider"
type="dmg" 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" expectedTeamID="CAHEVC3HZC"
;; ;;
screencloudplayer) screencloudplayer)
# credit: AP Orlebeke (@apizz) # credit: AP Orlebeke (@apizz)
name="ScreenCloud Player" name="ScreenCloud Player"
type="dmg" type="dmg"
downloadURL=$(curl -sL "https://screencloud.com/download" | sed -n 's/^.*"url":"\([^"]*\)".*$/\1/p') downloadURL=$(curl -sL "https://screencloud.com/download" | sed -n 's/^.*"url":"\([^"]*\)".*$/\1/p')
expectedTeamID="3C4F953K6P" expectedTeamID="3C4F953K6P"
;;screenflick) ;;
screenflick)
# credit: Gabe Marchan (gabemarchan.com - @darklink87) # credit: Gabe Marchan (gabemarchan.com - @darklink87)
name="Screenflick" name="Screenflick"
type="zip" type="zip"
downloadURL="https://www.araelium.com/screenflick/downloads/Screenflick.zip" downloadURL="https://www.araelium.com/screenflick/downloads/Screenflick.zip"
expectedTeamID="28488A87JB" expectedTeamID="28488A87JB"
;; ;;
sfsymbols)
name="SF Symbols"
type="pkgInDmg"
downloadURL="https://developer.apple.com/design/downloads/SF-Symbols.dmg"
expectedTeamID="Software Update"
;;
shield) shield)
# credit: Søren Theilgaard (@theilgaard) # credit: Søren Theilgaard (@theilgaard)
name="Shield" name="Shield"
@@ -2825,12 +3040,12 @@ sizeup)
expectedTeamID="GVZ7RF955D" expectedTeamID="GVZ7RF955D"
;; ;;
sketch) sketch)
name="Sketch" name="Sketch"
type="zip" 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' | 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 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" expectedTeamID="WUGMZZ5K46"
;; ;;
skype) skype)
name="Skype" name="Skype"
type="dmg" type="dmg"
@@ -2843,14 +3058,16 @@ slack)
name="Slack" name="Slack"
type="dmg" type="dmg"
downloadURL="https://slack.com/ssb/download-osx-universal" # Universal downloadURL="https://slack.com/ssb/download-osx-universal" # Universal
# if [[ $(arch) == "arm64" ]]; then appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | cut -d "/" -f6 )
# 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' )
expectedTeamID="BQR82RBBHL" 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|\ snagit|\
snagit2021|\ snagit2021|\
snagit2020) snagit2020)
@@ -2887,10 +3104,20 @@ sourcetree)
appNewVersion=$(echo "${downloadURL}" | sed -E 's/.*\/Sourcetree_([0-9.]*)_[0-9]*\.zip/\1/g') appNewVersion=$(echo "${downloadURL}" | sed -E 's/.*\/Sourcetree_([0-9.]*)_[0-9]*\.zip/\1/g')
expectedTeamID="UPXU4CQZ5P" expectedTeamID="UPXU4CQZ5P"
;; ;;
splashtopsos)
name="Splashtop SOS"
type="dmg"
downloadURL="https://download.splashtop.com/sos/SplashtopSOS.dmg"
expectedTeamID="CPQQ3AW49Y"
;;
spotify) spotify)
name="Spotify" name="Spotify"
type="dmg" 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 # 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" 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" downloadURL="https://updates.cdn-apple.com/2019/cert/061-41823-20191025-5efc5a59-d7dc-46d3-9096-396bb8cb4a73/SwiftRuntimeForCommandLineTools.dmg"
expectedTeamID="Software Update" 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) tableaudesktop)
name="Tableau Desktop" name="Tableau Desktop"
type="pkgInDmg" type="pkgInDmg"
@@ -2940,6 +3174,13 @@ tableaureader)
downloadURL="https://www.tableau.com/downloads/reader/mac" downloadURL="https://www.tableau.com/downloads/reader/mac"
expectedTeamID="QJ4XPRK37C" 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) taskpaper)
# credit: Drew Diver (@grumpydrew on MacAdmins Slack) # credit: Drew Diver (@grumpydrew on MacAdmins Slack)
name="TaskPaper" name="TaskPaper"
@@ -3024,12 +3265,6 @@ thunderbird)
expectedTeamID="43AQ936H96" expectedTeamID="43AQ936H96"
blockingProcesses=( thunderbird ) 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) toggltrack)
name="Toggl Track" name="Toggl Track"
type="dmg" type="dmg"
@@ -3037,6 +3272,13 @@ toggltrack)
appNewVersion=$(versionFromGit toggl-open-source toggldesktop ) appNewVersion=$(versionFromGit toggl-open-source toggldesktop )
expectedTeamID="B227VTMZ94" 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) torbrowser)
# credit: Søren Theilgaard (@theilgaard) # credit: Søren Theilgaard (@theilgaard)
name="Tor Browser" 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" ) 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" expectedTeamID="J6MMHGD9D6"
;; ;;
utm)
name="UTM"
type="dmg"
downloadURL=$(downloadURLFromGit utmapp UTM )
appNewVersion=$(versionFromGit utmapp UTM )
expectedTeamID="WDNLXAD4W8"
;;
vagrant) vagrant)
# credit: AP Orlebeke (@apizz) # credit: AP Orlebeke (@apizz)
name="Vagrant" name="Vagrant"
@@ -3148,11 +3397,10 @@ vlc)
expectedTeamID="75GAHG3SZQ" expectedTeamID="75GAHG3SZQ"
;; ;;
vmwarehorizonclient) vmwarehorizonclient)
# credit: Oh4sh0 https://github.com/Oh4sh0
name="VMware Horizon Client" name="VMware Horizon Client"
type="dmg" 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) 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 -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/') 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" expectedTeamID="EG7KH642X6"
;; ;;
vscodium) vscodium)
@@ -3166,6 +3414,14 @@ vscodium)
appName="VSCodium.app" appName="VSCodium.app"
blockingProcesses=( Electron ) 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|\ webex|\
webexteams) webexteams)
# credit: Erik Stam (@erikstam) # credit: Erik Stam (@erikstam)
@@ -3188,13 +3444,6 @@ webexmeetings)
#blockingProcessesMaxCPU="5" #blockingProcessesMaxCPU="5"
blockingProcesses=( Webex ) 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) whatsapp)
name="WhatsApp" name="WhatsApp"
type="dmg" type="dmg"
@@ -3254,6 +3503,14 @@ xquartz)
appNewVersion=$(versionFromGit XQuartz XQuartz) appNewVersion=$(versionFromGit XQuartz XQuartz)
expectedTeamID="NA574AWV7E" 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) yubikeymanagerqt)
# credit: Tadayuki Onishi (@kenchan0130) # credit: Tadayuki Onishi (@kenchan0130)
name="YubiKey Manager GUI" name="YubiKey Manager GUI"
@@ -3269,14 +3526,29 @@ zappy)
downloadURL="https://zappy.zapier.com/releases/zappy-latest.zip" downloadURL="https://zappy.zapier.com/releases/zappy-latest.zip"
expectedTeamID="6LS97Q5E79" 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) zoom)
# credit: Isaac Ordonez, Mann consulting (@mannconsulting) name="zoom.us"
name="Zoom.us"
type="pkg" type="pkg"
downloadURL="https://zoom.us/client/latest/ZoomInstallerIT.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" expectedTeamID="BJ4HAAB9B3"
blockingProcesses=( zoom.us )
;; ;;
zoomclient) zoomclient)
name="zoom.us" name="zoom.us"
@@ -3292,15 +3564,22 @@ zoomclient)
blockingProcesses=( zoom.us ) blockingProcesses=( zoom.us )
#blockingProcessesMaxCPU="5" #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) zoomrooms)
   name="ZoomRooms" name="ZoomRooms"
   type="pkg" type="pkg"
   packageID="us.zoom.pkg.zp" packageID="us.zoom.pkg.zp"
   downloadURL="https://zoom.us/client/latest/ZoomRooms.pkg" downloadURL="https://zoom.us/client/latest/ZoomRooms.pkg"
   appNewVersion="$(curl -fsIL ${downloadURL} | grep -i location | cut -d "/" -f5)" appNewVersion="$(curl -fsIL ${downloadURL} | grep -i location | cut -d "/" -f5)"
   expectedTeamID="BJ4HAAB9B3" expectedTeamID="BJ4HAAB9B3"
blockingProcesses=( "ZoomPresence" ) blockingProcesses=( "ZoomPresence" )
   ;; ;;
zulujdk11) zulujdk11)
name="Zulu JDK 11" name="Zulu JDK 11"
type="pkgInDmg" type="pkgInDmg"
@@ -3341,18 +3620,18 @@ zulujdk15)
appNewVersion=$(echo "$downloadURL" | cut -d "-" -f 1 | sed -e "s/.*zulu//") # Cannot be compared to anything appNewVersion=$(echo "$downloadURL" | cut -d "-" -f 1 | sed -e "s/.*zulu//") # Cannot be compared to anything
;; ;;
zulujdk8) zulujdk8)
name="Zulu JDK 8" name="Zulu JDK 8"
type="pkgInDmg" type="pkgInDmg"
packageID="com.azulsystems.zulu.8" packageID="com.azulsystems.zulu.8"
if [[ $(arch) == i386 ]]; then 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) 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 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) 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 fi
expectedTeamID="TDTHCUPYFR" 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 } 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 appNewVersion=$(echo "$downloadURL" | cut -d "-" -f 1 | sed -e "s/.*zulu//") # Cannot be compared to anything
;; ;;
*) *)
# unknown label # unknown label
#printlog "unknown label $label" #printlog "unknown label $label"

View File

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

View File

@@ -1,7 +1,5 @@
# Installomator # 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._ _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) ![](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 ## 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. 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. 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) jetbrainsdatagrip)
name="DataGrip" name="DataGrip"
type="dmg" type="dmg"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=DG&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3) jetbrainscode="DG"
if [[ $(arch) == "arm64" ]]; then if [[ $(arch) == i386 ]]; then
downloadURL=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=DG&latest=true&type=release" | grep -o 'macM1*.*,' | cut -d '"' -f5) jetbrainsdistribution="mac"
elif [[ $(arch) == "i386" ]]; then elif [[ $(arch) == arm64 ]]; then
downloadURL=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=DG&latest=true&type=release" | grep -o 'mac*.*,' | cut -d '"' -f5) jetbrainsdistribution="macM1"
fi 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" expectedTeamID="2ZEFAR8TH3"
;; ;;

View File

@@ -1,7 +1,13 @@
jetbrainsintellijidea) jetbrainsintellijidea)
name="IntelliJ IDEA" name="IntelliJ IDEA"
type="dmg" 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' ) appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3" expectedTeamID="2ZEFAR8TH3"
;; ;;

View File

@@ -2,7 +2,13 @@ jetbrainsintellijideace|\
intellijideace) intellijideace)
name="IntelliJ IDEA CE" name="IntelliJ IDEA CE"
type="dmg" 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' ) appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3" expectedTeamID="2ZEFAR8TH3"
;; ;;

View File

@@ -1,7 +1,13 @@
jetbrainsphpstorm) jetbrainsphpstorm)
name="PHPStorm" name="PHPStorm"
type="dmg" 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' ) appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3" expectedTeamID="2ZEFAR8TH3"
;; ;;

View File

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

View File

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

View File

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