135 Commits

Author SHA1 Message Date
Armin Briegel
4c38386c53 updated changelog 2021-10-14 15:42:20 +02:00
Armin Briegel
39f67c9e89 updated version number and readme 2021-10-14 15:40:16 +02:00
Armin Briegel
c40168f301 added yet one more missing return 2021-10-14 15:33:28 +02:00
Armin Briegel
e0a0b65b80 added missing newlines at end of file 2021-10-14 15:27:41 +02:00
Armin Briegel
d1923a4e7f Merge pull request #271 from Installomator/jetbrainsapps
updated jetbrains labels to new format derived from #253, closes #253
2021-10-14 15:10:35 +02:00
Armin Briegel
f0ff1e6269 Merge branch 'pr/263' into dev 2021-10-14 15:09:10 +02:00
Armin Briegel
b6092df909 removed a spurious ) in perimeter81 2021-10-14 15:08:54 +02:00
Armin Briegel
2fb80375ec Merge branch 'pr/260' into dev, closes #260 2021-10-14 14:57:38 +02:00
Armin Briegel
796f8a4e25 fix issues with tageditor and tom4aconverter labels 2021-10-14 14:57:20 +02:00
Armin Briegel
310140d64f updated type for jabradirect, #260, closes #255 2021-10-14 14:52:42 +02:00
Armin Briegel
8db95578c7 Merge branch 'dev' of github.com:Installomator/Installomator into dev 2021-10-14 14:49:44 +02:00
Armin Briegel
ba7edf8d02 commented a debugging echo in assemble.sh 2021-10-14 14:49:23 +02:00
Armin Briegel
c0a0b37f7e Merge pull request #273 from Installomator/Theile-labels-0.7_4
Theile labels 0.7 4_part 2
2021-10-14 14:45:17 +02:00
Armin Briegel
cd27693125 Merge pull request #266 from bartreardon/dialog
Added label for Dialog
2021-10-14 14:41:31 +02:00
Armin Briegel
adbe98718f Merge pull request #264 from chrisi51/dev
add new label for cloudya app from nfon
2021-10-14 14:40:26 +02:00
Armin Briegel
fcde9e2e4c Merge pull request #270 from homebysix/zoom-id
Fix identifier of Zoom installer
2021-10-14 14:36:38 +02:00
Søren Theilgaard
ded8787da5 blender 2021-10-14 08:54:20 +02:00
Søren Theilgaard
05039ae826 zoomgov and yed 2021-10-14 08:48:27 +02:00
Armin Briegel
7c0a4ef04a updated jetbrains labels to new format derived from #253 2021-10-13 16:07:19 +02:00
Søren Theilgaard
8feb2e5578 Update zoom.sh 2021-10-13 14:17:24 +02:00
Armin Briegel
47dfa8fdf4 Merge pull request #250 from Installomator/editorconfig
Create .editorconfig
2021-10-13 11:48:39 +02:00
Elliot Jordan
425722acda Fix identifier of Zoom installer 2021-10-12 21:17:39 -07:00
Adam Codega
0b3d703e02 Merge pull request #267 from adibue/adibue-add-utm
Added new label for 'utm'
2021-10-12 10:40:54 -04:00
Armin Briegel
4b53da0fb7 Merge pull request #248 from Installomator/Handling-of-App-Store-apps
App from App Store
2021-10-11 10:52:43 +02:00
Armin Briegel
bf5f5ca936 Merge pull request #249 from Installomator/BLOCKING_PROCESS_ACTION=tell_user
BLOCKING_PROCESS_ACTION=tell_user
2021-10-11 10:34:49 +02:00
Armin Briegel
1b6d82e880 Merge pull request #258 from Installomator/Theile-labels-0.7_4
Theile-labels-0.7_4
2021-10-11 10:30:11 +02:00
Adrian Bühler
c9ca70e836 Added label for 'utm'
Added label for 'utm' to fragments
2021-10-08 16:29:08 +02:00
Bart Reardon
0530cba21b added newline to end of file 2021-10-08 09:02:33 +11:00
Bart Reardon
0adc02ba0c added label for the app "dialog" 2021-10-08 09:00:31 +11:00
Jake
f16ee55ed6 Revert "update download url"
This reverts commit 97ec3efedb.
2021-10-07 13:20:51 -04:00
Christian Hillebrand
a67ba0934f support probably longer version numbers 2021-10-07 18:44:36 +02:00
Christian Hillebrand
26ae2b3139 case-insensitive 2021-10-07 18:41:36 +02:00
Jake
97ec3efedb update download url
The download url was displaying all mirrors, this will pull just the first one.
2021-10-07 11:18:13 -04:00
Jake
b0ed6432f6 fix version compare 2021-10-07 10:55:00 -04:00
Christian Hillebrand
174a2b5a46 add cloudya app from nfon 2021-10-07 11:12:48 +02:00
Jake
9edc256caa fix typo in name 2021-10-06 15:59:06 -04:00
Jake
8e9488c68f update appNewVersion for Perimeter81 2021-10-06 15:26:32 -04:00
Jake
5799c5d432 create perimeter81.sh 2021-10-06 11:48:51 -04:00
Søren Theilgaard
d97c84dd0c calibre and vmwarehorizonclient 2021-09-30 08:55:52 +02:00
Søren Theilgaard
effd470ce7 screamingfrogseospider
Fixed downloadURL, added appNewVersion
2021-09-27 11:38:11 +02:00
John Hutchison
38326e87e3 Merge branch 'Installomator:dev' into dev 2021-09-21 10:58:49 -04:00
John Hutchison
e8464c5c47 New Labels
New lablels for Jamf Connect Confifugration, Tag Editor, and ToM4AConverter
2021-09-21 10:55:22 -04:00
John Hutchison
9dbac45621 Fix Jabra Direct 2021-09-21 10:54:59 -04:00
Søren Theilgaard
db3e109c21 Merge pull request #257 from fleish/dev
Added Sync
2021-09-21 15:47:30 +02:00
Søren Theilgaard
039de95b5c Update sync.sh 2021-09-21 15:47:12 +02:00
Søren Theilgaard
028fbd60d6 Update sync.sh 2021-09-21 15:45:42 +02:00
Søren Theilgaard
50bc2fd708 microsoftazurestorageexplorer 2021-09-21 13:29:20 +02:00
Søren Theilgaard
c37daf5b7b azurestorageexplorer 2021-09-21 11:52:18 +02:00
Søren Theilgaard
468ac0de6e Update handbrake.sh 2021-09-21 11:05:41 +02:00
Søren Theilgaard
c21dde0074 Update handbrake.sh 2021-09-21 10:41:59 +02:00
Søren Theilgaard
6267736abf Update figma.sh 2021-09-21 08:39:09 +02:00
fleish
7803d1afe2 Merge branch 'Installomator:dev' into dev 2021-09-20 15:50:05 -07:00
Fleish
54b57cc83d Merge branch 'dev' of github.com:fleish/Installomator into dev 2021-09-20 15:47:52 -07:00
Fleish
8077cb91b9 Added Sync 2021-09-20 15:47:35 -07:00
Søren Theilgaard
261c92946e Update README.md 2021-09-19 08:15:59 +02:00
Søren Theilgaard
28dc87fdbe Merge pull request #254 from fleish/dev
Added Keybase
2021-09-19 08:13:36 +02:00
Søren Theilgaard
33e2e829c5 Update keybase.sh 2021-09-19 08:11:25 +02:00
Søren Theilgaard
968e3b3ab0 Update README.md 2021-09-19 08:07:52 +02:00
Søren Theilgaard
b2cd2b74be Update README.md 2021-09-19 08:06:09 +02:00
Søren Theilgaard
66b1f9a319 Update README.md 2021-09-19 07:59:32 +02:00
Søren Theilgaard
f0d3828054 Notes for contribution 2021-09-19 07:56:57 +02:00
Fleish
4bc03223ae Re-adding Keybase 2021-09-17 15:00:52 -07:00
Fleish
394b8dabdc Revert "Added Keybase"
This reverts commit 66b4769369.
2021-09-17 14:54:31 -07:00
Søren Theilgaard
bc046cfc07 Update README.md 2021-09-17 22:52:24 +02:00
Søren Theilgaard
897a85a54c Merge branch 'dev' into Handling-of-App-Store-apps 2021-09-17 22:44:05 +02:00
Søren Theilgaard
2b0cb9dbc0 IGNORE_APP_STORE_APPS 2021-09-17 22:40:35 +02:00
Søren Theilgaard
c8ae2aa6f0 Update header.sh 2021-09-17 22:24:57 +02:00
Søren Theilgaard
63af53fb34 zeplin 2021-09-17 21:11:07 +02:00
Søren Theilgaard
498a8a28af Merge pull request #247 from Installomator/Theile-labels-0.7_3
Theile-labels-0.7_3
2021-09-17 20:06:01 +02:00
Søren Theilgaard
20be5255a7 Merge branch 'dev' into Theile-labels-0.7_3 2021-09-17 20:05:49 +02:00
Søren Theilgaard
eb501486e4 Update buildLabel.sh 2021-09-17 20:02:21 +02:00
Fleish
66b4769369 Added Keybase 2021-09-17 10:14:44 -07:00
Søren Theilgaard
65b82cf20d rodeconnect 2021-09-17 15:35:31 +02:00
Søren Theilgaard
9a57ecc66b rodeconnect 2021-09-17 15:33:07 +02:00
Søren Theilgaard
fcbe0626da montereyblocker 2021-09-17 12:31:48 +02:00
Søren Theilgaard
82a1ed8180 figma intel & arm 2021-09-15 16:31:16 +02:00
Søren Theilgaard
1e971cc063 Update buildLabel.sh 2021-09-15 16:27:02 +02:00
Søren Theilgaard
49c7338e9d figma universal 2021-09-15 16:16:50 +02:00
Søren Theilgaard
a74d3106c0 authydesktop 2021-09-10 23:05:50 +02:00
Søren Theilgaard
a4e4c38423 Update buildLabel.sh 2021-09-10 22:16:27 +02:00
Søren Theilgaard
d603a2805b Create parallels.sh 2021-09-09 21:25:33 +02:00
Søren Theilgaard
84e26c07e2 Create .editorconfig 2021-09-09 19:26:38 +02:00
Søren Theilgaard
8fdfaadf6d Update CHANGELOG.md 2021-09-09 19:15:51 +02:00
Søren Theilgaard
0c0977e61f Update CHANGELOG.md 2021-09-09 17:26:28 +02:00
Søren Theilgaard
012b4db5f6 Update microsoftofficebusinesspro.sh 2021-09-09 17:00:31 +02:00
Søren Theilgaard
d250e5a8b9 Update CHANGELOG.md 2021-09-08 22:08:09 +02:00
Søren Theilgaard
7abcf51a55 Warning. 2021-09-08 20:19:56 +02:00
Søren Theilgaard
dbf0d34ac6 BLOCKING_PROCESS_ACTION=tell_user
Default now is `BLOCKING_PROCESS_ACTION=tell_user`
2021-09-08 20:16:09 +02:00
Søren Theilgaard
f65010ecb4 App from App Store
In this branch I demand that INSTALL=force if an App Store app should be replaced. Best example is Slack that will loose all settings if it is replaced. But we can still do it and the log will show what we are doing.
2021-09-08 20:11:36 +02:00
Søren Theilgaard
8a95e02d21 slack 2021-09-08 20:01:53 +02:00
Søren Theilgaard
e18361b36c zohoworkdrive 2021-09-08 13:36:23 +02:00
Søren Theilgaard
a2305d5c8c Merge pull request #245 from Installomator/Theile-labels-0.7
Theile labels 0.7
2021-09-08 10:58:13 +02:00
Søren Theilgaard
1250812203 Update Labels.txt 2021-09-08 10:53:29 +02:00
Søren Theilgaard
2829a466dc Merge pull request #240 from apizz/wallyezflash
Add Wally EZ Flash Tool
2021-09-08 10:51:06 +02:00
Søren Theilgaard
7a4feb0ee7 Merge pull request #242 from jnichols35/dev
add parsec label
2021-09-08 10:46:30 +02:00
Søren Theilgaard
071947cb38 Merge pull request #243 from adibue/adibue-spotify-arm64
Got 'spotify' ready for Apple Silicon
2021-09-08 10:40:16 +02:00
Søren Theilgaard
8c8ea13ad3 lulu is on github 2021-09-08 10:20:57 +02:00
Søren Theilgaard
70337cab58 splashtopsos 2021-09-08 10:08:42 +02:00
Adrian Bühler
614e412f01 Got 'spotify' ready for Apple Silicon
'spotify' is now ready for Apple Silicon
2021-09-06 16:15:05 +02:00
Jake
f5730ec79b add parsec label 2021-09-03 18:11:58 -04:00
Søren Theilgaard
14f3725ed9 zohoworkdrive 2021-09-03 15:58:46 +02:00
Søren Theilgaard
44a64b83b9 buildLabel.sh and airtame 2021-09-03 14:01:06 +02:00
Søren Theilgaard
a7ec5b9531 Update wallyezflash.sh 2021-08-30 09:29:31 +02:00
AP Orlebeke
2b06ba1f22 Create wallyezflash.sh 2021-08-30 00:02:35 -04:00
Søren Theilgaard
ca17fa3c6b Update checkLabels.sh 2021-08-27 19:52:51 +02:00
Søren Theilgaard
e0459f3d06 Update buildLabel.sh 2021-08-27 14:55:12 +02:00
Søren Theilgaard
a8f3944e65 Labels 2021-08-27 14:41:55 +02:00
Søren Theilgaard
409c84b7ef Labels 2021-08-27 14:30:00 +02:00
Søren Theilgaard
d69a102334 labels 2021-08-27 12:22:39 +02:00
Søren Theilgaard
aa761f2583 Labels fixed 2021-08-27 12:16:51 +02:00
Søren Theilgaard
71fbb7fe0c Update CHANGELOG.md 2021-08-27 11:30:14 +02:00
Søren Theilgaard
719a78ae73 Update Labels.txt 2021-08-27 11:26:08 +02:00
Søren Theilgaard
6d6c011d30 buildLabel.sh 2021-08-27 11:20:46 +02:00
Søren Theilgaard
0513a2d6a5 Merge branch 'dev' of https://github.com/Installomator/Installomator into dev 2021-08-27 11:18:05 +02:00
Søren Theilgaard
cfaac1eb28 more label syncs 2021-08-27 11:17:41 +02:00
Søren Theilgaard
c97a0545d3 Merge pull request #238 from Installomator/Theile-labels-0.7
Theile labels 0.7
2021-08-27 11:10:08 +02:00
Søren Theilgaard
546c5d6aa1 Merge pull request #236 from Installomator/Theile-CheckLabels
Theile check labels
2021-08-27 11:09:31 +02:00
Søren Theilgaard
3bcb9e7e32 labels sync 2021-08-27 11:04:33 +02:00
Søren Theilgaard
04880d329e smartgit 2021-08-27 10:11:07 +02:00
Søren Theilgaard
d167a51ee6 Now reads labels from first line of label files
Instead of reading the name of the file
2021-08-26 16:14:51 +02:00
Søren Theilgaard
a87f0a6ec4 Current labels in 0.7.1b1 2021-08-26 16:11:22 +02:00
Søren Theilgaard
c37229d763 Update buildCaseStatement.sh 2021-08-25 13:53:17 +02:00
Søren Theilgaard
1d634b9a80 Update buildCaseStatement.sh 2021-08-25 13:16:57 +02:00
Søren Theilgaard
a481b17a78 Update checkLabels.sh 2021-08-25 13:06:47 +02:00
Søren Theilgaard
30bd4797ae Update extractLabels.sh 2021-08-25 12:54:53 +02:00
Søren Theilgaard
5585f8c558 Renaming to checkLabels.sh 2021-08-25 12:00:39 +02:00
Søren Theilgaard
21b9709f6b Renaming to checkLabels.sh 2021-08-25 12:00:17 +02:00
Søren Theilgaard
db5c9ded56 Update CheckLabels.sh 2021-08-25 11:56:23 +02:00
Søren Theilgaard
4859efa72f Moved to “utils”. 2021-08-25 11:49:13 +02:00
Søren Theilgaard
a20770314e extractLabels.shshould work from “utils” folder
And added description of function of script.
2021-08-25 11:36:43 +02:00
Søren Theilgaard
4ddc8a7f92 Update .gitignore 2021-08-25 10:55:35 +02:00
Søren Theilgaard
400be8581e checkLabels.sh script
With a bit of improvements to explaining that labels are small case letters with numbers, “_”, and “-”. And nothing else.
2021-08-25 10:54:03 +02:00
Armin Briegel
553d06826d Merge pull request #235 from pro4tlzz/imazingprofileeditor.sh
imazingprofileeditor - Update credits
2021-08-24 16:07:33 +02:00
Bilal Habib
11a06eb264 Update credits 2021-08-24 15:03:00 +01:00
Søren Theilgaard
1dc42a22a4 change to zsh
Then we can use zsh to somewhat clean up the label name (at least get rid of special characters from the URL).
2021-08-24 15:49:35 +02:00
86 changed files with 1215 additions and 346 deletions

13
.editorconfig Normal file
View File

@@ -0,0 +1,13 @@
# EditorConfig is awesome: https://EditorConfig.org
# Unix-style newlines and whitespace cleanup
[*]
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
insert_final_newline = true
# shell formatting
[*.{sh,bash,zsh}]
indent_style = space
indent_size = 4

1
.gitignore vendored
View File

@@ -11,3 +11,4 @@ scratch/
# do include Installomator .pkg files # do include Installomator .pkg files
#!Installomator-*.pkg #!Installomator-*.pkg
checkLabelCurrent.sh

View File

@@ -1,9 +1,11 @@
## v0.7 - pre-release ## v0.7
- default for `BLOCKING_PROCESS_ACTION`is now `BLOCKING_PROCESS_ACTION=tell_user` and not `prompt_user`. It will demand the user to quit the app to get it updated, and not present any option to skip it. In considering various use cases in different MDM solutions this is the best option going forward. Users usually choose to update, and is most often not bothered much with this information. If it's absoultely a bad time, then they can move the dialog box to the side, and click it when ready.
- script is now assembled from fragments. This helps avoid merging conflicts on git and allows the core team to work on the script logic while also accepting new labels. See the "Assemble Script ReadMe" for details. - script is now assembled from fragments. This helps avoid merging conflicts on git and allows the core team to work on the script logic while also accepting new labels. See the "Assemble Script ReadMe" for details.
- We now detect App Store installed apps, and we do not replace them automatically. An example is Slack that will loose all settings if it is suddenly changed from App Store version to the "web" version (they differ in the handling of settings files). If `INSTALL=force` then we will replace the App Store app. We log all this.
- Change in finding installed apps. We now look in /Applications and /Applications/Utilities first. If not found there, we use spotligt to find it. (We discovered a problem when a user has Parallels Windows installed with Microsoft Edge in it. Then Installomator wanted to update the app all the time, becaus spotligt found that Windows version of the app that Parallels created.) - Change in finding installed apps. We now look in /Applications and /Applications/Utilities first. If not found there, we use spotligt to find it. (We discovered a problem when a user has Parallels Windows installed with Microsoft Edge in it. Then Installomator wanted to update the app all the time, becaus spotligt found that Windows version of the app that Parallels created.)
- Added bunch of new labels - Added bunch of new labels, and improved others.
- Improved `buildCaseStatement.sh` a lot. It is a great start when figuring out how to create a new label for an app, or a piece of software. - Renamed `buildCaseStatement.sh` to `buildLabel.sh` and improved it a lot. It is a great start when figuring out how to create a new label for an app, or a piece of software. Look at the tutorials in our wiki.
- Mosyle changed their app name from Business to Self-Service - Mosyle changed their app name from Business to Self-Service
## v0.6 - 2021-07-14 ## v0.6 - 2021-07-14

View File

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

View File

@@ -9,6 +9,7 @@ adobereaderdc-install
adobereaderdc-update adobereaderdc-update
aircall aircall
airserver airserver
airtame
aldente aldente
alfred alfred
alttab alttab
@@ -22,12 +23,14 @@ applenyfonts
applesfcompact applesfcompact
applesfmono applesfmono
applesfpro applesfpro
applesfsymbols
aquaskk aquaskk
arq7 arq7
asana asana
atext atext
atom atom
audacity audacity
authydesktop
autodmg autodmg
autopkgr autopkgr
aviatrix aviatrix
@@ -43,18 +46,24 @@ bitwarden
blender blender
bluejeans bluejeans
boxdrive boxdrive
boxsync
boxtools boxtools
brave
caffeine caffeine
cakebrew cakebrew
calibre calibre
camostudio camostudio
camtasia camtasia
cisdem-documentreader
citrixworkspace citrixworkspace
clevershare2 clevershare2
clickshare clickshare
cloudya
code42 code42
coderunner coderunner
colourcontrastanalyser colourcontrastanalyser
cormorant
craftmanager
cryptomator cryptomator
cyberduck cyberduck
dangerzone dangerzone
@@ -66,7 +75,7 @@ depnotify
desktoppr desktoppr
detectxswift detectxswift
devonthink devonthink
dialpad dialog
discord discord
docker docker
drift drift
@@ -89,6 +98,7 @@ firefoxesr
firefoxesr_intl firefoxesr_intl
firefoxesrpkg firefoxesrpkg
firefoxpkg firefoxpkg
flowjo
front front
fsmonitor fsmonitor
gimp gimp
@@ -118,23 +128,30 @@ hyper
icons icons
imazingprofileeditor imazingprofileeditor
inkscape inkscape
insomnia
installomator_theile installomator_theile
intellijideace intellijideace
istatmenus istatmenus
iterm2 iterm2
jabradirect jabradirect
jamfconnect jamfconnect
jamfconnectconfiguration
jamfmigrator jamfmigrator
jamfpppcutility jamfpppcutility
jamfreenroller jamfreenroller
jetbrainsclion
jetbrainsdatagrip jetbrainsdatagrip
jetbrainsintellijidea
jetbrainsintellijideace jetbrainsintellijideace
jetbrainsphpstorm jetbrainsphpstorm
jetbrainspycharm jetbrainspycharm
jetbrainspycharmce jetbrainspycharmce
jetbrainstoolbox
jetbrainswebstorm
karabinerelements karabinerelements
keepassxc keepassxc
keka keka
keybase
keyboardmaestro keyboardmaestro
klokki klokki
knockknock knockknock
@@ -153,6 +170,7 @@ malwarebytes
mattermost mattermost
menumeters menumeters
microsoftautoupdate microsoftautoupdate
microsoftazurestorageexplorer
microsoftcompanyportal microsoftcompanyportal
microsoftdefenderatp microsoftdefenderatp
microsoftedge microsoftedge
@@ -174,7 +192,9 @@ microsoftvisualstudiocode
microsoftword microsoftword
microsoftyammer microsoftyammer
miro miro
montereyblocker
musescore musescore
muzzle
netnewswire netnewswire
nextcloud nextcloud
nomad nomad
@@ -198,10 +218,13 @@ openvpnconnect
openvpnconnectv3 openvpnconnectv3
opera opera
pacifist pacifist
parsec
pdfsam pdfsam
perimeter81
pitch pitch
plantronicshub plantronicshub
platypus platypus
plisteditpro
postman postman
prism9 prism9
privileges privileges
@@ -223,11 +246,14 @@ ringcentralmeetings
ringcentralphone ringcentralphone
rocket rocket
rocketchat rocketchat
rodeconnect
royaltsx royaltsx
rstudio rstudio
santa santa
scaleft scaleft
screamingfrogseospider
screencloudplayer screencloudplayer
screenflick
sfsymbols sfsymbols
shield shield
sidekick sidekick
@@ -238,6 +264,7 @@ sizeup
sketch sketch
skype skype
slack slack
smartgit
snagit snagit
snagit2020 snagit2020
snagit2021 snagit2021
@@ -246,13 +273,16 @@ sonos
sonoss1 sonoss1
sonoss2 sonoss2
sourcetree sourcetree
splashtopsos
spotify spotify
sublimetext sublimetext
supportapp supportapp
suspiciouspackage suspiciouspackage
swiftruntimeforcommandlinetools swiftruntimeforcommandlinetools
sync
tableaudesktop tableaudesktop
tableaureader tableaureader
tageditor
taskpaper taskpaper
teamviewer teamviewer
teamviewerhost teamviewerhost
@@ -264,8 +294,8 @@ textmate
theunarchiver theunarchiver
things things
thunderbird thunderbird
tigervnc
toggltrack toggltrack
tom4aconverter
torbrowser torbrowser
trex trex
tunnelbear tunnelbear
@@ -273,6 +303,7 @@ tunnelblick
umbrellaroamingclient umbrellaroamingclient
uniconverter uniconverter
universaltypeclient universaltypeclient
utm
vagrant vagrant
vanilla vanilla
veracrypt veracrypt
@@ -283,10 +314,10 @@ vivaldi
vlc vlc
vmwarehorizonclient vmwarehorizonclient
vscodium vscodium
wallyezflash
webex webex
webexmeetings webexmeetings
webexteams webexteams
webexteams
whatsapp whatsapp
wickrme wickrme
wickrpro wickrpro
@@ -295,10 +326,14 @@ wwdc
xeroxphaser7800 xeroxphaser7800
xink xink
xquartz xquartz
yed
yubikeymanagerqt yubikeymanagerqt
zappy zappy
zeplin
zohoworkdrive
zoom zoom
zoomclient zoomclient
zoomgov
zoomrooms zoomrooms
zulujdk11 zulujdk11
zulujdk13 zulujdk13

View File

@@ -4,7 +4,7 @@ _The one installer script to rule them all._
![](https://img.shields.io/github/v/release/scriptingosx/Installomator)&nbsp;![](https://img.shields.io/github/downloads/scriptingosx/Installomator/latest/total)&nbsp;![](https://img.shields.io/badge/macOS-10.14%2B-success)&nbsp;![](https://img.shields.io/github/license/scriptingosx/Installomator) ![](https://img.shields.io/github/v/release/scriptingosx/Installomator)&nbsp;![](https://img.shields.io/github/downloads/scriptingosx/Installomator/latest/total)&nbsp;![](https://img.shields.io/badge/macOS-10.14%2B-success)&nbsp;![](https://img.shields.io/github/license/scriptingosx/Installomator)
This script is in the "we find it useful, it is working for us" stage. This script is in the we find it useful, it is working for us stage.
Your production and deployment environment will be different, please test thoroughly before rolling it out to your production. Your production and deployment environment will be different, please test thoroughly before rolling it out to your production.
@@ -12,12 +12,16 @@ I have put a lot of work into making it stable and safe, but I cannot - of cours
## Support and Contributing ## Support and Contributing
__Please note, that if you are contributing to this project with new labels or other suggestions in PRs, please put your changes in the fragmented files, not the full `Installomator.sh` script. The full script is now a build of the fragments, and will be overwritten. See the REAMDME.md file in the `utils` directory for detailed instructions.__
Discussion, support and advice around Installomator happens in the `#installomator` channel in the [MacAdmins.org Slack](https://macadmins.org). Go there for support questions. Discussion, support and advice around Installomator happens in the `#installomator` channel in the [MacAdmins.org Slack](https://macadmins.org). Go there for support questions.
Do not create an issue just when you have a questions, but do file an issue or pull request for bugs or wrong behavior. When in doubt, ask in the above Slack channel. Do not create an issue just when you have a questions, but do file an issue or pull request for bugs or wrong behavior. When in doubt, ask in the above Slack channel.
If you have added a new label, then please file a pull request. (and Thank you!) If you have added a new label, then please file a pull request. (and Thank you!)
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.
## More reading ## More reading
There are a few interesting post on Installomator on my weblog: There are a few interesting post on Installomator on my weblog:
@@ -131,7 +135,9 @@ googlechrome)
When you know how to extract these pieces of information from the application and/or download, then you can add an application to Installomator. When you know how to extract these pieces of information from the application and/or download, then you can add an application to Installomator.
The script buildCaseStatement.sh can help with the label creation. The script `buildCaseStatement.sh` can help with the label creation.
Please note: Labels should be named in small caps, numbers 0-9, “-”, and “_”. No other characters allowed.
### Not specific to a management system ### Not specific to a management system
@@ -227,6 +233,7 @@ There are eight options:
- `prompt_user`: (default) show a user dialog for each blocking process found abort after three attempts to quit (only if user accepts to quit the apps, otherwise the update is cancelled). - `prompt_user`: (default) show a user dialog for each blocking process found abort after three attempts to quit (only if user accepts to quit the apps, otherwise the update is cancelled).
- `prompt_user_then_kill`: show a user dialog for each blocking process found, attempt to quit two times, kill the process finally. - `prompt_user_then_kill`: show a user dialog for each blocking process found, attempt to quit two times, kill the process finally.
- `prompt_user_loop`: Like prompt-user, but clicking "Not Now", will just wait an hour, and then it will ask again. - `prompt_user_loop`: Like prompt-user, but clicking "Not Now", will just wait an hour, and then it will ask again.
WARNING! It might block the MDM agent on the machine, as the scripts gets stuct in waiting until the hour has passed, possibly blocking for other management actions in this time.
- `tell_user`: User will be showed a notification about the important update, but user is only allowed to quit and continue, and then we ask the app to quit. - `tell_user`: User will be showed a notification about the important update, but user is only allowed to quit and continue, and then we ask the app to quit.
- `tell_user_then_kill`: Show dialog 2 times, and if the quitting fails, the blocking processes will be killed. - `tell_user_then_kill`: Show dialog 2 times, and if the quitting fails, the blocking processes will be killed.
- `kill`: kill process without prompting or giving the user a chance to save. - `kill`: kill process without prompting or giving the user a chance to save.
@@ -252,6 +259,12 @@ The `LOGO` variable is used for the icon shown in dialog boxes. There are these
- `addigy`: Addigy - `addigy`: Addigy
Path can also be set in the command call, and if file exists, it will be used, like `LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"` (spaces are escaped). Path can also be set in the command call, and if file exists, it will be used, like `LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"` (spaces are escaped).
### App Store apps handling
Default is `IGNORE_APP_STORE_APPS=no`
__options:__
- `no`: If installed app is from App Store (which include VPP installed apps) it will not be touched, no matter it's version (default)
- `yes`: Replace App Store (and VPP) version of app and handle future updates using Installomator, even if latest version. Shouldnt give any problems for the user in most cases. Known bad example: Slack will loose all settings.
### Install behavior (force installation) ### Install behavior (force installation)
Since we now make a version checking, and only installs the software if the version is different, an `INSTALL` variable can be used to force the installation: Since we now make a version checking, and only installs the software if the version is different, an `INSTALL` variable can be used to force the installation:

View File

@@ -1,10 +0,0 @@
cdef)
# cdef currently not signed
# credit: Søren Theilgaard (@theilgaard)
name="cdef"
type="pkg"
downloadURL=$(downloadURLFromGit Shufflepuck cdef)
appNewVersion=$(versionFromGit Shufflepuck cdef)
#expectedTeamID="EM3ER8T33A"
;;

View File

@@ -0,0 +1,8 @@
parallels)
# This downloads an installer app, so not really useful here
name="Parallels Desktop"
type="dmg"
downloadURL="https://parallels.com/directdownload/pd15/"
appNewVersion=$(curl -fsIL "${downloadURL}" | grep -i ^location | tail -1 | cut -d "/" -f6)
expectedTeamID="4C6364ACXT"
;;

View File

@@ -173,6 +173,16 @@ getAppVersion() {
#appversion=$(mdls -name kMDItemVersion -raw $installedAppPath ) #appversion=$(mdls -name kMDItemVersion -raw $installedAppPath )
appversion=$(defaults read $installedAppPath/Contents/Info.plist $versionKey) #Not dependant on Spotlight indexing appversion=$(defaults read $installedAppPath/Contents/Info.plist $versionKey) #Not dependant on Spotlight indexing
printlog "found app at $installedAppPath, version $appversion" printlog "found app at $installedAppPath, version $appversion"
# Is current app from App Store
if [[ -d "$installedAppPath"/Contents/_MASReceipt ]];then
printlog "Installed $appName is from App Store, use “IGNORE_APP_STORE_APPS=yes” to replace."
if [[ $IGNORE_APP_STORE_APPS == "yes" ]]; then
printlog "Replacing App Store apps, no matter the version"
appversion=0
else
cleanupAndExit 1 "App previously installed from App Store, and we respect that"
fi
fi
else else
printlog "could not determine location of $appName" printlog "could not determine location of $appName"
fi fi

View File

@@ -34,7 +34,7 @@ NOTIFY=success
# behavior when blocking processes are found # behavior when blocking processes are found
BLOCKING_PROCESS_ACTION=prompt_user BLOCKING_PROCESS_ACTION=tell_user
# options: # options:
# - ignore continue even when blocking processes are found # - ignore continue even when blocking processes are found
# - quit app will be told to quit nicely, if running # - quit app will be told to quit nicely, if running
@@ -51,6 +51,9 @@ BLOCKING_PROCESS_ACTION=prompt_user
# - prompt_user_loop # - prompt_user_loop
# Like prompt-user, but clicking "Not Now", will just wait an hour, # Like prompt-user, but clicking "Not Now", will just wait an hour,
# and then it will ask again. # and then it will ask again.
# WARNING! It might block the MDM agent on the machine, as
# the scripts gets stuct in waiting until the hour has passed,
# possibly blocking for other management actions in this time.
# - tell_user User will be showed a notification about the important update, # - tell_user User will be showed a notification about the important update,
# but user is only allowed to quit and continue, and then we # but user is only allowed to quit and continue, and then we
# ask the app to quit. # ask the app to quit.
@@ -68,7 +71,20 @@ LOGO=appstore
# - mosyleb Mosyle Business # - mosyleb Mosyle Business
# - mosylem Mosyle Manager (Education) # - mosylem Mosyle Manager (Education)
# - addigy Addigy # - addigy Addigy
# path can also be set in the command call, and if file exists, it will be used, like 'LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"' (spaces are escaped). # path can also be set in the command call, and if file exists, it will be used.
# Like 'LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"'
# (spaces have to be escaped).
# App Store apps handling
IGNORE_APP_STORE_APPS=no
# options:
# - no If installed app is from App Store (which include VPP installed apps)
# it will not be touched, no matter it's version (default)
# - yes Replace App Store (and VPP) version of app and handle future
# updates using Installomator, even if latest version.
# Shouldnt give any problems for the user in most cases.
# Known bad example: Slack will loose all settings.
# install behavior # install behavior

View File

@@ -0,0 +1,7 @@
airtame)
name="Airtame"
type="dmg"
downloadURL="$(curl -fs https://airtame.com/download/ | grep -i platform=mac | head -1 | grep -o -i -E "https.*" | cut -d '"' -f1)"
appNewVersion="$(curl -fsIL "${downloadURL}" | grep -i ^location | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g')"
expectedTeamID="4TPSP88HN2"
;;

View File

@@ -1,7 +1,7 @@
applenyfonts) applenyfonts)
name="Apple New York Font Collection" name="Apple New York Font Collection"
type="pkgInDmg" type="pkgInDmg"
downloadURL="https://devimages-cdn.apple.com/design/resources/download/NY-Font.dmg" downloadURL="https://devimages-cdn.apple.com/design/resources/download/NY.dmg"
packageID="com.apple.pkg.NYFonts" packageID="com.apple.pkg.NYFonts"
expectedTeamID="Development Update" expectedTeamID="Development Update"
;; ;;

View File

@@ -1,7 +1,7 @@
applesfcompact) applesfcompact)
name="San Francisco Compact" name="San Francisco Compact"
type="pkgInDmg" type="pkgInDmg"
downloadURL="https://devimages-cdn.apple.com/design/resources/download/SF-Font-Compact.dmg" downloadURL="https://devimages-cdn.apple.com/design/resources/download/SF-Compact.dmg"
packageID="com.apple.pkg.SanFranciscoCompact" packageID="com.apple.pkg.SanFranciscoCompact"
expectedTeamID="Development Update" expectedTeamID="Development Update"
;; ;;

View File

@@ -1,7 +1,7 @@
applesfpro) applesfpro)
name="San Francisco Pro" name="San Francisco Pro"
type="pkgInDmg" type="pkgInDmg"
downloadURL="https://devimages-cdn.apple.com/design/resources/download/SF-Font-Pro.dmg" downloadURL="https://devimages-cdn.apple.com/design/resources/download/SF-Pro.dmg"
packageID="com.apple.pkg.SanFranciscoPro" packageID="com.apple.pkg.SanFranciscoPro"
expectedTeamID="Development Update" expectedTeamID="Development Update"
;; ;;

View File

@@ -1,3 +1,4 @@
applesfsymbols|\
sfsymbols) sfsymbols)
name="SF Symbols" name="SF Symbols"
type="pkgInDmg" type="pkgInDmg"

View File

@@ -0,0 +1,7 @@
authydesktop)
name="Authy Desktop"
type="dmg"
downloadURL="https://electron.authy.com/download?channel=stable&arch=x64&platform=darwin&version=latest&product=authy"
appNewVersion="$(curl -sfL --output /dev/null -r 0-0 "${downloadURL}" --remote-header-name --remote-name -w "%{url_effective}\n" | grep -o -E '([a-zA-Z0-9\_.%-]*)\.(dmg|pkg|zip|tbz)$' | sed -E 's/.*-([0-9.]*)\.dmg/\1/g')"
expectedTeamID="9EVH78F4V4"
;;

View File

@@ -1,7 +1,7 @@
blender) blender)
name="blender" name="blender"
type="dmg" type="dmg"
downloadURL=$(redirect=$(curl -sfL https://www.blender.org/download/ | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) && curl -sfL "$redirect" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) downloadURL=$(redirect=$(curl -sfL https://www.blender.org/download/ | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) && curl -sfL "$redirect" | sed 's/.*href="//' | sed 's/".*//' | grep -m1 .dmg)
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)-.*/\1/g' ) appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)-.*/\1/g' )
expectedTeamID="68UA947AUU" expectedTeamID="68UA947AUU"
;; ;;

View File

@@ -0,0 +1,6 @@
boxsync)
name="Box Sync"
type="dmg"
downloadURL="https://e3.boxcdn.net/box-installers/sync/Sync+4+External/Box%20Sync%20Installer.dmg"
expectedTeamID="M683GB7CPW"
;;

View File

@@ -1,6 +1,6 @@
boxtools) boxtools)
name="Box Tools" name="Box Tools"
type="pkg" type="pkg"
downloadURL="https://box-installers.s3.amazonaws.com/boxedit/mac/currentrelease/BoxToolsInstaller.pkg" downloadURL="https://box-installers.s3.amazonaws.com/boxedit/mac/currentrelease/BoxToolsInstaller.pkg"
expectedTeamID="M683GB7CPW" expectedTeamID="M683GB7CPW"
;; ;;

View File

@@ -4,5 +4,9 @@ calibre)
type="dmg" type="dmg"
downloadURL="https://calibre-ebook.com/dist/osx" downloadURL="https://calibre-ebook.com/dist/osx"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g' ) appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g' )
#Maybe change to GitHub for this title. Looks like 5.28.0 release is the first to also release a binary, so maybe see what the next release will be to decide if we should switch.
#downloadURL=$(downloadURLFromGit kovidgoyal calibre )
#appNewVersion=$(versionFromGit kovidgoyal calibre )
#archiveName="OS X dmg"
expectedTeamID="NTY7FVCEKP" expectedTeamID="NTY7FVCEKP"
;; ;;

View File

@@ -0,0 +1,7 @@
cisdem-documentreader)
name="cisdem-documentreader"
type="dmg"
downloadURL="https://download.cisdem.com/cisdem-documentreader.dmg"
expectedTeamID="5HGV8EX6BQ"
appName="Cisdem Document Reader.app"
;;

View File

@@ -1,8 +1,7 @@
clevershare2) clevershare2)
# credit: Søren Theilgaard (@theilgaard)
name="Clevershare" name="Clevershare"
type="dmg" type="dmg"
downloadURL=$(curl -fs https://archive.clevertouch.com/clevershare2g | grep -i "_Mac" | tr '"' "\n" | grep "^http.*dmg") downloadURL=$(curl -fs https://www.clevertouch.com/eu/clevershare2g | grep -i -o -E "https.*Mac.*\.dmg")
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z-]*_Mac\.([0-9.]*)\.[0-9]*\.dmg$/\1/g' ) appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z-]*_Mac\.([0-9.]*)\.[0-9]*\.dmg$/\1/g' )
expectedTeamID="P76M9BE8DQ" expectedTeamID="P76M9BE8DQ"
;; ;;

View File

@@ -0,0 +1,7 @@
cloudya)
name="Cloudya"
type="appInDmgInZip"
downloadURL="$(curl -fs https://www.nfon.com/de/service/downloads | grep -i -E -o "https://cdn.cloudya.com/Cloudya-[.0-9]+-mac.zip")"
appNewVersion="$(curl -fs https://www.nfon.com/de/service/downloads | grep -i -E -o "Cloudya Desktop App MAC [0-9.]*" | sed 's/^.*\ \([^ ]\{0,7\}\)$/\1/g')"
expectedTeamID="X26F74J8TH"
;;

View File

@@ -1,8 +1,8 @@
colourcontrastanalyser) colourcontrastanalyser)
name="Colour Contrast Analyser (CCA)" name="Colour Contrast Analyser (CCA)"
type="dmg" type="dmg"
downloadURL=$(downloadURLFromGit ThePacielloGroup CCAe) downloadURL=$(downloadURLFromGit ThePacielloGroup CCAe)
appNewVersion=$(versionFromGit ThePacielloGroup CCAe) appNewVersion=$(versionFromGit ThePacielloGroup CCAe)
expectedTeamID="34RS4UC3M6" expectedTeamID="34RS4UC3M6"
blockingProcesses=( NONE ) blockingProcesses=( NONE )
;; ;;

View File

@@ -0,0 +1,8 @@
craftmanager)
name="CraftManager"
type="zip"
#downloadURL="https://craft-assets.invisionapp.com/CraftManager/production/CraftManager.zip"
downloadURL="$(curl -fs https://craft-assets.invisionapp.com/CraftManager/production/appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
appNewVersion="$(curl -fs https://craft-assets.invisionapp.com/CraftManager/production/appcast.xml | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | head -1 | cut -d '"' -f 2)"
expectedTeamID="VRXQSNCL5W"
;;

View File

@@ -0,0 +1,8 @@
dialog)
name="Dialog"
type="pkg"
downloadURL=$(downloadURLFromGit bartreardon Dialog-public )
appNewVersion=$(versionFromGit bartreardon Dialog-public )
expectedTeamID="PWA5E9TQ59"
;;

View File

@@ -1,6 +1,11 @@
figma) figma)
name="Figma" name="Figma"
type="zip" type="zip"
downloadURL="https://desktop.figma.com/mac/Figma.zip" if [[ $(arch) == "arm64" ]]; then
downloadURL="https://desktop.figma.com/mac-arm/Figma.zip"
elif [[ $(arch) == "i386" ]]; then
downloadURL="https://desktop.figma.com/mac/Figma.zip"
fi
appNewVersion="$(curl -fsL https://desktop.figma.com/mac/RELEASE.json | awk -F '"' '{ print $8 }')"
expectedTeamID="T8RA8NE3B7" expectedTeamID="T8RA8NE3B7"
;; ;;

View File

@@ -0,0 +1,8 @@
flowjo)
name="FlowJo-OSX64-10.8.0"
type="dmg"
downloadURL="$(curl -fs "https://www.flowjo.com/solutions/flowjo/downloads" | grep -i -o -E "https.*\.dmg")"
appNewVersion=$(echo "${downloadURL}" | tr "-" "\n" | grep dmg | sed -E 's/([0-9.]*)\.dmg/\1/g')
expectedTeamID="C79HU5AD9V"
appName="FlowJo.app"
;;

View File

@@ -4,11 +4,11 @@ googlechrome)
if [[ $(arch) != "i386" ]]; then if [[ $(arch) != "i386" ]]; then
printlog "Architecture: arm64 (not i386)" printlog "Architecture: arm64 (not i386)"
downloadURL="https://dl.google.com/chrome/mac/universal/stable/GGRO/googlechrome.dmg" downloadURL="https://dl.google.com/chrome/mac/universal/stable/GGRO/googlechrome.dmg"
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}') # Credit: William Smith (@meck) appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}')
else else
printlog "Architecture: i386" printlog "Architecture: i386"
downloadURL="https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg" downloadURL="https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg"
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac,stable/{print $3; exit}') # Credit: William Smith (@meck) appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac,stable/{print $3; exit}')
fi fi
expectedTeamID="EQHXZ8M8AV" expectedTeamID="EQHXZ8M8AV"
;; ;;

View File

@@ -1,8 +1,7 @@
handbrake) handbrake)
name="HandBrake" name="HandBrake"
type="dmg" type="dmg"
downloadURL=$(curl --silent --fail "https://api.github.com/repos/HandBrake/HandBrake/releases/latest" \ downloadURL=$(downloadURLFromGit HandBrake HandBrake )
| awk -F '"' "/browser_download_url/ && /dmg/ && ! /sig/ && ! /CLI/ { print \$4 }") appNewVersion=$(versionFromGit HandBrake HandBrake )
appNewVersion=$(curl -sf "https://api.github.com/repos/HandBrake/HandBrake/releases/latest" | awk -F '"' "/tag_name/ { print \$4 }")
expectedTeamID="5X9DE89KYV" expectedTeamID="5X9DE89KYV"
;; ;;

View File

@@ -1,5 +1,5 @@
imazingprofileeditor) imazingprofileeditor)
# Credit: Bilal Habib @Pro4TLZZZ # Credit: Bilal Habib @Pro4TLZZ
name="iMazing Profile Editor" name="iMazing Profile Editor"
type="dmg" type="dmg"
downloadURL="https://downloads.imazing.com/mac/iMazing-Profile-Editor/iMazingProfileEditorMac.dmg" downloadURL="https://downloads.imazing.com/mac/iMazing-Profile-Editor/iMazingProfileEditorMac.dmg"

View File

@@ -0,0 +1,7 @@
insomnia)
name="insomnia"
type="dmg"
downloadURL=$(downloadURLFromGit kong insomnia)
appNewVersion=$(versionFromGit kong insomnia)
expectedTeamID="FX44YY62GV"
;;

View File

@@ -1,6 +1,6 @@
jabradirect) jabradirect)
name="Jabra Direct" name="Jabra Direct"
type="dmg" type="pkgInDmg"
downloadURL="https://jabraxpressonlineprdstor.blob.core.windows.net/jdo/JabraDirectSetup.dmg" downloadURL="https://jabraxpressonlineprdstor.blob.core.windows.net/jdo/JabraDirectSetup.dmg"
expectedTeamID="55LV32M29R" expectedTeamID="55LV32M29R"
appNewVersion=$(curl -fs https://www.jabra.com/Support/release-notes/release-note-jabra-direct | grep -o "Jabra Direct macOS:*.*<" | head -1 | cut -d ":" -f2 | cut -d " " -f2 | cut -d "<" -f1) appNewVersion=$(curl -fs https://www.jabra.com/Support/release-notes/release-note-jabra-direct | grep -o "Jabra Direct macOS:*.*<" | head -1 | cut -d ":" -f2 | cut -d " " -f2 | cut -d "<" -f1)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,8 +1,13 @@
jetbrainsphpstorm) jetbrainsphpstorm)
# credit: Casey Jensen (@cajenson01 on MacAdmins Slack)Appended by Skylar Damiano @catdad on MacAdmins Slack name="PHPStorm"
name="JetBrains PHPStorm"
type="dmg" type="dmg"
downloadURL=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=PS&latest=true&type=release" | grep -o "mac*.*.dmg" | cut -d '"' -f5) jetbrainscode="PS"
appNewVersion=$(curl -fs "https://data.services.jetbrains.com/products/releases?code=PS&latest=true&type=release" | grep -o 'version*.*,' | cut -d '"' -f3) if [[ $(arch) == i386 ]]; then
jetbrainsdistribution="mac"
elif [[ $(arch) == arm64 ]]; then
jetbrainsdistribution="macM1"
fi
downloadURL="https://download.jetbrains.com/product?code=${jetbrainscode}&latest&distribution=${jetbrainsdistribution}"
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "location" | tail -1 | sed -E 's/.*\/[a-zA-Z-]*-([0-9.]*).*[-.].*dmg/\1/g' )
expectedTeamID="2ZEFAR8TH3" expectedTeamID="2ZEFAR8TH3"
;; ;;

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,6 @@
keybase)
name="Keybase"
type="dmg"
downloadURL=$(curl -s https://keybase.io/docs/the_app/install_macos | grep data-target | cut -d '"' -f2)
expectedTeamID="99229SGT5K"
;;

View File

@@ -1,7 +1,9 @@
lulu) lulu)
name="LuLu" name="LuLu"
type="dmg" type="dmg"
downloadURL=$( curl -fs "https://objective-see.com/products/lulu.html" | grep https | grep "$type" | head -1 | tr '"' "\n" | grep "^http" ) #downloadURL=$( curl -fs "https://objective-see.com/products/lulu.html" | grep https | grep "$type" | head -1 | tr '"' "\n" | grep "^http" )
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*_([0-9.]*)\..*/\1/g' ) #appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*_([0-9.]*)\..*/\1/g' )
downloadURL=$(downloadURLFromGit objective-see LuLu)
appNewVersion=$(versionFromGit objective-see LuLu)
expectedTeamID="VBG97UB4TA" expectedTeamID="VBG97UB4TA"
;; ;;

View File

@@ -0,0 +1,8 @@
microsoftazurestorageexplorer)
name="Microsoft Azure Storage Explorer"
type="zip"
downloadURL=$(downloadURLFromGit microsoft AzureStorageExplorer )
appNewVersion=$(versionFromGit microsoft AzureStorageExplorer )
expectedTeamID="UBF8T346G9"
archiveName="Mac_StorageExplorer.zip"
;;

View File

@@ -2,6 +2,7 @@ microsoftofficebusinesspro)
name="MicrosoftOfficeBusinessPro" name="MicrosoftOfficeBusinessPro"
type="pkg" type="pkg"
downloadURL="https://go.microsoft.com/fwlink/?linkid=2009112" downloadURL="https://go.microsoft.com/fwlink/?linkid=2009112"
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i location: | grep -o "/Microsoft_.*pkg" | cut -d "_" -f 3)
expectedTeamID="UBF8T346G9" expectedTeamID="UBF8T346G9"
# using MS PowerPoint as the 'stand-in' for the entire suite # using MS PowerPoint as the 'stand-in' for the entire suite
appName="Microsoft PowerPoint.app" appName="Microsoft PowerPoint.app"

View File

@@ -3,10 +3,8 @@ microsoftteams)
type="pkg" type="pkg"
packageID="com.microsoft.teams" packageID="com.microsoft.teams"
downloadURL="https://go.microsoft.com/fwlink/?linkid=869428" downloadURL="https://go.microsoft.com/fwlink/?linkid=869428"
#appNewVersion=$(curl -fs https://macadmins.software/latest.xml | xpath '//latest/package[id="com.microsoft.teams.standalone"]/version' 2>/dev/null | sed -E 's/<version>([0-9.]*) .*/\1/')
# Still using macadmin.software for version, as the path does not contain the version in a matching format. packageID can be used, but version is the same.
appNewVersion=$(curl -fs https://macadmins.software/latest.xml | xpath '//latest/package[id="com.microsoft.teams.standalone"]/version' 2>/dev/null | sed -E 's/<version>([0-9.]*) .*/\1/') appNewVersion=$(curl -fs https://macadmins.software/latest.xml | xpath '//latest/package[id="com.microsoft.teams.standalone"]/version' 2>/dev/null | sed -E 's/<version>([0-9.]*) .*/\1/')
# Looks like macadmin.software has package ID version. At least on 2021-05-28 version 1.00.411161 is matched on installed version and homepage. # Looks like macadmin.software has package ID version. At least on 202105-28 version 1.00.411161 is matched on installed version and homepage.
expectedTeamID="UBF8T346G9" expectedTeamID="UBF8T346G9"
blockingProcesses=( Teams "Microsoft Teams Helper" ) blockingProcesses=( Teams "Microsoft Teams Helper" )
# Commenting out msupdate as it is not really supported *yet* for teams # Commenting out msupdate as it is not really supported *yet* for teams

View File

@@ -0,0 +1,8 @@
montereyblocker)
name="montereyblocker"
type="pkg"
packageID="dk.envo-it.montereyblocker"
downloadURL=$(downloadURLFromGit Theile montereyblocker )
appNewVersion=$(versionFromGit Theile montereyblocker )
expectedTeamID="FXW6QXBFW5"
;;

View File

@@ -0,0 +1,7 @@
muzzle)
name="Muzzle"
type="zip"
downloadURL="https://muzzleapp.com/binaries/muzzle.zip"
appNewVersion=$(curl -fs https://muzzleapp.com/updates/ | grep -io 'h2.*Version.* [0-9.]*.*h2' | head -1 | sed -E 's/.*ersion *([0-9.]*).*/\1/g')
expectedTeamID="49EYHPJ4Q3"
;;

View File

@@ -0,0 +1,6 @@
parsec)
name="Parsec"
type="pkg"
downloadURL="https://builds.parsecgaming.com/package/parsec-macos.pkg"
expectedTeamID="Y9MY52XZDB"
;;

View File

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

View File

@@ -1,7 +1,7 @@
platypus) platypus)
name="Platypus" name="Platypus"
type="zip" type="zip"
downloadURL=$(downloadURLFromGit sveinbjornt Platypus) downloadURL=$(downloadURLFromGit sveinbjornt Platypus)
appNewVersion=$(versionFromGit sveinbjornt Platypus) appNewVersion=$(versionFromGit sveinbjornt Platypus)
expectedTeamID="55GP2M789L" expectedTeamID="55GP2M789L"
;; ;;

View File

@@ -3,5 +3,4 @@ prism9)
type="dmg" type="dmg"
downloadURL="https://cdn.graphpad.com/downloads/prism/9/InstallPrism9.dmg" downloadURL="https://cdn.graphpad.com/downloads/prism/9/InstallPrism9.dmg"
expectedTeamID="YQ2D36NS9M" expectedTeamID="YQ2D36NS9M"
Company="GraphPad Software"
;; ;;

View File

@@ -0,0 +1,8 @@
rodeconnect)
name="RODE Connect"
type="pkgInZip"
#packageID="com.rodeconnect.installer" #Versioned wrong as 0 in 1.1.0 pkg
downloadURL="https://cdn1.rode.com/rodeconnect_installer_mac.zip"
appNewVersion="$(curl -fs https://rode.com/software/rode-connect | grep -i -o ">Current version .*<" | cut -d " " -f4)"
expectedTeamID="Z9T72PWTJA"
;;

View File

@@ -1,7 +1,7 @@
royaltsx) royaltsx)
name="Royal TSX" name="Royal TSX"
type="dmg" type="dmg"
downloadURL=$(curl -fs https://royaltsx-v4.royalapps.com/updates_stable | xpath '//rss/channel/item[1]/enclosure/@url' 2>/dev/null | cut -d '"' -f 2) downloadURL=$(curl -fs https://royaltsx-v5.royalapps.com/updates_stable | xpath '//rss/channel/item[1]/enclosure/@url' 2>/dev/null | cut -d '"' -f 2)
appNewVersion=$(curl -fs https://royaltsx-v4.royalapps.com/updates_stable | xpath '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f 2) appNewVersion=$(curl -fs https://royaltsx-v5.royalapps.com/updates_stable | xpath '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f 2)
expectedTeamID="VXP8K9EDP6" expectedTeamID="VXP8K9EDP6"
;; ;;

View File

@@ -1,8 +1,8 @@
scaleft) scaleft)
name="ScaleFT" name="ScaleFT"
type="pkg" type="pkg"
downloadURL="https://dist.scaleft.com/client-tools/mac/latest/ScaleFT.pkg" downloadURL="https://dist.scaleft.com/client-tools/mac/latest/ScaleFT.pkg"
appNewVersion=$(curl -sf "https://dist.scaleft.com/client-tools/mac/" | awk '/dir/{i++}i==2' | sed -nre 's/^[^0-9]*(([0-9]+\.)*[0-9]+).*/\1/p') appNewVersion=$(curl -sf "https://dist.scaleft.com/client-tools/mac/" | awk '/dir/{i++}i==2' | sed -nre 's/^[^0-9]*(([0-9]+\.)*[0-9]+).*/\1/p')
expectedTeamID="HV2G9Z3RP5" expectedTeamID="HV2G9Z3RP5"
blockingProcesses=( ScaleFT ) blockingProcesses=( ScaleFT )
;; ;;

View File

@@ -1,6 +1,7 @@
screamingfrogseospider) screamingfrogseospider)
name="Screaming Frog SEO Spider" name="Screaming Frog SEO Spider"
type="dmg" type="dmg"
downloadURL="https://download.screamingfrog.co.uk/products/seo-spider/ScreamingFrogSEOSpider-14.3.dmg" downloadURL=$(curl -fs "https://www.screamingfrog.co.uk/wp-content/themes/screamingfrog/inc/download-modal.php" | grep -i -o "https.*\.dmg" | head -1)
appNewVersion=$(print "$downloadURL" | sed -E 's/https.*\/[a-zA-Z]*-([0-9.]*)\.dmg/\1/g')".0"
expectedTeamID="CAHEVC3HZC" expectedTeamID="CAHEVC3HZC"
;; ;;

View File

@@ -1,7 +1,7 @@
screencloudplayer) screencloudplayer)
# credit: AP Orlebeke (@apizz) # credit: AP Orlebeke (@apizz)
name="ScreenCloud Player" name="ScreenCloud Player"
type="dmg" type="dmg"
downloadURL=$(curl -sL "https://screencloud.com/download" | sed -n 's/^.*"url":"\([^"]*\)".*$/\1/p') downloadURL=$(curl -sL "https://screencloud.com/download" | sed -n 's/^.*"url":"\([^"]*\)".*$/\1/p')
expectedTeamID="3C4F953K6P" expectedTeamID="3C4F953K6P"
;; ;;

View File

@@ -1,15 +1,7 @@
sketch) sketch)
name="Sketch" name="Sketch"
type="zip" type="zip"
downloadURL=$(curl -sf https://www.sketch.com/downloads/mac/ | grep 'href="https://download.sketch.com' | sed -E 's/.*href=\"(.*)\".?/\1/g') downloadURL=$(curl -sf https://www.sketch.com/downloads/mac/ | grep 'href="https://download.sketch.com' | sed -E 's/.*href=\"(.*)\".?/\1/g')
appNewVersion=$(curl -fs https://www.sketch.com/updates/ | grep "Sketch Version" | head -1 | sed -E 's/.*Version ([0-9.]*)<.*/\1/g') # version from update page appNewVersion=$(curl -fs https://www.sketch.com/updates/ | grep "Sketch Version" | head -1 | sed -E 's/.*Version ([0-9.]*)<.*/\1/g') # version from update page
expectedTeamID="WUGMZZ5K46" expectedTeamID="WUGMZZ5K46"
;;
skype)
name="Skype"
type="dmg"
downloadURL="https://get.skype.com/go/getskype-skypeformac"
appNewVersion=$(curl -is "https://get.skype.com/go/getskype-skypeformac" | grep ocation: | grep -o "Skype-.*dmg" | cut -d "-" -f 2 | cut -d "." -f1-2)
expectedTeamID="AL798K98FX"
Company="Microsoft"
;; ;;

View File

@@ -0,0 +1,8 @@
skype)
name="Skype"
type="dmg"
downloadURL="https://get.skype.com/go/getskype-skypeformac"
appNewVersion=$(curl -is "https://get.skype.com/go/getskype-skypeformac" | grep ocation: | grep -o "Skype-.*dmg" | cut -d "-" -f 2 | cut -d "." -f1-2)
expectedTeamID="AL798K98FX"
Company="Microsoft"
;;

View File

@@ -2,11 +2,6 @@ slack)
name="Slack" name="Slack"
type="dmg" type="dmg"
downloadURL="https://slack.com/ssb/download-osx-universal" # Universal downloadURL="https://slack.com/ssb/download-osx-universal" # Universal
# if [[ $(arch) == "arm64" ]]; then appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | cut -d "/" -f6 )
# downloadURL="https://slack.com/ssb/download-osx-silicon"
# elif [[ $(arch) == "i386" ]]; then
# downloadURL="https://slack.com/ssb/download-osx"
# fi
appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | tr -d '\r\n' | sed -E 's/.*macos\/([0-9.]*)\/.*/\1/g' )
expectedTeamID="BQR82RBBHL" expectedTeamID="BQR82RBBHL"
;; ;;

View File

@@ -0,0 +1,7 @@
smartgit)
name="SmartGit"
type="dmg"
downloadURL="https://www.syntevo.com$(curl -fs "https://www.syntevo.com/smartgit/download/" | grep -i -o -E "/downloads/.*/smartgit.*\.dmg")"
appNewVersion="$(curl -fs "https://www.syntevo.com/smartgit/changelog.txt" | grep -i -E "SmartGit *[0-9.]* *.*" | head -1 | awk '{print $2}')"
expectedTeamID="PHMY45PTNW"
;;

View File

@@ -0,0 +1,6 @@
splashtopsos)
name="Splashtop SOS"
type="dmg"
downloadURL="https://download.splashtop.com/sos/SplashtopSOS.dmg"
expectedTeamID="CPQQ3AW49Y"
;;

View File

@@ -1,7 +1,11 @@
spotify) spotify)
name="Spotify" name="Spotify"
type="dmg" type="dmg"
downloadURL="https://download.scdn.co/Spotify.dmg" if [[ $(arch) == arm64 ]]; then
downloadURL="https://download.scdn.co/SpotifyARM64.dmg"
elif [[ $(arch) == i386 ]]; then
downloadURL="https://download.scdn.co/Spotify.dmg"
fi
# appNewVersion=$(curl -fs https://www.spotify.com/us/opensource/ | cat | grep -o "<td>.*.</td>" | head -1 | cut -d ">" -f2 | cut -d "<" -f1) # does not result in the same version as downloaded # appNewVersion=$(curl -fs https://www.spotify.com/us/opensource/ | cat | grep -o "<td>.*.</td>" | head -1 | cut -d ">" -f2 | cut -d "<" -f1) # does not result in the same version as downloaded
expectedTeamID="2FNC3A47ZF" expectedTeamID="2FNC3A47ZF"
;; ;;

7
fragments/labels/sync.sh Normal file
View File

@@ -0,0 +1,7 @@
sync)
name="Sync"
type="dmg"
downloadURL="https://www.sync.com/download/apple/Sync.dmg"
appNewVersion="$(curl -fs "https://www.sync.com/blog/category/desktop/feed/" | xpath '(//channel/item/title)[1]' 2>/dev/null | sed -E 's/^.* ([0-9.]*) .*$/\1/g')"
expectedTeamID="7QR39CMJ3W"
;;

View File

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

View File

@@ -1,6 +0,0 @@
tigervnc)
name="TigerVNC Viewer"
type="dmg"
downloadURL=https://dl.bintray.com/tigervnc/stable/$(curl -s -l https://dl.bintray.com/tigervnc/stable/ | grep .dmg | sed 's/<pre><a onclick="navi(event)" href="://' | sed 's/".*//' | sort -V | tail -1)
expectedTeamID="S5LX88A9BW"
;;

View File

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

7
fragments/labels/utm.sh Normal file
View File

@@ -0,0 +1,7 @@
utm)
name="UTM"
type="dmg"
downloadURL=$(downloadURLFromGit utmapp UTM )
appNewVersion=$(versionFromGit utmapp UTM )
expectedTeamID="WDNLXAD4W8"
;;

View File

@@ -1,8 +1,7 @@
vmwarehorizonclient) vmwarehorizonclient)
# credit: Oh4sh0 https://github.com/Oh4sh0
name="VMware Horizon Client" name="VMware Horizon Client"
type="dmg" type="dmg"
downloadURL=$(curl -fs "https://my.vmware.com/channel/public/api/v1.0/dlg/details?locale=en_US&downloadGroup=CART21FQ2_MAC_800&productId=1027&rPId=48989" | grep -o 'Url.*..dmg"' | cut -d '"' -f3) downloadURL=$(curl -fsL "https://my.vmware.com/channel/public/api/v1.0/dlg/details?locale=en_US&downloadGroup=CART21FQ2_MAC_800&productId=1027&rPId=48989" | grep -o 'Url.*..dmg"' | cut -d '"' -f3)
appNewVersion=$(curl -fs "https://my.vmware.com/channel/public/api/v1.0/dlg/details?locale=en_US&downloadGroup=CART21FQ2_MAC_800&productId=1027&rPId=48989" | sed 's/.*-\(.*\)-.*/\1/') appNewVersion=$(curl -fsL "https://my.vmware.com/channel/public/api/v1.0/dlg/details?locale=en_US&downloadGroup=CART21FQ2_MAC_800&productId=1027&rPId=48989" | sed 's/.*-\(.*\)-.*/\1/')
expectedTeamID="EG7KH642X6" expectedTeamID="EG7KH642X6"
;; ;;

View File

@@ -0,0 +1,8 @@
wallyezflash)
name="Wally"
type="dmg"
downloadURL="https://configure.zsa.io/wally/osx"
#appNewVersion=$(curl -fsIL "${downloadURL}" | grep -i ^location | head -1 | sed -E 's/.*\/[a-zA-Z\-]*-([0-9.]*)\..*/\1/g')
expectedTeamID="V32BWKSNYH"
#versionKey="CFBundleVersion"
;;

View File

@@ -1,7 +0,0 @@
webexteams)
# credit: Erik Stam (@erikstam)
name="Webex Teams"
type="dmg"
downloadURL="https://binaries.webex.com/WebexTeamsDesktop-MACOS-Gold/WebexTeams.dmg"
expectedTeamID="DE8Y96K9QP"
;;

8
fragments/labels/yed.sh Normal file
View File

@@ -0,0 +1,8 @@
yed)
# This label assumes accept of these T&Cs: https://www.yworks.com/resources/yed/license.html
name="yEd"
type="dmg"
downloadURL="https://www.yworks.com"$(curl -fs "https://www.yworks.com/products/yed/download" | grep -o -e "/resources/.*\.dmg" | tr " " '\n' | grep -o -e "/resources/.*\.dmg")
appNewVersion=$(echo $downloadURL | sed -E 's/.*-([0-9.]*)_.*\.dmg/\1/')
expectedTeamID="JD89S887M2"
;;

View File

@@ -0,0 +1,7 @@
zeplin)
name="Zeplin"
type="zip"
downloadURL="https://zpl.io/download-mac"
appNewVersion="$(curl -fs "https://api.appcenter.ms/v0.1/public/sparkle/apps/8926efff-e734-b6d3-03d0-9f41d90c34fc" | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | cut -d '"' -f 2)"
expectedTeamID="8U3Y4X5WDQ"
;;

View File

@@ -0,0 +1,10 @@
zohoworkdrive)
# Using this label expects you to agree to these:
# License Areemant: https://www.zoho.com/workdrive/zohoworkdrive-license-agreement.html
# Privacy policy: https://www.zoho.com/privacy.html
name="Zoho WorkDrive"
type="dmg"
lines=$(curl -fs https://www.zohowebstatic.com/sites/all/themes/zoho/scripts/workdrive.js | grep files-accl.zohopublic.com | tr '"' "\n")
downloadURL=$(echo "$lines" | grep -i "files-accl.zohopublic.com")$(echo "$lines" | grep -i -A17 "files-accl.zohopublic.com" | grep -i -A2 macintosh | tail -1)
expectedTeamID="TZ824L8Y37"
;;

View File

@@ -1,9 +1,7 @@
zoom) zoom)
# credit: Isaac Ordonez, Mann consulting (@mannconsulting) name="zoom.us"
name="Zoom.us"
type="pkg" type="pkg"
downloadURL="https://zoom.us/client/latest/ZoomInstallerIT.pkg" downloadURL="https://zoom.us/client/latest/ZoomInstallerIT.pkg"
appNewVersion=$(curl -fs -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" "https://zoom.us/download" | grep Version | head -n 1 | sed -E 's/.* ([0-9.]* \(.*\)).*/\1/') # credit: Søren Theilgaard (@theilgaard) appNewVersion="$(curl -fsIL ${downloadURL} | grep -i ^location | cut -d "/" -f5)"
expectedTeamID="BJ4HAAB9B3" expectedTeamID="BJ4HAAB9B3"
blockingProcesses=( zoom.us )
;; ;;

View File

@@ -1,7 +1,7 @@
zoomclient) zoomclient)
name="zoom.us" name="zoom.us"
type="pkg" type="pkg"
packageID="us.zoom.pkg.videmeeting" packageID="us.zoom.pkg.videomeeting"
if [[ $(arch) == i386 ]]; then if [[ $(arch) == i386 ]]; then
downloadURL="https://zoom.us/client/latest/Zoom.pkg" downloadURL="https://zoom.us/client/latest/Zoom.pkg"
elif [[ $(arch) == arm64 ]]; then elif [[ $(arch) == arm64 ]]; then

View File

@@ -0,0 +1,7 @@
zoomgov)
name="zoom.us"
type="pkg"
downloadURL="https://www.zoomgov.com/client/latest/ZoomInstallerIT.pkg"
appNewVersion="$(curl -fsIL ${downloadURL} | grep -i ^location | cut -d "/" -f5)"
expectedTeamID="BJ4HAAB9B3"
;;

View File

@@ -1,9 +1,9 @@
zoomrooms) zoomrooms)
   name="ZoomRooms" name="ZoomRooms"
   type="pkg" type="pkg"
   packageID="us.zoom.pkg.zp" packageID="us.zoom.pkg.zp"
   downloadURL="https://zoom.us/client/latest/ZoomRooms.pkg" downloadURL="https://zoom.us/client/latest/ZoomRooms.pkg"
   appNewVersion="$(curl -fsIL ${downloadURL} | grep -i location | cut -d "/" -f5)" appNewVersion="$(curl -fsIL ${downloadURL} | grep -i location | cut -d "/" -f5)"
   expectedTeamID="BJ4HAAB9B3" expectedTeamID="BJ4HAAB9B3"
blockingProcesses=( "ZoomPresence" ) blockingProcesses=( "ZoomPresence" )
   ;; ;;

View File

@@ -1,13 +1,13 @@
zulujdk8) zulujdk8)
name="Zulu JDK 8" name="Zulu JDK 8"
type="pkgInDmg" type="pkgInDmg"
packageID="com.azulsystems.zulu.8" packageID="com.azulsystems.zulu.8"
if [[ $(arch) == i386 ]]; then if [[ $(arch) == i386 ]]; then
downloadURL=https://cdn.azul.com/zulu/bin/$(curl -fs "https://cdn.azul.com/zulu/bin/" | grep -Eio '">zulu8.*ca-jdk8.*x64.dmg(.*)' | cut -c3- | sed 's/<\/a>//' | sed -E 's/([0-9.]*)M//' | awk '{print $2 $1}' | sort | cut -c11- | tail -1) downloadURL=https://cdn.azul.com/zulu/bin/$(curl -fs "https://cdn.azul.com/zulu/bin/" | grep -Eio '">zulu8.*ca-jdk8.*x64.dmg(.*)' | cut -c3- | sed 's/<\/a>//' | sed -E 's/([0-9.]*)M//' | awk '{print $2 $1}' | sort | cut -c11- | tail -1)
elif [[ $(arch) == arm64 ]]; then elif [[ $(arch) == arm64 ]]; then
downloadURL=https://cdn.azul.com/zulu/bin/$(curl -fs "https://cdn.azul.com/zulu/bin/" | grep -Eio '">zulu8.*ca-jdk8.*aarch64.dmg(.*)' | cut -c3- | sed 's/<\/a>//' | sed -E 's/([0-9.]*)M//' | awk '{print $2 $1}' | sort | cut -c11- | tail -1) downloadURL=https://cdn.azul.com/zulu/bin/$(curl -fs "https://cdn.azul.com/zulu/bin/" | grep -Eio '">zulu8.*ca-jdk8.*aarch64.dmg(.*)' | cut -c3- | sed 's/<\/a>//' | sed -E 's/([0-9.]*)M//' | awk '{print $2 $1}' | sort | cut -c11- | tail -1)
fi fi
expectedTeamID="TDTHCUPYFR" expectedTeamID="TDTHCUPYFR"
appCustomVersion(){ if [ -f "/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Info.plist" ]; then /usr/bin/defaults read "/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Info.plist" "CFBundleName" | sed 's/Zulu //'; fi } appCustomVersion(){ if [ -f "/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Info.plist" ]; then /usr/bin/defaults read "/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Info.plist" "CFBundleName" | sed 's/Zulu //'; fi }
appNewVersion=$(echo "$downloadURL" | cut -d "-" -f 1 | sed -e "s/.*zulu//") # Cannot be compared to anything appNewVersion=$(echo "$downloadURL" | cut -d "-" -f 1 | sed -e "s/.*zulu//") # Cannot be compared to anything
;; ;;

View File

@@ -1 +1 @@
0.7.0b1 0.7.0

View File

@@ -68,7 +68,7 @@ labels_dir="$fragments_dir/labels"
# add default labels_dir to label_paths # add default labels_dir to label_paths
label_paths+=$labels_dir label_paths+=$labels_dir
echo "label_paths: $label_paths" #echo "label_paths: $label_paths"
fragment_files=( header.sh version.sh functions.sh arguments.sh main.sh ) fragment_files=( header.sh version.sh functions.sh arguments.sh main.sh )

View File

@@ -1,30 +1,32 @@
#!/bin/sh #!/bin/zsh
export PATH=/usr/bin:/bin:/usr/sbin:/sbin export PATH=/usr/bin:/bin:/usr/sbin:/sbin
downloadURL=${1?:"need to provide a download URL"} downloadURL=${1?:"need to provide a download URL."}
# Note: this tool _very_ experimental and does not work in many cases # Note: this tool _very_ experimental and does not work in many cases
# That being said, it's a great place to start for building up the label in the Case-statement # That being said, it's a great place to start for building up the label in the Case-statement
# Usage # Usage
# ./buildCaseStatement.sh <URL to download software> # ./buildLabel.sh <URL to download software>
# Use working directory as download folder
# create temporary working directory tmpDir="$(pwd)/$(date "+%Y-%m-%d-%H-%M-%S")"
tmpDir=$(dirname $0 ) # Create a n almost unique folder name
mkdir $tmpDir
# change directory to temporary working directory # change directory to temporary working directory
echo "Changing directory to $tmpDir" echo "Changing directory to $tmpDir"
if ! cd "$tmpDir"; then if ! cd "$tmpDir"; then
echo "error changing directory $tmpDir" echo "Error changing directory $tmpDir"
#rm -Rf "$tmpDir"
exit 1 exit 1
fi fi
echo "Working dir: $(pwd)"
# download the URL # download the URL
echo "Downloading $downloadURL" echo "Downloading $downloadURL"
if ! downloadOut="$(curl -fsL "$downloadURL" --remote-header-name --remote-name -w "%{filename_effective}\n%{url_effective}\n")"; then echo "Redirecting to (maybe this can help us with version):\n$(curl -fsIL "$downloadURL" | grep -i ^location)"
if ! downloadOut="$(curl -fL "$downloadURL" --remote-header-name --remote-name -w "%{filename_effective}\n%{url_effective}\n")"; then
echo "error downloading $downloadURL" echo "error downloading $downloadURL"
exit 2 exit 2
fi fi
@@ -62,19 +64,35 @@ appInvestigation() {
exit 4 exit 4
fi fi
} }
echo "downloadOut: ${downloadOut}"
#echo "downloadOut:\n${downloadOut}"
archiveTempName=$( echo "${downloadOut}" | head -1 ) archiveTempName=$( echo "${downloadOut}" | head -1 )
echo "archiveTempName: $archiveTempName" echo "archiveTempName: $archiveTempName"
archivePath=$( echo "${downloadOut}" | tail -1 ) archivePath=$( echo "${downloadOut}" | tail -1 )
echo "archivePath: $archivePath" echo "archivePath: $archivePath"
archiveName=${archivePath##*/}
echo "archiveName: $archiveName" try1archiveName=${${archiveTempName##*/}%%\?*}
try2archiveName=${${archivePath##*/}%%\?*}
fileName_re='^([a-zA-Z0-9\_.%-]*)\.(dmg|pkg|zip|tbz)$'
if [[ "${try1archiveName}" =~ $fileName_re ]]; then
archiveName=${try1archiveName}
elif [[ "${try2archiveName}" =~ $fileName_re ]]; then
archiveName=${try2archiveName}
else
echo "Could not determine archiveName from “$try1archiveName” and “$try2archiveName"
#echo "Extensions $archiveTempName:t:e $archivePath:t:e"
exit
fi
echo "Calculated archiveName: $archiveName"
mv $archiveTempName $archiveName mv $archiveTempName $archiveName
name=${archiveName%.*} name=${archiveName%.*}
echo "name: $name" echo "name: $name"
archiveExt=${archiveName##*.} archiveExt=${archiveName##*.}
echo "archiveExt: $archiveExt" echo "archiveExt: $archiveExt"
identifier=$(echo $name | tr '[:upper:]' '[:lower:]') identifier=${name:l}
identifier=${identifier//\%[0-9a-fA-F][0-9a-fA-F]}
identifier=${identifier//[,._*@$\(\)\-]}
echo "identifier: $identifier" echo "identifier: $identifier"
if [ "$archiveExt" = "pkg" ]; then if [ "$archiveExt" = "pkg" ]; then
@@ -121,7 +139,11 @@ elif [ "$archiveExt" = "zip" ] || [ "$archiveExt" = "tbz" ]; then
fi fi
echo echo
echo "appNewVersion is often difficult to find. Can sometimes be found in the filename, but also on a web page. See archivePath above if link contains information about this." echo "**********"
echo
echo "Labels should be named in small caps, numbers 0-9, “-”, and “_”. No other characters allowed."
echo
echo "appNewVersion is often difficult to find. Can sometimes be found in the filename, sometimes as part of the download redirects, but also on a web page. See redirect and archivePath above if link contains information about this. That is a good place to start"
echo echo
echo "$identifier)" echo "$identifier)"
echo " name=\"$name\"" echo " name=\"$name\""
@@ -137,10 +159,9 @@ echo " appName=\"$appName\""
fi fi
echo " ;;" echo " ;;"
echo echo
echo "Above should be saved in a file with exact same name as label, and given extension “.sh”."
echo "Put this file in folder “fragments/labels”."
echo
#if [ -e "${tmpDir}" ]; then
# #echo "deleting tmp dir"
# rm -rf "${tmpDir}"
#fi
exit 0 exit 0

230
utils/checkLabels.sh Executable file
View File

@@ -0,0 +1,230 @@
#!/bin/zsh
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
# Check Installomator labels from fragments
# 2021 Søren Theilgaard (@theilgaard)
# This script will test labels and check if download link is active, and if version is defined.
# If labels are written to the script only those will be tested.
# If none are provided, it will test all labels.
# Labels should be named in small caps, numbers 0-9, “-”, and “_”. No other characters allowed.
# To check this script use these labels:
# desktoppr dbeaverce brave microsoftteams whatsapp citrixworkspace aircall devonthink
# MARK: Constants
pathToLabels="fragments/labels"
if [[ ! -d ${pathToLabels} ]]; then
echo "This script should be called from Installomator directory as working directory with this command:"
echo "utils/checkLabels.sh"
echo
exit 99
fi
# MARK: Check minimal macOS requirement
if [[ $(sw_vers -buildVersion ) < "18" ]]; then
echo "Installomator requires at least macOS 10.14 Mojave."
exit 98
fi
currentUser=$(stat -f "%Su" /dev/console)
# MARK: Functions
printlog(){
echo "$1"
}
runAsUser() {
if [[ $currentUser != "loginwindow" ]]; then
uid=$(id -u "$currentUser")
launchctl asuser $uid sudo -u $currentUser "$@"
fi
}
# will get the latest release download from a github repo
downloadURLFromGit() { # $1 git user name, $2 git repo name
gitusername=${1?:"no git user name"}
gitreponame=${2?:"no git repo name"}
#githubPart="$gitusername/$gitreponame/releases/download"
#echo "$githubPart"
downloadURL="https://github.com/$gitusername/$gitreponame/releases/latest"
echo "$downloadURL"
return 0
}
versionFromGit() { # $1 git user name, $2 git repo name
gitusername=${1?:"no git user name"}
gitreponame=${2?:"no git repo name"}
appNewVersion=$(curl --silent --fail "https://github.com/$gitusername/$gitreponame/releases/latest" | sed -E 's/.*tag\/(.*)\">.*/\1/g' | sed 's/[^0-9\.]//g')
if [ -z "$appNewVersion" ]; then
printlog "could not retrieve version number for $gitusername/$gitreponame: $appNewVersion"
exit 9
else
echo "$appNewVersion"
return 0
fi
}
# Handling of differences in xpath between Catalina and Big Sur
xpath() {
# the xpath tool changes in Big Sur and now requires the `-e` option
if [[ $(sw_vers -buildVersion) > "20A" ]]; then
/usr/bin/xpath -e $@
else
/usr/bin/xpath $@
fi
}
# Handling architecture, so I can verify both i386 and arm64 architectures
arch () {
echo $fixedArch
}
# MARK: Script
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
NC='\033[0m' # No Color
# Labels with the $(arch) call for different versions for Intel and Apple Silicon should be listed here:
archLabels=( $(grep "\$(arch)" ${pathToLabels}/* | awk '{print $1}' | sed -E 's/.*\/([a-z0-9\_-]*)\..*/\1/g'| uniq ) )
echo "${BLUE}Labels with \"\$(arch)\" call:${NC}\n${archLabels}\n"
if [[ $# -eq 0 ]]; then
allLabels=( $(grep -h -E '^([a-z0-9\_-]*)(\)|\|\\)$' ${pathToLabels}/*.sh | tr -d ')|\\' | sort) )
else
allLabels=( ${=@} )
fi
echo "${BLUE}Total labels:${NC}\n${allLabels}\n"
secondRoundLabels="" # variable for labels with $(arch) call in them
countWarning=0
countError=0
for fixedArch in i386 arm64; do
echo "${BLUE}Architecture: $fixedArch${NC}"
echo
# Go through all labels
for label in $allLabels; do
echo "########## $label"
labelWarning=0; labelError=0; expectedExtension=""; URLextension=""
name=""; type=""; downloadURL=""; appNewVersion=""; expectedTeamID=""; blockingProcesses=""; updateTool=""; updateToolArguments=""; archiveName=""
#caseLabel
if cat "${pathToLabels}/${label}.sh" | grep -v -E '^[a-z0-9\_-]*(\)|\|\\)$' | grep -v ";;" > checkLabelCurrent.sh; then
source checkLabelCurrent.sh
echo "Name: $name"
echo "Download URL: $downloadURL"
echo "Type: $type"
case $type in
dmg|pkg|zip|tbz)
expectedExtension="$type"
;;
pkgInDmg)
expectedExtension="dmg"
;;
*InZip)
expectedExtension="zip"
;;
*)
echo "Cannot handle type $type"
;;
esac
if [[ "$appNewVersion" == "" ]] ; then
echo "No appNewVersion!"
else
if [[ $( echo "$appNewVersion" | grep -i "[0-9.]" ) == "" || $appNewVersion == "" ]]; then
echo "${RED}-> !! ERROR in appNewVersion${NC}"
labelError=1
else
if [[ $appNewVersion != $( echo "$appNewVersion" | sed -E 's/[^0-9]*([0-9.]*)[^0-9]*/\1/g' ) ]]; then
echo "${YELLOW}Warning: Version contain not only numbers and dots.${NC}"
labelWarning=1
fi
echo "Version: $appNewVersion" ;
fi
fi
if curl -sfL --output /dev/null -r 0-0 "$downloadURL" ; then
echo "${GREEN}OK: downloadURL works OK${NC}"
if [[ $(echo "$downloadURL" | sed -E 's/.*\.([a-zA-Z]*)\s*/\1/g' ) == "${expectedExtension}" ]]; then
echo "${GREEN}OK: download extension MATCH on ${expectedExtension}${NC}"
else
if [[ $(echo "$downloadURL" | grep -io "github.com") != "github.com" ]]; then
URLheader=$( curl -fsIL "$downloadURL" )
if [[ "${URLheader}" != "" ]]; then
URLlocation=$( echo "${URLheader}" | grep -i "^location" )
URLfilename=$( echo "${URLheader}" | grep -i "filename=" )
if [[ "${URLlocation}" != "" ]]; then
URLextension=$( echo "${URLlocation}" | tail -1 | sed -E 's/.*\.([a-zA-Z]*)\s*/\1/g' | tr -d '\r\n' )
else
URLextension=$( echo "${URLfilename}" | tail -1 | sed -E 's/.*\.([a-zA-Z]*)\s*/\1/g' | tr -d '\r\n' )
fi
URLextension=${${URLextension:l}%%\?*}
if [[ "${URLextension}" == "${expectedExtension}" ]]; then
echo "${GREEN}OK: download extension MATCH on ${URLextension}${NC}"
else
echo "${RED}-> !! ERROR in download extension, expected ${expectedExtension}, but got ${URLextension}.${NC}"
labelError=1
fi
else
echo "no header provided from server."
fi
else
githubPart="$(echo "$downloadURL" | cut -d "/" -f4-6)"
if [[ "$(curl -fsL "$downloadURL" | grep -io "${githubPart}.*\.${expectedExtension}")" != "" ]]; then
echo "${GREEN}OK: download extension MATCH on ${expectedExtension}${NC}"
else
echo "${RED}-> !! ERROR in download extension, expected ${expectedExtension}, but it was wrong${NC}"
labelError=1
fi
fi
fi
else
echo "${RED}-> !! ERROR in downloadURL${NC}"
labelError=1
fi
if [[ $labelWarning != 0 ]]; then; echo "${YELLOW}########## Warning in label: $label${NC}"; ((countWarning++)); fi
if [[ $labelError != 0 ]]; then; echo "${RED}########## ERROR in label: $label${NC}"; ((countError++)); fi
if (($archLabels[(Ie)$label])); then
secondRoundLabels+=( "$label" )
fi
else
echo "Label: ${label} is not it's own file in Labels-folder. Skipping"
fi
echo
done
allLabels=( ${=secondRoundLabels} )
archLabels=()
echo
done
rm checkLabelCurrent.sh
#${SELFLOCATION}/Installomator.sh version
#echo
if [[ countWarning > 0 ]]; then
echo "${YELLOW}Warnings counted: $countWarning${NC}"
else
echo "${GREEN}No warnings detected!${NC}"
fi
if [[ countError > 0 ]]; then
echo "${RED}ERRORS counted: $countError${NC}"
else
echo "${GREEN}No errors detected!${NC}"
fi
echo "Done!"

View File

@@ -1,5 +1,8 @@
#!/bin/zsh #!/bin/zsh
# This script will create individual labels files from the original Installomator.sh script
# Only for internal use
label_re='^([a-z0-9\_-]*)(\)|\|\\)$' label_re='^([a-z0-9\_-]*)(\)|\|\\)$'
endlabel_re='^( |\t);;$' endlabel_re='^( |\t);;$'
@@ -24,4 +27,4 @@ while read -r line; do
current_label="" current_label=""
fi fi
done <./Installomator.sh done <../Installomator.sh