6 Commits

Author SHA1 Message Date
Søren Theilgaard
dbb027399e Merge branch 'Variable-for-skipping-if-app-is-not-installed' of https://github.com/Installomator/Installomator into Variable-for-skipping-if-app-is-not-installed 2022-03-03 21:42:05 +01:00
Søren Theilgaard
f5db340589 Update functions.sh 2022-03-03 21:41:48 +01:00
Søren Theilgaard
31e376789f Update CHANGELOG.md 2022-03-03 21:38:02 +01:00
Søren Theilgaard
c049dc4a92 Update CHANGELOG.md 2022-03-03 16:27:16 +01:00
Søren Theilgaard
e5541fb97a Merge branch 'main' into Variable-for-skipping-if-app-is-not-installed 2022-03-03 16:25:53 +01:00
Søren Theilgaard
4cee224d17 Variable SKIP_UNINSTALLED introduced
Fixes #321.
2022-02-08 13:46:05 +01:00
36 changed files with 94 additions and 438 deletions

View File

@@ -1,36 +1,6 @@
## v9.1 ## v10.0
**Note**: Both Google and Mozilla recommend using the pkg installers instead of the dmg downloads for managed deployments. So far, Installomator has provided labels for both. (`googlechrome` and `googlechromepkg` or `firefox` and `firefoxpkg`, respectively) Since there are problems with the dmg downloads, a future release of Installomator will _disable_ the `firefox` and `googlechrome` dmg labels. You should switch to using the respective pkg labels instead.
- added option for Microsoft Endpoint Manager (Intune) to `LOGO` (#446)
- minor fixes (#427, #434, #436)
- the `googlechrome` label now always downloads the universal version (#430)
- new labels:
- 1passwordcli (#429)
- amazoncorretto8jdk (#423)
- autodeskfusion360admininstall (#447)
- axurerp10 (#439)
- calcservice (#426)
- clipy (#412)
- dockutil (#432)
- easyfind (#426)
- grammarly (#444)
- houdahspot (#426)
- macadminspython (#431)
- microsoftazuredatastudio (#438)
- nanosaur (#426)
- tembo (#426)
- wordservice (#426)
- xmenu (#426)
- updated labels:
- appcleaner (#428)
- dialog (#435, #437)
- googlechrome (#430)
- microsoftdefender (#440)
- supportapp (#426)
- zoom and zoomgov (#426, #433)
- Introducing variable `SKIP_UNINSTALLED` that normally will be `0` and the script will run and install the software label if other conditions align with this. Use `SKIP_UNINSTALLED=1` to have the script stop if a current installation of the app is not found.
## v9.0.1 ## v9.0.1

View File

@@ -80,7 +80,6 @@ LOGO=appstore
# - mosyleb Mosyle Business # - mosyleb Mosyle Business
# - mosylem Mosyle Manager (Education) # - mosylem Mosyle Manager (Education)
# - addigy Addigy # - addigy Addigy
# - microsoft Microsoft Endpoint Manager (Intune)
# path can also be set in the command call, and if file exists, it will be used. # 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"' # Like 'LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"'
# (spaces have to be escaped). # (spaces have to be escaped).
@@ -302,8 +301,8 @@ if [[ $(/usr/bin/arch) == "arm64" ]]; then
rosetta2=no rosetta2=no
fi fi
fi fi
VERSION="9.1" VERSION="9.0.1"
VERSIONDATE="2022-03-18" VERSIONDATE="2022-02-20"
# MARK: Functions # MARK: Functions
@@ -463,10 +462,10 @@ downloadURLFromGit() { # $1 git user name, $2 git repo name
fi fi
if [ -n "$archiveName" ]; then if [ -n "$archiveName" ]; then
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \ downloadURL=$(curl --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
| awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }") | awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
else else
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \ downloadURL=$(curl --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
| awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }") | awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
fi fi
if [ -z "$downloadURL" ]; then if [ -z "$downloadURL" ]; then
@@ -483,7 +482,7 @@ versionFromGit() {
gitusername=${1?:"no git user name"} gitusername=${1?:"no git user name"}
gitreponame=${2?:"no git repo name"} gitreponame=${2?:"no git repo name"}
appNewVersion=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g') appNewVersion=$(curl --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g')
if [ -z "$appNewVersion" ]; then if [ -z "$appNewVersion" ]; then
printlog "could not retrieve version number for $gitusername/$gitreponame" WARN printlog "could not retrieve version number for $gitusername/$gitreponame" WARN
appNewVersion="" appNewVersion=""
@@ -751,7 +750,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir
printlog "notifying" printlog "notifying"
displaynotification "$message" "No update for $name!" displaynotification "$message" "No update for $name!"
fi fi
cleanupAndExit 0 "No new version to install" REG cleanupAndExit 0 "No new version to install" WARN
else else
printlog "Using force to install anyway." printlog "Using force to install anyway."
fi fi
@@ -793,7 +792,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir
# remove existing application # remove existing application
if [ -e "$targetDir/$appName" ]; then if [ -e "$targetDir/$appName" ]; then
printlog "Removing existing $targetDir/$appName" WARN printlog "Removing existing $targetDir/$appName" DEBUG
deleteAppOut=$(rm -Rfv "$targetDir/$appName" 2>&1) deleteAppOut=$(rm -Rfv "$targetDir/$appName" 2>&1)
tempName="$targetDir/$appName" tempName="$targetDir/$appName"
tempNameLength=$((${#tempName} + 10)) tempNameLength=$((${#tempName} + 10))
@@ -804,21 +803,16 @@ installAppWithPath() { # $1: path to app to install in $targetDir
# copy app to /Applications # copy app to /Applications
printlog "Copy $appPath to $targetDir" printlog "Copy $appPath to $targetDir"
copyAppOut=$(ditto -v "$appPath" "$targetDir/$appName" 2>&1) if ! ditto "$appPath" "$targetDir/$appName"; then
copyAppStatus=$(echo $?) cleanupAndExit 7 "Error while copying" ERROR
deduplicatelogs "$copyAppOut"
printlog "Debugging enabled, App copy output was:\n$logoutput" DEBUG
if [[ $copyAppStatus -ne 0 ]] ; then
#if ! ditto "$appPath" "$targetDir/$appName"; then
cleanupAndExit 7 "Error while copying:\n$logoutput" ERROR
fi fi
# set ownership to current user # set ownership to current user
if [[ "$currentUser" != "loginwindow" && $SYSTEMOWNER -ne 1 ]]; then if [[ "$currentUser" != "loginwindow" && $SYSTEMOWNER -ne 1 ]]; then
printlog "Changing owner to $currentUser" WARN printlog "Changing owner to $currentUser"
chown -R "$currentUser" "$targetDir/$appName" chown -R "$currentUser" "$targetDir/$appName"
else else
printlog "No user logged in or SYSTEMOWNER=1, setting owner to root:wheel" WARN printlog "No user logged in or SYSTEMOWNER=1, setting owner to root:wheel"
chown -R root:wheel "$targetDir/$appName" chown -R root:wheel "$targetDir/$appName"
fi fi
@@ -916,7 +910,7 @@ installFromPKG() {
printlog "notifying" printlog "notifying"
displaynotification "$message" "No update for $name!" displaynotification "$message" "No update for $name!"
fi fi
cleanupAndExit 0 "No new version to install" REQ cleanupAndExit 0 "No new version to install" WARN
else else
printlog "Using force to install anyway." printlog "Using force to install anyway."
fi fi
@@ -1126,7 +1120,7 @@ finishing() {
message="Installed $name, version $appversion" message="Installed $name, version $appversion"
fi fi
printlog "$message" REQ printlog "$message"
if [[ $currentUser != "loginwindow" && ( $NOTIFY == "success" || $NOTIFY == "all" ) ]]; then if [[ $currentUser != "loginwindow" && ( $NOTIFY == "success" || $NOTIFY == "all" ) ]]; then
printlog "notifying" printlog "notifying"
@@ -1170,7 +1164,7 @@ autoload is-at-least
installedOSversion=$(sw_vers -productVersion) installedOSversion=$(sw_vers -productVersion)
if ! is-at-least 10.14 $installedOSversion; then if ! is-at-least 10.14 $installedOSversion; then
printlog "Installomator requires at least macOS 10.14 Mojave." ERROR printlog "Installomator requires at least macOS 10.14 Mojave."
exit 98 exit 98
fi fi
@@ -1191,7 +1185,7 @@ fi
while [[ -n $1 ]]; do while [[ -n $1 ]]; do
if [[ $1 =~ ".*\=.*" ]]; then if [[ $1 =~ ".*\=.*" ]]; then
# if an argument contains an = character, send it to eval # if an argument contains an = character, send it to eval
printlog "setting variable from argument $1" WARN printlog "setting variable from argument $1" REQ
eval $1 eval $1
else else
# assume it's a label # assume it's a label
@@ -1302,15 +1296,6 @@ valuesfromarguments)
blockingProcesses=( "1Password Extension Helper" "1Password 7" "1Password (Safari)" "1PasswordNativeMessageHost" "1PasswordSafariAppExtension" ) blockingProcesses=( "1Password Extension Helper" "1Password 7" "1Password (Safari)" "1PasswordNativeMessageHost" "1PasswordSafariAppExtension" )
#forcefulQuit=YES #forcefulQuit=YES
;; ;;
1passwordcli)
name="1Password CLI"
type="pkg"
#packageID="com.1password.op"
downloadURL=$(curl -fs https://app-updates.agilebits.com/product_history/CLI | grep -m 1 -i op_apple_universal | cut -d'"' -f 2)
appNewVersion=$(echo $downloadURL | sed -E 's/.*\/[a-zA-Z_]*([0-9.]*)\..*/\1/g')
appCustomVersion(){ /usr/local/bin/op -v }
expectedTeamID="2BUA8C4S2C"
;;
4kvideodownloader) 4kvideodownloader)
name="4K Video Downloader" name="4K Video Downloader"
type="dmg" type="dmg"
@@ -1449,13 +1434,6 @@ amazonchime)
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' )
expectedTeamID="94KV3E626L" expectedTeamID="94KV3E626L"
;; ;;
amazoncorretto8jdk)
name="Amazon Corretto 8 JDK"
type="pkg"
downloadURL="https://corretto.aws/downloads/latest/amazon-corretto-8-x64-macos-jdk.pkg"
appNewVersion=$(curl -s https://raw.githubusercontent.com/corretto/corretto-8/develop/CHANGELOG.md | grep "## Corretto version" | head -n 1 | awk '{ print $4; exit}')
expectedTeamID="94KV3E626L"
;;
amazonworkspaces) amazonworkspaces)
# credit: Isaac Ordonez, Mann consulting (@mannconsulting) # credit: Isaac Ordonez, Mann consulting (@mannconsulting)
name="Workspaces" name="Workspaces"
@@ -1485,10 +1463,10 @@ apparency)
expectedTeamID="936EB786NH" expectedTeamID="936EB786NH"
;; ;;
appcleaner) appcleaner)
# credit: Tadayuki Onishi (@kenchan0130)
name="AppCleaner" name="AppCleaner"
type="zip" type="zip"
downloadURL=$(curl -fs https://freemacsoft.net/appcleaner/Updates.xml | xpath '//rss/channel/item[last()]/enclosure/@url' 2>/dev/null | tr " " "\n" | sort | tail -1 | cut -d '"' -f 2) downloadURL=$(curl -fs https://freemacsoft.net/appcleaner/Updates.xml | xpath '//rss/channel/*/enclosure/@url' 2>/dev/null | tr " " "\n" | sort | tail -1 | cut -d '"' -f 2)
appNewVersion=$(curl -fsL "https://freemacsoft.net/appcleaner/Updates.xml" | xpath '//rss/channel/item[last()]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f 2)
expectedTeamID="X85ZX835W9" expectedTeamID="X85ZX835W9"
;; ;;
applenyfonts) applenyfonts)
@@ -1586,16 +1564,6 @@ authydesktop)
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')" 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" expectedTeamID="9EVH78F4V4"
;; ;;
autodeskfusion360admininstall)
name="Autodesk Fusion 360 Admin Install"
type="pkg"
packageID="com.autodesk.edu.fusion360"
downloadURL="https://dl.appstreaming.autodesk.com/production/installers/Autodesk%20Fusion%20360%20Admin%20Install.pkg"
appNewVersion=$(curl -fs "https://dl.appstreaming.autodesk.com/production/97e6dd95735340d6ad6e222a520454db/73e72ada57b7480280f7a6f4a289729f/full.json" | sed -E 's/.*build-version":"([[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+).*/\1/g')
expectedTeamID="XXKJ396S2Y"
appName="Autodesk Fusion 360.app"
blockingProcesses=( "Autodesk Fusion 360" "Fusion 360" )
;;
autodmg) autodmg)
# credit: Mischa van der Bent (@mischavdbent) # credit: Mischa van der Bent (@mischavdbent)
name="AutoDMG" name="AutoDMG"
@@ -1634,20 +1602,6 @@ awsvpnclient)
expectedTeamID="94KV3E626L" expectedTeamID="94KV3E626L"
appNewVersion=$(curl -is "https://beta2.communitypatch.com/jamf/v1/ba1efae22ae74a9eb4e915c31fef5dd2/patch/AWSVPNClient" | grep currentVersion | tr ',' '\n' | grep currentVersion | cut -d '"' -f 4) appNewVersion=$(curl -is "https://beta2.communitypatch.com/jamf/v1/ba1efae22ae74a9eb4e915c31fef5dd2/patch/AWSVPNClient" | grep currentVersion | tr ',' '\n' | grep currentVersion | cut -d '"' -f 4)
;; ;;
axurerp10)
name="Axure RP 10"
type="dmg"
if [[ $(arch) == "arm64" ]]; then
downloadURL="https://d3uii9pxdigrx1.cloudfront.net/AxureRP-Setup-arm64.dmg"
elif [[ $(arch) == "i386" ]]; then
downloadURL="https://d3uii9pxdigrx1.cloudfront.net/AxureRP-Setup.dmg"
fi
appNewVersion=$( curl -sL https://www.axure.com/release-history | grep -Eo '[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}' -m 1 )
expectedTeamID="HUMW6UU796"
versionKey="CFBundleVersion"
appName="Axure RP 10.app"
blockingProcesses=( "Axure RP 10" )
;;
balenaetcher) balenaetcher)
name="balenaEtcher" name="balenaEtcher"
type="dmg" type="dmg"
@@ -1775,13 +1729,6 @@ cakebrew)
appNewVersion=$( curl -fsL "https://www.cakebrew.com/appcast/profileInfo.php" | xpath '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f 2 ) appNewVersion=$( curl -fsL "https://www.cakebrew.com/appcast/profileInfo.php" | xpath '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f 2 )
expectedTeamID="R85D3K8ATT" expectedTeamID="R85D3K8ATT"
;; ;;
calcservice)
name="CalcService"
type="zip"
downloadURL="$(curl -fs -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" "https://www.devontechnologies.com/support/download" | tr '"' "\n" | grep -o "http.*download.*.zip" | grep -i calcservice | head -1)"
appNewVersion="$(echo $downloadURL | sed -E 's/.*\/([0-9.]*)\/.*/\1/g')"
expectedTeamID="679S2QUWR8"
;;
calibre) calibre)
# credit: Drew Diver (@grumpydrew on MacAdmins Slack) # credit: Drew Diver (@grumpydrew on MacAdmins Slack)
name="calibre" name="calibre"
@@ -1856,13 +1803,6 @@ 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"
;; ;;
clipy)
name="Clipy"
type="dmg"
downloadURL=$(downloadURLFromGit Clipy Clipy)
appNewVersion=$(versionFromGit Clipy Clipy)
expectedTeamID="BBCHAJ584H"
;;
closeio) closeio)
name="Close.io" name="Close.io"
type="dmg" type="dmg"
@@ -2009,13 +1949,12 @@ 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"
;; ;;
dialog|\ dialog)
swiftdialog)
name="Dialog" name="Dialog"
type="pkg" type="pkg"
packageID="au.csiro.dialogcli" packageID="au.csiro.dialogcli"
downloadURL="$(downloadURLFromGit bartreardon swiftDialog)" downloadURL="$(downloadURLFromGit bartreardon Dialog)"
appNewVersion="$(versionFromGit bartreardon swiftDialog)" appNewVersion="$(versionFromGit bartreardon Dialog)"
expectedTeamID="PWA5E9TQ59" expectedTeamID="PWA5E9TQ59"
;; ;;
dialpad) dialpad)
@@ -2051,15 +1990,6 @@ docker)
fi fi
expectedTeamID="9BNSXJN65R" expectedTeamID="9BNSXJN65R"
;; ;;
dockutil)
name="dockutil"
type="pkg"
packageID="dockutil.cli.tool"
downloadURL=$(downloadURLFromGit "kcrawford" "dockutil")
appNewVersion=$(versionFromGit "kcrawford" "dockutil")
expectedTeamID="Z5J8CJBUWC"
blockingProcesses=( NONE )
;;
drift) drift)
# credit Elena Ackley (@elenaelago) # credit Elena Ackley (@elenaelago)
name="Drift" name="Drift"
@@ -2081,13 +2011,6 @@ easeusdatarecoverywizard)
#appNewVersion="" #appNewVersion=""
expectedTeamID="DLLVW95FSM" expectedTeamID="DLLVW95FSM"
;; ;;
easyfind)
name="EasyFind"
type="zip"
downloadURL="$(curl -fs "https://www.devontechnologies.com/apps/freeware" | grep -o "http.*download.*.zip" | grep -i easyfind)"
appNewVersion="$(echo $downloadURL | sed -E 's/.*\/([0-9.]*)\/.*/\1/g')"
expectedTeamID="679S2QUWR8"
;;
egnyte) egnyte)
# credit: #MoeMunyoki from MacAdmins Slack # credit: #MoeMunyoki from MacAdmins Slack
name="Egnyte Connect" name="Egnyte Connect"
@@ -2343,8 +2266,15 @@ golang)
googlechrome) googlechrome)
name="Google Chrome" name="Google Chrome"
type="dmg" type="dmg"
downloadURL="https://dl.google.com/chrome/mac/universal/stable/GGRO/googlechrome.dmg" if [[ $(arch) != "i386" ]]; then
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}') 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}')
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}')
fi
expectedTeamID="EQHXZ8M8AV" expectedTeamID="EQHXZ8M8AV"
;; ;;
googlechromepkg) googlechromepkg)
@@ -2423,15 +2353,6 @@ gpgsync)
appNewVersion="$(versionFromGit firstlookmedia gpgsync)" appNewVersion="$(versionFromGit firstlookmedia gpgsync)"
expectedTeamID="P24U45L8P5" expectedTeamID="P24U45L8P5"
;; ;;
grammarly)
name="Grammarly Desktop"
type="dmg"
packageID="com.grammarly.ProjectLlama"
downloadURL=$(curl -fsL "https://download-mac.grammarly.com/appcast.xml" | xpath '//rss/channel/item[1]/enclosure/@url' 2>/dev/null | cut -d '"' -f 2)
expectedTeamID="W8F64X92K3"
appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4)
appName="Grammarly Installer.app"
;;
grandperspective) grandperspective)
name="GrandPerspective" name="GrandPerspective"
type="dmg" type="dmg"
@@ -2486,13 +2407,6 @@ hazel)
appNewVersion=$(curl -fsI https://www.noodlesoft.com/Products/Hazel/download | grep -i "^location" | awk '{print $2}' | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g') appNewVersion=$(curl -fsI https://www.noodlesoft.com/Products/Hazel/download | grep -i "^location" | awk '{print $2}' | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g')
expectedTeamID="86Z3GCJ4MF" expectedTeamID="86Z3GCJ4MF"
;; ;;
houdahspot)
name="HoudahSpot"
type="zip"
downloadURL="$(curl -fs https://www.houdah.com/houdahSpot/updates/cast6.php | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
appNewVersion="$(curl -fs https://www.houdah.com/houdahSpot/updates/cast6.php | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
expectedTeamID="DKGQD8H8ZY"
;;
hpeasyadmin) hpeasyadmin)
# credit: Søren Theilgaard (@theilgaard) # credit: Søren Theilgaard (@theilgaard)
name="HP Easy Admin" name="HP Easy Admin"
@@ -2934,15 +2848,6 @@ lulu)
appNewVersion=$(versionFromGit objective-see LuLu) appNewVersion=$(versionFromGit objective-see LuLu)
expectedTeamID="VBG97UB4TA" expectedTeamID="VBG97UB4TA"
;; ;;
macadminspython)
name="MacAdmins Python"
type="pkg"
packageID="org.macadmins.python.recommended"
downloadURL=$(curl --silent --fail "https://api.github.com/repos/macadmins/python/releases/latest" | awk -F '"' "/browser_download_url/ && /python_recommended_signed/ { print \$4; exit }")
appNewVersion=$(grep -o -E '\d+\.\d+\.\d+\.\d+' <<< $downloadURL | head -n 1)
expectedTeamID="9GQZ7KUFR6"
blockingProcesses=( NONE )
;;
maccyapp) maccyapp)
name="Maccy" name="Maccy"
type="zip" type="zip"
@@ -3039,16 +2944,6 @@ 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 )
;; ;;
microsoftazuredatastudio|\
azuredatastudio)
name="Azure Data Studio"
type="zip"
downloadURL=$( curl -sL https://github.com/microsoft/azuredatastudio/releases/latest | grep 'macOS ZIP' | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" )
appNewVersion=$(versionFromGit microsoft azuredatastudio )
expectedTeamID="UBF8T346G9"
appName="Azure Data Studio.app"
blockingProcesses=( "Azure Data Studio" )
;;
microsoftazurestorageexplorer) microsoftazurestorageexplorer)
name="Microsoft Azure Storage Explorer" name="Microsoft Azure Storage Explorer"
type="zip" type="zip"
@@ -3071,9 +2966,8 @@ microsoftcompanyportal)
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 IMCP01 ) updateToolArguments=( --install --apps IMCP01 )
;; ;;
microsoftdefender|\
microsoftdefenderatp) microsoftdefenderatp)
name="Microsoft Defender" name="Microsoft Defender ATP"
type="pkg" type="pkg"
downloadURL="https://go.microsoft.com/fwlink/?linkid=2097502" downloadURL="https://go.microsoft.com/fwlink/?linkid=2097502"
appNewVersion=$(curl -fs https://macadmins.software/latest.xml | xpath '//latest/package[id="com.microsoft.defender.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.defender.standalone"]/version' 2>/dev/null | sed -E 's/<version>([0-9.]*) .*/\1/')
@@ -3423,13 +3317,6 @@ muzzle)
appNewVersion=$(curl -fs https://muzzleapp.com/updates/ | grep -io 'h2.*Version.* [0-9.]*.*h2' | head -1 | sed -E 's/.*ersion *([0-9.]*).*/\1/g') 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" expectedTeamID="49EYHPJ4Q3"
;; ;;
nanosaur)
name="Nanosaur"
type="dmg"
downloadURL=$(downloadURLFromGit jorio Nanosaur)
appNewVersion=$(versionFromGit jorio Nanosaur)
expectedTeamID="RVNL7XC27G"
;;
netnewswire) netnewswire)
name="NetNewsWire" name="NetNewsWire"
type="zip" type="zip"
@@ -4177,14 +4064,13 @@ superhuman)
expectedTeamID="6XHFYUTQGX" expectedTeamID="6XHFYUTQGX"
;; ;;
supportapp) supportapp)
# credit: Søren Theilgaard (@theilgaard)
name="Support" name="Support"
type="pkg" type="pkg"
packageID="nl.root3.support" packageID="nl.root3.support"
downloadURL=$(downloadURLFromGit root3nl SupportApp) downloadURL=$(downloadURLFromGit root3nl SupportApp)
appNewVersion=$(versionFromGit root3nl SupportApp) appNewVersion=$(versionFromGit root3nl SupportApp)
expectedTeamID="98LJ4XBGYK" expectedTeamID="98LJ4XBGYK"
uid=$(id -u "$currentUser")
launchctl bootout gui/${uid} "/Library/LaunchAgents/nl.root3.support.plist"
;; ;;
suspiciouspackage) suspiciouspackage)
# credit: Mischa van der Bent (@mischavdbent) # credit: Mischa van der Bent (@mischavdbent)
@@ -4292,13 +4178,6 @@ telegram)
appNewVersion=$( curl -fs https://macos.telegram.org | grep anchor | head -1 | sed -E 's/.*a>([0-9.]*) .*/\1/g' ) appNewVersion=$( curl -fs https://macos.telegram.org | grep anchor | head -1 | sed -E 's/.*a>([0-9.]*) .*/\1/g' )
expectedTeamID="6N38VWS5BX" expectedTeamID="6N38VWS5BX"
;; ;;
tembo)
name="Tembo"
type="zip"
downloadURL="$(curl -fs https://www.houdah.com/tembo/updates/cast2.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
appNewVersion="$(curl -fs https://www.houdah.com/tembo/updates/cast2.xml | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
expectedTeamID="DKGQD8H8ZY"
;;
textexpander) textexpander)
name="TextExpander" name="TextExpander"
type="dmg" type="dmg"
@@ -4574,14 +4453,6 @@ wireshark)
appNewVersion=$(curl -fs https://www.wireshark.org/download.html | grep -i "href.*_stable" | sed -E 's/.*\(([0-9.]*)\).*/\1/g') appNewVersion=$(curl -fs https://www.wireshark.org/download.html | grep -i "href.*_stable" | sed -E 's/.*\(([0-9.]*)\).*/\1/g')
expectedTeamID="7Z6EMTD2C6" expectedTeamID="7Z6EMTD2C6"
;; ;;
wordservice)
name="WordService"
type="zip"
downloadURL="$(curl -fs -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" "https://www.devontechnologies.com/support/download" | tr '"' "\n" | grep -o "http.*download.*.zip" | grep -i wordservice | head -1)"
appNewVersion="$(echo $downloadURL | sed -E 's/.*\/([0-9.]*)\/.*/\1/g')"
appNewVersion=""
expectedTeamID="679S2QUWR8"
;;
wwdc) wwdc)
# credit: Søren Theilgaard (@theilgaard) # credit: Søren Theilgaard (@theilgaard)
name="WWDC" name="WWDC"
@@ -4604,14 +4475,6 @@ xink)
appNewVersion=$(curl -fs "https://downloads.xink.io/macos/appcast" | xpath '(//rss/channel/item/enclosure/@sparkle:version)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2) appNewVersion=$(curl -fs "https://downloads.xink.io/macos/appcast" | xpath '(//rss/channel/item/enclosure/@sparkle:version)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)
expectedTeamID="F287823HVS" expectedTeamID="F287823HVS"
;; ;;
xmenu)
name="XMenu"
type="zip"
downloadURL="$(curl -fs "https://www.devontechnologies.com/apps/freeware" | grep -o "http.*download.*.zip" | grep -i xmenu)"
appNewVersion="$(echo $downloadURL | sed -E 's/.*\/([0-9.]*)\/.*/\1/g')"
expectedTeamID="679S2QUWR8"
;;
xquartz) xquartz)
# credit: AP Orlebeke (@apizz) # credit: AP Orlebeke (@apizz)
name="XQuartz" name="XQuartz"
@@ -4677,7 +4540,6 @@ zoom)
downloadURL="https://zoom.us/client/latest/ZoomInstallerIT.pkg" downloadURL="https://zoom.us/client/latest/ZoomInstallerIT.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"
versionKey="CFBundleVersion"
;; ;;
zoomclient) zoomclient)
name="zoom.us" name="zoom.us"
@@ -4699,7 +4561,6 @@ zoomgov)
downloadURL="https://www.zoomgov.com/client/latest/ZoomInstallerIT.pkg" downloadURL="https://www.zoomgov.com/client/latest/ZoomInstallerIT.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"
versionKey="CFBundleVersion"
;; ;;
zoomrooms) zoomrooms)
name="ZoomRooms" name="ZoomRooms"
@@ -4832,11 +4693,6 @@ case $LOGO in
LOGO="/Library/Addigy/macmanage/MacManage.app/Contents/Resources/atom.icns" LOGO="/Library/Addigy/macmanage/MacManage.app/Contents/Resources/atom.icns"
if [[ -z $MDMProfileName ]]; then; MDMProfileName="MDM Profile"; fi if [[ -z $MDMProfileName ]]; then; MDMProfileName="MDM Profile"; fi
;; ;;
microsoft)
# Microsoft Endpoint Manager (Intune)
LOGO="/Library/Intune/Microsoft Intune Agent.app/Contents/Resources/AppIcon.icns"
if [[ -z $MDMProfileName ]]; then; MDMProfileName="Management Profile"; fi
;;
esac esac
if [[ ! -a "${LOGO}" ]]; then if [[ ! -a "${LOGO}" ]]; then
if [[ $(sw_vers -buildVersion) > "19" ]]; then if [[ $(sw_vers -buildVersion) > "19" ]]; then
@@ -4932,7 +4788,7 @@ if [[ -n $appNewVersion ]]; then
printlog "notifying" printlog "notifying"
displaynotification "$message" "No update for $name!" displaynotification "$message" "No update for $name!"
fi fi
cleanupAndExit 0 "No newer version." REQ cleanupAndExit 0 "No newer version." WARN
fi fi
else else
printlog "DEBUG mode 1 enabled, not exiting, but there is no new version of app." WARN printlog "DEBUG mode 1 enabled, not exiting, but there is no new version of app." WARN
@@ -4948,9 +4804,10 @@ if [[ (-n $appversion && -n "$updateTool") || "$type" == "updateronly" ]]; then
if [[ $DEBUG -ne 1 ]]; then if [[ $DEBUG -ne 1 ]]; then
if runUpdateTool; then if runUpdateTool; then
finishing finishing
cleanupAndExit 0 "updateTool has run" REQ cleanupAndExit 0
elif [[ $type == "updateronly" ]];then elif [[ $type == "updateronly" ]];then
cleanupAndExit 0 "type is $type so we end here." REQ printlog "type is $type so we end here."
cleanupAndExit 0
fi # otherwise continue fi # otherwise continue
else else
printlog "DEBUG mode 1 enabled, not running update tool" WARN printlog "DEBUG mode 1 enabled, not running update tool" WARN
@@ -5056,4 +4913,4 @@ esac
finishing finishing
# all done! # all done!
cleanupAndExit 0 "All done!" REQ cleanupAndExit 0

View File

@@ -1,5 +1,4 @@
1password7 1password7
1passwordcli
4kvideodownloader 4kvideodownloader
8x8 8x8
abstract abstract
@@ -17,7 +16,6 @@ alephone
alfred alfred
alttab alttab
amazonchime amazonchime
amazoncorretto8jdk
amazonworkspaces amazonworkspaces
androidfiletransfer androidfiletransfer
anydesk anydesk
@@ -36,14 +34,11 @@ atext
atom atom
audacity audacity
authydesktop authydesktop
autodeskfusion360admininstall
autodmg autodmg
autopkgr autopkgr
aviatrix aviatrix
awscli2 awscli2
awsvpnclient awsvpnclient
axurerp10
azuredatastudio
balenaetcher balenaetcher
balsamiqwireframes balsamiqwireframes
bartender bartender
@@ -60,7 +55,6 @@ brave
bugdom bugdom
caffeine caffeine
cakebrew cakebrew
calcservice
calibre calibre
camostudio camostudio
camtasia camtasia
@@ -70,7 +64,6 @@ cisdem-documentreader
citrixworkspace citrixworkspace
clevershare2 clevershare2
clickshare clickshare
clipy
closeio closeio
cloudya cloudya
code42 code42
@@ -95,11 +88,9 @@ dialpad
discord discord
diskspace diskspace
docker docker
dockutil
drift drift
dropbox dropbox
easeusdatarecoverywizard easeusdatarecoverywizard
easyfind
egnyte egnyte
element element
eraseinstall eraseinstall
@@ -139,7 +130,6 @@ googlesoftwareupdate
gotomeeting gotomeeting
gpgsuite gpgsuite
gpgsync gpgsync
grammarly
grandperspective grandperspective
grasshopper grasshopper
gyazo gyazo
@@ -147,7 +137,6 @@ gyazogif
hancock hancock
handbrake handbrake
hazel hazel
houdahspot
hpeasyadmin hpeasyadmin
hpeasystart hpeasystart
hyper hyper
@@ -198,7 +187,6 @@ loom
lowprofile lowprofile
lucifer lucifer
lulu lulu
macadminspython
maccyapp maccyapp
macfuse macfuse
macports macports
@@ -209,10 +197,8 @@ marathoninfinity
mattermost mattermost
menumeters menumeters
microsoftautoupdate microsoftautoupdate
microsoftazuredatastudio
microsoftazurestorageexplorer microsoftazurestorageexplorer
microsoftcompanyportal microsoftcompanyportal
microsoftdefender
microsoftdefenderatp microsoftdefenderatp
microsoftedge microsoftedge
microsoftedgeconsumerstable microsoftedgeconsumerstable
@@ -243,7 +229,6 @@ montereyblocker
mowgliiitsycal mowgliiitsycal
musescore musescore
muzzle muzzle
nanosaur
netnewswire netnewswire
nextcloud nextcloud
nomad nomad
@@ -350,7 +335,6 @@ sublimetext
superhuman superhuman
supportapp supportapp
suspiciouspackage suspiciouspackage
swiftdialog
swiftruntimeforcommandlinetools swiftruntimeforcommandlinetools
sync sync
tableaudesktop tableaudesktop
@@ -364,7 +348,6 @@ teamviewerhost
teamviewerqs teamviewerqs
techsmithcapture techsmithcapture
telegram telegram
tembo
textexpander textexpander
textmate textmate
theunarchiver theunarchiver
@@ -402,11 +385,9 @@ whatsapp
wickrme wickrme
wickrpro wickrpro
wireshark wireshark
wordservice
wwdc wwdc
xeroxphaser7800 xeroxphaser7800
xink xink
xmenu
xquartz xquartz
yed yed
yubikeymanagerqt yubikeymanagerqt

View File

@@ -12,7 +12,7 @@ We have put a lot of work into making it stable and safe, but we cannot - of cou
## Authors ## Authors
Intallomator was originally inspired by the download scripts from William Smith and Sander Schram, and created by: Intallomator was original inspired by the download scripts from William Smith and Sander Schram, and created by:
Armin Briegel - @scriptingosx Armin Briegel - @scriptingosx
Later on a few more contributers came on the project: Later on a few more contributers came on the project:

View File

@@ -3,7 +3,7 @@ autoload is-at-least
installedOSversion=$(sw_vers -productVersion) installedOSversion=$(sw_vers -productVersion)
if ! is-at-least 10.14 $installedOSversion; then if ! is-at-least 10.14 $installedOSversion; then
printlog "Installomator requires at least macOS 10.14 Mojave." ERROR printlog "Installomator requires at least macOS 10.14 Mojave."
exit 98 exit 98
fi fi
@@ -24,7 +24,7 @@ fi
while [[ -n $1 ]]; do while [[ -n $1 ]]; do
if [[ $1 =~ ".*\=.*" ]]; then if [[ $1 =~ ".*\=.*" ]]; then
# if an argument contains an = character, send it to eval # if an argument contains an = character, send it to eval
printlog "setting variable from argument $1" WARN printlog "setting variable from argument $1" REQ
eval $1 eval $1
else else
# assume it's a label # assume it's a label

View File

@@ -156,10 +156,10 @@ downloadURLFromGit() { # $1 git user name, $2 git repo name
fi fi
if [ -n "$archiveName" ]; then if [ -n "$archiveName" ]; then
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \ downloadURL=$(curl --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
| awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }") | awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
else else
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \ downloadURL=$(curl --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
| awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }") | awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
fi fi
if [ -z "$downloadURL" ]; then if [ -z "$downloadURL" ]; then
@@ -176,7 +176,7 @@ versionFromGit() {
gitusername=${1?:"no git user name"} gitusername=${1?:"no git user name"}
gitreponame=${2?:"no git repo name"} gitreponame=${2?:"no git repo name"}
appNewVersion=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g') appNewVersion=$(curl --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g')
if [ -z "$appNewVersion" ]; then if [ -z "$appNewVersion" ]; then
printlog "could not retrieve version number for $gitusername/$gitreponame" WARN printlog "could not retrieve version number for $gitusername/$gitreponame" WARN
appNewVersion="" appNewVersion=""
@@ -242,8 +242,12 @@ getAppVersion() {
# printlog "App(s) found: ${applist}" DEBUG # printlog "App(s) found: ${applist}" DEBUG
# applist=$(mdfind "kind:application AND name:$appName" -0 ) # applist=$(mdfind "kind:application AND name:$appName" -0 )
fi fi
if [[ -z applist ]]; then if [[ -z $applist ]]; then
printlog "No previous app found" INFO if [[ $SKIP_UNINSTALLED -eq 1 ]]; then
cleanupAndExit 0 "No previous app found, and SKIP_UNINSTALLED=1." REQ
else
printlog "No previous app found" WARN
fi
else else
printlog "App(s) found: ${applist}" INFO printlog "App(s) found: ${applist}" INFO
fi fi
@@ -265,7 +269,7 @@ getAppVersion() {
if [[ -d "$installedAppPath"/Contents/_MASReceipt ]];then if [[ -d "$installedAppPath"/Contents/_MASReceipt ]];then
printlog "Installed $appName is from App Store, use “IGNORE_APP_STORE_APPS=yes” to replace." printlog "Installed $appName is from App Store, use “IGNORE_APP_STORE_APPS=yes” to replace."
if [[ $IGNORE_APP_STORE_APPS == "yes" ]]; then if [[ $IGNORE_APP_STORE_APPS == "yes" ]]; then
printlog "Replacing App Store apps, no matter the version" printlog "Replacing App Store apps, no matter the version" WARN
appversion=0 appversion=0
else else
cleanupAndExit 1 "App previously installed from App Store, and we respect that" ERROR cleanupAndExit 1 "App previously installed from App Store, and we respect that" ERROR
@@ -444,7 +448,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir
printlog "notifying" printlog "notifying"
displaynotification "$message" "No update for $name!" displaynotification "$message" "No update for $name!"
fi fi
cleanupAndExit 0 "No new version to install" REG cleanupAndExit 0 "No new version to install" WARN
else else
printlog "Using force to install anyway." printlog "Using force to install anyway."
fi fi
@@ -486,7 +490,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir
# remove existing application # remove existing application
if [ -e "$targetDir/$appName" ]; then if [ -e "$targetDir/$appName" ]; then
printlog "Removing existing $targetDir/$appName" WARN printlog "Removing existing $targetDir/$appName" DEBUG
deleteAppOut=$(rm -Rfv "$targetDir/$appName" 2>&1) deleteAppOut=$(rm -Rfv "$targetDir/$appName" 2>&1)
tempName="$targetDir/$appName" tempName="$targetDir/$appName"
tempNameLength=$((${#tempName} + 10)) tempNameLength=$((${#tempName} + 10))
@@ -497,21 +501,16 @@ installAppWithPath() { # $1: path to app to install in $targetDir
# copy app to /Applications # copy app to /Applications
printlog "Copy $appPath to $targetDir" printlog "Copy $appPath to $targetDir"
copyAppOut=$(ditto -v "$appPath" "$targetDir/$appName" 2>&1) if ! ditto "$appPath" "$targetDir/$appName"; then
copyAppStatus=$(echo $?) cleanupAndExit 7 "Error while copying" ERROR
deduplicatelogs "$copyAppOut"
printlog "Debugging enabled, App copy output was:\n$logoutput" DEBUG
if [[ $copyAppStatus -ne 0 ]] ; then
#if ! ditto "$appPath" "$targetDir/$appName"; then
cleanupAndExit 7 "Error while copying:\n$logoutput" ERROR
fi fi
# set ownership to current user # set ownership to current user
if [[ "$currentUser" != "loginwindow" && $SYSTEMOWNER -ne 1 ]]; then if [[ "$currentUser" != "loginwindow" && $SYSTEMOWNER -ne 1 ]]; then
printlog "Changing owner to $currentUser" WARN printlog "Changing owner to $currentUser"
chown -R "$currentUser" "$targetDir/$appName" chown -R "$currentUser" "$targetDir/$appName"
else else
printlog "No user logged in or SYSTEMOWNER=1, setting owner to root:wheel" WARN printlog "No user logged in or SYSTEMOWNER=1, setting owner to root:wheel"
chown -R root:wheel "$targetDir/$appName" chown -R root:wheel "$targetDir/$appName"
fi fi
@@ -609,7 +608,7 @@ installFromPKG() {
printlog "notifying" printlog "notifying"
displaynotification "$message" "No update for $name!" displaynotification "$message" "No update for $name!"
fi fi
cleanupAndExit 0 "No new version to install" REQ cleanupAndExit 0 "No new version to install" WARN
else else
printlog "Using force to install anyway." printlog "Using force to install anyway."
fi fi
@@ -819,7 +818,7 @@ finishing() {
message="Installed $name, version $appversion" message="Installed $name, version $appversion"
fi fi
printlog "$message" REQ printlog "$message"
if [[ $currentUser != "loginwindow" && ( $NOTIFY == "success" || $NOTIFY == "all" ) ]]; then if [[ $currentUser != "loginwindow" && ( $NOTIFY == "success" || $NOTIFY == "all" ) ]]; then
printlog "notifying" printlog "notifying"

View File

@@ -80,7 +80,6 @@ LOGO=appstore
# - mosyleb Mosyle Business # - mosyleb Mosyle Business
# - mosylem Mosyle Manager (Education) # - mosylem Mosyle Manager (Education)
# - addigy Addigy # - addigy Addigy
# - microsoft Microsoft Endpoint Manager (Intune)
# path can also be set in the command call, and if file exists, it will be used. # 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"' # Like 'LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"'
# (spaces have to be escaped). # (spaces have to be escaped).
@@ -111,6 +110,13 @@ INSTALL=""
# if it is newer/different in version # if it is newer/different in version
# - force Install even if its the same version # - force Install even if its the same version
# skip if app is not currently installed
SKIP_UNINSTALLED=0
# options:
# - 0 Run normally and install the app if other conditions are met.
# - 1 If app is not currently installed we will not install anything.
# This is mostly done in the getAppVersion function, and if it cannot
# locate the app, the script will exit.
# Re-opening of closed app # Re-opening of closed app
REOPEN="yes" REOPEN="yes"

View File

@@ -1,9 +0,0 @@
1passwordcli)
name="1Password CLI"
type="pkg"
#packageID="com.1password.op"
downloadURL=$(curl -fs https://app-updates.agilebits.com/product_history/CLI | grep -m 1 -i op_apple_universal | cut -d'"' -f 2)
appNewVersion=$(echo $downloadURL | sed -E 's/.*\/[a-zA-Z_]*([0-9.]*)\..*/\1/g')
appCustomVersion(){ /usr/local/bin/op -v }
expectedTeamID="2BUA8C4S2C"
;;

View File

@@ -1,7 +0,0 @@
amazoncorretto8jdk)
name="Amazon Corretto 8 JDK"
type="pkg"
downloadURL="https://corretto.aws/downloads/latest/amazon-corretto-8-x64-macos-jdk.pkg"
appNewVersion=$(curl -s https://raw.githubusercontent.com/corretto/corretto-8/develop/CHANGELOG.md | grep "## Corretto version" | head -n 1 | awk '{ print $4; exit}')
expectedTeamID="94KV3E626L"
;;

View File

@@ -1,7 +1,7 @@
appcleaner) appcleaner)
# credit: Tadayuki Onishi (@kenchan0130)
name="AppCleaner" name="AppCleaner"
type="zip" type="zip"
downloadURL=$(curl -fs https://freemacsoft.net/appcleaner/Updates.xml | xpath '//rss/channel/item[last()]/enclosure/@url' 2>/dev/null | tr " " "\n" | sort | tail -1 | cut -d '"' -f 2) downloadURL=$(curl -fs https://freemacsoft.net/appcleaner/Updates.xml | xpath '//rss/channel/*/enclosure/@url' 2>/dev/null | tr " " "\n" | sort | tail -1 | cut -d '"' -f 2)
appNewVersion=$(curl -fsL "https://freemacsoft.net/appcleaner/Updates.xml" | xpath '//rss/channel/item[last()]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f 2)
expectedTeamID="X85ZX835W9" expectedTeamID="X85ZX835W9"
;; ;;

View File

@@ -1,10 +0,0 @@
autodeskfusion360admininstall)
name="Autodesk Fusion 360 Admin Install"
type="pkg"
packageID="com.autodesk.edu.fusion360"
downloadURL="https://dl.appstreaming.autodesk.com/production/installers/Autodesk%20Fusion%20360%20Admin%20Install.pkg"
appNewVersion=$(curl -fs "https://dl.appstreaming.autodesk.com/production/97e6dd95735340d6ad6e222a520454db/73e72ada57b7480280f7a6f4a289729f/full.json" | sed -E 's/.*build-version":"([[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+).*/\1/g')
expectedTeamID="XXKJ396S2Y"
appName="Autodesk Fusion 360.app"
blockingProcesses=( "Autodesk Fusion 360" "Fusion 360" )
;;

View File

@@ -1,14 +0,0 @@
axurerp10)
name="Axure RP 10"
type="dmg"
if [[ $(arch) == "arm64" ]]; then
downloadURL="https://d3uii9pxdigrx1.cloudfront.net/AxureRP-Setup-arm64.dmg"
elif [[ $(arch) == "i386" ]]; then
downloadURL="https://d3uii9pxdigrx1.cloudfront.net/AxureRP-Setup.dmg"
fi
appNewVersion=$( curl -sL https://www.axure.com/release-history | grep -Eo '[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}' -m 1 )
expectedTeamID="HUMW6UU796"
versionKey="CFBundleVersion"
appName="Axure RP 10.app"
blockingProcesses=( "Axure RP 10" )
;;

View File

@@ -1,7 +0,0 @@
calcservice)
name="CalcService"
type="zip"
downloadURL="$(curl -fs -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" "https://www.devontechnologies.com/support/download" | tr '"' "\n" | grep -o "http.*download.*.zip" | grep -i calcservice | head -1)"
appNewVersion="$(echo $downloadURL | sed -E 's/.*\/([0-9.]*)\/.*/\1/g')"
expectedTeamID="679S2QUWR8"
;;

View File

@@ -1,7 +0,0 @@
clipy)
name="Clipy"
type="dmg"
downloadURL=$(downloadURLFromGit Clipy Clipy)
appNewVersion=$(versionFromGit Clipy Clipy)
expectedTeamID="BBCHAJ584H"
;;

View File

@@ -1,13 +1,7 @@
dbeaverce) dbeaverce)
name="DBeaver" name="DBeaver"
type="dmg" type="dmg"
if [[ $(arch) == "arm64" ]]; then downloadURL="https://dbeaver.io/files/dbeaver-ce-latest-macos.dmg"
downloadURL="https://dbeaver.io/files/dbeaver-ce-latest-macos-aarch64.dmg"
appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i ^location | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' | head -1)"
elif [[ $(arch) == "i386" ]]; then
downloadURL="https://dbeaver.io/files/dbeaver-ce-latest-macos.dmg"
appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i ^location | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' | head -1)"
fi
expectedTeamID="42B6MDKMW8" expectedTeamID="42B6MDKMW8"
blockingProcesses=( dbeaver ) blockingProcesses=( dbeaver )
;; ;;

View File

@@ -1,9 +1,8 @@
dialog|\ dialog)
swiftdialog)
name="Dialog" name="Dialog"
type="pkg" type="pkg"
packageID="au.csiro.dialogcli" packageID="au.csiro.dialogcli"
downloadURL="$(downloadURLFromGit bartreardon swiftDialog)" downloadURL="$(downloadURLFromGit bartreardon Dialog)"
appNewVersion="$(versionFromGit bartreardon swiftDialog)" appNewVersion="$(versionFromGit bartreardon Dialog)"
expectedTeamID="PWA5E9TQ59" expectedTeamID="PWA5E9TQ59"
;; ;;

View File

@@ -1,9 +0,0 @@
dockutil)
name="dockutil"
type="pkg"
packageID="dockutil.cli.tool"
downloadURL=$(downloadURLFromGit "kcrawford" "dockutil")
appNewVersion=$(versionFromGit "kcrawford" "dockutil")
expectedTeamID="Z5J8CJBUWC"
blockingProcesses=( NONE )
;;

View File

@@ -1,7 +0,0 @@
easyfind)
name="EasyFind"
type="zip"
downloadURL="$(curl -fs "https://www.devontechnologies.com/apps/freeware" | grep -o "http.*download.*.zip" | grep -i easyfind)"
appNewVersion="$(echo $downloadURL | sed -E 's/.*\/([0-9.]*)\/.*/\1/g')"
expectedTeamID="679S2QUWR8"
;;

View File

@@ -1,9 +0,0 @@
forticlient_ztna)
name="FortiClient ZTNA"
type="pkgInDmg"
pkgName="Install.mpkg"
packageID="com.fortinet.forticlient."
downloadURL="https://links.fortinet.com/forticlient/mac/fabricagent"
appNewVersion="$(curl -fsL "$downloadURL" --remote-header-name --remote-name -w "%{url_effective}\n" -r 0-0 | cut -d "_" -f2)"
expectedTeamID="AH4XFXJ7DK"
;;

View File

@@ -1,7 +1,14 @@
googlechrome) googlechrome)
name="Google Chrome" name="Google Chrome"
type="dmg" type="dmg"
downloadURL="https://dl.google.com/chrome/mac/universal/stable/GGRO/googlechrome.dmg" if [[ $(arch) != "i386" ]]; then
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}') 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}')
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}')
fi
expectedTeamID="EQHXZ8M8AV" expectedTeamID="EQHXZ8M8AV"
;; ;;

View File

@@ -1,9 +0,0 @@
grammarly)
name="Grammarly Desktop"
type="dmg"
packageID="com.grammarly.ProjectLlama"
downloadURL=$(curl -fsL "https://download-mac.grammarly.com/appcast.xml" | xpath '//rss/channel/item[1]/enclosure/@url' 2>/dev/null | cut -d '"' -f 2)
expectedTeamID="W8F64X92K3"
appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4)
appName="Grammarly Installer.app"
;;

View File

@@ -1,7 +0,0 @@
houdahspot)
name="HoudahSpot"
type="zip"
downloadURL="$(curl -fs https://www.houdah.com/houdahSpot/updates/cast6.php | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
appNewVersion="$(curl -fs https://www.houdah.com/houdahSpot/updates/cast6.php | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
expectedTeamID="DKGQD8H8ZY"
;;

View File

@@ -1,9 +0,0 @@
macadminspython)
name="MacAdmins Python"
type="pkg"
packageID="org.macadmins.python.recommended"
downloadURL=$(curl --silent --fail "https://api.github.com/repos/macadmins/python/releases/latest" | awk -F '"' "/browser_download_url/ && /python_recommended_signed/ { print \$4; exit }")
appNewVersion=$(grep -o -E '\d+\.\d+\.\d+\.\d+' <<< $downloadURL | head -n 1)
expectedTeamID="9GQZ7KUFR6"
blockingProcesses=( NONE )
;;

View File

@@ -1,10 +0,0 @@
microsoftazuredatastudio|\
azuredatastudio)
name="Azure Data Studio"
type="zip"
downloadURL=$( curl -sL https://github.com/microsoft/azuredatastudio/releases/latest | grep 'macOS ZIP' | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" )
appNewVersion=$(versionFromGit microsoft azuredatastudio )
expectedTeamID="UBF8T346G9"
appName="Azure Data Studio.app"
blockingProcesses=( "Azure Data Studio" )
;;

View File

@@ -1,6 +1,5 @@
microsoftdefender|\
microsoftdefenderatp) microsoftdefenderatp)
name="Microsoft Defender" name="Microsoft Defender ATP"
type="pkg" type="pkg"
downloadURL="https://go.microsoft.com/fwlink/?linkid=2097502" downloadURL="https://go.microsoft.com/fwlink/?linkid=2097502"
appNewVersion=$(curl -fs https://macadmins.software/latest.xml | xpath '//latest/package[id="com.microsoft.defender.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.defender.standalone"]/version' 2>/dev/null | sed -E 's/<version>([0-9.]*) .*/\1/')

View File

@@ -1,9 +0,0 @@
propresenter7)
name="ProPresenter 7"
appName="ProPresenter.app"
type="zip"
blockingProcesses="ProPresenter"
downloadURL=$(curl -s "https://api.renewedvision.com/v1/pro/upgrade?platform=macos&osVersion=12&appVersion=771&buildNumber=117899527&includeNotes=false" | grep -Eo '"downloadUrl":.*?[^\]",' | head -n 1 | cut -d \" -f 4 | sed -e 's/\\//g')
appNewVersion=$(curl -s "https://api.renewedvision.com/v1/pro/upgrade?platform=macos&osVersion=12&appVersion=771&buildNumber=117899527&includeNotes=false" | grep -Eo '"version":.*?[^\]",' | head -n 1 | cut -d \" -f 4)
expectedTeamID="97GAAZ6CPX"
;;

View File

@@ -1,12 +1,8 @@
ringcentralapp) ringcentralapp)
# credit: Isaac Ordonez, Mann consulting (@mannconsulting) # credit: Isaac Ordonez, Mann consulting (@mannconsulting)
name="Ringcentral" name="Glip"
type="pkg" type="dmg"
if [[ $(arch) != "i386" ]]; then downloadURL="https://downloads.ringcentral.com/glip/rc/GlipForMac"
downloadURL="https://app.ringcentral.com/download/RingCentral-arm64.pkg"
else
downloadURL="https://app.ringcentral.com/download/RingCentral.pkg"
fi
expectedTeamID="M932RC5J66" expectedTeamID="M932RC5J66"
blockingProcesses=( "Ringcentral" ) blockingProcesses=( "Glip" )
;; ;;

View File

@@ -1,10 +1,9 @@
supportapp) supportapp)
# credit: Søren Theilgaard (@theilgaard)
name="Support" name="Support"
type="pkg" type="pkg"
packageID="nl.root3.support" packageID="nl.root3.support"
downloadURL=$(downloadURLFromGit root3nl SupportApp) downloadURL=$(downloadURLFromGit root3nl SupportApp)
appNewVersion=$(versionFromGit root3nl SupportApp) appNewVersion=$(versionFromGit root3nl SupportApp)
expectedTeamID="98LJ4XBGYK" expectedTeamID="98LJ4XBGYK"
uid=$(id -u "$currentUser")
launchctl bootout gui/${uid} "/Library/LaunchAgents/nl.root3.support.plist"
;; ;;

View File

@@ -1,7 +0,0 @@
tembo)
name="Tembo"
type="zip"
downloadURL="$(curl -fs https://www.houdah.com/tembo/updates/cast2.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
appNewVersion="$(curl -fs https://www.houdah.com/tembo/updates/cast2.xml | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
expectedTeamID="DKGQD8H8ZY"
;;

View File

@@ -1,8 +0,0 @@
wordservice)
name="WordService"
type="zip"
downloadURL="$(curl -fs -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" "https://www.devontechnologies.com/support/download" | tr '"' "\n" | grep -o "http.*download.*.zip" | grep -i wordservice | head -1)"
appNewVersion="$(echo $downloadURL | sed -E 's/.*\/([0-9.]*)\/.*/\1/g')"
appNewVersion=""
expectedTeamID="679S2QUWR8"
;;

View File

@@ -1,8 +0,0 @@
xmenu)
name="XMenu"
type="zip"
downloadURL="$(curl -fs "https://www.devontechnologies.com/apps/freeware" | grep -o "http.*download.*.zip" | grep -i xmenu)"
appNewVersion="$(echo $downloadURL | sed -E 's/.*\/([0-9.]*)\/.*/\1/g')"
expectedTeamID="679S2QUWR8"
;;

View File

@@ -4,5 +4,4 @@ zoom)
downloadURL="https://zoom.us/client/latest/ZoomInstallerIT.pkg" downloadURL="https://zoom.us/client/latest/ZoomInstallerIT.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"
versionKey="CFBundleVersion"
;; ;;

View File

@@ -4,5 +4,4 @@ zoomgov)
downloadURL="https://www.zoomgov.com/client/latest/ZoomInstallerIT.pkg" downloadURL="https://www.zoomgov.com/client/latest/ZoomInstallerIT.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"
versionKey="CFBundleVersion"
;; ;;

View File

@@ -55,11 +55,6 @@ case $LOGO in
LOGO="/Library/Addigy/macmanage/MacManage.app/Contents/Resources/atom.icns" LOGO="/Library/Addigy/macmanage/MacManage.app/Contents/Resources/atom.icns"
if [[ -z $MDMProfileName ]]; then; MDMProfileName="MDM Profile"; fi if [[ -z $MDMProfileName ]]; then; MDMProfileName="MDM Profile"; fi
;; ;;
microsoft)
# Microsoft Endpoint Manager (Intune)
LOGO="/Library/Intune/Microsoft Intune Agent.app/Contents/Resources/AppIcon.icns"
if [[ -z $MDMProfileName ]]; then; MDMProfileName="Management Profile"; fi
;;
esac esac
if [[ ! -a "${LOGO}" ]]; then if [[ ! -a "${LOGO}" ]]; then
if [[ $(sw_vers -buildVersion) > "19" ]]; then if [[ $(sw_vers -buildVersion) > "19" ]]; then
@@ -98,6 +93,7 @@ if [ -z "$appName" ]; then
# when not given derive from name # when not given derive from name
appName="$name.app" appName="$name.app"
fi fi
printlog "appName: $appName" INFO
if [ -z "$targetDir" ]; then if [ -z "$targetDir" ]; then
case $type in case $type in
@@ -155,7 +151,7 @@ if [[ -n $appNewVersion ]]; then
printlog "notifying" printlog "notifying"
displaynotification "$message" "No update for $name!" displaynotification "$message" "No update for $name!"
fi fi
cleanupAndExit 0 "No newer version." REQ cleanupAndExit 0 "No newer version." WARN
fi fi
else else
printlog "DEBUG mode 1 enabled, not exiting, but there is no new version of app." WARN printlog "DEBUG mode 1 enabled, not exiting, but there is no new version of app." WARN
@@ -171,9 +167,10 @@ if [[ (-n $appversion && -n "$updateTool") || "$type" == "updateronly" ]]; then
if [[ $DEBUG -ne 1 ]]; then if [[ $DEBUG -ne 1 ]]; then
if runUpdateTool; then if runUpdateTool; then
finishing finishing
cleanupAndExit 0 "updateTool has run" REQ cleanupAndExit 0
elif [[ $type == "updateronly" ]];then elif [[ $type == "updateronly" ]];then
cleanupAndExit 0 "type is $type so we end here." REQ printlog "type is $type so we end here."
cleanupAndExit 0
fi # otherwise continue fi # otherwise continue
else else
printlog "DEBUG mode 1 enabled, not running update tool" WARN printlog "DEBUG mode 1 enabled, not running update tool" WARN
@@ -279,4 +276,4 @@ esac
finishing finishing
# all done! # all done!
cleanupAndExit 0 "All done!" REQ cleanupAndExit 0

View File

@@ -1 +1 @@
10dev 9.1beta