mirror of
https://github.com/mtan93/Installomator.git
synced 2026-03-08 05:31:53 +00:00
Merge branch 'main' into dev
This commit is contained in:
38
CHANGELOG.md
38
CHANGELOG.md
@@ -1,3 +1,41 @@
|
||||
## v10beta1
|
||||
|
||||
- [swiftDialog](https://github.com/bartreardon/swiftDialog) integration (#641, #632), many thanks to @bartreardon, [sample scripts](in the MDM folder)
|
||||
- added WorkspaceOne option for LOGO (#517)
|
||||
- added function for JSON parsing with JXA (#529)
|
||||
- updated assemble.sh script to update Labels.txt when script is rebuilt (#540)
|
||||
- added a no requisite install script (#493)
|
||||
- GitHub lookup now don't use API calls, this should avoid or at least reduce rate limiting (#543)
|
||||
- fixed redundant exit codes (#643, #561)
|
||||
|
||||
NOTE: some exit codes have changed! see [Installomator Exit Codes](https://github.com/Installomator/Installomator/wiki/Installomator-Exit-Codes) for a list
|
||||
|
||||
- new labels:
|
||||
- bluejeanswithaudiodriver (#473)
|
||||
- duodevicehealth (#548)
|
||||
- googlechromeenterprise (#532)
|
||||
- ipswupdater (#545)
|
||||
- mmhmm (#571)
|
||||
- nordlayer (#419)
|
||||
- prune (#538)
|
||||
- whatroute (#560)
|
||||
- updated labels:
|
||||
- blender (#535, #622)
|
||||
- camtasia2019 (#547)
|
||||
- clickshare (#565)
|
||||
- egnyte (#500)
|
||||
- googledrive (#563)
|
||||
- grammarly (#576)
|
||||
- marathon, marathon2, marathoninfinity (#544)
|
||||
- miro (#475, #539)
|
||||
- notion (#566)
|
||||
- ringcentralapp (#550)
|
||||
- sublimetext (#593, #578, #567, #623, #626)
|
||||
- talkdeskcallbar (#536)
|
||||
- talkdeskcxcloud (#537)
|
||||
- wireshark (#585)
|
||||
|
||||
|
||||
## v9.2
|
||||
|
||||
**Note**: Both Google and Mozilla recommend using the pkg installers instead of the dmg downloads for managed deployments. So far, Installomator has provided labels for both. (`googlechrome` and `googlechromepkg` or `firefox` and `firefoxpkg`, respectively) Since there are problems with the dmg downloads, a future release of Installomator will _disable_ the `firefox` and `googlechrome` dmg labels. You should switch to using `googlechromepkg` and `firefoxpkg` labels instead.
|
||||
|
||||
@@ -1,33 +1,35 @@
|
||||
# Contributing to 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 files below `fragments`-folder. DO NOT edit the full `Installomator.sh` script. The full script is now a build of the fragments, and will be overwritten.__
|
||||
__Please note, that if you are contributing to this project with new labels or other suggestions in PRs, please put your changes in the files in the `fragments` sub-folder. DO NOT edit the full `Installomator.sh` script. The full script is generated from the fragments, and will be overwritten. More details on [how the script is assembled from the fragments here](https://github.com/Installomator/Installomator/tree/main/utils#how-to-assemble-installomatorsh).__
|
||||
|
||||
We try to keep the script as short as possible, and with more than 300 labels, we can save 300 lines in the script, if we do not have credit lines on each of these. So we are thankful for your contribution, but we will be removing these lines in the coming releases.
|
||||
We try to keep the script as short as possible, and with more than 400 labels, we can save 400 lines in the script, if we do not have credit lines on each of these. So we are thankful for your contribution, but we will be removing these lines in the coming releases.
|
||||
|
||||
## Branches
|
||||
|
||||
The branch list is as follows:
|
||||
|
||||
- `release`: this branch will have the latest released version
|
||||
- `main`: (default) this branch will be the latest release plus new and updated app labels, and critical bug fixes
|
||||
- `dev`: this will contain new and updated app labels, as well as any other code changes
|
||||
there will be other branches for new features and testing
|
||||
- `main`: (default) this branch will be the current build we are working on. It includes new and updated app labels, and critical bug fixes
|
||||
- `dev`: this will contain new and updated app labels, as well as other code changes that have the risk of significantly changing or breaking behavior
|
||||
there will be other branches for new features and testing.
|
||||
|
||||
This should allow the contributing team to release minor updates for new and updated app labels while also work on new features for the next major release.
|
||||
|
||||
With all the new branches, your local repo may get confused. If you don’t have local changes, it is easiest to delete your local repo and re-clone it. If you have local changes you want to preserve, then you should commit those to a local branch, pull the latest changes `git pull --all`, then delete the old master branch: `git branch -d master`.
|
||||
|
||||
Make sure you branch off of main for new and updated labels and off of `dev` for other code changes. Thank you for contributing!
|
||||
Please make sure you branch off of main for your PRs.
|
||||
|
||||
__Thank you for contributing!__
|
||||
|
||||
## Labels
|
||||
|
||||
If you need a new label for a piece of software, please take a look at the tutorials in the Wiki, if those can be helpful for starting out on the creation of the label.
|
||||
If you need a new label for a piece of software, please take a look [at the tutorials in the Wiki](https://github.com/Installomator/Installomator/wiki#tutorials), those can be helpful for starting out on the creation of the label.
|
||||
|
||||
We expect you to try out finding the __version__ of the software online, so that `appNewVersion` can be filled in the label. It helps a lot when the software needs update, and greatly improve user experience.
|
||||
|
||||
Please document what you found out about the __version__ of the software if it's not included. We will not accept a new label if this is not documented, we will ask about this if it was not included. This is very important for the quality and reliability of Installomator.
|
||||
|
||||
When creating a new label, please file a pull request (PR). And feel free to ask questions or make your comments about what else is needed, if we should take a look at the label, or help out in finding the version or isolating URLs or anything else.
|
||||
When creating a new label, please file a pull request (PR). And feel free to ask questions or make your comments about what else is needed, if we should take a look at the label, or help out in finding the version or isolating URLs or anything else. You can find [a tutorial on how to create a PR here](https://github.com/Installomator/Installomator/wiki/GitHub-howto-create-PRs).
|
||||
|
||||
Please include the log of installing this label in the description, like this:
|
||||
```
|
||||
@@ -39,11 +41,13 @@ Please include the log of installing this label in the description, like this:
|
||||
|
||||
Please have one label per PR, so we can separate these. Also if you change/fix a label.
|
||||
|
||||
Thank you very much for your contribution!
|
||||
__Thank you very much for your contribution!__
|
||||
|
||||
|
||||
## Issues
|
||||
|
||||
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. Include the full log and include the version of Installomator you're running.
|
||||
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. Include the full log and include the version of Installomator you're running. When you create a PR to follow-up and solve an issue make sure to [mention the issue using the `#xxx` syntax in a commit message or comment to link the issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue).
|
||||
|
||||
Join [the MacAdmins Slack](https://macadmins.org) and find us in the `#installomator` channel for questions, support and discussions.
|
||||
|
||||
When in doubt, use the MacAdmins.org Slack as described in [README.md](https://github.com/Installomator/Installomator/)
|
||||
|
||||
178
Installomator.sh
178
Installomator.sh
@@ -302,8 +302,8 @@ if [[ $(/usr/bin/arch) == "arm64" ]]; then
|
||||
rosetta2=no
|
||||
fi
|
||||
fi
|
||||
VERSION="9.2"
|
||||
VERSIONDATE="2022-05-16"
|
||||
VERSION="10.0beta1"
|
||||
VERSIONDATE="2022-08-12"
|
||||
|
||||
# MARK: Functions
|
||||
|
||||
@@ -329,7 +329,7 @@ cleanupAndExit() { # $1 = exit code, $2 message, $3 level
|
||||
printlog "$2" $3
|
||||
fi
|
||||
printlog "################## End Installomator, exit code $1 \n" REQ
|
||||
|
||||
|
||||
# if label is wrong and we wanted name of the label, then return ##################
|
||||
if [[ $RETURN_LABEL_NAME -eq 1 ]]; then
|
||||
1=0 # If only label name should be returned we exit without any errors
|
||||
@@ -463,11 +463,11 @@ downloadURLFromGit() { # $1 git user name, $2 git repo name
|
||||
fi
|
||||
|
||||
if [ -n "$archiveName" ]; then
|
||||
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
|
||||
| awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
|
||||
#downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
|
||||
downloadURL=https://github.com$(curl -sL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -o "\/$gitusername\/$gitreponame.*$archiveName.*")
|
||||
else
|
||||
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
|
||||
| awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
|
||||
#downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
|
||||
downloadURL=https://github.com$(curl -sL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -o "\/$gitusername\/$gitreponame.*\.$filetype")
|
||||
fi
|
||||
if [ -z "$downloadURL" ]; then
|
||||
cleanupAndExit 9 "could not retrieve download URL for $gitusername/$gitreponame" ERROR
|
||||
@@ -483,7 +483,8 @@ versionFromGit() {
|
||||
gitusername=${1?:"no git user 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 -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 -sLI "https://github.com/$gitusername/$gitreponame/releases/latest" | grep -i "^location" | tr "/" "\n" | tail -1 | sed 's/[^0-9\.]//g')
|
||||
if [ -z "$appNewVersion" ]; then
|
||||
printlog "could not retrieve version number for $gitusername/$gitreponame" WARN
|
||||
appNewVersion=""
|
||||
@@ -506,6 +507,16 @@ xpath() {
|
||||
fi
|
||||
}
|
||||
|
||||
# from @Pico: https://macadmins.slack.com/archives/CGXNNJXJ9/p1652222365989229?thread_ts=1651786411.413349&cid=CGXNNJXJ9
|
||||
getJSONValue() {
|
||||
# $1: JSON string OR file path to parse (tested to work with up to 1GB string and 2GB file).
|
||||
# $2: JSON key path to look up (using dot or bracket notation).
|
||||
printf '%s' "$1" | /usr/bin/osascript -l 'JavaScript' \
|
||||
-e "let json = $.NSString.alloc.initWithDataEncoding($.NSFileHandle.fileHandleWithStandardInput.readDataToEndOfFile$(/usr/bin/uname -r | /usr/bin/awk -F '.' '($1 > 18) { print "AndReturnError(ObjC.wrap())" }'), $.NSUTF8StringEncoding)" \
|
||||
-e 'if ($.NSFileManager.defaultManager.fileExistsAtPath(json)) json = $.NSString.stringWithContentsOfFileEncodingError(json, $.NSUTF8StringEncoding, ObjC.wrap())' \
|
||||
-e "const value = JSON.parse(json.js)$([ -n "${2%%[.[]*}" ] && echo '.')$2" \
|
||||
-e 'if (typeof value === "object") { JSON.stringify(value, null, 4) } else { value }'
|
||||
}
|
||||
|
||||
getAppVersion() {
|
||||
# modified by: Søren Theilgaard (@theilgaard) and Isaac Ordonez
|
||||
@@ -1371,10 +1382,11 @@ adobecreativeclouddesktop)
|
||||
name="Adobe Creative Cloud"
|
||||
#appName="Install.app"
|
||||
type="dmg"
|
||||
adobeurl="https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html"
|
||||
if [[ $(arch) == "arm64" ]]; then
|
||||
downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*macarm64.*dmg" | cut -d '"' -f1 | head -1)
|
||||
downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'osx10')][contains(text(),'Download')]/@href)" - 2> /dev/null)
|
||||
elif [[ $(arch) == "i386" ]]; then
|
||||
downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*osx10.*dmg" | cut -d '"' -f1 | head -1)
|
||||
downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'macarm64')][contains(text(),'Download')]/@href)" - 2> /dev/null)
|
||||
fi
|
||||
#downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*dmg" | head -1)
|
||||
appNewVersion=$(curl -fs "https://helpx.adobe.com/creative-cloud/release-note/cc-release-notes.html" | grep "mandatory" | head -1 | grep -o "Version *.* released" | cut -d " " -f2)
|
||||
@@ -1743,7 +1755,11 @@ 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 -m1 .dmg)
|
||||
if [[ $(arch) == "arm64" ]]; then
|
||||
downloadURL=$(curl -sfL "https://www.blender.org/download/" | xmllint --html --format - 2>/dev/null | grep -o "https://.*blender.*arm64.*.dmg" | sed '2p;d' | sed 's/www.blender.org\/download/download.blender.org/g')
|
||||
elif [[ $(arch) == "i386" ]]; then
|
||||
downloadURL=$(curl -sfL "https://www.blender.org/download/" | xmllint --html --format - 2>/dev/null | grep -o "https://.*blender.*x64.*.dmg" | sed '2p;d' | sed 's/www.blender.org\/download/download.blender.org/g')
|
||||
fi
|
||||
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)-.*/\1/g' )
|
||||
expectedTeamID="68UA947AUU"
|
||||
;;
|
||||
@@ -1758,10 +1774,16 @@ bluejeans)
|
||||
appNewVersion=$(echo $downloadURL | cut -d '/' -f6)
|
||||
expectedTeamID="HE4P42JBGN"
|
||||
;;
|
||||
bluejeansevents)
|
||||
name="BlueJeans Events"
|
||||
bluejeanswithaudiodriver)
|
||||
name="BlueJeans"
|
||||
type="pkg"
|
||||
downloadURL=$(curl -fs "https://www.bluejeans.com/downloads" | xmllint --html --format - 2>/dev/null | grep -o "https://swdl.bluejeans.com/events/release/beta/downloads/BlueJeans_Events.pkg" )
|
||||
if [[ $(arch) == "arm64" ]]; then
|
||||
downloadURL=$(curl -fs "https://www.bluejeans.com/downloads" | xmllint --html --format - 2>/dev/null | grep -o "https://.*BlueJeans.*Installer.*arm.*.pkg" )
|
||||
elif [[ $(arch) == "i386" ]]; then
|
||||
downloadURL=$(curl -fs "https://www.bluejeans.com/downloads" | xmllint --html --format - 2>/dev/null | grep -o "https://.*BlueJeansInstaller.*x86.*.dmg" | sed 's/dmg/pkg/g')
|
||||
fi
|
||||
appNewVersion=$(echo $downloadURL | cut -d '/' -f6)
|
||||
choiceChangesXML='<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><array><dict><key>attributeSetting</key><integer>1</integer><key>choiceAttribute</key><string>selected</string><key>choiceIdentifier</key><string>com.tatvikmohit.BlueJeans-Audio</string></dict></array></plist>'
|
||||
expectedTeamID="HE4P42JBGN"
|
||||
;;
|
||||
boxdrive)
|
||||
@@ -1865,7 +1887,7 @@ camtasia2019)
|
||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2019" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//')
|
||||
expectedTeamID="7TQL462TU8"
|
||||
;;
|
||||
camtasia2020)
|
||||
camtasia2020)
|
||||
name="Camtasia 2020"
|
||||
type="dmg"
|
||||
downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2020" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg)
|
||||
@@ -1913,10 +1935,10 @@ clevershare2)
|
||||
expectedTeamID="P76M9BE8DQ"
|
||||
;;
|
||||
clickshare)
|
||||
# credit: Søren Theilgaard (@theilgaard)
|
||||
name="ClickShare"
|
||||
type="appInDmgInZip"
|
||||
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 -A6 -i "macos" | grep -i "FileNumber" | tr '"' "\n" | grep -i "FileNumber" )"
|
||||
appNewVersion="$(eval "$( echo $downloadURL | sed -E 's/.*(MajorVersion.*BuildVersion=[0-9]*).*/\1/' | sed 's/&//g' )" ; ((MajorVersion++)) ; ((MajorVersion--)); ((MinorVersion++)) ; ((MinorVersion--)); ((PatchVersion++)) ; ((PatchVersion--)); ((BuildVersion++)) ; ((BuildVersion--)); echo "${MajorVersion}.${MinorVersion}.${PatchVersion}-b${BuildVersion}")"
|
||||
expectedTeamID="P6CDJZR997"
|
||||
;;
|
||||
clipy)
|
||||
@@ -2195,6 +2217,15 @@ duckduckgo)
|
||||
appNewVersion=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/sparkle:shortVersionString)[1]' 2>/dev/null | cut -d ">" -f2 | cut -d "<" -f1)
|
||||
expectedTeamID="HKE973VLUW"
|
||||
;;
|
||||
duodevicehealth)
|
||||
name="Duo Device Health"
|
||||
type="pkgInDmg"
|
||||
downloadURL="https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg"
|
||||
appNewVersion=$(curl -fsLIXGET "https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg" | grep -i "^content-disposition" | sed -e 's/.*filename\=\"DuoDeviceHealth\-\(.*\)\.dmg\".*/\1/')
|
||||
appName="Duo Device Health.app"
|
||||
expectedTeamID="FNN8Z5JMFP"
|
||||
;;
|
||||
|
||||
easeusdatarecoverywizard)
|
||||
# credit: Søren Theilgaard (@theilgaard)
|
||||
name="EaseUS Data Recovery Wizard"
|
||||
@@ -2215,6 +2246,7 @@ egnyte)
|
||||
name="Egnyte Connect"
|
||||
type="pkg"
|
||||
downloadURL="https://egnyte-cdn.egnyte.com/egnytedrive/mac/en-us/latest/EgnyteConnectMac.pkg"
|
||||
appNewVersion=$(curl -fs "https://egnyte-cdn.egnyte.com/egnytedrive/mac/en-us/versions/default.xml" | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' | cut -d '"' -f 2)
|
||||
expectedTeamID="FELUD555VC"
|
||||
blockingProcesses=( NONE )
|
||||
;;
|
||||
@@ -2345,7 +2377,8 @@ firefox)
|
||||
name="Firefox"
|
||||
type="dmg"
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US"
|
||||
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
||||
@@ -2354,7 +2387,8 @@ firefox_da)
|
||||
name="Firefox"
|
||||
type="dmg"
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=da"
|
||||
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
printlog "WARNING for ERROR: Label firefox, firefox_da and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
||||
@@ -2380,7 +2414,8 @@ firefox_intl)
|
||||
printlog "Download not found for '$userLanguage', using default ('en-US')."
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-latest-ssl&os=osx"
|
||||
fi
|
||||
appNewVersion=$(curl -fsIL $downloadURL | awk -F releases/ '/Location:/ {split($2,a,"/"); print a[1]}')
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
||||
@@ -2390,7 +2425,8 @@ firefoxesrpkg)
|
||||
name="Firefox"
|
||||
type="pkg"
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-esr-pkg-latest-ssl&os=osx"
|
||||
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i "^location" | awk '{print $2}' | sed -E 's/.*releases\/([0-9.]*)esr.*/\1/g')
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "FIREFOX_ESR")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
;;
|
||||
@@ -2415,7 +2451,8 @@ firefoxesr_intl)
|
||||
printlog "Download not found for '$userLanguage', using default ('en-US')."
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=osx"
|
||||
fi
|
||||
appNewVersion=$(curl -fsIL $downloadURL | awk -F releases/ '/Location:/ {split($2,a,"esr/"); print a[1]}')
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
||||
@@ -2424,7 +2461,8 @@ firefoxpkg)
|
||||
name="Firefox"
|
||||
type="pkg"
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
|
||||
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
;;
|
||||
@@ -2448,7 +2486,8 @@ firefoxpkg_intl)
|
||||
printlog "Download not found for that language. Using en-US" WARN
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
|
||||
fi
|
||||
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i location | cut -d "/" -f7)
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
;;
|
||||
@@ -2538,6 +2577,16 @@ googlechrome)
|
||||
expectedTeamID="EQHXZ8M8AV"
|
||||
printlog "WARNING for ERROR: Label googlechrome should not be used. Instead use googlechromepkg as per recommendations from Google. It's not fully certain that the app actually gets updated here. googlechromepkg will have built in updates and make sure the client is updated in the future." REQ
|
||||
;;
|
||||
googlechromeenterprise)
|
||||
name="Google Chrome"
|
||||
type="pkg"
|
||||
downloadURL="https://dl.google.com/dl/chrome/mac/universal/stable/gcem/GoogleChrome.pkg"
|
||||
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}')
|
||||
expectedTeamID="EQHXZ8M8AV"
|
||||
updateTool="/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/MacOS/GoogleSoftwareUpdateAgent"
|
||||
updateToolArguments=( -runMode oneshot -userInitiated YES )
|
||||
updateToolRunAsCurrentUser=1
|
||||
;;
|
||||
googlechromepkg)
|
||||
name="Google Chrome"
|
||||
type="pkg"
|
||||
@@ -2557,9 +2606,14 @@ googledrivefilestream)
|
||||
# credit: Isaac Ordonez, Mann consulting (@mannconsulting)
|
||||
name="Google Drive File Stream"
|
||||
type="pkgInDmg"
|
||||
packageID="com.google.drivefs"
|
||||
if [[ $(arch) == "arm64" ]]; then
|
||||
packageID="com.google.drivefs.arm64"
|
||||
elif [[ $(arch) == "i386" ]]; then
|
||||
packageID="com.google.drivefs.x86_64"
|
||||
fi
|
||||
downloadURL="https://dl.google.com/drive-file-stream/GoogleDriveFileStream.dmg" # downloadURL="https://dl.google.com/drive-file-stream/GoogleDrive.dmg"
|
||||
blockingProcesses=( "Google Docs" "Google Drive" "Google Sheets" "Google Slides" )
|
||||
appName="Google Drive.app"
|
||||
expectedTeamID="EQHXZ8M8AV"
|
||||
;;
|
||||
googledrivebackupandsync)
|
||||
@@ -2620,9 +2674,8 @@ 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)
|
||||
downloadURL="https://download-mac.grammarly.com/Grammarly.dmg"
|
||||
expectedTeamID="W8F64X92K3"
|
||||
appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4)
|
||||
# appName="Grammarly Installer.app"
|
||||
installerTool="Grammarly Installer.app"
|
||||
CLIInstaller="Grammarly Installer.app/Contents/MacOS/Grammarly Desktop"
|
||||
@@ -2805,6 +2858,14 @@ installomator_theile)
|
||||
expectedTeamID="JME5BW3F3R"
|
||||
blockingProcesses=( NONE )
|
||||
;;
|
||||
ipswupdater)
|
||||
name="IPSW Updater"
|
||||
type="zip"
|
||||
ipswupdaterVersions=$(curl -fs "https://ipsw.app/download/updates.php?current_version=0.9.16")
|
||||
downloadURL=$(getJSONValue "$ipswupdaterVersions" "[0].url")
|
||||
appNewVersion=$(getJSONValue "$ipswupdaterVersions" "[0].version")
|
||||
expectedTeamID="YRW6NUGA63"
|
||||
;;
|
||||
istatmenus)
|
||||
# credit: AP Orlebeke (@apizz)
|
||||
name="iStat Menus"
|
||||
@@ -3246,6 +3307,7 @@ marathon)
|
||||
name="Marathon"
|
||||
type="dmg"
|
||||
archiveName="Marathon-[0-9.]*-Mac.dmg"
|
||||
versionKey="CFBundleVersion"
|
||||
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
|
||||
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
|
||||
expectedTeamID="E8K89CXZE7"
|
||||
@@ -3254,6 +3316,7 @@ marathon2)
|
||||
name="Marathon 2"
|
||||
type="dmg"
|
||||
archiveName="Marathon2-[0-9.]*-Mac.dmg"
|
||||
versionKey="CFBundleVersion"
|
||||
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
|
||||
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
|
||||
expectedTeamID="E8K89CXZE7"
|
||||
@@ -3262,6 +3325,7 @@ marathoninfinity)
|
||||
name="Marathon Infinity"
|
||||
type="dmg"
|
||||
archiveName="MarathonInfinity-[0-9.]*-Mac.dmg"
|
||||
versionKey="CFBundleVersion"
|
||||
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
|
||||
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
|
||||
expectedTeamID="E8K89CXZE7"
|
||||
@@ -3571,9 +3635,21 @@ miro)
|
||||
# credit: @matins
|
||||
name="Miro"
|
||||
type="dmg"
|
||||
downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg"
|
||||
if [[ $(arch) == arm64 ]]; then
|
||||
downloadURL="https://desktop.miro.com/platforms/darwin-arm64/Miro.dmg"
|
||||
elif [[ $(arch) == i386 ]]; then
|
||||
downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg"
|
||||
fi
|
||||
expectedTeamID="M3GM7MFY7U"
|
||||
;;
|
||||
mmhmm)
|
||||
name="mmhmm"
|
||||
type="pkg"
|
||||
downloadURL="https://updates.mmhmm.app/mac/mmhmm.pkg"
|
||||
curlOptions=( -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15" )
|
||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://help.mmhmm.app/hc/en-us/articles/4420969712151-mmhmm-for-Mac" | grep 'The latest version of mmhmm for Mac is <strong>*' | sed -e 's/.*\<strong\>\(.*\)\.\<\/strong\>.*/\1/')
|
||||
expectedTeamID="M3KUT44L48"
|
||||
;;
|
||||
mobikinassistantforandroid)
|
||||
name="MobiKin Assistant for Android"
|
||||
type="dmg"
|
||||
@@ -3735,16 +3811,24 @@ nomadlogin)
|
||||
appNewVersion=$(curl -fs https://nomad.menu/support/ | grep "NoMAD Login AD Downloads" | sed -E 's/.*Current Version ([0-9\.]*)<.*/\1/g')
|
||||
expectedTeamID="AAPZK3CB24"
|
||||
;;
|
||||
nordlayer)
|
||||
# credit: Taboc741 (https://github.com/taboc741)
|
||||
name="NordLayer"
|
||||
type="pkg"
|
||||
downloadURL="https://downloads.nordlayer.com/mac/latest/NordLayer.pkg"
|
||||
expectedTeamID="W5W395V82Y"
|
||||
;;
|
||||
notion)
|
||||
# credit: Søren Theilgaard (@theilgaard)
|
||||
name="Notion"
|
||||
type="dmg"
|
||||
if [[ $(arch) == "arm64" ]]; then
|
||||
downloadURL="https://www.notion.so/desktop/apple-silicon/download"
|
||||
appNewVersion=$( curl -fsIL "https://www.notion.so/desktop/apple-silicon/download" | grep -i "^location" | awk '{print $2}' | sed -e 's/.*Notion\-\(.*\)\-arm64.dmg.*/\1/' )
|
||||
elif [[ $(arch) == "i386" ]]; then
|
||||
downloadURL="https://www.notion.so/desktop/mac/download"
|
||||
appNewVersion=$( curl -fsIL "https://www.notion.so/desktop/mac/download" | grep -i "^location" | awk '{print $2}' | sed -e 's/.*Notion\-\(.*\).dmg.*/\1/' )
|
||||
fi
|
||||
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | tr -d '\r\n' | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g' )
|
||||
expectedTeamID="LBQJ96FQ8D"
|
||||
;;
|
||||
nudge)
|
||||
@@ -4064,6 +4148,13 @@ proxyman)
|
||||
appNewVersion="$(versionFromGit ProxymanApp Proxyman)"
|
||||
expectedTeamID="3X57WP8E8V"
|
||||
;;
|
||||
prune)
|
||||
name="Prune"
|
||||
type="zip"
|
||||
downloadURL=$(downloadURLFromGit BIG-RAT Prune)
|
||||
appNewVersion=$(versionFromGit BIG-RAT Prune)
|
||||
expectedTeamID="PS2F6S478M"
|
||||
;;
|
||||
pymol)
|
||||
name="PyMOL"
|
||||
type="dmg"
|
||||
@@ -4172,7 +4263,7 @@ ricohpsprinters)
|
||||
;;
|
||||
ringcentralapp)
|
||||
# credit: Isaac Ordonez, Mann consulting (@mannconsulting)
|
||||
name="Ringcentral"
|
||||
name="RingCentral"
|
||||
type="pkg"
|
||||
if [[ $(arch) != "i386" ]]; then
|
||||
downloadURL="https://app.ringcentral.com/download/RingCentral-arm64.pkg"
|
||||
@@ -4180,7 +4271,7 @@ ringcentralapp)
|
||||
downloadURL="https://app.ringcentral.com/download/RingCentral.pkg"
|
||||
fi
|
||||
expectedTeamID="M932RC5J66"
|
||||
blockingProcesses=( "Ringcentral" )
|
||||
blockingProcesses=( "RingCentral" )
|
||||
;;
|
||||
ringcentralclassicapp)
|
||||
name="Glip"
|
||||
@@ -4523,7 +4614,7 @@ sublimetext)
|
||||
# credit: Søren Theilgaard (@theilgaard)
|
||||
name="Sublime Text"
|
||||
type="zip"
|
||||
downloadURL="$(curl -fs https://www.sublimetext.com/download | grep -io "https://download.*_mac.zip")"
|
||||
downloadURL="$(curl -fs "https://www.sublimetext.com/download_thanks?target=mac#direct-downloads" | grep -io "https://download.*_mac.zip" | head -1)"
|
||||
appNewVersion=$(curl -fs https://www.sublimetext.com/download | grep -i -A 4 "id.*changelog" | grep -io "Build [0-9]*")
|
||||
expectedTeamID="Z6D26JE4Y4"
|
||||
;;
|
||||
@@ -4602,14 +4693,16 @@ tageditor)
|
||||
talkdeskcallbar)
|
||||
name="Callbar"
|
||||
type="dmg"
|
||||
appNewVersion=$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p')
|
||||
talkdeskcallbarVersions=$(curl -fsL "https://downloadcallbar.talkdesk.com/release_metadata.json")
|
||||
appNewVersion=$(getJSONValue "$talkdeskcallbarVersions" "version")
|
||||
downloadURL=https://downloadcallbar.talkdesk.com/Callbar-${appNewVersion}.dmg
|
||||
expectedTeamID="YGGJX44TB8"
|
||||
;;
|
||||
talkdeskcxcloud)
|
||||
name="Talkdesk"
|
||||
type="dmg"
|
||||
appNewVersion=$(curl -fs https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json | sed -n -e 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p' | head -n 1)
|
||||
talkdeskcxcloudVersions=$(curl -fs "https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json")
|
||||
appNewVersion=$(getJSONValue "$talkdeskcxcloudVersions" "[0].version")
|
||||
downloadURL="https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-${appNewVersion}.dmg"
|
||||
expectedTeamID="YGGJX44TB8"
|
||||
;;
|
||||
@@ -4957,6 +5050,13 @@ wechat)
|
||||
downloadURL="https://dldir1.qq.com/weixin/mac/WeChatMac.dmg"
|
||||
expectedTeamID="5A4RE8SF68"
|
||||
;;
|
||||
whatroute)
|
||||
name="WhatRoute"
|
||||
type="zip"
|
||||
downloadURL="$(curl -fs https://www.whatroute.net/whatroute2appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | cut -d '"' -f2)"
|
||||
appNewVersion="$(curl -fs https://www.whatroute.net/whatroute2appcast.xml | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | cut -d '"' -f2)"
|
||||
expectedTeamID="H5879E8LML"
|
||||
;;
|
||||
whatsapp)
|
||||
name="WhatsApp"
|
||||
type="dmg"
|
||||
@@ -4982,12 +5082,12 @@ wickrpro)
|
||||
wireshark)
|
||||
name="Wireshark"
|
||||
type="dmg"
|
||||
if [[ $(arch) == i386 ]]; then
|
||||
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20Latest%20Intel%2064.dmg"
|
||||
elif [[ $(arch) == arm64 ]]; then
|
||||
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20Latest%20Arm%2064.dmg"
|
||||
fi
|
||||
appNewVersion=$(curl -fs https://www.wireshark.org/download.html | grep -i "href.*_stable" | sed -E 's/.*\(([0-9.]*)\).*/\1/g')
|
||||
if [[ $(arch) == i386 ]]; then
|
||||
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20$appNewVersion%20Intel%2064.dmg"
|
||||
elif [[ $(arch) == arm64 ]]; then
|
||||
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20$appNewVersion%20Arm%2064.dmg"
|
||||
fi
|
||||
expectedTeamID="7Z6EMTD2C6"
|
||||
;;
|
||||
wordservice)
|
||||
|
||||
10
Labels.txt
10
Labels.txt
@@ -56,7 +56,7 @@ bettertouchtool
|
||||
bitwarden
|
||||
blender
|
||||
bluejeans
|
||||
bluejeansevents
|
||||
bluejeanswithaudiodriver
|
||||
boxdrive
|
||||
boxsync
|
||||
boxtools
|
||||
@@ -69,6 +69,7 @@ calibre
|
||||
camostudio
|
||||
camtasia
|
||||
camtasia2019
|
||||
camtasia2020
|
||||
camtasia2021
|
||||
canva
|
||||
chatwork
|
||||
@@ -110,6 +111,7 @@ drawio
|
||||
drift
|
||||
dropbox
|
||||
duckduckgo
|
||||
duodevicehealth
|
||||
easeusdatarecoverywizard
|
||||
easyfind
|
||||
egnyte
|
||||
@@ -146,6 +148,7 @@ gimp
|
||||
githubdesktop
|
||||
golang
|
||||
googlechrome
|
||||
googlechromeenterprise
|
||||
googlechromepkg
|
||||
googledrive
|
||||
googledrivebackupandsync
|
||||
@@ -181,6 +184,7 @@ insomnia
|
||||
installomator
|
||||
installomator_theile
|
||||
intellijideace
|
||||
ipswupdater
|
||||
istatmenus
|
||||
iterm2
|
||||
itsycal
|
||||
@@ -259,6 +263,7 @@ microsoftyammer
|
||||
mightymike
|
||||
mindmanager
|
||||
miro
|
||||
mmhmm
|
||||
mobikinassistantforandroid
|
||||
mochakeyboard
|
||||
mochatelnet
|
||||
@@ -274,6 +279,7 @@ netnewswire
|
||||
nextcloud
|
||||
nomad
|
||||
nomadlogin
|
||||
nordlayer
|
||||
notion
|
||||
nudge
|
||||
nvivo
|
||||
@@ -317,6 +323,7 @@ promiseutilityr
|
||||
propresenter7
|
||||
protonvpn
|
||||
proxyman
|
||||
prune
|
||||
pycharmce
|
||||
pymol
|
||||
qgis-pr
|
||||
@@ -437,6 +444,7 @@ webex
|
||||
webexmeetings
|
||||
webexteams
|
||||
wechat
|
||||
whatroute
|
||||
whatsapp
|
||||
wickrme
|
||||
wickrpro
|
||||
|
||||
43
MDM/InstallInstallomator.sh
Normal file
43
MDM/InstallInstallomator.sh
Normal file
@@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This script is meant to povide the simplest MDM/management platform agnostic way to install Installomator
|
||||
# The only requirement is an Internet connection
|
||||
|
||||
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
|
||||
|
||||
# Get the URL of the latest PKG From the Installomator GitHub repo
|
||||
url=$(curl --silent --fail "https://api.github.com/repos/Installomator/Installomator/releases/latest" | awk -F '"' "/browser_download_url/ && /pkg\"/ { print \$4; exit }")
|
||||
# Expected Team ID of the downloaded PKG
|
||||
expectedTeamID="JME5BW3F3R"
|
||||
exitCode=0
|
||||
|
||||
# Check for Installomator and install if not found
|
||||
if [ ! -e "/usr/local/Installomator/Installomator.sh" ]; then
|
||||
echo "Installomator not found. Installing."
|
||||
# Create temporary working directory
|
||||
tempDirectory=$( mktemp -d )
|
||||
echo "Created working directory '$tempDirectory'"
|
||||
# Download the installer package
|
||||
echo "Downloading Installomator package"
|
||||
curl --location --silent "$url" -o "$tempDirectory/Installomator.pkg"
|
||||
# Verify the download
|
||||
teamID=$(spctl -a -vv -t install "$tempDirectory/Installomator.pkg" 2>&1 | awk '/origin=/ {print $NF }' | tr -d '()')
|
||||
echo "Team ID for downloaded package: $teamID"
|
||||
# Install the package if Team ID validates
|
||||
if [ "$expectedTeamID" = "$teamID" ] || [ "$expectedTeamID" = "" ]; then
|
||||
echo "Package verified. Installing package Installomator.pkg"
|
||||
installer -pkg "$tempDirectory/Installomator.pkg" -target / -verbose
|
||||
exitCode=$?
|
||||
else
|
||||
echo "Package verification failed before package installation could start. Download link may be invalid. Aborting."
|
||||
exitCode=1
|
||||
exit $exitCode
|
||||
fi
|
||||
# Remove the temporary working directory when done
|
||||
echo "Deleting working directory '$tempDirectory' and its contents"
|
||||
rm -Rf "$tempDirectory"
|
||||
else
|
||||
echo "Installomator already installed."
|
||||
fi
|
||||
|
||||
exit $exitCode
|
||||
@@ -22,7 +22,7 @@ cleanupAndExit() { # $1 = exit code, $2 message, $3 level
|
||||
printlog "$2" $3
|
||||
fi
|
||||
printlog "################## End Installomator, exit code $1 \n" REQ
|
||||
|
||||
|
||||
# if label is wrong and we wanted name of the label, then return ##################
|
||||
if [[ $RETURN_LABEL_NAME -eq 1 ]]; then
|
||||
1=0 # If only label name should be returned we exit without any errors
|
||||
@@ -156,11 +156,11 @@ downloadURLFromGit() { # $1 git user name, $2 git repo name
|
||||
fi
|
||||
|
||||
if [ -n "$archiveName" ]; then
|
||||
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
|
||||
| awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
|
||||
#downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
|
||||
downloadURL=https://github.com$(curl -sL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -o "\/$gitusername\/$gitreponame.*$archiveName.*")
|
||||
else
|
||||
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
|
||||
| awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
|
||||
#downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
|
||||
downloadURL=https://github.com$(curl -sL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -o "\/$gitusername\/$gitreponame.*\.$filetype")
|
||||
fi
|
||||
if [ -z "$downloadURL" ]; then
|
||||
cleanupAndExit 9 "could not retrieve download URL for $gitusername/$gitreponame" ERROR
|
||||
@@ -176,7 +176,8 @@ versionFromGit() {
|
||||
gitusername=${1?:"no git user 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 -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 -sLI "https://github.com/$gitusername/$gitreponame/releases/latest" | grep -i "^location" | tr "/" "\n" | tail -1 | sed 's/[^0-9\.]//g')
|
||||
if [ -z "$appNewVersion" ]; then
|
||||
printlog "could not retrieve version number for $gitusername/$gitreponame" WARN
|
||||
appNewVersion=""
|
||||
@@ -199,6 +200,16 @@ xpath() {
|
||||
fi
|
||||
}
|
||||
|
||||
# from @Pico: https://macadmins.slack.com/archives/CGXNNJXJ9/p1652222365989229?thread_ts=1651786411.413349&cid=CGXNNJXJ9
|
||||
getJSONValue() {
|
||||
# $1: JSON string OR file path to parse (tested to work with up to 1GB string and 2GB file).
|
||||
# $2: JSON key path to look up (using dot or bracket notation).
|
||||
printf '%s' "$1" | /usr/bin/osascript -l 'JavaScript' \
|
||||
-e "let json = $.NSString.alloc.initWithDataEncoding($.NSFileHandle.fileHandleWithStandardInput.readDataToEndOfFile$(/usr/bin/uname -r | /usr/bin/awk -F '.' '($1 > 18) { print "AndReturnError(ObjC.wrap())" }'), $.NSUTF8StringEncoding)" \
|
||||
-e 'if ($.NSFileManager.defaultManager.fileExistsAtPath(json)) json = $.NSString.stringWithContentsOfFileEncodingError(json, $.NSUTF8StringEncoding, ObjC.wrap())' \
|
||||
-e "const value = JSON.parse(json.js)$([ -n "${2%%[.[]*}" ] && echo '.')$2" \
|
||||
-e 'if (typeof value === "object") { JSON.stringify(value, null, 4) } else { value }'
|
||||
}
|
||||
|
||||
getAppVersion() {
|
||||
# modified by: Søren Theilgaard (@theilgaard) and Isaac Ordonez
|
||||
|
||||
@@ -2,10 +2,11 @@ adobecreativeclouddesktop)
|
||||
name="Adobe Creative Cloud"
|
||||
#appName="Install.app"
|
||||
type="dmg"
|
||||
adobeurl="https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html"
|
||||
if [[ $(arch) == "arm64" ]]; then
|
||||
downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*macarm64.*dmg" | cut -d '"' -f1 | head -1)
|
||||
downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'osx10')][contains(text(),'Download')]/@href)" - 2> /dev/null)
|
||||
elif [[ $(arch) == "i386" ]]; then
|
||||
downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*osx10.*dmg" | cut -d '"' -f1 | head -1)
|
||||
downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'macarm64')][contains(text(),'Download')]/@href)" - 2> /dev/null)
|
||||
fi
|
||||
#downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*dmg" | head -1)
|
||||
appNewVersion=$(curl -fs "https://helpx.adobe.com/creative-cloud/release-note/cc-release-notes.html" | grep "mandatory" | head -1 | grep -o "Version *.* released" | cut -d " " -f2)
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
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 -m1 .dmg)
|
||||
if [[ $(arch) == "arm64" ]]; then
|
||||
downloadURL=$(curl -sfL "https://www.blender.org/download/" | xmllint --html --format - 2>/dev/null | grep -o "https://.*blender.*arm64.*.dmg" | sed '2p;d' | sed 's/www.blender.org\/download/download.blender.org/g')
|
||||
elif [[ $(arch) == "i386" ]]; then
|
||||
downloadURL=$(curl -sfL "https://www.blender.org/download/" | xmllint --html --format - 2>/dev/null | grep -o "https://.*blender.*x64.*.dmg" | sed '2p;d' | sed 's/www.blender.org\/download/download.blender.org/g')
|
||||
fi
|
||||
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)-.*/\1/g' )
|
||||
expectedTeamID="68UA947AUU"
|
||||
;;
|
||||
|
||||
@@ -5,4 +5,3 @@ camtasia2019)
|
||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2019" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//')
|
||||
expectedTeamID="7TQL462TU8"
|
||||
;;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
clickshare)
|
||||
# credit: Søren Theilgaard (@theilgaard)
|
||||
name="ClickShare"
|
||||
type="appInDmgInZip"
|
||||
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 -A6 -i "macos" | grep -i "FileNumber" | tr '"' "\n" | grep -i "FileNumber" )"
|
||||
appNewVersion="$(eval "$( echo $downloadURL | sed -E 's/.*(MajorVersion.*BuildVersion=[0-9]*).*/\1/' | sed 's/&//g' )" ; ((MajorVersion++)) ; ((MajorVersion--)); ((MinorVersion++)) ; ((MinorVersion--)); ((PatchVersion++)) ; ((PatchVersion--)); ((BuildVersion++)) ; ((BuildVersion--)); echo "${MajorVersion}.${MinorVersion}.${PatchVersion}-b${BuildVersion}")"
|
||||
expectedTeamID="P6CDJZR997"
|
||||
;;
|
||||
|
||||
9
fragments/labels/duodevicehealth.sh
Normal file
9
fragments/labels/duodevicehealth.sh
Normal file
@@ -0,0 +1,9 @@
|
||||
duodevicehealth)
|
||||
name="Duo Device Health"
|
||||
type="pkgInDmg"
|
||||
downloadURL="https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg"
|
||||
appNewVersion=$(curl -fsLIXGET "https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg" | grep -i "^content-disposition" | sed -e 's/.*filename\=\"DuoDeviceHealth\-\(.*\)\.dmg\".*/\1/')
|
||||
appName="Duo Device Health.app"
|
||||
expectedTeamID="FNN8Z5JMFP"
|
||||
;;
|
||||
|
||||
@@ -3,6 +3,7 @@ egnyte)
|
||||
name="Egnyte Connect"
|
||||
type="pkg"
|
||||
downloadURL="https://egnyte-cdn.egnyte.com/egnytedrive/mac/en-us/latest/EgnyteConnectMac.pkg"
|
||||
appNewVersion=$(curl -fs "https://egnyte-cdn.egnyte.com/egnytedrive/mac/en-us/versions/default.xml" | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' | cut -d '"' -f 2)
|
||||
expectedTeamID="FELUD555VC"
|
||||
blockingProcesses=( NONE )
|
||||
;;
|
||||
|
||||
@@ -2,7 +2,8 @@ firefox)
|
||||
name="Firefox"
|
||||
type="dmg"
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US"
|
||||
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
||||
|
||||
@@ -2,7 +2,8 @@ firefox_da)
|
||||
name="Firefox"
|
||||
type="dmg"
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=da"
|
||||
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
printlog "WARNING for ERROR: Label firefox, firefox_da and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
||||
|
||||
@@ -19,7 +19,8 @@ firefox_intl)
|
||||
printlog "Download not found for '$userLanguage', using default ('en-US')."
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-latest-ssl&os=osx"
|
||||
fi
|
||||
appNewVersion=$(curl -fsIL $downloadURL | awk -F releases/ '/Location:/ {split($2,a,"/"); print a[1]}')
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
||||
|
||||
@@ -3,7 +3,8 @@ firefoxesrpkg)
|
||||
name="Firefox"
|
||||
type="pkg"
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-esr-pkg-latest-ssl&os=osx"
|
||||
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i "^location" | awk '{print $2}' | sed -E 's/.*releases\/([0-9.]*)esr.*/\1/g')
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "FIREFOX_ESR")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
;;
|
||||
|
||||
@@ -19,7 +19,8 @@ firefoxesr_intl)
|
||||
printlog "Download not found for '$userLanguage', using default ('en-US')."
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=osx"
|
||||
fi
|
||||
appNewVersion=$(curl -fsIL $downloadURL | awk -F releases/ '/Location:/ {split($2,a,"esr/"); print a[1]}')
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
||||
|
||||
@@ -2,7 +2,8 @@ firefoxpkg)
|
||||
name="Firefox"
|
||||
type="pkg"
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
|
||||
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
;;
|
||||
|
||||
@@ -18,7 +18,8 @@ firefoxpkg_intl)
|
||||
printlog "Download not found for that language. Using en-US" WARN
|
||||
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
|
||||
fi
|
||||
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i location | cut -d "/" -f7)
|
||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
||||
expectedTeamID="43AQ936H96"
|
||||
blockingProcesses=( firefox )
|
||||
;;
|
||||
|
||||
10
fragments/labels/googlechromeenterprise.sh
Normal file
10
fragments/labels/googlechromeenterprise.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
googlechromeenterprise)
|
||||
name="Google Chrome"
|
||||
type="pkg"
|
||||
downloadURL="https://dl.google.com/dl/chrome/mac/universal/stable/gcem/GoogleChrome.pkg"
|
||||
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}')
|
||||
expectedTeamID="EQHXZ8M8AV"
|
||||
updateTool="/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/MacOS/GoogleSoftwareUpdateAgent"
|
||||
updateToolArguments=( -runMode oneshot -userInitiated YES )
|
||||
updateToolRunAsCurrentUser=1
|
||||
;;
|
||||
@@ -3,8 +3,13 @@ googledrivefilestream)
|
||||
# credit: Isaac Ordonez, Mann consulting (@mannconsulting)
|
||||
name="Google Drive File Stream"
|
||||
type="pkgInDmg"
|
||||
packageID="com.google.drivefs"
|
||||
if [[ $(arch) == "arm64" ]]; then
|
||||
packageID="com.google.drivefs.arm64"
|
||||
elif [[ $(arch) == "i386" ]]; then
|
||||
packageID="com.google.drivefs.x86_64"
|
||||
fi
|
||||
downloadURL="https://dl.google.com/drive-file-stream/GoogleDriveFileStream.dmg" # downloadURL="https://dl.google.com/drive-file-stream/GoogleDrive.dmg"
|
||||
blockingProcesses=( "Google Docs" "Google Drive" "Google Sheets" "Google Slides" )
|
||||
appName="Google Drive.app"
|
||||
expectedTeamID="EQHXZ8M8AV"
|
||||
;;
|
||||
|
||||
@@ -2,9 +2,8 @@ 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)
|
||||
downloadURL="https://download-mac.grammarly.com/Grammarly.dmg"
|
||||
expectedTeamID="W8F64X92K3"
|
||||
appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4)
|
||||
# appName="Grammarly Installer.app"
|
||||
installerTool="Grammarly Installer.app"
|
||||
CLIInstaller="Grammarly Installer.app/Contents/MacOS/Grammarly Desktop"
|
||||
|
||||
8
fragments/labels/ipswupdater.sh
Normal file
8
fragments/labels/ipswupdater.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
ipswupdater)
|
||||
name="IPSW Updater"
|
||||
type="zip"
|
||||
ipswupdaterVersions=$(curl -fs "https://ipsw.app/download/updates.php?current_version=0.9.16")
|
||||
downloadURL=$(getJSONValue "$ipswupdaterVersions" "[0].url")
|
||||
appNewVersion=$(getJSONValue "$ipswupdaterVersions" "[0].version")
|
||||
expectedTeamID="YRW6NUGA63"
|
||||
;;
|
||||
@@ -2,6 +2,7 @@ marathon)
|
||||
name="Marathon"
|
||||
type="dmg"
|
||||
archiveName="Marathon-[0-9.]*-Mac.dmg"
|
||||
versionKey="CFBundleVersion"
|
||||
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
|
||||
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
|
||||
expectedTeamID="E8K89CXZE7"
|
||||
|
||||
@@ -2,6 +2,7 @@ marathon2)
|
||||
name="Marathon 2"
|
||||
type="dmg"
|
||||
archiveName="Marathon2-[0-9.]*-Mac.dmg"
|
||||
versionKey="CFBundleVersion"
|
||||
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
|
||||
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
|
||||
expectedTeamID="E8K89CXZE7"
|
||||
|
||||
@@ -2,6 +2,7 @@ marathoninfinity)
|
||||
name="Marathon Infinity"
|
||||
type="dmg"
|
||||
archiveName="MarathonInfinity-[0-9.]*-Mac.dmg"
|
||||
versionKey="CFBundleVersion"
|
||||
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
|
||||
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
|
||||
expectedTeamID="E8K89CXZE7"
|
||||
|
||||
@@ -2,6 +2,10 @@ miro)
|
||||
# credit: @matins
|
||||
name="Miro"
|
||||
type="dmg"
|
||||
downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg"
|
||||
if [[ $(arch) == arm64 ]]; then
|
||||
downloadURL="https://desktop.miro.com/platforms/darwin-arm64/Miro.dmg"
|
||||
elif [[ $(arch) == i386 ]]; then
|
||||
downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg"
|
||||
fi
|
||||
expectedTeamID="M3GM7MFY7U"
|
||||
;;
|
||||
|
||||
8
fragments/labels/mmhmm.sh
Normal file
8
fragments/labels/mmhmm.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
mmhmm)
|
||||
name="mmhmm"
|
||||
type="pkg"
|
||||
downloadURL="https://updates.mmhmm.app/mac/mmhmm.pkg"
|
||||
curlOptions=( -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15" )
|
||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://help.mmhmm.app/hc/en-us/articles/4420969712151-mmhmm-for-Mac" | grep 'The latest version of mmhmm for Mac is <strong>*' | sed -e 's/.*\<strong\>\(.*\)\.\<\/strong\>.*/\1/')
|
||||
expectedTeamID="M3KUT44L48"
|
||||
;;
|
||||
7
fragments/labels/nordlayer.sh
Normal file
7
fragments/labels/nordlayer.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
nordlayer)
|
||||
# credit: Taboc741 (https://github.com/taboc741)
|
||||
name="NordLayer"
|
||||
type="pkg"
|
||||
downloadURL="https://downloads.nordlayer.com/mac/latest/NordLayer.pkg"
|
||||
expectedTeamID="W5W395V82Y"
|
||||
;;
|
||||
@@ -4,9 +4,10 @@ notion)
|
||||
type="dmg"
|
||||
if [[ $(arch) == "arm64" ]]; then
|
||||
downloadURL="https://www.notion.so/desktop/apple-silicon/download"
|
||||
appNewVersion=$( curl -fsIL "https://www.notion.so/desktop/apple-silicon/download" | grep -i "^location" | awk '{print $2}' | sed -e 's/.*Notion\-\(.*\)\-arm64.dmg.*/\1/' )
|
||||
elif [[ $(arch) == "i386" ]]; then
|
||||
downloadURL="https://www.notion.so/desktop/mac/download"
|
||||
appNewVersion=$( curl -fsIL "https://www.notion.so/desktop/mac/download" | grep -i "^location" | awk '{print $2}' | sed -e 's/.*Notion\-\(.*\).dmg.*/\1/' )
|
||||
fi
|
||||
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | tr -d '\r\n' | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g' )
|
||||
expectedTeamID="LBQJ96FQ8D"
|
||||
;;
|
||||
|
||||
7
fragments/labels/prune.sh
Normal file
7
fragments/labels/prune.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
prune)
|
||||
name="Prune"
|
||||
type="zip"
|
||||
downloadURL=$(downloadURLFromGit BIG-RAT Prune)
|
||||
appNewVersion=$(versionFromGit BIG-RAT Prune)
|
||||
expectedTeamID="PS2F6S478M"
|
||||
;;
|
||||
@@ -1,6 +1,6 @@
|
||||
ringcentralapp)
|
||||
# credit: Isaac Ordonez, Mann consulting (@mannconsulting)
|
||||
name="Ringcentral"
|
||||
name="RingCentral"
|
||||
type="pkg"
|
||||
if [[ $(arch) != "i386" ]]; then
|
||||
downloadURL="https://app.ringcentral.com/download/RingCentral-arm64.pkg"
|
||||
@@ -8,5 +8,5 @@ ringcentralapp)
|
||||
downloadURL="https://app.ringcentral.com/download/RingCentral.pkg"
|
||||
fi
|
||||
expectedTeamID="M932RC5J66"
|
||||
blockingProcesses=( "Ringcentral" )
|
||||
blockingProcesses=( "RingCentral" )
|
||||
;;
|
||||
|
||||
@@ -2,7 +2,7 @@ sublimetext)
|
||||
# credit: Søren Theilgaard (@theilgaard)
|
||||
name="Sublime Text"
|
||||
type="zip"
|
||||
downloadURL="$(curl -fs https://www.sublimetext.com/download | grep -io "https://download.*_mac.zip")"
|
||||
downloadURL="$(curl -fs "https://www.sublimetext.com/download_thanks?target=mac#direct-downloads" | grep -io "https://download.*_mac.zip" | head -1)"
|
||||
appNewVersion=$(curl -fs https://www.sublimetext.com/download | grep -i -A 4 "id.*changelog" | grep -io "Build [0-9]*")
|
||||
expectedTeamID="Z6D26JE4Y4"
|
||||
;;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
talkdeskcallbar)
|
||||
name="Callbar"
|
||||
type="dmg"
|
||||
appNewVersion=$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p')
|
||||
talkdeskcallbarVersions=$(curl -fsL "https://downloadcallbar.talkdesk.com/release_metadata.json")
|
||||
appNewVersion=$(getJSONValue "$talkdeskcallbarVersions" "version")
|
||||
downloadURL=https://downloadcallbar.talkdesk.com/Callbar-${appNewVersion}.dmg
|
||||
expectedTeamID="YGGJX44TB8"
|
||||
;;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
talkdeskcxcloud)
|
||||
name="Talkdesk"
|
||||
type="dmg"
|
||||
appNewVersion=$(curl -fs https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json | sed -n -e 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p' | head -n 1)
|
||||
talkdeskcxcloudVersions=$(curl -fs "https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json")
|
||||
appNewVersion=$(getJSONValue "$talkdeskcxcloudVersions" "[0].version")
|
||||
downloadURL="https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-${appNewVersion}.dmg"
|
||||
expectedTeamID="YGGJX44TB8"
|
||||
;;
|
||||
|
||||
7
fragments/labels/whatroute.sh
Normal file
7
fragments/labels/whatroute.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
whatroute)
|
||||
name="WhatRoute"
|
||||
type="zip"
|
||||
downloadURL="$(curl -fs https://www.whatroute.net/whatroute2appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | cut -d '"' -f2)"
|
||||
appNewVersion="$(curl -fs https://www.whatroute.net/whatroute2appcast.xml | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | cut -d '"' -f2)"
|
||||
expectedTeamID="H5879E8LML"
|
||||
;;
|
||||
@@ -1,11 +1,11 @@
|
||||
wireshark)
|
||||
name="Wireshark"
|
||||
type="dmg"
|
||||
if [[ $(arch) == i386 ]]; then
|
||||
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20Latest%20Intel%2064.dmg"
|
||||
elif [[ $(arch) == arm64 ]]; then
|
||||
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20Latest%20Arm%2064.dmg"
|
||||
fi
|
||||
appNewVersion=$(curl -fs https://www.wireshark.org/download.html | grep -i "href.*_stable" | sed -E 's/.*\(([0-9.]*)\).*/\1/g')
|
||||
if [[ $(arch) == i386 ]]; then
|
||||
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20$appNewVersion%20Intel%2064.dmg"
|
||||
elif [[ $(arch) == arm64 ]]; then
|
||||
downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20$appNewVersion%20Arm%2064.dmg"
|
||||
fi
|
||||
expectedTeamID="7Z6EMTD2C6"
|
||||
;;
|
||||
|
||||
@@ -1 +1 @@
|
||||
9.2
|
||||
10.0beta1
|
||||
|
||||
7
googleadseditor.sh
Normal file
7
googleadseditor.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
googleadseditor)
|
||||
name="Google Ads Editor"
|
||||
type="dmg"
|
||||
downloadURL="https://dl.google.com/adwords_editor/google_ads_editor.dmg"
|
||||
appNewVersion=""
|
||||
expectedTeamID="EQHXZ8M8AV"
|
||||
;;
|
||||
@@ -1,6 +1,6 @@
|
||||
# How to assemble Installomator.sh
|
||||
|
||||
Since the Installomator.sh script has grown to over 3000 lines, its management on git has become very unwieldy. The single file with all the logic and the data required to download and install the applications creates constant merge conflicts which add to the workload of the repo admins, especially when part of the team is working on the logic of the script while we still get PRs to add labels.
|
||||
Since the Installomator.sh script has grown to over 5000 lines, its management on git has become very unwieldy. The single file with all the logic and the data required to download and install the applications creates constant merge conflicts which add to the workload of the repo admins, especially when part of the team is working on the logic of the script while we still get PRs to add labels.
|
||||
|
||||
Because of that we have split the main script into multiple files which are easier to manage. Having multiple files results in less merge conflicts.
|
||||
|
||||
@@ -53,7 +53,7 @@ Once you are certain that your new custom label works, you can use the code from
|
||||
|
||||
The `Installomator.sh` script at the root of the repo does not really get involved in your building and testing. Similarly, if you want to apply, test, and contribute changes to the script's logic, you should modify the fragment file in question and test using the assemble script.
|
||||
|
||||
Pull requests against the `Installomator.sh` script in the root of the repo will be rejected. (Excepting the backlog of existing PRs.)
|
||||
Pull requests against the `Installomator.sh` script in the root of the repo will be rejected.
|
||||
|
||||
## How do I contribute new or modified labels back to the Installomator project?
|
||||
|
||||
@@ -70,11 +70,13 @@ If you have multiple labels (or other changes) you want to contribute, please cr
|
||||
|
||||
Once your Pull Request is merged into the main repo, you can pull the change to your local repo, push it to your fork, and delete the branch, because it should be fully merged.
|
||||
|
||||
When you have multiple labels or changes, please create a separate issue for each label or change, unless they are closely related
|
||||
|
||||
|
||||
### When you are not familiar with git and GitHub
|
||||
|
||||
Create an Issue in the Installomator repo and include the contents of your custom label file.
|
||||
We have a tutorial on [How to create Pull Requests in GitHub](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue).
|
||||
|
||||
If you have multiple labels, please create a separate issue for each label.
|
||||
|
||||
## Fragments
|
||||
|
||||
@@ -109,7 +111,7 @@ All the contents of the label files in `labels` (and any custom label locations
|
||||
|
||||
Finally, the `main.sh` fragment contains most of the main logic.
|
||||
|
||||
The assemble script does not check _any_ of the files for syntax or completeness. You are responsible that everything fits together properly. (Pay special attention to remember the closing semi-colons `;;` in the label files.)
|
||||
The assemble script does not check _any_ of the files for syntax or completeness. You are responsible that everything fits together properly. (Pay special attention to remember the closing semi-colons `;;` and a final line break in the label files.)
|
||||
|
||||
## assemble.sh Usage
|
||||
|
||||
|
||||
@@ -127,6 +127,8 @@ if [[ $buildScript -eq 1 ]]; then
|
||||
echo "# copying script to $repo_dir/Installomator.sh"
|
||||
cp $destination_file $repo_dir/Installomator.sh
|
||||
chmod 755 $repo_dir/Installomator.sh
|
||||
# also update Labels.txt
|
||||
$repo_dir/Installomator.sh | tail -n +2 > $repo_dir/Labels.txt
|
||||
fi
|
||||
|
||||
# build a pkg when flag is set
|
||||
|
||||
Reference in New Issue
Block a user