diff --git a/CHANGELOG.md b/CHANGELOG.md index 74d7b8f..2a1d15d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ -## 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. - We now detect App Store installed apps, and we do not replace them automatically. An example is Slack that will loose all settings if it is suddenly changed from App Store version to the "web" version (they differ in the handling of settings files). If `INSTALL=force` then we will replace the App Store app. We log all this. - Change in finding installed apps. We now look in /Applications and /Applications/Utilities first. If not found there, we use spotligt to find it. (We discovered a problem when a user has Parallels Windows installed with Microsoft Edge in it. Then Installomator wanted to update the app all the time, becaus spotligt found that Windows version of the app that Parallels created.) @@ -24,10 +24,10 @@ - Major update and now with help from @Theile and @Isaac - Added additional `BLOCKING_PROCESS_ACTION` handlings - Added additional `NOTIFY=all`. Usuful if used in Self Service, as the user will be notified before download, before install as well as when it is done. -- Added variable `LOGO` for icons i dialogs, use `LOGO=appstore` (or `jamf` or `mosyleb` or `mosylem` or `addigy`). It's also possible to set it to a direct path to a specific icon. Default is `appstore`. +- Added variable `LOGO` for icons i dialogs, use `LOGO=appstore` (or `jamf` or `mosyleb` or `mosylem` or `addigy`). It's also possible to set it to a direct path to a specific icon. Default is `appstore`. - Added variable `INSTALL` that can be set to `INSTALL=force` if software needs to be installed even though latest version is already installed (it will be a reinstall). - Version control now included. The variable `appNewVersion` in a label can be used to tell what the latest version from the web is. If this is not given, version checking is done after download. -- For a label that only installs a pkg without an app in it, a variable `packageID` can be used for version checking. +- For a label that only installs a pkg without an app in it, a variable `packageID` can be used for version checking. - Labels now sorted alphabetically, except for the Microsoft ones (that are at the end of the list). A bunch of new labels added, and lots of them have either been changed or improved (with `appNewVersion` og `packageID`). - If an app is asked to be closed down, it will now be opened again after the update. - If your MDM cannot call a script with parameters, the label can be set in the top of the script. diff --git a/Installomator.sh b/Installomator.sh index 21e1463..1a82401 100755 --- a/Installomator.sh +++ b/Installomator.sh @@ -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. +# Shouldn’t 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 "
/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"
diff --git a/Labels.txt b/Labels.txt
index 854bdaa..5e72460 100644
--- a/Labels.txt
+++ b/Labels.txt
@@ -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
diff --git a/README.md b/README.md
index ab031a3..2cfb90a 100644
--- a/README.md
+++ b/README.md
@@ -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._
   
@@ -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.
@@ -87,7 +87,7 @@ Installomator can work with the following common archive and installer types:
- dmg: for the common 'drag app to /Applications' installation style
- zip: the application is just compressed with zip or or tbz
-When the download yields a pkg file, Installomator will run `installer` to install it on the current system.
+When the download yields a pkg file, Installomator will run `installer` to install it on the current system.
Applications in dmgs or zips will be copied to `/Applications` and their owner will be set to the current user, so the install works like a standard drag'n drop installation.
@@ -236,7 +236,7 @@ WARNING! It might block the MDM agent on the machine, as the scripts gets stuct
- `tell_user_then_kill`: Show dialog 2 times, and if the quitting fails, the blocking processes will be killed.
- `kill`: kill process without prompting or giving the user a chance to save.
-If any process was closed, Installomator will try to open the app again, after the update process is done.
+If any process was closed, Installomator will try to open the app again, after the update process is done.
### Notification
@@ -350,7 +350,7 @@ Depending on the application or pkg there are a few more variables you can or ne
dmg or zip:
Applications will be copied to this directory.
Default value is '`/Applications`' for dmg and zip installations.
- pkg:
+ pkg:
`targetDir` is used as the install-location. Default is '`/`'.
- `blockingProcesses`: (optional)
@@ -375,7 +375,7 @@ Depending on the application or pkg there are a few more variables you can or ne
e.g. `msupdate` (see microsoft installations)
- `updateToolRunAsCurrentUser`:
- When this variable is set (any value), `$updateTool` will be run as the current user. Default is unset and
+ When this variable is set (any value), `$updateTool` will be run as the current user. Default is unset and
### Configuration from Arguments
diff --git a/fragments/labels/airtame.sh b/fragments/labels/airtame.sh
index bbc5dc7..13d637a 100644
--- a/fragments/labels/airtame.sh
+++ b/fragments/labels/airtame.sh
@@ -4,4 +4,4 @@ airtame)
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"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/applenyfonts.sh b/fragments/labels/applenyfonts.sh
index f671819..16c7185 100644
--- a/fragments/labels/applenyfonts.sh
+++ b/fragments/labels/applenyfonts.sh
@@ -4,4 +4,4 @@ applenyfonts)
downloadURL="https://devimages-cdn.apple.com/design/resources/download/NY.dmg"
packageID="com.apple.pkg.NYFonts"
expectedTeamID="Development Update"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/applesfcompact.sh b/fragments/labels/applesfcompact.sh
index f174053..aef7977 100644
--- a/fragments/labels/applesfcompact.sh
+++ b/fragments/labels/applesfcompact.sh
@@ -4,4 +4,4 @@ applesfcompact)
downloadURL="https://devimages-cdn.apple.com/design/resources/download/SF-Compact.dmg"
packageID="com.apple.pkg.SanFranciscoCompact"
expectedTeamID="Development Update"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/applesfmono.sh b/fragments/labels/applesfmono.sh
index 29233f1..46c32a7 100644
--- a/fragments/labels/applesfmono.sh
+++ b/fragments/labels/applesfmono.sh
@@ -4,4 +4,4 @@ applesfmono)
downloadURL="https://devimages-cdn.apple.com/design/resources/download/SF-Mono.dmg"
packageID="com.apple.pkg.SFMonoFonts"
expectedTeamID="Software Update"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/applesfpro.sh b/fragments/labels/applesfpro.sh
index 9ba2628..9d76895 100644
--- a/fragments/labels/applesfpro.sh
+++ b/fragments/labels/applesfpro.sh
@@ -4,4 +4,4 @@ applesfpro)
downloadURL="https://devimages-cdn.apple.com/design/resources/download/SF-Pro.dmg"
packageID="com.apple.pkg.SanFranciscoPro"
expectedTeamID="Development Update"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/applesfsymbols.sh b/fragments/labels/applesfsymbols.sh
index f90150b..1b0c751 100644
--- a/fragments/labels/applesfsymbols.sh
+++ b/fragments/labels/applesfsymbols.sh
@@ -4,4 +4,4 @@ sfsymbols)
type="pkgInDmg"
downloadURL="https://developer.apple.com/design/downloads/SF-Symbols.dmg"
expectedTeamID="Software Update"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/boxsync.sh b/fragments/labels/boxsync.sh
index 9962e3f..b6df054 100644
--- a/fragments/labels/boxsync.sh
+++ b/fragments/labels/boxsync.sh
@@ -3,4 +3,4 @@ boxsync)
type="dmg"
downloadURL="https://e3.boxcdn.net/box-installers/sync/Sync+4+External/Box%20Sync%20Installer.dmg"
expectedTeamID="M683GB7CPW"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/boxtools.sh b/fragments/labels/boxtools.sh
index 2963c68..11690f5 100644
--- a/fragments/labels/boxtools.sh
+++ b/fragments/labels/boxtools.sh
@@ -3,4 +3,4 @@ boxtools)
type="pkg"
downloadURL="https://box-installers.s3.amazonaws.com/boxedit/mac/currentrelease/BoxToolsInstaller.pkg"
expectedTeamID="M683GB7CPW"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/cisdem-documentreader.sh b/fragments/labels/cisdem-documentreader.sh
index f8cf75c..f57b72a 100644
--- a/fragments/labels/cisdem-documentreader.sh
+++ b/fragments/labels/cisdem-documentreader.sh
@@ -4,4 +4,4 @@ cisdem-documentreader)
downloadURL="https://download.cisdem.com/cisdem-documentreader.dmg"
expectedTeamID="5HGV8EX6BQ"
appName="Cisdem Document Reader.app"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/clevershare2.sh b/fragments/labels/clevershare2.sh
index 1a7bb90..452ffde 100644
--- a/fragments/labels/clevershare2.sh
+++ b/fragments/labels/clevershare2.sh
@@ -4,4 +4,4 @@ clevershare2)
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"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/colourcontrastanalyser.sh b/fragments/labels/colourcontrastanalyser.sh
index 613ccba..086569c 100644
--- a/fragments/labels/colourcontrastanalyser.sh
+++ b/fragments/labels/colourcontrastanalyser.sh
@@ -5,4 +5,4 @@ colourcontrastanalyser)
appNewVersion=$(versionFromGit ThePacielloGroup CCAe)
expectedTeamID="34RS4UC3M6"
blockingProcesses=( NONE )
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/craftmanager.sh b/fragments/labels/craftmanager.sh
index 6906ad6..6bf89d8 100644
--- a/fragments/labels/craftmanager.sh
+++ b/fragments/labels/craftmanager.sh
@@ -5,4 +5,4 @@ craftmanager)
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"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/flowjo.sh b/fragments/labels/flowjo.sh
index 6ddb9b1..b713914 100644
--- a/fragments/labels/flowjo.sh
+++ b/fragments/labels/flowjo.sh
@@ -5,4 +5,4 @@ flowjo)
appNewVersion=$(echo "${downloadURL}" | tr "-" "\n" | grep dmg | sed -E 's/([0-9.]*)\.dmg/\1/g')
expectedTeamID="C79HU5AD9V"
appName="FlowJo.app"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/insomnia.sh b/fragments/labels/insomnia.sh
index 6d8922a..9de4706 100644
--- a/fragments/labels/insomnia.sh
+++ b/fragments/labels/insomnia.sh
@@ -4,4 +4,4 @@ insomnia)
downloadURL=$(downloadURLFromGit kong insomnia)
appNewVersion=$(versionFromGit kong insomnia)
expectedTeamID="FX44YY62GV"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/jamfconnectconfiguration.sh b/fragments/labels/jamfconnectconfiguration.sh
new file mode 100644
index 0000000..7237f2e
--- /dev/null
+++ b/fragments/labels/jamfconnectconfiguration.sh
@@ -0,0 +1,6 @@
+jamfconnectconfiguration)
+ name="Jamf Connect Configuration"
+ type="dmg"
+ downloadURL="https://files.jamfconnect.com/JamfConnect.dmg"
+ expectedTeamID="483DWKW443"
+ ;;
diff --git a/fragments/labels/jetbrainsclion.sh b/fragments/labels/jetbrainsclion.sh
new file mode 100644
index 0000000..5a193a4
--- /dev/null
+++ b/fragments/labels/jetbrainsclion.sh
@@ -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"
+ ;;
diff --git a/fragments/labels/jetbrainsdatagrip.sh b/fragments/labels/jetbrainsdatagrip.sh
index 87a77f3..adb8dba 100644
--- a/fragments/labels/jetbrainsdatagrip.sh
+++ b/fragments/labels/jetbrainsdatagrip.sh
@@ -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"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/jetbrainsintellijidea.sh b/fragments/labels/jetbrainsintellijidea.sh
index 233eda9..262298b 100644
--- a/fragments/labels/jetbrainsintellijidea.sh
+++ b/fragments/labels/jetbrainsintellijidea.sh
@@ -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"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/jetbrainsintellijideace.sh b/fragments/labels/jetbrainsintellijideace.sh
index 7675050..3beb6fd 100644
--- a/fragments/labels/jetbrainsintellijideace.sh
+++ b/fragments/labels/jetbrainsintellijideace.sh
@@ -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"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/jetbrainsphpstorm.sh b/fragments/labels/jetbrainsphpstorm.sh
index 98e7773..1a21310 100644
--- a/fragments/labels/jetbrainsphpstorm.sh
+++ b/fragments/labels/jetbrainsphpstorm.sh
@@ -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"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/jetbrainspycharm.sh b/fragments/labels/jetbrainspycharm.sh
index 18670a1..ca99389 100644
--- a/fragments/labels/jetbrainspycharm.sh
+++ b/fragments/labels/jetbrainspycharm.sh
@@ -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"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/jetbrainspycharmce.sh b/fragments/labels/jetbrainspycharmce.sh
index 8d738a1..c571ebf 100644
--- a/fragments/labels/jetbrainspycharmce.sh
+++ b/fragments/labels/jetbrainspycharmce.sh
@@ -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"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/jetbrainstoolbox.sh b/fragments/labels/jetbrainstoolbox.sh
index 16bef78..8bc695c 100644
--- a/fragments/labels/jetbrainstoolbox.sh
+++ b/fragments/labels/jetbrainstoolbox.sh
@@ -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"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/jetbrainswebstorm.sh b/fragments/labels/jetbrainswebstorm.sh
new file mode 100644
index 0000000..c92caab
--- /dev/null
+++ b/fragments/labels/jetbrainswebstorm.sh
@@ -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"
+ ;;
diff --git a/fragments/labels/microsoftteams.sh b/fragments/labels/microsoftteams.sh
index b580758..475ee5a 100644
--- a/fragments/labels/microsoftteams.sh
+++ b/fragments/labels/microsoftteams.sh
@@ -10,4 +10,4 @@ microsoftteams)
# Commenting out msupdate as it is not really supported *yet* for teams
# updateTool="/Library/Application Support/Microsoft/MAU2.0/Microsoft AutoUpdate.app/Contents/MacOS/msupdate"
# updateToolArguments=( --install --apps TEAM01 )
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/muzzle.sh b/fragments/labels/muzzle.sh
index 76091f7..9f2fa31 100644
--- a/fragments/labels/muzzle.sh
+++ b/fragments/labels/muzzle.sh
@@ -4,4 +4,4 @@ muzzle)
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"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/parsec.sh b/fragments/labels/parsec.sh
index 68b3841..8b72a04 100644
--- a/fragments/labels/parsec.sh
+++ b/fragments/labels/parsec.sh
@@ -3,4 +3,4 @@ parsec)
type="pkg"
downloadURL="https://builds.parsecgaming.com/package/parsec-macos.pkg"
expectedTeamID="Y9MY52XZDB"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/perimeter81.sh b/fragments/labels/perimeter81.sh
new file mode 100644
index 0000000..2f05459
--- /dev/null
+++ b/fragments/labels/perimeter81.sh
@@ -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"
+ ;;
diff --git a/fragments/labels/platypus.sh b/fragments/labels/platypus.sh
index 62e2f41..257de1a 100644
--- a/fragments/labels/platypus.sh
+++ b/fragments/labels/platypus.sh
@@ -4,4 +4,4 @@ platypus)
downloadURL=$(downloadURLFromGit sveinbjornt Platypus)
appNewVersion=$(versionFromGit sveinbjornt Platypus)
expectedTeamID="55GP2M789L"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/prism9.sh b/fragments/labels/prism9.sh
index 9bdba3f..a94e5e9 100644
--- a/fragments/labels/prism9.sh
+++ b/fragments/labels/prism9.sh
@@ -3,4 +3,4 @@ prism9)
type="dmg"
downloadURL="https://cdn.graphpad.com/downloads/prism/9/InstallPrism9.dmg"
expectedTeamID="YQ2D36NS9M"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/ringcentralclassicapp.sh b/fragments/labels/ringcentralclassicapp.sh
index ef75cee..78d4186 100644
--- a/fragments/labels/ringcentralclassicapp.sh
+++ b/fragments/labels/ringcentralclassicapp.sh
@@ -5,4 +5,4 @@ ringcentralclassicapp)
expectedTeamID="M932RC5J66"
blockingProcesses=( "Glip" )
#blockingProcessesMaxCPU="5"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/royaltsx.sh b/fragments/labels/royaltsx.sh
index af5082e..6ebc77a 100644
--- a/fragments/labels/royaltsx.sh
+++ b/fragments/labels/royaltsx.sh
@@ -4,4 +4,4 @@ royaltsx)
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"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/screencloudplayer.sh b/fragments/labels/screencloudplayer.sh
index e7c1604..6a19dc5 100644
--- a/fragments/labels/screencloudplayer.sh
+++ b/fragments/labels/screencloudplayer.sh
@@ -4,4 +4,4 @@ screencloudplayer)
type="dmg"
downloadURL=$(curl -sL "https://screencloud.com/download" | sed -n 's/^.*"url":"\([^"]*\)".*$/\1/p')
expectedTeamID="3C4F953K6P"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/sketch.sh b/fragments/labels/sketch.sh
index 637a5b6..7cf3b9a 100644
--- a/fragments/labels/sketch.sh
+++ b/fragments/labels/sketch.sh
@@ -4,4 +4,4 @@ sketch)
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"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/skype.sh b/fragments/labels/skype.sh
index f14d15b..a689ffa 100644
--- a/fragments/labels/skype.sh
+++ b/fragments/labels/skype.sh
@@ -5,4 +5,4 @@ skype)
appNewVersion=$(curl -is "https://get.skype.com/go/getskype-skypeformac" | grep ocation: | grep -o "Skype-.*dmg" | cut -d "-" -f 2 | cut -d "." -f1-2)
expectedTeamID="AL798K98FX"
Company="Microsoft"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/snagit.sh b/fragments/labels/snagit.sh
index f748e1b..2c65478 100644
--- a/fragments/labels/snagit.sh
+++ b/fragments/labels/snagit.sh
@@ -5,4 +5,4 @@ snagit2020)
type="dmg"
downloadURL="https://download.techsmith.com/snagitmac/releases/Snagit.dmg"
expectedTeamID="7TQL462TU8"
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/tageditor.sh b/fragments/labels/tageditor.sh
new file mode 100644
index 0000000..666284c
--- /dev/null
+++ b/fragments/labels/tageditor.sh
@@ -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"
+ ;;
diff --git a/fragments/labels/tom4aconverter.sh b/fragments/labels/tom4aconverter.sh
new file mode 100644
index 0000000..bfc2b77
--- /dev/null
+++ b/fragments/labels/tom4aconverter.sh
@@ -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"
+ ;;
diff --git a/fragments/labels/zoomrooms.sh b/fragments/labels/zoomrooms.sh
index c3f87b7..37186be 100644
--- a/fragments/labels/zoomrooms.sh
+++ b/fragments/labels/zoomrooms.sh
@@ -6,4 +6,4 @@ zoomrooms)
appNewVersion="$(curl -fsIL ${downloadURL} | grep -i location | cut -d "/" -f5)"
expectedTeamID="BJ4HAAB9B3"
blockingProcesses=( "ZoomPresence" )
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/labels/zulujdk8.sh b/fragments/labels/zulujdk8.sh
index 5581ffa..0a10e49 100644
--- a/fragments/labels/zulujdk8.sh
+++ b/fragments/labels/zulujdk8.sh
@@ -10,4 +10,4 @@ zulujdk8)
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
- ;;
\ No newline at end of file
+ ;;
diff --git a/fragments/version.sh b/fragments/version.sh
index 7cee47d..a3df0a6 100644
--- a/fragments/version.sh
+++ b/fragments/version.sh
@@ -1 +1 @@
-0.7.0b1
\ No newline at end of file
+0.8.0