mirror of
https://github.com/mtan93/Installomator.git
synced 2026-03-12 05:11:58 +00:00
Compare commits
1 Commits
v10beta2
...
FortiClien
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0b22cc2423 |
164
CHANGELOG.md
164
CHANGELOG.md
@@ -1,168 +1,6 @@
|
|||||||
## v10beta2
|
|
||||||
|
|
||||||
- fixed problem with GitHub labels (#659)
|
|
||||||
- bz2 archive support (#659)
|
|
||||||
- fixed WorkspaceOne support (#653)
|
|
||||||
|
|
||||||
Plus everything from v10beta1
|
|
||||||
|
|
||||||
- new labels:
|
|
||||||
- abetterfinderrename11 (#552)
|
|
||||||
- carboncopycloner (#553)
|
|
||||||
- cocoapods (#659)
|
|
||||||
- coconutbattery (#588)
|
|
||||||
- cricutdesignspace (#562)
|
|
||||||
- dynalist (#591)
|
|
||||||
- fellow (#591)
|
|
||||||
- flexoptixapp (#554)
|
|
||||||
- googleadseditor (#652, #541)
|
|
||||||
- kap (#568)
|
|
||||||
- keepingyouawake (#549)
|
|
||||||
- lcadvancedvpnclient (#584)
|
|
||||||
- masv (#569)
|
|
||||||
- merlinproject (#555)
|
|
||||||
- mongodbcompass (#654)
|
|
||||||
- netspot (#556)
|
|
||||||
- relatel (#619)
|
|
||||||
- sonicvisualiser (#575)
|
|
||||||
- strongdm (#559)
|
|
||||||
- synologyassistant (#557)
|
|
||||||
- synologydriveclient (#582)
|
|
||||||
- tencentmeeting (#570)
|
|
||||||
- typinator (#583)
|
|
||||||
- xcreds (#675)
|
|
||||||
- updated labels:
|
|
||||||
- acroniscyberprotectconnect/remotix (#664)
|
|
||||||
- acroniscyberprotectconnectagent/remotixagent (#664)
|
|
||||||
- awsvpnclient (#586)
|
|
||||||
- boxtools (#589)
|
|
||||||
- clevershare2 (#664)
|
|
||||||
- coderunner (#664)
|
|
||||||
- colourcontrastanalyser (#664)
|
|
||||||
- cryptomator (#664)
|
|
||||||
- dangerzone (#664)
|
|
||||||
- drawio (#664)
|
|
||||||
- golang (#664)
|
|
||||||
- icons (#664)
|
|
||||||
- insomnia (#664)
|
|
||||||
- knockknock (#664)
|
|
||||||
- libreoffice (#672)
|
|
||||||
- macports
|
|
||||||
- opera (#664)
|
|
||||||
- supportapp (#664)
|
|
||||||
- vmwarehorizonclient (#645, #511)
|
|
||||||
- deleted/deactivated labels:
|
|
||||||
- microsoftyammer (#664)
|
|
||||||
- wickrme (#664)
|
|
||||||
- wickrpro (#664)
|
|
||||||
|
|
||||||
|
|
||||||
## v10beta1
|
|
||||||
|
|
||||||
- [swiftDialog](https://github.com/bartreardon/swiftDialog) integration (#641, #632), many thanks to @bartreardon, [sample scripts](in the MDM folder)
|
|
||||||
- added WorkspaceOne option for LOGO (#517)
|
|
||||||
- added function for JSON parsing with JXA (#529)
|
|
||||||
- updated assemble.sh script to update Labels.txt when script is rebuilt (#540)
|
|
||||||
- added a no requisite install script (#493)
|
|
||||||
- GitHub lookup now don't use API calls, this should avoid or at least reduce rate limiting (#543)
|
|
||||||
- fixed redundant exit codes (#643, #561)
|
|
||||||
|
|
||||||
NOTE: some exit codes have changed! see [Installomator Exit Codes](https://github.com/Installomator/Installomator/wiki/Installomator-Exit-Codes) for a list
|
|
||||||
|
|
||||||
- new labels:
|
|
||||||
- bluejeanswithaudiodriver (#473)
|
|
||||||
- duodevicehealth (#548)
|
|
||||||
- googlechromeenterprise (#532)
|
|
||||||
- ipswupdater (#545)
|
|
||||||
- mmhmm (#571)
|
|
||||||
- nordlayer (#419)
|
|
||||||
- prune (#538)
|
|
||||||
- whatroute (#560)
|
|
||||||
- updated labels:
|
|
||||||
- blender (#535, #622)
|
|
||||||
- camtasia2019 (#547)
|
|
||||||
- clickshare (#565)
|
|
||||||
- egnyte (#500)
|
|
||||||
- googledrive (#563)
|
|
||||||
- grammarly (#576)
|
|
||||||
- marathon, marathon2, marathoninfinity (#544)
|
|
||||||
- miro (#475, #539)
|
|
||||||
- notion (#566)
|
|
||||||
- ringcentralapp (#550)
|
|
||||||
- sublimetext (#593, #578, #567, #623, #626)
|
|
||||||
- talkdeskcallbar (#536)
|
|
||||||
- talkdeskcxcloud (#537)
|
|
||||||
- wireshark (#585)
|
|
||||||
|
|
||||||
|
|
||||||
## v9.2
|
|
||||||
|
|
||||||
**Note**: Both Google and Mozilla recommend using the pkg installers instead of the dmg downloads for managed deployments. So far, Installomator has provided labels for both. (`googlechrome` and `googlechromepkg` or `firefox` and `firefoxpkg`, respectively) Since there are problems with the dmg downloads, a future release of Installomator will _disable_ the `firefox` and `googlechrome` dmg labels. You should switch to using `googlechromepkg` and `firefoxpkg` labels instead.
|
|
||||||
|
|
||||||
- bug fix (#434)
|
|
||||||
- documentation updates (#485, #494)
|
|
||||||
- new labels:
|
|
||||||
- 1password8 (#514)
|
|
||||||
- ultimakercura
|
|
||||||
- androidstudio (#547)
|
|
||||||
- atextlegacy (#464)
|
|
||||||
- camtasia2019, camtasia2020 (#499)
|
|
||||||
- clue, cluefull (#481)
|
|
||||||
- craftmanagerforsketch
|
|
||||||
- displaylinkmanager (#448)
|
|
||||||
- drawio (#480)
|
|
||||||
- duckduckgo
|
|
||||||
- egnytewebedit (#512)
|
|
||||||
- filezilla (#522)
|
|
||||||
- firefoxpkg_intl
|
|
||||||
- flycut (#501)
|
|
||||||
- fontexplorer (#523)
|
|
||||||
- hype (#524)
|
|
||||||
- idrive (#507), idrivethin (#509)
|
|
||||||
- imageoptim (#525)
|
|
||||||
- linear (#519)
|
|
||||||
- macoslaps (#502)
|
|
||||||
- mightymike
|
|
||||||
- mindmanager (#479)
|
|
||||||
- pika (#526)
|
|
||||||
- propresenter7 (#394)
|
|
||||||
- qgis-pr
|
|
||||||
- shottr (#516)
|
|
||||||
- slab (#487)
|
|
||||||
- snagit2019, snagit2020, snagit2021 (#498)
|
|
||||||
- sonobus (#490)
|
|
||||||
- talkdeskcxcloud (#452)
|
|
||||||
- thunderbird_intl (#497)
|
|
||||||
- unnaturalscrollwheels (#503)
|
|
||||||
- wechat (#510)
|
|
||||||
- xeroxworkcentre7800 (#527)
|
|
||||||
- zohoworkdrivegenie
|
|
||||||
- updated labels
|
|
||||||
- adobereaderdc-update, adobereaderdc (#503)
|
|
||||||
- amazoncorretto8jdk (#461)
|
|
||||||
- camtasia (#499)
|
|
||||||
- citrixworkspace (#508)
|
|
||||||
- dbeaverce (#450)
|
|
||||||
- dropbox
|
|
||||||
- firefox, firefox_da, firefox_intl (#495), firefoxesr_intl (#496), firefoxpkg
|
|
||||||
- googlechrome, googlechromepkg (#484)
|
|
||||||
- gpgsuite (#465)
|
|
||||||
- grammarly (#515)
|
|
||||||
- logitechoptions (#478)
|
|
||||||
- onlyofficedesktop (#454)
|
|
||||||
- postman (#458)
|
|
||||||
- rancherdesktop (#463)
|
|
||||||
- remotedesktopmanagerenterprise
|
|
||||||
- remotedesktopmanagerfree
|
|
||||||
- ringcentralapp (#492)
|
|
||||||
- sketch
|
|
||||||
- snagit (#498)
|
|
||||||
- talkdeskcallbar (#453)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## v9.1
|
## v9.1
|
||||||
|
|
||||||
|
**Note**: Both Google and Mozilla recommend using the pkg installers instead of the dmg downloads for managed deployments. So far, Installomator has provided labels for both. (`googlechrome` and `googlechromepkg` or `firefox` and `firefoxpkg`, respectively) Since there are problems with the dmg downloads, a future release of Installomator will _disable_ the `firefox` and `googlechrome` dmg labels. You should switch to using the respective pkg labels instead.
|
||||||
|
|
||||||
- added option for Microsoft Endpoint Manager (Intune) to `LOGO` (#446)
|
- added option for Microsoft Endpoint Manager (Intune) to `LOGO` (#446)
|
||||||
- minor fixes (#427, #434, #436)
|
- minor fixes (#427, #434, #436)
|
||||||
|
|||||||
@@ -1,35 +1,33 @@
|
|||||||
# Contributing to Installomator
|
# Contributing to Installomator
|
||||||
|
|
||||||
__Please note, that if you are contributing to this project with new labels or other suggestions in PRs, please put your changes in the files in the `fragments` sub-folder. DO NOT edit the full `Installomator.sh` script. The full script is generated from the fragments, and will be overwritten. More details on [how the script is assembled from the fragments here](https://github.com/Installomator/Installomator/tree/main/utils#how-to-assemble-installomatorsh).__
|
__Please note, that if you are contributing to this project with new labels or other suggestions in PRs, please put your changes in the files below `fragments`-folder. DO NOT edit the full `Installomator.sh` script. The full script is now a build of the fragments, and will be overwritten.__
|
||||||
|
|
||||||
We try to keep the script as short as possible, and with more than 400 labels, we can save 400 lines in the script, if we do not have credit lines on each of these. So we are thankful for your contribution, but we will be removing these lines in the coming releases.
|
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.
|
||||||
|
|
||||||
## Branches
|
## Branches
|
||||||
|
|
||||||
The branch list is as follows:
|
The branch list is as follows:
|
||||||
|
|
||||||
- `release`: this branch will have the latest released version
|
- `release`: this branch will have the latest released version
|
||||||
- `main`: (default) this branch will be the current build we are working on. It includes new and updated app labels, and critical bug fixes
|
- `main`: (default) this branch will be the latest release plus new and updated app labels, and critical bug fixes
|
||||||
- `dev`: this will contain new and updated app labels, as well as other code changes that have the risk of significantly changing or breaking behavior
|
- `dev`: this will contain new and updated app labels, as well as any other code changes
|
||||||
there will be other branches for new features and testing.
|
there will be other branches for new features and testing
|
||||||
|
|
||||||
This should allow the contributing team to release minor updates for new and updated app labels while also work on new features for the next major release.
|
This should allow the contributing team to release minor updates for new and updated app labels while also work on new features for the next major release.
|
||||||
|
|
||||||
With all the new branches, your local repo may get confused. If you don’t have local changes, it is easiest to delete your local repo and re-clone it. If you have local changes you want to preserve, then you should commit those to a local branch, pull the latest changes `git pull --all`, then delete the old master branch: `git branch -d master`.
|
With all the new branches, your local repo may get confused. If you don’t have local changes, it is easiest to delete your local repo and re-clone it. If you have local changes you want to preserve, then you should commit those to a local branch, pull the latest changes `git pull --all`, then delete the old master branch: `git branch -d master`.
|
||||||
|
|
||||||
Please make sure you branch off of main for your PRs.
|
Make sure you branch off of main for new and updated labels and off of `dev` for other code changes. Thank you for contributing!
|
||||||
|
|
||||||
__Thank you for contributing!__
|
|
||||||
|
|
||||||
## Labels
|
## Labels
|
||||||
|
|
||||||
If you need a new label for a piece of software, please take a look [at the tutorials in the Wiki](https://github.com/Installomator/Installomator/wiki#tutorials), those can be helpful for starting out on the creation of the label.
|
If you need a new label for a piece of software, please take a look at the tutorials in the Wiki, if those can be helpful for starting out on the creation of the label.
|
||||||
|
|
||||||
We expect you to try out finding the __version__ of the software online, so that `appNewVersion` can be filled in the label. It helps a lot when the software needs update, and greatly improve user experience.
|
We expect you to try out finding the __version__ of the software online, so that `appNewVersion` can be filled in the label. It helps a lot when the software needs update, and greatly improve user experience.
|
||||||
|
|
||||||
Please document what you found out about the __version__ of the software if it's not included. We will not accept a new label if this is not documented, we will ask about this if it was not included. This is very important for the quality and reliability of Installomator.
|
Please document what you found out about the __version__ of the software if it's not included. We will not accept a new label if this is not documented, we will ask about this if it was not included. This is very important for the quality and reliability of Installomator.
|
||||||
|
|
||||||
When creating a new label, please file a pull request (PR). And feel free to ask questions or make your comments about what else is needed, if we should take a look at the label, or help out in finding the version or isolating URLs or anything else. You can find [a tutorial on how to create a PR here](https://github.com/Installomator/Installomator/wiki/GitHub-howto-create-PRs).
|
When creating a new label, please file a pull request (PR). And feel free to ask questions or make your comments about what else is needed, if we should take a look at the label, or help out in finding the version or isolating URLs or anything else.
|
||||||
|
|
||||||
Please include the log of installing this label in the description, like this:
|
Please include the log of installing this label in the description, like this:
|
||||||
```
|
```
|
||||||
@@ -41,13 +39,11 @@ Please include the log of installing this label in the description, like this:
|
|||||||
|
|
||||||
Please have one label per PR, so we can separate these. Also if you change/fix a label.
|
Please have one label per PR, so we can separate these. Also if you change/fix a label.
|
||||||
|
|
||||||
__Thank you very much for your contribution!__
|
Thank you very much for your contribution!
|
||||||
|
|
||||||
|
|
||||||
## Issues
|
## Issues
|
||||||
|
|
||||||
Do not create an issue just when you have a questions, but do file an issue or pull request (PR) for bugs or wrong behavior. Include the full log and include the version of Installomator you're running. When you create a PR to follow-up and solve an issue make sure to [mention the issue using the `#xxx` syntax in a commit message or comment to link the issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue).
|
Do not create an issue just when you have a questions, but do file an issue or pull request (PR) for bugs or wrong behavior. Include the full log and include the version of Installomator you're running.
|
||||||
|
|
||||||
Join [the MacAdmins Slack](https://macadmins.org) and find us in the `#installomator` channel for questions, support and discussions.
|
|
||||||
|
|
||||||
When in doubt, use the MacAdmins.org Slack as described in [README.md](https://github.com/Installomator/Installomator/)
|
When in doubt, use the MacAdmins.org Slack as described in [README.md](https://github.com/Installomator/Installomator/)
|
||||||
|
|||||||
1333
Installomator.sh
1333
Installomator.sh
File diff suppressed because it is too large
Load Diff
78
Labels.txt
78
Labels.txt
@@ -1,12 +1,8 @@
|
|||||||
1password7
|
1password7
|
||||||
1password8
|
|
||||||
1passwordcli
|
1passwordcli
|
||||||
4kvideodownloader
|
4kvideodownloader
|
||||||
8x8
|
8x8
|
||||||
abetterfinderrename11
|
|
||||||
abstract
|
abstract
|
||||||
acroniscyberprotectconnect
|
|
||||||
acroniscyberprotectconnectagent
|
|
||||||
adobebrackets
|
adobebrackets
|
||||||
adobeconnect
|
adobeconnect
|
||||||
adobecreativeclouddesktop
|
adobecreativeclouddesktop
|
||||||
@@ -24,7 +20,6 @@ amazonchime
|
|||||||
amazoncorretto8jdk
|
amazoncorretto8jdk
|
||||||
amazonworkspaces
|
amazonworkspaces
|
||||||
androidfiletransfer
|
androidfiletransfer
|
||||||
androidstudio
|
|
||||||
anydesk
|
anydesk
|
||||||
apparency
|
apparency
|
||||||
appcleaner
|
appcleaner
|
||||||
@@ -38,7 +33,6 @@ aquaskk
|
|||||||
arq7
|
arq7
|
||||||
asana
|
asana
|
||||||
atext
|
atext
|
||||||
atextlegacy
|
|
||||||
atom
|
atom
|
||||||
audacity
|
audacity
|
||||||
authydesktop
|
authydesktop
|
||||||
@@ -59,7 +53,6 @@ bettertouchtool
|
|||||||
bitwarden
|
bitwarden
|
||||||
blender
|
blender
|
||||||
bluejeans
|
bluejeans
|
||||||
bluejeanswithaudiodriver
|
|
||||||
boxdrive
|
boxdrive
|
||||||
boxsync
|
boxsync
|
||||||
boxtools
|
boxtools
|
||||||
@@ -71,11 +64,7 @@ calcservice
|
|||||||
calibre
|
calibre
|
||||||
camostudio
|
camostudio
|
||||||
camtasia
|
camtasia
|
||||||
camtasia2019
|
|
||||||
camtasia2020
|
|
||||||
camtasia2021
|
|
||||||
canva
|
canva
|
||||||
carboncopycloner
|
|
||||||
chatwork
|
chatwork
|
||||||
cisdem-documentreader
|
cisdem-documentreader
|
||||||
citrixworkspace
|
citrixworkspace
|
||||||
@@ -84,17 +73,11 @@ clickshare
|
|||||||
clipy
|
clipy
|
||||||
closeio
|
closeio
|
||||||
cloudya
|
cloudya
|
||||||
clue
|
|
||||||
cluefull
|
|
||||||
cocoapods
|
|
||||||
coconutbattery
|
|
||||||
code42
|
code42
|
||||||
coderunner
|
coderunner
|
||||||
colourcontrastanalyser
|
colourcontrastanalyser
|
||||||
cormorant
|
cormorant
|
||||||
craftmanager
|
craftmanager
|
||||||
craftmanagerforsketch
|
|
||||||
cricutdesignspace
|
|
||||||
cryptomator
|
cryptomator
|
||||||
cyberduck
|
cyberduck
|
||||||
daisydisk
|
daisydisk
|
||||||
@@ -111,19 +94,13 @@ dialog
|
|||||||
dialpad
|
dialpad
|
||||||
discord
|
discord
|
||||||
diskspace
|
diskspace
|
||||||
displaylinkmanager
|
|
||||||
docker
|
docker
|
||||||
dockutil
|
dockutil
|
||||||
drawio
|
|
||||||
drift
|
drift
|
||||||
dropbox
|
dropbox
|
||||||
duckduckgo
|
|
||||||
duodevicehealth
|
|
||||||
dynalist
|
|
||||||
easeusdatarecoverywizard
|
easeusdatarecoverywizard
|
||||||
easyfind
|
easyfind
|
||||||
egnyte
|
egnyte
|
||||||
egnytewebedit
|
|
||||||
element
|
element
|
||||||
eraseinstall
|
eraseinstall
|
||||||
eshareosx
|
eshareosx
|
||||||
@@ -134,10 +111,8 @@ exifrenamer
|
|||||||
fantastical
|
fantastical
|
||||||
fastscripts
|
fastscripts
|
||||||
favro
|
favro
|
||||||
fellow
|
|
||||||
ferdi
|
ferdi
|
||||||
figma
|
figma
|
||||||
filezilla
|
|
||||||
findanyfile
|
findanyfile
|
||||||
firefox
|
firefox
|
||||||
firefox_da
|
firefox_da
|
||||||
@@ -146,20 +121,14 @@ firefoxesr
|
|||||||
firefoxesr_intl
|
firefoxesr_intl
|
||||||
firefoxesrpkg
|
firefoxesrpkg
|
||||||
firefoxpkg
|
firefoxpkg
|
||||||
firefoxpkg_intl
|
|
||||||
flexoptixapp
|
|
||||||
flowjo
|
flowjo
|
||||||
flux
|
flux
|
||||||
flycut
|
|
||||||
fontexplorer
|
|
||||||
front
|
front
|
||||||
fsmonitor
|
fsmonitor
|
||||||
gimp
|
gimp
|
||||||
githubdesktop
|
githubdesktop
|
||||||
golang
|
golang
|
||||||
googleadseditor
|
|
||||||
googlechrome
|
googlechrome
|
||||||
googlechromeenterprise
|
|
||||||
googlechromepkg
|
googlechromepkg
|
||||||
googledrive
|
googledrive
|
||||||
googledrivebackupandsync
|
googledrivebackupandsync
|
||||||
@@ -181,21 +150,16 @@ hazel
|
|||||||
houdahspot
|
houdahspot
|
||||||
hpeasyadmin
|
hpeasyadmin
|
||||||
hpeasystart
|
hpeasystart
|
||||||
hype
|
|
||||||
hyper
|
hyper
|
||||||
ibarcoder
|
ibarcoder
|
||||||
icons
|
icons
|
||||||
idrive
|
|
||||||
idrivethin
|
|
||||||
iina
|
iina
|
||||||
imageoptim
|
|
||||||
imazingprofileeditor
|
imazingprofileeditor
|
||||||
inkscape
|
inkscape
|
||||||
insomnia
|
insomnia
|
||||||
installomator
|
installomator
|
||||||
installomator_theile
|
installomator_theile
|
||||||
intellijideace
|
intellijideace
|
||||||
ipswupdater
|
|
||||||
istatmenus
|
istatmenus
|
||||||
iterm2
|
iterm2
|
||||||
itsycal
|
itsycal
|
||||||
@@ -215,10 +179,8 @@ jetbrainspycharmce
|
|||||||
jetbrainsrubymine
|
jetbrainsrubymine
|
||||||
jetbrainstoolbox
|
jetbrainstoolbox
|
||||||
jetbrainswebstorm
|
jetbrainswebstorm
|
||||||
kap
|
|
||||||
karabinerelements
|
karabinerelements
|
||||||
keepassxc
|
keepassxc
|
||||||
keepingyouawake
|
|
||||||
keka
|
keka
|
||||||
keybase
|
keybase
|
||||||
keyboardmaestro
|
keyboardmaestro
|
||||||
@@ -228,11 +190,8 @@ krisp
|
|||||||
krita
|
krita
|
||||||
lastpass
|
lastpass
|
||||||
launchbar
|
launchbar
|
||||||
lcadvancedvpnclient
|
|
||||||
lexarrecoverytool
|
lexarrecoverytool
|
||||||
libreoffice
|
libreoffice
|
||||||
linear
|
|
||||||
logioptions
|
|
||||||
logitechoptions
|
logitechoptions
|
||||||
logseq
|
logseq
|
||||||
loom
|
loom
|
||||||
@@ -242,16 +201,13 @@ lulu
|
|||||||
macadminspython
|
macadminspython
|
||||||
maccyapp
|
maccyapp
|
||||||
macfuse
|
macfuse
|
||||||
macoslaps
|
|
||||||
macports
|
macports
|
||||||
malwarebytes
|
malwarebytes
|
||||||
marathon
|
marathon
|
||||||
marathon2
|
marathon2
|
||||||
marathoninfinity
|
marathoninfinity
|
||||||
masv
|
|
||||||
mattermost
|
mattermost
|
||||||
menumeters
|
menumeters
|
||||||
merlinproject
|
|
||||||
microsoftautoupdate
|
microsoftautoupdate
|
||||||
microsoftazuredatastudio
|
microsoftazuredatastudio
|
||||||
microsoftazurestorageexplorer
|
microsoftazurestorageexplorer
|
||||||
@@ -275,28 +231,23 @@ microsoftskypeforbusiness
|
|||||||
microsoftteams
|
microsoftteams
|
||||||
microsoftvisualstudiocode
|
microsoftvisualstudiocode
|
||||||
microsoftword
|
microsoftword
|
||||||
mightymike
|
microsoftyammer
|
||||||
mindmanager
|
|
||||||
miro
|
miro
|
||||||
mmhmm
|
|
||||||
mobikinassistantforandroid
|
mobikinassistantforandroid
|
||||||
mochakeyboard
|
mochakeyboard
|
||||||
mochatelnet
|
mochatelnet
|
||||||
mochatn3270
|
mochatn3270
|
||||||
mochatn3812
|
mochatn3812
|
||||||
mochatn5250
|
mochatn5250
|
||||||
mongodbcompass
|
|
||||||
montereyblocker
|
montereyblocker
|
||||||
mowgliiitsycal
|
mowgliiitsycal
|
||||||
musescore
|
musescore
|
||||||
muzzle
|
muzzle
|
||||||
nanosaur
|
nanosaur
|
||||||
netnewswire
|
netnewswire
|
||||||
netspot
|
|
||||||
nextcloud
|
nextcloud
|
||||||
nomad
|
nomad
|
||||||
nomadlogin
|
nomadlogin
|
||||||
nordlayer
|
|
||||||
notion
|
notion
|
||||||
nudge
|
nudge
|
||||||
nvivo
|
nvivo
|
||||||
@@ -325,7 +276,6 @@ paretosecurity
|
|||||||
parsec
|
parsec
|
||||||
pdfsam
|
pdfsam
|
||||||
perimeter81
|
perimeter81
|
||||||
pika
|
|
||||||
pitch
|
pitch
|
||||||
plantronicshub
|
plantronicshub
|
||||||
platypus
|
platypus
|
||||||
@@ -337,19 +287,15 @@ privileges
|
|||||||
proctortrack
|
proctortrack
|
||||||
promiseutility
|
promiseutility
|
||||||
promiseutilityr
|
promiseutilityr
|
||||||
propresenter7
|
|
||||||
protonvpn
|
protonvpn
|
||||||
proxyman
|
proxyman
|
||||||
prune
|
|
||||||
pycharmce
|
pycharmce
|
||||||
pymol
|
pymol
|
||||||
qgis-pr
|
|
||||||
r
|
r
|
||||||
ramboxce
|
ramboxce
|
||||||
rancherdesktop
|
rancherdesktop
|
||||||
rectangle
|
rectangle
|
||||||
redeye
|
redeye
|
||||||
relatel
|
|
||||||
remotedesktopmanagerenterprise
|
remotedesktopmanagerenterprise
|
||||||
remotedesktopmanagerfree
|
remotedesktopmanagerfree
|
||||||
remotix
|
remotix
|
||||||
@@ -376,7 +322,6 @@ secretive
|
|||||||
sequelpro
|
sequelpro
|
||||||
sfsymbols
|
sfsymbols
|
||||||
shield
|
shield
|
||||||
shottr
|
|
||||||
sidekick
|
sidekick
|
||||||
signal
|
signal
|
||||||
silnite
|
silnite
|
||||||
@@ -385,17 +330,12 @@ sizeup
|
|||||||
sketch
|
sketch
|
||||||
sketchupviewer
|
sketchupviewer
|
||||||
skype
|
skype
|
||||||
slab
|
|
||||||
slack
|
slack
|
||||||
smartgit
|
smartgit
|
||||||
snagit
|
snagit
|
||||||
snagit2019
|
|
||||||
snagit2020
|
snagit2020
|
||||||
snagit2021
|
snagit2021
|
||||||
snagit2022
|
|
||||||
snapgeneviewer
|
snapgeneviewer
|
||||||
sonicvisualiser
|
|
||||||
sonobus
|
|
||||||
sonos
|
sonos
|
||||||
sonoss1
|
sonoss1
|
||||||
sonoss2
|
sonoss2
|
||||||
@@ -405,7 +345,6 @@ spotify
|
|||||||
sqlpropostgres
|
sqlpropostgres
|
||||||
sqlprostudio
|
sqlprostudio
|
||||||
steelseriesengine
|
steelseriesengine
|
||||||
strongdm
|
|
||||||
strongsync
|
strongsync
|
||||||
sublimetext
|
sublimetext
|
||||||
superhuman
|
superhuman
|
||||||
@@ -414,14 +353,11 @@ suspiciouspackage
|
|||||||
swiftdialog
|
swiftdialog
|
||||||
swiftruntimeforcommandlinetools
|
swiftruntimeforcommandlinetools
|
||||||
sync
|
sync
|
||||||
synologyassistant
|
|
||||||
synologydriveclient
|
|
||||||
tableaudesktop
|
tableaudesktop
|
||||||
tableaupublic
|
tableaupublic
|
||||||
tableaureader
|
tableaureader
|
||||||
tageditor
|
tageditor
|
||||||
talkdeskcallbar
|
talkdeskcallbar
|
||||||
talkdeskcxcloud
|
|
||||||
taskpaper
|
taskpaper
|
||||||
teamviewer
|
teamviewer
|
||||||
teamviewerhost
|
teamviewerhost
|
||||||
@@ -429,13 +365,11 @@ teamviewerqs
|
|||||||
techsmithcapture
|
techsmithcapture
|
||||||
telegram
|
telegram
|
||||||
tembo
|
tembo
|
||||||
tencentmeeting
|
|
||||||
textexpander
|
textexpander
|
||||||
textmate
|
textmate
|
||||||
theunarchiver
|
theunarchiver
|
||||||
things
|
things
|
||||||
thunderbird
|
thunderbird
|
||||||
thunderbird_intl
|
|
||||||
tidal
|
tidal
|
||||||
toggltrack
|
toggltrack
|
||||||
tom4aconverter
|
tom4aconverter
|
||||||
@@ -443,13 +377,10 @@ torbrowser
|
|||||||
trex
|
trex
|
||||||
tunnelbear
|
tunnelbear
|
||||||
tunnelblick
|
tunnelblick
|
||||||
typinator
|
|
||||||
typora
|
typora
|
||||||
ultimakercura
|
|
||||||
umbrellaroamingclient
|
umbrellaroamingclient
|
||||||
uniconverter
|
uniconverter
|
||||||
universaltypeclient
|
universaltypeclient
|
||||||
unnaturalscrollwheels
|
|
||||||
utm
|
utm
|
||||||
vagrant
|
vagrant
|
||||||
vanilla
|
vanilla
|
||||||
@@ -467,15 +398,13 @@ wallyezflash
|
|||||||
webex
|
webex
|
||||||
webexmeetings
|
webexmeetings
|
||||||
webexteams
|
webexteams
|
||||||
wechat
|
|
||||||
whatroute
|
|
||||||
whatsapp
|
whatsapp
|
||||||
|
wickrme
|
||||||
|
wickrpro
|
||||||
wireshark
|
wireshark
|
||||||
wordservice
|
wordservice
|
||||||
wwdc
|
wwdc
|
||||||
xcreds
|
|
||||||
xeroxphaser7800
|
xeroxphaser7800
|
||||||
xeroxworkcentre7800
|
|
||||||
xink
|
xink
|
||||||
xmenu
|
xmenu
|
||||||
xquartz
|
xquartz
|
||||||
@@ -484,7 +413,6 @@ yubikeymanagerqt
|
|||||||
zappy
|
zappy
|
||||||
zeplin
|
zeplin
|
||||||
zohoworkdrive
|
zohoworkdrive
|
||||||
zohoworkdrivegenie
|
|
||||||
zohoworkdrivetruesync
|
zohoworkdrivetruesync
|
||||||
zoom
|
zoom
|
||||||
zoomclient
|
zoomclient
|
||||||
|
|||||||
@@ -5,28 +5,8 @@ what="brave" # enter the software to install
|
|||||||
# To be used as a script sent out from a MDM.
|
# To be used as a script sent out from a MDM.
|
||||||
# Fill the variable "what" above with a label.
|
# Fill the variable "what" above with a label.
|
||||||
# Script will run this label.
|
# Script will run this label.
|
||||||
LOGO="appstore" # or "addigy", "microsoft", "mosyleb", "mosylem"
|
|
||||||
######################################################################
|
|
||||||
# Parameters for reinstall/initial install (owner root:wheel):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force IGNORE_APP_STORE_APPS=yes SYSTEMOWNER=1"
|
|
||||||
# Parameters for Self Service installed app:
|
|
||||||
# "BLOCKING_PROCESS_ACTION=prompt_user NOTIFY=all"
|
|
||||||
# Parameters for security important apps, like browsers (run automaticaly every day):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=tell_user_then_kill"
|
|
||||||
# Update of service apps (run automatically):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=quit_kill NOTIFY=silent"
|
|
||||||
parameters="BLOCKING_PROCESS_ACTION=tell_user_then_kill NOTIFY=all"
|
|
||||||
###############################################
|
###############################################
|
||||||
|
|
||||||
# Verify that Installomator has been installed
|
|
||||||
destFile="/usr/local/Installomator/Installomator.sh"
|
|
||||||
if [ ! -e "${destFile}" ]; then
|
|
||||||
echo "Installomator not found here:"
|
|
||||||
echo "${destFile}"
|
|
||||||
echo "Exiting."
|
|
||||||
exit 99
|
|
||||||
fi
|
|
||||||
|
|
||||||
# No sleeping
|
# No sleeping
|
||||||
/usr/bin/caffeinate -d -i -m -u &
|
/usr/bin/caffeinate -d -i -m -u &
|
||||||
caffeinatepid=$!
|
caffeinatepid=$!
|
||||||
@@ -36,14 +16,18 @@ caffexit () {
|
|||||||
exit $1
|
exit $1
|
||||||
}
|
}
|
||||||
|
|
||||||
cmdOutput="$(${destFile} ${what} LOGO=$LOGO $parameters LOGGING=WARN || true)"
|
# Verify that Installomator has been installed
|
||||||
# Check result
|
destFile="/usr/local/Installomator/Installomator.sh"
|
||||||
exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )"
|
if [ ! -e "${destFile}" ]; then
|
||||||
if [[ ${exitStatus} -ne 0 ]] ; then
|
echo "Installomator not found here:"
|
||||||
echo -e "Error installing ${what}. Exit code ${exitStatus}"
|
echo "${destFile}"
|
||||||
#echo "$cmdOutput"
|
echo "Exiting."
|
||||||
errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )"
|
caffexit 99
|
||||||
echo "$errorOutput"
|
fi
|
||||||
|
|
||||||
|
${destFile} ${what} LOGO=mosyleb BLOCKING_PROCESS_ACTION=tell_user #NOTIFY=all #INSTALL=force
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
# This is currently not working in Mosyle, that will ignore script errors. Please request support for this from Mosyle!
|
||||||
echo "Error installing ${what}. Exit code $?"
|
echo "Error installing ${what}. Exit code $?"
|
||||||
caffexit $?
|
caffexit $?
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,31 +1,11 @@
|
|||||||
#!/bin/zsh
|
#!/bin/zsh
|
||||||
# Installation using Installomator
|
# Installation using Installomator
|
||||||
whatList="microsoftteams microsoftyammer firefox bravebrowser cyberduck vlc signal" # enter the software to install separated with spaces
|
what="microsoftteams microsoftyammer firefox bravebrowser cyberduck vlc signal" # enter the software to install separated with spaces
|
||||||
|
|
||||||
# To be used as a script sent out from a MDM.
|
# To be used as a script sent out from a MDM.
|
||||||
# Fill the variable "whatList" above with labels separated by space " ".
|
# Fill the variable "what" above with labels separated by space " ".
|
||||||
# Script will loop through these labels.
|
# Script will loop through these labels.
|
||||||
LOGO="appstore" # or "addigy", "microsoft", "mosyleb", "mosylem"
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Parameters for reinstall/initial install (owner root:wheel):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force IGNORE_APP_STORE_APPS=yes SYSTEMOWNER=1"
|
|
||||||
# Parameters for Self Service installed app:
|
|
||||||
# "BLOCKING_PROCESS_ACTION=prompt_user NOTIFY=all"
|
|
||||||
# Parameters for security important apps, like browsers (run automaticaly every day):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=tell_user_then_kill"
|
|
||||||
# Update of service apps (run automatically):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=quit_kill NOTIFY=silent"
|
|
||||||
parameters="BLOCKING_PROCESS_ACTION=tell_user NOTIFY=all"
|
|
||||||
######################################################################
|
|
||||||
|
|
||||||
# Verify that Installomator has been installed
|
|
||||||
destFile="/usr/local/Installomator/Installomator.sh"
|
|
||||||
if [ ! -e "${destFile}" ]; then
|
|
||||||
echo "Installomator not found here:"
|
|
||||||
echo "${destFile}"
|
|
||||||
echo "Exiting."
|
|
||||||
exit 99
|
|
||||||
fi
|
|
||||||
|
|
||||||
# No sleeping
|
# No sleeping
|
||||||
/usr/bin/caffeinate -d -i -m -u &
|
/usr/bin/caffeinate -d -i -m -u &
|
||||||
@@ -39,17 +19,21 @@ caffexit () {
|
|||||||
# Count errors
|
# Count errors
|
||||||
errorCount=0
|
errorCount=0
|
||||||
|
|
||||||
for what in $whatList; do
|
# Verify that Installomator has been installed
|
||||||
#echo $what
|
destFile="/usr/local/Installomator/Installomator.sh"
|
||||||
# Install software using Installomator
|
if [ ! -e "${destFile}" ]; then
|
||||||
cmdOutput="$(${destFile} ${what} LOGO=$LOGO $parameters LOGGING=WARN || true)"
|
echo "Installomator not found here:"
|
||||||
# Check result
|
echo "${destFile}"
|
||||||
exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )"
|
echo "Exiting."
|
||||||
if [[ ${exitStatus} -ne 0 ]] ; then
|
caffexit 99
|
||||||
echo -e "Error installing ${what}. Exit code ${exitStatus}"
|
fi
|
||||||
#echo "$cmdOutput"
|
|
||||||
errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )"
|
for item in $what; do
|
||||||
echo "$errorOutput"
|
#echo $item
|
||||||
|
${destFile} ${item} LOGO=mosyleb BLOCKING_PROCESS_ACTION=tell_user #NOTIFY=all #INSTALL=force
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
# This is currently not working in Mosyle, that will ignore script errors. Please request support for this from Mosyle!
|
||||||
|
echo "[$(DATE)] Error installing ${item}. Exit code $?"
|
||||||
let errorCount++
|
let errorCount++
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# This script is meant to povide the simplest MDM/management platform agnostic way to install Installomator
|
|
||||||
# The only requirement is an Internet connection
|
|
||||||
|
|
||||||
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
|
|
||||||
|
|
||||||
# Get the URL of the latest PKG From the Installomator GitHub repo
|
|
||||||
url=$(curl --silent --fail "https://api.github.com/repos/Installomator/Installomator/releases/latest" | awk -F '"' "/browser_download_url/ && /pkg\"/ { print \$4; exit }")
|
|
||||||
# Expected Team ID of the downloaded PKG
|
|
||||||
expectedTeamID="JME5BW3F3R"
|
|
||||||
exitCode=0
|
|
||||||
|
|
||||||
# Check for Installomator and install if not found
|
|
||||||
if [ ! -e "/usr/local/Installomator/Installomator.sh" ]; then
|
|
||||||
echo "Installomator not found. Installing."
|
|
||||||
# Create temporary working directory
|
|
||||||
tempDirectory=$( mktemp -d )
|
|
||||||
echo "Created working directory '$tempDirectory'"
|
|
||||||
# Download the installer package
|
|
||||||
echo "Downloading Installomator package"
|
|
||||||
curl --location --silent "$url" -o "$tempDirectory/Installomator.pkg"
|
|
||||||
# Verify the download
|
|
||||||
teamID=$(spctl -a -vv -t install "$tempDirectory/Installomator.pkg" 2>&1 | awk '/origin=/ {print $NF }' | tr -d '()')
|
|
||||||
echo "Team ID for downloaded package: $teamID"
|
|
||||||
# Install the package if Team ID validates
|
|
||||||
if [ "$expectedTeamID" = "$teamID" ] || [ "$expectedTeamID" = "" ]; then
|
|
||||||
echo "Package verified. Installing package Installomator.pkg"
|
|
||||||
installer -pkg "$tempDirectory/Installomator.pkg" -target / -verbose
|
|
||||||
exitCode=$?
|
|
||||||
else
|
|
||||||
echo "Package verification failed before package installation could start. Download link may be invalid. Aborting."
|
|
||||||
exitCode=1
|
|
||||||
exit $exitCode
|
|
||||||
fi
|
|
||||||
# Remove the temporary working directory when done
|
|
||||||
echo "Deleting working directory '$tempDirectory' and its contents"
|
|
||||||
rm -Rf "$tempDirectory"
|
|
||||||
else
|
|
||||||
echo "Installomator already installed."
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit $exitCode
|
|
||||||
@@ -1,18 +1,9 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Updating Installomator
|
# Updating Installomator
|
||||||
# Usefull to push out after deployment if earlier version was deployed in DEP profile
|
# Usefull to push out after deployment if earlier version was deployed in DEP profile
|
||||||
|
# Currently script uses valuesfromarguments as a label is not included before next release, so this can be used to install to version 0.7
|
||||||
|
|
||||||
what="installomator" # enter the software to install
|
what="installomator" # enter the software to install
|
||||||
LOGO="appstore" # or "addigy", "microsoft", "mosyleb", "mosylem"
|
|
||||||
|
|
||||||
# Verify that Installomator has been installed
|
|
||||||
destFile="/usr/local/Installomator/Installomator.sh"
|
|
||||||
if [ ! -e "${destFile}" ]; then
|
|
||||||
echo "Installomator not found here:"
|
|
||||||
echo "${destFile}"
|
|
||||||
echo "Exiting."
|
|
||||||
exit 99
|
|
||||||
fi
|
|
||||||
|
|
||||||
# No sleeping
|
# No sleeping
|
||||||
/usr/bin/caffeinate -d -i -m -u &
|
/usr/bin/caffeinate -d -i -m -u &
|
||||||
@@ -23,19 +14,30 @@ caffexit () {
|
|||||||
exit $1
|
exit $1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Install software using Installomator
|
# Verify that Installomator has been installed
|
||||||
cmdOutput="$(${destFile} ${what} LOGO=$LOGO BLOCKING_PROCESS_ACTION=ignore NOTIFY=silent LOGGING=req || true)"
|
destFile="/usr/local/Installomator/Installomator.sh"
|
||||||
|
if [ ! -e "${destFile}" ]; then
|
||||||
|
echo "Installomator not found here:"
|
||||||
|
echo "${destFile}"
|
||||||
|
echo "Exiting."
|
||||||
|
caffexit 99
|
||||||
|
fi
|
||||||
|
|
||||||
# Check result
|
${destFile} valuesfromarguments\
|
||||||
exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )"
|
name=Installomator \
|
||||||
if [[ ${exitStatus} -eq 0 ]] ; then
|
type=pkg \
|
||||||
echo -e "${what} succesfully installed.\n"
|
packageID=com.scriptingosx.Installomator \
|
||||||
else
|
downloadURL=https://github.com/Installomator/Installomator/releases/download/v0.7release/Installomator-0.7.0.pkg \
|
||||||
echo -e "Error installing ${what}. Exit code ${exitStatus}\n"
|
appNewVersion=0.7 \
|
||||||
#echo "$cmdOutput"
|
expectedTeamID=JME5BW3F3R \
|
||||||
errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )"
|
BLOCKING_PROCESS_ACTION=ignore \
|
||||||
echo "$errorOutput"
|
NOTIFY=silent
|
||||||
caffexit $exitStatus
|
|
||||||
|
# ${destFile} ${what} BLOCKING_PROCESS_ACTION=ignore NOTIFY=silent
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
# This is currently not working in Mosyle, that will ignore script errors. Please request support for this from Mosyle!
|
||||||
|
echo "Error installing ${what}. Exit code $?"
|
||||||
|
caffexit $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "[$(DATE)][LOG-END]"
|
echo "[$(DATE)][LOG-END]"
|
||||||
|
|||||||
@@ -1,69 +0,0 @@
|
|||||||
#!/bin/zsh
|
|
||||||
|
|
||||||
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
|
|
||||||
|
|
||||||
# MARK: Arguments/Parameters
|
|
||||||
|
|
||||||
# Parameter 4: path to the swiftDialog command file
|
|
||||||
dialog_command_file=${4:-"/var/tmp/dialog.log"}
|
|
||||||
|
|
||||||
# Parameter 5: message displayed over the progress bar
|
|
||||||
message=${5:-"Self Service Progress"}
|
|
||||||
|
|
||||||
# Parameter 6: path or URL to an icon
|
|
||||||
icon=${6:-"/System/Applications/App Store.app/Contents/Resources/AppIcon.icns"}
|
|
||||||
# see Dan Snelson's advice on how to get a URL to an icon in Self Service
|
|
||||||
# https://rumble.com/v119x6y-harvesting-self-service-icons.html
|
|
||||||
|
|
||||||
# MARK: Constants
|
|
||||||
|
|
||||||
dialogApp="/Library/Application Support/Dialog/Dialog.app"
|
|
||||||
|
|
||||||
# MARK: Functions
|
|
||||||
|
|
||||||
dialogUpdate() {
|
|
||||||
# $1: dialog command
|
|
||||||
local dcommand="$1"
|
|
||||||
|
|
||||||
if [[ -n $dialog_command_file ]]; then
|
|
||||||
echo "$dcommand" >> "$dialog_command_file"
|
|
||||||
echo "Dialog: $dcommand"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# MARK: sanity checks
|
|
||||||
|
|
||||||
# check minimal macOS requirement
|
|
||||||
if [[ $(sw_vers -buildVersion ) < "20A" ]]; then
|
|
||||||
echo "This script requires at least macOS 11 Big Sur."
|
|
||||||
exit 98
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check we are running as root
|
|
||||||
if [[ $DEBUG -eq 0 && $(id -u) -ne 0 ]]; then
|
|
||||||
echo "This script should be run as root"
|
|
||||||
exit 97
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check for Swift Dialog
|
|
||||||
if [[ ! -d $dialogApp ]]; then
|
|
||||||
echo "Cannot find dialog at $dialogApp"
|
|
||||||
exit 95
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# MARK: Configure and display swiftDialog
|
|
||||||
|
|
||||||
# display first screen
|
|
||||||
open -a "$dialogApp" --args \
|
|
||||||
--title none \
|
|
||||||
--icon "$icon" \
|
|
||||||
--message "$message" \
|
|
||||||
--mini \
|
|
||||||
--progress 100 \
|
|
||||||
--position bottomright \
|
|
||||||
--movable \
|
|
||||||
--commandfile "$dialog_command_file"
|
|
||||||
|
|
||||||
# give everything a moment to catch up
|
|
||||||
sleep 0.1
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
# Display Installomator Progress with SwiftDialog in Jamf
|
|
||||||
|
|
||||||
Installomator 10 has functionality to communicate with [Bart Reardon's swiftDialog](https://github.com/bartreardon/swiftDialog). When you set the `DIALOG_CMD_FILE` variable Installomator will write progress for downloads and installation (with pkgs) to the command file which allows swiftDialog to display the progress.
|
|
||||||
|
|
||||||
However, you have to launch and setup swiftDialog to display a window with a progress bar before Installomator launches and also make sure swiftDialog quits after Installomator has run. This may seem complex at first but allows to configure swiftDialog just for your case without needing to modify the Installomator script.
|
|
||||||
|
|
||||||
Here are some example script that would run before and after Installomator to display a swiftDialog window and quit the process after. Since Jamf Pro executes scripts in alphanumerical order, the names are chosen accordingly, to ensure proper order.
|
|
||||||
|
|
||||||
## Setup in Jamf Pro
|
|
||||||
|
|
||||||
To show Installomator progress with swiftDialog from a Jamf Policy, you require three scripts:
|
|
||||||
|
|
||||||
- `00_Prepare_SwiftDialog.sh`: Configures and displays the swiftDialog window
|
|
||||||
- `Installomator.sh`: (v10 or higher)
|
|
||||||
- `zz_Quit_SwiftDialog.sh`: quits swiftDialog
|
|
||||||
|
|
||||||
Add these three scripts to your Jamf Pro and create a policy with these three scripts. The names are chosen that the script appear in the correct order. If you rename the scripts in Jamf Pro, this may disrupt the order and the workflow will not work anymore. The "Priority" of the scripts in the policy should all be the same value.
|
|
||||||
|
|
||||||
The different scripts require a set of parameters. We will use the `googlechromepkg` label as an example.
|
|
||||||
|
|
||||||
`00_Prepare_SwiftDialog.sh`
|
|
||||||
|
|
||||||
Parameter 4: `/var/tmp/dialog` (Path to the swiftDialog command file)
|
|
||||||
|
|
||||||
Parameter 5: `Installing Google Chrome...` (text shown in the swiftDialog window above the progress bar)
|
|
||||||
|
|
||||||
Parameter 6: Path to or URL for an icon in swiftDialog. This can be a path on the client or a URL. See Dan Snelson's advice on how to get icon URLs for Self Service icons: https://rumble.com/v119x6y-harvesting-self-service-icons.html
|
|
||||||
|
|
||||||
`Installomator.sh`
|
|
||||||
|
|
||||||
Parameter 4: `googlechromepkg` (the label to install)
|
|
||||||
|
|
||||||
Parameter 5: `DIALOG_CMD_FILE=\var\log\dialog.log` (the swiftDialog command file, this has to be the same value as parameter 4 in the previous script)
|
|
||||||
|
|
||||||
Parameter 6: `NOTIFY=silent` (disable Installomator notifications, optional)
|
|
||||||
|
|
||||||
You can add more configurations to the Installomator script when needed.
|
|
||||||
|
|
||||||
`zz_Quit_SwiftDialog`
|
|
||||||
|
|
||||||
Parameter 4: `/var/log/dialog.log` (the swiftDialog command file, this has to be the same value as parameter 4 in the first script)
|
|
||||||
|
|
||||||
Then setup the remainder of the Jamf Policy to your needs. This works best with Self Service policies.
|
|
||||||
|
|
||||||
When you run the policy, the first script will configure and display swiftDialog. Installomator.sh will download and install the app while writing the proper update commands to the file set in `DIALOG_CMD_FILE`. The final script will quit swiftDialog.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 576 KiB |
@@ -1,57 +0,0 @@
|
|||||||
#!/bin/zsh
|
|
||||||
|
|
||||||
# MARK: Arguments/Parameters
|
|
||||||
|
|
||||||
# Parameter 4: path to the swiftDialog command file
|
|
||||||
dialog_command_file=${4:-"/var/tmp/dialog.log"}
|
|
||||||
|
|
||||||
# MARK: Constants
|
|
||||||
dialogApp="/Library/Application Support/Dialog/Dialog.app"
|
|
||||||
|
|
||||||
dialogUpdate() {
|
|
||||||
# $1: dialog command
|
|
||||||
local dcommand="$1"
|
|
||||||
|
|
||||||
if [[ -n $dialog_command_file ]]; then
|
|
||||||
echo "$dcommand" >> "$dialog_command_file"
|
|
||||||
echo "Dialog: $dcommand"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# check minimal macOS requirement
|
|
||||||
if [[ $(sw_vers -buildVersion ) < "20A" ]]; then
|
|
||||||
echo "This script requires at least macOS 11 Big Sur."
|
|
||||||
exit 98
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check we are running as root
|
|
||||||
if [[ $DEBUG -eq 0 && $(id -u) -ne 0 ]]; then
|
|
||||||
echo "This script should be run as root"
|
|
||||||
exit 97
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check for Swift Dialog
|
|
||||||
if [[ ! -d $dialogApp ]]; then
|
|
||||||
echo "Cannot find dialog at $dialogApp"
|
|
||||||
exit 95
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# close and quit dialog
|
|
||||||
dialogUpdate "progress: complete"
|
|
||||||
dialogUpdate "progresstext: Done"
|
|
||||||
|
|
||||||
# pause a moment
|
|
||||||
sleep 0.5
|
|
||||||
|
|
||||||
dialogUpdate "quit:"
|
|
||||||
|
|
||||||
# let everything catch up
|
|
||||||
sleep 0.5
|
|
||||||
|
|
||||||
# just to be safe
|
|
||||||
killall "Dialog"
|
|
||||||
|
|
||||||
# the killall command above will return error when Dialog is already quit
|
|
||||||
# but we don't want that to register as a failure in Jamf, so always exit 0
|
|
||||||
exit 0
|
|
||||||
@@ -5,34 +5,15 @@
|
|||||||
|
|
||||||
# Mark: Installation script
|
# Mark: Installation script
|
||||||
# Just click “Add” to autogenerate the installer script line by clicking the “Add”-button next to the Installer PKG, replace with first line below
|
# Just click “Add” to autogenerate the installer script line by clicking the “Add”-button next to the Installer PKG, replace with first line below
|
||||||
/usr/sbin/installer -pkg "/Library/Addigy/ansible/packages/Installomator (9.1.0)/Installomator-9.1.pkg" -target /
|
/usr/sbin/installer -pkg "/Library/Addigy/ansible/packages/Installomator (0.7.0)/Installomator-0.7.0.pkg" -target /
|
||||||
|
|
||||||
# Installation using Installomator
|
# Installation using Installomator
|
||||||
whatList="supportapp xink textmate microsoftedge wwdc keka vlc " # enter the software to installed separated with spaces
|
what="supportapp xink textmate microsoftedge wwdc keka vlc " # enter the software to installed separated with spaces
|
||||||
|
|
||||||
# To be used as a script sent out from a MDM.
|
# To be used as a script sent out from a MDM.
|
||||||
# Fill the variable "whatList" above with labels separated by space " ".
|
# Fill the variable "what" above with labels separated by space " ".
|
||||||
# Script will loop through these labels and exit with number of errors.
|
# Script will loop through these labels and exit with number of errors.
|
||||||
######################################################################
|
######################################################################
|
||||||
# Parameters for reinstall/initial install (owner root:wheel):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force IGNORE_APP_STORE_APPS=yes SYSTEMOWNER=1"
|
|
||||||
# Parameters for Self Service installed app:
|
|
||||||
# "BLOCKING_PROCESS_ACTION=prompt_user NOTIFY=all"
|
|
||||||
# Parameters for security important apps, like browsers (run automaticaly every day):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=tell_user_then_kill"
|
|
||||||
# Update of service apps (run automatically):
|
|
||||||
# "BLOCKING_PROCESS_ACTION=quit_kill NOTIFY=silent"
|
|
||||||
parameters="BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force IGNORE_APP_STORE_APPS=yes"
|
|
||||||
######################################################################
|
|
||||||
|
|
||||||
# Verify that Installomator has been installed
|
|
||||||
destFile="/usr/local/Installomator/Installomator.sh"
|
|
||||||
if [ ! -e "${destFile}" ]; then
|
|
||||||
echo "Installomator not found here:"
|
|
||||||
echo "${destFile}"
|
|
||||||
echo "Exiting."
|
|
||||||
exit 99
|
|
||||||
fi
|
|
||||||
|
|
||||||
# No sleeping
|
# No sleeping
|
||||||
/usr/bin/caffeinate -d -i -m -u &
|
/usr/bin/caffeinate -d -i -m -u &
|
||||||
@@ -46,17 +27,21 @@ caffexit () {
|
|||||||
# Count errors
|
# Count errors
|
||||||
errorCount=0
|
errorCount=0
|
||||||
|
|
||||||
for what in $whatList; do
|
# Verify that Installomator has been installed
|
||||||
#echo $what
|
destFile="/usr/local/Installomator/Installomator.sh"
|
||||||
# Install software using Installomator
|
if [ ! -e "${destFile}" ]; then
|
||||||
cmdOutput="$(${destFile} ${what} LOGO=addigy $parameters || true)"
|
echo "Installomator not found here:"
|
||||||
# Check result
|
echo "${destFile}"
|
||||||
exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )"
|
echo "Exiting."
|
||||||
if [[ ${exitStatus} -ne 0 ]] ; then
|
caffexit 99
|
||||||
echo -e "Error installing ${what}. Exit code ${exitStatus}"
|
fi
|
||||||
#echo "$cmdOutput"
|
|
||||||
errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )"
|
for item in $what; do
|
||||||
echo "$errorOutput"
|
#echo $item
|
||||||
|
${destFile} ${item} LOGO=addigy NOTIFY=silent BLOCKING_PROCESS_ACTION=quit_kill #INSTALL=force
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
# Error handling
|
||||||
|
echo "[$(DATE)] Error installing ${item}. Exit code $?"
|
||||||
let errorCount++
|
let errorCount++
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -71,7 +56,7 @@ caffexit $errorCount
|
|||||||
# Install on success
|
# Install on success
|
||||||
# Remember to fill out the correct “TARGET_VERSION” and “PKG_ID”, and click "Install on succes".
|
# Remember to fill out the correct “TARGET_VERSION” and “PKG_ID”, and click "Install on succes".
|
||||||
PKG_ID="com.scriptingosx.Installomator"
|
PKG_ID="com.scriptingosx.Installomator"
|
||||||
TARGET_VERSION="9.1"
|
TARGET_VERSION="8.0"
|
||||||
|
|
||||||
vercomp () {
|
vercomp () {
|
||||||
if [[ $1 == $2 ]]; then
|
if [[ $1 == $2 ]]; then
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
PKG_ID="com.scriptingosx.Installomator"
|
PKG_ID="com.scriptingosx.Installomator"
|
||||||
TARGET_VERSION="9.1"
|
TARGET_VERSION="8.0"
|
||||||
URLDOWNLOAD="%MosyleCDNFile:blah-blah-blah%"
|
URLDOWNLOAD="%MosyleCDNFile:blah-blah-blah%"
|
||||||
######################################################################
|
######################################################################
|
||||||
# Installation using Installomator (enter the software to install separated with spaces in the "whatList"-variable)
|
# Installation using Installomator (enter the software to install separated with spaces in the "what"-variable)
|
||||||
whatList="handbrake theunarchiver microsoftoffice365"
|
what="handbrake theunarchiver microsoftoffice365"
|
||||||
# Covered by Mosyle Catalog: "brave firefox googlechrome microsoftedge microsoftteams signal sublimetext vlc webex zoom" among others
|
# Covered by Mosyle Catalog: "brave firefox googlechrome microsoftedge microsoftteams signal sublimetext vlc webex zoom" among others
|
||||||
LOGO="mosyleb" # or "mosylem"
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
## Mark: Code here
|
## Mark: Code here
|
||||||
@@ -57,17 +56,12 @@ if [ ! -e "${destFile}" ]; then
|
|||||||
caffexit 99
|
caffexit 99
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for what in $whatList; do
|
for item in $what; do
|
||||||
#echo $item
|
#echo $item
|
||||||
# Install software using Installomator
|
${destFile} ${item} LOGO=mosyle NOTIFY=all BLOCKING_PROCESS_ACTION=tell_user #NOTIFY=silent BLOCKING_PROCESS_ACTION=quit_kill #INSTALL=force
|
||||||
cmdOutput="$(${destFile} ${what} LOGO=$LOGO NOTIFY=all BLOCKING_PROCESS_ACTION=tell_user || true)" # NOTIFY=silent BLOCKING_PROCESS_ACTION=quit_kill INSTALL=force
|
if [ $? != 0 ]; then
|
||||||
# Check result
|
# Error handling
|
||||||
exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )"
|
echo "[$(DATE)] Error installing ${item}. Exit code $?"
|
||||||
if [[ ${exitStatus} -ne 0 ]] ; then
|
|
||||||
echo "Error installing ${what}. Exit code ${exitStatus}"
|
|
||||||
#echo "$cmdOutput"
|
|
||||||
errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )"
|
|
||||||
echo "$errorOutput"
|
|
||||||
let errorCount++
|
let errorCount++
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -1,20 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Software
|
|
||||||
|
|
||||||
# Installation using Installomator
|
# Installation using Installomator
|
||||||
# Example of installing software using valuesfromarguments to install a custom software
|
# Example of installing software using valuesfromarguments to install a custom software
|
||||||
|
|
||||||
LOGO="appstore" # or "addigy", "microsoft", "mosyleb", "mosylem"
|
what="valuesfromarguments" # enter the software to install
|
||||||
###############################################
|
|
||||||
|
|
||||||
# Verify that Installomator has been installed
|
|
||||||
destFile="/usr/local/Installomator/Installomator.sh"
|
|
||||||
if [ ! -e "${destFile}" ]; then
|
|
||||||
echo "Installomator not found here:"
|
|
||||||
echo "${destFile}"
|
|
||||||
echo "Exiting."
|
|
||||||
exit 99
|
|
||||||
fi
|
|
||||||
|
|
||||||
# No sleeping
|
# No sleeping
|
||||||
/usr/bin/caffeinate -d -i -m -u &
|
/usr/bin/caffeinate -d -i -m -u &
|
||||||
@@ -25,31 +13,29 @@ caffexit () {
|
|||||||
exit $1
|
exit $1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Variables to calculate
|
# Verify that Installomator has been installed
|
||||||
downloadURL="https://craft-assets.invisionapp.com/CraftManager/production/CraftManager.zip"
|
destFile="/usr/local/Installomator/Installomator.sh"
|
||||||
appNewVersion=$(curl -fs https://craft-assets.invisionapp.com/CraftManager/production/appcast.xml | xpath -e '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f2)
|
if [ ! -e "${destFile}" ]; then
|
||||||
|
echo "Installomator not found here:"
|
||||||
|
echo "${destFile}"
|
||||||
|
echo "Exiting."
|
||||||
|
caffexit 99
|
||||||
|
fi
|
||||||
|
|
||||||
# Install software using Installomator
|
${destFile} valuesfromarguments \
|
||||||
cmdOutput="$(${destFile} valuesfromarguments LOGO=$LOGO \
|
name=\"Zoho\ WorkDrive\" \
|
||||||
name=CraftManager \
|
type=dmg \
|
||||||
type=zip \
|
downloadURL=https://files-accl.zohopublic.com/public/wdbin/download/46f971e4fc4a32b68ad5d7dade38a7d2 \
|
||||||
downloadURL=$downloadURL \
|
appNewVersion=2.6.25 \
|
||||||
appNewVersion=$appNewVersion \
|
expectedTeamID=TZ824L8Y37 \
|
||||||
expectedTeamID=VRXQSNCL5W \
|
BLOCKING_PROCESS_ACTION=quit \
|
||||||
BLOCKING_PROCESS_ACTION=prompt_user \
|
NOTIFY=all
|
||||||
LOGGING=REQ \
|
|
||||||
NOTIFY=all || true)"
|
|
||||||
|
|
||||||
# Check result
|
# ${destFile} ${what} BLOCKING_PROCESS_ACTION=ignore NOTIFY=silent
|
||||||
exitStatus="$( echo "${cmdOutput}" | grep --binary-files=text -i "exit" | tail -1 | sed -E 's/.*exit code ([0-9]).*/\1/g' || true )"
|
if [ $? != 0 ]; then
|
||||||
if [[ ${exitStatus} -eq 0 ]] ; then
|
# This is currently not working in Mosyle, that will ignore script errors. Please request support for this from Mosyle!
|
||||||
echo -e "${what} succesfully installed.\n"
|
echo "Error installing ${what}. Exit code $?"
|
||||||
else
|
caffexit $?
|
||||||
echo -e "Error installing ${what}. Exit code ${exitStatus}\n"
|
|
||||||
#printlog "$cmdOutput"
|
|
||||||
errorOutput="$( echo "${cmdOutput}" | grep --binary-files=text -i "error" || true )"
|
|
||||||
echo "$errorOutput"
|
|
||||||
caffexit $exitStatus
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "[$(DATE)][LOG-END]"
|
echo "[$(DATE)][LOG-END]"
|
||||||
|
|||||||
@@ -1,151 +0,0 @@
|
|||||||
#!/bin/zsh
|
|
||||||
|
|
||||||
# runs through a list of Installomator items
|
|
||||||
# and displays status using Swift Dialog
|
|
||||||
#
|
|
||||||
# dependencies:
|
|
||||||
# - Swift Dialog: https://github.com/bartreardon/swiftDialog
|
|
||||||
# - Installomator: https://github.com/Installomator/Installomator
|
|
||||||
# this script will install both if they are not yet present
|
|
||||||
|
|
||||||
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
|
|
||||||
|
|
||||||
# MARK: Variables
|
|
||||||
|
|
||||||
# set to 1 to not require root and not actually do any changes
|
|
||||||
# set to 0 for production
|
|
||||||
if [[ $1 == "NODEBUG" ]]; then
|
|
||||||
DEBUG=0
|
|
||||||
else
|
|
||||||
DEBUG=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# the label to install:
|
|
||||||
label="googlechromepkg"
|
|
||||||
|
|
||||||
|
|
||||||
# MARK: Constants
|
|
||||||
|
|
||||||
scriptDir=$(dirname ${0:A})
|
|
||||||
repoDir=$(dirname $scriptDir)
|
|
||||||
|
|
||||||
# if [[ $DEBUG -eq 1 ]]; then
|
|
||||||
installomator="$repoDir/utils/assemble.sh"
|
|
||||||
# else
|
|
||||||
# installomator="/usr/local/Installomator/Installomator.sh"
|
|
||||||
# fi
|
|
||||||
|
|
||||||
dialog="/usr/local/bin/dialog"
|
|
||||||
|
|
||||||
if [[ DEBUG -eq 0 ]]; then
|
|
||||||
dialog_command_file="/var/tmp/dialog.log"
|
|
||||||
else
|
|
||||||
dialog_command_file="$HOME/dialog.log"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# MARK: Functions
|
|
||||||
|
|
||||||
dialogUpdate() {
|
|
||||||
# $1: dialog command
|
|
||||||
local dcommand=$1
|
|
||||||
|
|
||||||
if [[ -n $dialog_command_file ]]; then
|
|
||||||
echo "$dcommand" >> $dialog_command_file
|
|
||||||
echo "Dialog: $dcommand"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
progressUpdate() {
|
|
||||||
# $1: progress text (optional)
|
|
||||||
local text=$1
|
|
||||||
itemCounter=$((itemCounter + 1))
|
|
||||||
dialogUpdate "progress: $itemCounter"
|
|
||||||
if [[ -n $text ]]; then
|
|
||||||
dialogUpdate "progresstext: $text"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
startItem() {
|
|
||||||
local description=$1
|
|
||||||
|
|
||||||
echo "Starting Item: $description"
|
|
||||||
dialogUpdate "listitem: $description: wait"
|
|
||||||
progressUpdate $description
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanupAndExit() {
|
|
||||||
# kill caffeinate process
|
|
||||||
if [[ -n $caffeinatePID ]]; then
|
|
||||||
echo "killing caffeinate..."
|
|
||||||
kill $caffeinatePID
|
|
||||||
fi
|
|
||||||
|
|
||||||
# clean up tmp dir
|
|
||||||
if [[ -n $tmpDir && -d $tmpDir ]]; then
|
|
||||||
echo "removing tmpDir $tmpDir"
|
|
||||||
rm -rf $tmpDir
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# MARK: sanity checks
|
|
||||||
|
|
||||||
# check minimal macOS requirement
|
|
||||||
if [[ $(sw_vers -buildVersion ) < "20" ]]; then
|
|
||||||
echo "This script requires at least macOS 11 Big Sur."
|
|
||||||
exit 98
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check we are running as root
|
|
||||||
if [[ $DEBUG -eq 0 && $(id -u) -ne 0 ]]; then
|
|
||||||
echo "This script should be run as root"
|
|
||||||
exit 97
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check for installomator
|
|
||||||
if [[ ! -x $installomator ]]; then
|
|
||||||
echo "Cannot find Installomator at $installomator"
|
|
||||||
exit 96
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check for Swift Dialog
|
|
||||||
if [[ ! -x $dialog ]]; then
|
|
||||||
echo "Cannot find dialog at $dialog"
|
|
||||||
exit 95
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# MARK: Setup
|
|
||||||
|
|
||||||
# No sleeping
|
|
||||||
caffeinate -dimsu & caffeinatePID=$!
|
|
||||||
|
|
||||||
# trap exit for cleanup
|
|
||||||
trap cleanupAndExit EXIT
|
|
||||||
|
|
||||||
# display first screen
|
|
||||||
$dialog --title "Installing $label" \
|
|
||||||
--message "" \
|
|
||||||
--hideicon \
|
|
||||||
--mini \
|
|
||||||
--progress 100 \
|
|
||||||
--position bottomright \
|
|
||||||
--ontop \
|
|
||||||
--movable \
|
|
||||||
--commandfile $dialog_command_file & dialogPID=$!
|
|
||||||
|
|
||||||
sleep 0.1
|
|
||||||
|
|
||||||
$installomator $label \
|
|
||||||
DIALOG_CMD_FILE="$dialog_command_file" \
|
|
||||||
DEBUG=$DEBUG
|
|
||||||
|
|
||||||
# clean up UI
|
|
||||||
|
|
||||||
dialogUpdate "progress: complete"
|
|
||||||
dialogUpdate "progresstext: Done"
|
|
||||||
|
|
||||||
sleep 0.5
|
|
||||||
|
|
||||||
dialogUpdate "quit:"
|
|
||||||
|
|
||||||
@@ -1,185 +0,0 @@
|
|||||||
#!/bin/zsh
|
|
||||||
|
|
||||||
# runs through a list of Installomator items
|
|
||||||
# and displays status using Swift Dialog
|
|
||||||
#
|
|
||||||
# dependencies:
|
|
||||||
# - Swift Dialog: https://github.com/bartreardon/swiftDialog
|
|
||||||
# - Installomator: https://github.com/Installomator/Installomator
|
|
||||||
# this script will install both if they are not yet present
|
|
||||||
|
|
||||||
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
|
|
||||||
|
|
||||||
# MARK: Variables
|
|
||||||
|
|
||||||
# set to 1 to not require root and not actually do any changes
|
|
||||||
# set to 0 for production
|
|
||||||
if [[ $1 == "NODEBUG" ]]; then
|
|
||||||
DEBUG=0
|
|
||||||
else
|
|
||||||
DEBUG=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# list of Installomator labels
|
|
||||||
|
|
||||||
items=(
|
|
||||||
"firefoxpkg|Firefox"
|
|
||||||
"error|Expected Error"
|
|
||||||
"googlechromepkg|Google Chrome"
|
|
||||||
)
|
|
||||||
|
|
||||||
# MARK: Constants
|
|
||||||
|
|
||||||
scriptDir=$(dirname ${0:A})
|
|
||||||
repoDir=$(dirname $scriptDir)
|
|
||||||
|
|
||||||
# if [[ $DEBUG -eq 1 ]]; then
|
|
||||||
installomator="$repoDir/utils/assemble.sh"
|
|
||||||
# else
|
|
||||||
# installomator="/usr/local/Installomator/Installomator.sh"
|
|
||||||
# fi
|
|
||||||
|
|
||||||
dialog="/usr/local/bin/dialog"
|
|
||||||
|
|
||||||
if [[ DEBUG -eq 0 ]]; then
|
|
||||||
dialog_command_file="/var/tmp/dialog.log"
|
|
||||||
else
|
|
||||||
dialog_command_file="$HOME/dialog.log"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# MARK: Functions
|
|
||||||
|
|
||||||
dialogUpdate() {
|
|
||||||
# $1: dialog command
|
|
||||||
local dcommand=$1
|
|
||||||
|
|
||||||
if [[ -n $dialog_command_file ]]; then
|
|
||||||
echo "$dcommand" >> $dialog_command_file
|
|
||||||
echo "Dialog: $dcommand"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
progressUpdate() {
|
|
||||||
# $1: progress text (optional)
|
|
||||||
local text=$1
|
|
||||||
itemCounter=$((itemCounter + 1))
|
|
||||||
dialogUpdate "progress: $itemCounter"
|
|
||||||
if [[ -n $text ]]; then
|
|
||||||
dialogUpdate "progresstext: $text"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
startItem() {
|
|
||||||
local description=$1
|
|
||||||
|
|
||||||
echo "Starting Item: $description"
|
|
||||||
dialogUpdate "listitem: $description: wait"
|
|
||||||
progressUpdate $description
|
|
||||||
}
|
|
||||||
|
|
||||||
installomator() {
|
|
||||||
# $1: label
|
|
||||||
# $2: description
|
|
||||||
local label=$1
|
|
||||||
local description=$2
|
|
||||||
|
|
||||||
$installomator $label \
|
|
||||||
DIALOG_CMD_FILE=${(q)dialog_command_file} \
|
|
||||||
DIALOG_LIST_ITEM_NAME=${(q)description} \
|
|
||||||
DEBUG=$DEBUG \
|
|
||||||
LOGGING=DEBUG
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanupAndExit() {
|
|
||||||
# kill caffeinate process
|
|
||||||
if [[ -n $caffeinatePID ]]; then
|
|
||||||
echo "killing caffeinate..."
|
|
||||||
kill $caffeinatePID
|
|
||||||
fi
|
|
||||||
|
|
||||||
# clean up tmp dir
|
|
||||||
if [[ -n $tmpDir && -d $tmpDir ]]; then
|
|
||||||
echo "removing tmpDir $tmpDir"
|
|
||||||
rm -rf $tmpDir
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# MARK: sanity checks
|
|
||||||
|
|
||||||
# check minimal macOS requirement
|
|
||||||
if [[ $(sw_vers -buildVersion ) < "20" ]]; then
|
|
||||||
echo "This script requires at least macOS 11 Big Sur."
|
|
||||||
exit 98
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check we are running as root
|
|
||||||
if [[ $DEBUG -eq 0 && $(id -u) -ne 0 ]]; then
|
|
||||||
echo "This script should be run as root"
|
|
||||||
exit 97
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check for installomator
|
|
||||||
if [[ ! -x $installomator ]]; then
|
|
||||||
echo "Cannot find Installomator at $installomator"
|
|
||||||
exit 96
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check for Swift Dialog
|
|
||||||
if [[ ! -x $dialog ]]; then
|
|
||||||
echo "Cannot find dialog at $dialog"
|
|
||||||
exit 95
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# MARK: Setup
|
|
||||||
|
|
||||||
# No sleeping
|
|
||||||
caffeinate -dimsu & caffeinatePID=$!
|
|
||||||
|
|
||||||
# trap exit for cleanup
|
|
||||||
trap cleanupAndExit EXIT
|
|
||||||
|
|
||||||
# setup first list
|
|
||||||
itemCount=$((${#items} + 1))
|
|
||||||
|
|
||||||
listitems=( )
|
|
||||||
|
|
||||||
for item in $items; do
|
|
||||||
label=$(cut -d '|' -f 1 <<< $item)
|
|
||||||
description=$(cut -d '|' -f 2 <<< $item)
|
|
||||||
listitems+=( "--listitem" ${description} )
|
|
||||||
done
|
|
||||||
|
|
||||||
# display first screen
|
|
||||||
$dialog --title "More Software" \
|
|
||||||
--icon "SF=gear" \
|
|
||||||
--message "We are downloading and installing some extra Apps..." \
|
|
||||||
--progress $itemCount \
|
|
||||||
"${listitems[@]}" \
|
|
||||||
--button1disabled \
|
|
||||||
--big \
|
|
||||||
--ontop \
|
|
||||||
--liststyle compact \
|
|
||||||
--width 700 \
|
|
||||||
--commandfile $dialog_command_file & dialogPID=$!
|
|
||||||
sleep 0.1
|
|
||||||
|
|
||||||
itemCounter=0
|
|
||||||
|
|
||||||
for item in $items; do
|
|
||||||
label=$(cut -d '|' -f 1 <<< $item)
|
|
||||||
description=$(cut -d '|' -f 2 <<< $item)
|
|
||||||
|
|
||||||
startItem $description
|
|
||||||
installomator $label $description
|
|
||||||
done
|
|
||||||
|
|
||||||
# clean up UI
|
|
||||||
|
|
||||||
dialogUpdate "progress: complete"
|
|
||||||
dialogUpdate "progresstext: Finished"
|
|
||||||
|
|
||||||
dialogUpdate "button1: enable"
|
|
||||||
dialogUpdate "button1text: Done"
|
|
||||||
|
|
||||||
12
README.md
12
README.md
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
_The one installer script to rule them all._
|
_The one installer script to rule them all._
|
||||||
|
|
||||||
   
|
   
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
@@ -13,12 +13,12 @@ We have put a lot of work into making it stable and safe, but we cannot - of cou
|
|||||||
## Authors
|
## Authors
|
||||||
|
|
||||||
Intallomator was originally inspired by the download scripts from William Smith and Sander Schram, and created by:
|
Intallomator was originally inspired by the download scripts from William Smith and Sander Schram, and created by:
|
||||||
- [Armin Briegel - @scriptingosx](https://github.com/scriptingosx)
|
Armin Briegel - @scriptingosx
|
||||||
|
|
||||||
Later on a few more members came on the project:
|
Later on a few more contributers came on the project:
|
||||||
- Isaac Ordonez - @issacatmann
|
Isaac Ordonez - @issacatmann
|
||||||
- [Søren Theilgaard - @Theile](https://github.com/Theile)
|
Søren Theilgaard - @Theile
|
||||||
- [Adam Codega - @acodega](https://github.com/acodega)
|
Adam Codega - @acodega
|
||||||
|
|
||||||
And with numerous contributions from many others.
|
And with numerous contributions from many others.
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ if ! is-at-least 10.14 $installedOSversion; then
|
|||||||
exit 98
|
exit 98
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# MARK: argument parsing
|
# MARK: argument parsing
|
||||||
if [[ $# -eq 0 ]]; then
|
if [[ $# -eq 0 ]]; then
|
||||||
if [[ -z $label ]]; then # check if label is set inside script
|
if [[ -z $label ]]; then # check if label is set inside script
|
||||||
@@ -25,7 +24,7 @@ fi
|
|||||||
while [[ -n $1 ]]; do
|
while [[ -n $1 ]]; do
|
||||||
if [[ $1 =~ ".*\=.*" ]]; then
|
if [[ $1 =~ ".*\=.*" ]]; then
|
||||||
# if an argument contains an = character, send it to eval
|
# if an argument contains an = character, send it to eval
|
||||||
printlog "setting variable from argument $1" INFO
|
printlog "setting variable from argument $1" WARN
|
||||||
eval $1
|
eval $1
|
||||||
else
|
else
|
||||||
# assume it's a label
|
# assume it's a label
|
||||||
@@ -100,16 +99,6 @@ if [[ "$(whoami)" != "root" && "$DEBUG" -eq 0 ]]; then
|
|||||||
cleanupAndExit 6 "not running as root, exiting" ERROR
|
cleanupAndExit 6 "not running as root, exiting" ERROR
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# check Swift Dialog presence and version
|
|
||||||
DIALOG_CMD="/usr/local/bin/dialog"
|
|
||||||
|
|
||||||
if [[ ! -x $DIALOG_CMD ]]; then
|
|
||||||
# Swift Dialog is not installed, clear cmd file variable to ignore
|
|
||||||
printlog "SwiftDialog is not installed, clear cmd file var"
|
|
||||||
DIALOG_CMD_FILE=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
# MARK: labels in case statement
|
# MARK: labels in case statement
|
||||||
case $label in
|
case $label in
|
||||||
longversion)
|
longversion)
|
||||||
|
|||||||
@@ -14,18 +14,15 @@ cleanupAndExit() { # $1 = exit code, $2 message, $3 level
|
|||||||
printlog "Debugging enabled, Deleting tmpDir output was:\n$deleteTmpOut" DEBUG
|
printlog "Debugging enabled, Deleting tmpDir output was:\n$deleteTmpOut" DEBUG
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# If we closed any processes, reopen the app again
|
# If we closed any processes, reopen the app again
|
||||||
reopenClosedProcess
|
reopenClosedProcess
|
||||||
if [[ -n $2 && $1 -ne 0 ]]; then
|
if [[ -n $2 && $1 -ne 0 ]]; then
|
||||||
printlog "ERROR: $2" $3
|
printlog "ERROR: $2" $3
|
||||||
updateDialog "fail" "Error ($1; $2)"
|
|
||||||
else
|
else
|
||||||
printlog "$2" $3
|
printlog "$2" $3
|
||||||
updateDialog "success" ""
|
|
||||||
fi
|
fi
|
||||||
printlog "################## End Installomator, exit code $1 \n" REQ
|
printlog "################## End Installomator, exit code $1 \n" REQ
|
||||||
|
|
||||||
# if label is wrong and we wanted name of the label, then return ##################
|
# if label is wrong and we wanted name of the label, then return ##################
|
||||||
if [[ $RETURN_LABEL_NAME -eq 1 ]]; then
|
if [[ $RETURN_LABEL_NAME -eq 1 ]]; then
|
||||||
1=0 # If only label name should be returned we exit without any errors
|
1=0 # If only label name should be returned we exit without any errors
|
||||||
@@ -64,12 +61,9 @@ displaynotification() { # $1: message $2: title
|
|||||||
message=${1:-"Message"}
|
message=${1:-"Message"}
|
||||||
title=${2:-"Notification"}
|
title=${2:-"Notification"}
|
||||||
manageaction="/Library/Application Support/JAMF/bin/Management Action.app/Contents/MacOS/Management Action"
|
manageaction="/Library/Application Support/JAMF/bin/Management Action.app/Contents/MacOS/Management Action"
|
||||||
hubcli="/usr/local/bin/hubcli"
|
|
||||||
|
|
||||||
if [[ -x "$manageaction" ]]; then
|
if [[ -x "$manageaction" ]]; then
|
||||||
"$manageaction" -message "$message" -title "$title"
|
"$manageaction" -message "$message" -title "$title"
|
||||||
elif [[ -x "$hubcli" ]]; then
|
|
||||||
"$hubcli" notify -t "$title" -i "$message" -c "Dismiss"
|
|
||||||
else
|
else
|
||||||
runAsUser osascript -e "display notification \"$message\" with title \"$title\""
|
runAsUser osascript -e "display notification \"$message\" with title \"$title\""
|
||||||
fi
|
fi
|
||||||
@@ -162,14 +156,14 @@ downloadURLFromGit() { # $1 git user name, $2 git repo name
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$archiveName" ]; then
|
if [ -n "$archiveName" ]; then
|
||||||
#downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
|
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
|
||||||
downloadURL=https://github.com$(curl -sfL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -i "^/.*\/releases\/download\/.*$archiveName" | head -1)
|
| awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }")
|
||||||
else
|
else
|
||||||
#downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
|
downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \
|
||||||
downloadURL=https://github.com$(curl -sfL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -i "^/.*\/releases\/download\/.*\.$filetype" | head -1)
|
| awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }")
|
||||||
fi
|
fi
|
||||||
if [ -z "$downloadURL" ]; then
|
if [ -z "$downloadURL" ]; then
|
||||||
cleanupAndExit 14 "could not retrieve download URL for $gitusername/$gitreponame" ERROR
|
cleanupAndExit 9 "could not retrieve download URL for $gitusername/$gitreponame" ERROR
|
||||||
else
|
else
|
||||||
echo "$downloadURL"
|
echo "$downloadURL"
|
||||||
return 0
|
return 0
|
||||||
@@ -182,8 +176,7 @@ versionFromGit() {
|
|||||||
gitusername=${1?:"no git user name"}
|
gitusername=${1?:"no git user name"}
|
||||||
gitreponame=${2?:"no git repo name"}
|
gitreponame=${2?:"no git repo name"}
|
||||||
|
|
||||||
#appNewVersion=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g')
|
appNewVersion=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g')
|
||||||
appNewVersion=$(curl -sLI "https://github.com/$gitusername/$gitreponame/releases/latest" | grep -i "^location" | tr "/" "\n" | tail -1 | sed 's/[^0-9\.]//g')
|
|
||||||
if [ -z "$appNewVersion" ]; then
|
if [ -z "$appNewVersion" ]; then
|
||||||
printlog "could not retrieve version number for $gitusername/$gitreponame" WARN
|
printlog "could not retrieve version number for $gitusername/$gitreponame" WARN
|
||||||
appNewVersion=""
|
appNewVersion=""
|
||||||
@@ -206,16 +199,6 @@ xpath() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# from @Pico: https://macadmins.slack.com/archives/CGXNNJXJ9/p1652222365989229?thread_ts=1651786411.413349&cid=CGXNNJXJ9
|
|
||||||
getJSONValue() {
|
|
||||||
# $1: JSON string OR file path to parse (tested to work with up to 1GB string and 2GB file).
|
|
||||||
# $2: JSON key path to look up (using dot or bracket notation).
|
|
||||||
printf '%s' "$1" | /usr/bin/osascript -l 'JavaScript' \
|
|
||||||
-e "let json = $.NSString.alloc.initWithDataEncoding($.NSFileHandle.fileHandleWithStandardInput.readDataToEndOfFile$(/usr/bin/uname -r | /usr/bin/awk -F '.' '($1 > 18) { print "AndReturnError(ObjC.wrap())" }'), $.NSUTF8StringEncoding)" \
|
|
||||||
-e 'if ($.NSFileManager.defaultManager.fileExistsAtPath(json)) json = $.NSString.stringWithContentsOfFileEncodingError(json, $.NSUTF8StringEncoding, ObjC.wrap())' \
|
|
||||||
-e "const value = JSON.parse(json.js)$([ -n "${2%%[.[]*}" ] && echo '.')$2" \
|
|
||||||
-e 'if (typeof value === "object") { JSON.stringify(value, null, 4) } else { value }'
|
|
||||||
}
|
|
||||||
|
|
||||||
getAppVersion() {
|
getAppVersion() {
|
||||||
# modified by: Søren Theilgaard (@theilgaard) and Isaac Ordonez
|
# modified by: Søren Theilgaard (@theilgaard) and Isaac Ordonez
|
||||||
@@ -259,8 +242,8 @@ getAppVersion() {
|
|||||||
# printlog "App(s) found: ${applist}" DEBUG
|
# printlog "App(s) found: ${applist}" DEBUG
|
||||||
# applist=$(mdfind "kind:application AND name:$appName" -0 )
|
# applist=$(mdfind "kind:application AND name:$appName" -0 )
|
||||||
fi
|
fi
|
||||||
if [[ -z $applist ]]; then
|
if [[ -z applist ]]; then
|
||||||
printlog "No previous app found" WARN
|
printlog "No previous app found" INFO
|
||||||
else
|
else
|
||||||
printlog "App(s) found: ${applist}" INFO
|
printlog "App(s) found: ${applist}" INFO
|
||||||
fi
|
fi
|
||||||
@@ -282,10 +265,10 @@ getAppVersion() {
|
|||||||
if [[ -d "$installedAppPath"/Contents/_MASReceipt ]];then
|
if [[ -d "$installedAppPath"/Contents/_MASReceipt ]];then
|
||||||
printlog "Installed $appName is from App Store, use “IGNORE_APP_STORE_APPS=yes” to replace."
|
printlog "Installed $appName is from App Store, use “IGNORE_APP_STORE_APPS=yes” to replace."
|
||||||
if [[ $IGNORE_APP_STORE_APPS == "yes" ]]; then
|
if [[ $IGNORE_APP_STORE_APPS == "yes" ]]; then
|
||||||
printlog "Replacing App Store apps, no matter the version" WARN
|
printlog "Replacing App Store apps, no matter the version"
|
||||||
appversion=0
|
appversion=0
|
||||||
else
|
else
|
||||||
cleanupAndExit 23 "App previously installed from App Store, and we respect that" ERROR
|
cleanupAndExit 1 "App previously installed from App Store, and we respect that" ERROR
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
@@ -434,7 +417,6 @@ installAppWithPath() { # $1: path to app to install in $targetDir
|
|||||||
|
|
||||||
# verify with spctl
|
# verify with spctl
|
||||||
printlog "Verifying: $appPath" INFO
|
printlog "Verifying: $appPath" INFO
|
||||||
updateDialog "wait" "Verifying..."
|
|
||||||
printlog "App size: $(du -sh "$appPath")" DEBUG
|
printlog "App size: $(du -sh "$appPath")" DEBUG
|
||||||
appVerify=$(spctl -a -vv "$appPath" 2>&1 )
|
appVerify=$(spctl -a -vv "$appPath" 2>&1 )
|
||||||
appVerifyStatus=$(echo $?)
|
appVerifyStatus=$(echo $?)
|
||||||
@@ -483,7 +465,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir
|
|||||||
printlog "notifying"
|
printlog "notifying"
|
||||||
displaynotification "$message" "Error updating $name!"
|
displaynotification "$message" "Error updating $name!"
|
||||||
fi
|
fi
|
||||||
cleanupAndExit 15 "Installed macOS is too old for this app." ERROR
|
cleanupAndExit 6 "Installed macOS is too old for this app." ERROR
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -542,7 +524,7 @@ installAppWithPath() { # $1: path to app to install in $targetDir
|
|||||||
deduplicatelogs "$CLIoutput"
|
deduplicatelogs "$CLIoutput"
|
||||||
|
|
||||||
if [ $CLIstatus -ne 0 ] ; then
|
if [ $CLIstatus -ne 0 ] ; then
|
||||||
cleanupAndExit 16 "Error installing $mountname/$CLIInstaller $CLIArguments error:\n$logoutput" ERROR
|
cleanupAndExit 3 "Error installing $mountname/$CLIInstaller $CLIArguments error:\n$logoutput" ERROR
|
||||||
else
|
else
|
||||||
printlog "Succesfully ran $mountname/$CLIInstaller $CLIArguments" INFO
|
printlog "Succesfully ran $mountname/$CLIInstaller $CLIArguments" INFO
|
||||||
fi
|
fi
|
||||||
@@ -580,7 +562,6 @@ installFromDMG() {
|
|||||||
installFromPKG() {
|
installFromPKG() {
|
||||||
# verify with spctl
|
# verify with spctl
|
||||||
printlog "Verifying: $archiveName"
|
printlog "Verifying: $archiveName"
|
||||||
updateDialog "wait" "Verifying..."
|
|
||||||
printlog "File list: $(ls -lh "$archiveName")" DEBUG
|
printlog "File list: $(ls -lh "$archiveName")" DEBUG
|
||||||
printlog "File type: $(file "$archiveName")" DEBUG
|
printlog "File type: $(file "$archiveName")" DEBUG
|
||||||
spctlOut=$(spctl -a -vv -t install "$archiveName" 2>&1 )
|
spctlOut=$(spctl -a -vv -t install "$archiveName" 2>&1 )
|
||||||
@@ -648,29 +629,8 @@ installFromPKG() {
|
|||||||
|
|
||||||
# install pkg
|
# install pkg
|
||||||
printlog "Installing $archiveName to $targetDir"
|
printlog "Installing $archiveName to $targetDir"
|
||||||
|
pkgInstall=$(installer -verbose -dumplog -pkg "$archiveName" -tgt "$targetDir" 2>&1)
|
||||||
if [[ $DIALOG_CMD_FILE != "" ]]; then
|
pkgInstallStatus=$(echo $?)
|
||||||
# pipe
|
|
||||||
pipe="$tmpDir/installpipe"
|
|
||||||
# initialise named pipe for installer output
|
|
||||||
initNamedPipe create $pipe
|
|
||||||
|
|
||||||
# run the pipe read in the background
|
|
||||||
readPKGInstallPipe $pipe "$DIALOG_CMD_FILE" & installPipePID=$!
|
|
||||||
printlog "listening to output of installer with pipe $pipe and command file $DIALOG_CMD_FILE on PID $installPipePID" DEBUG
|
|
||||||
|
|
||||||
pkgInstall=$(installer -verboseR -pkg "$archiveName" -tgt "$targetDir" 2>&1 | tee $pipe)
|
|
||||||
pkgInstallStatus=$pipestatus[1]
|
|
||||||
# because we are tee-ing the output, we want the pipe status of the first command in the chain, not the most recent one
|
|
||||||
killProcess $installPipePID
|
|
||||||
|
|
||||||
else
|
|
||||||
pkgInstall=$(installer -verbose -dumplog -pkg "$archiveName" -tgt "$targetDir" 2>&1)
|
|
||||||
pkgInstallStatus=$(echo $?)
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sleep 1
|
sleep 1
|
||||||
pkgEndTime=$(date "+$LogDateFormat")
|
pkgEndTime=$(date "+$LogDateFormat")
|
||||||
pkgInstall+=$(echo "\nOutput of /var/log/install.log below this line.\n")
|
pkgInstall+=$(echo "\nOutput of /var/log/install.log below this line.\n")
|
||||||
@@ -762,7 +722,7 @@ installPkgInZip() {
|
|||||||
printlog "Found pkg(s):\n$findfiles" DEBUG
|
printlog "Found pkg(s):\n$findfiles" DEBUG
|
||||||
filearray=( ${(f)findfiles} )
|
filearray=( ${(f)findfiles} )
|
||||||
if [[ ${#filearray} -eq 0 ]]; then
|
if [[ ${#filearray} -eq 0 ]]; then
|
||||||
cleanupAndExit 21 "couldn't find pkg in zip $archiveName" ERROR
|
cleanupAndExit 20 "couldn't find pkg in zip $archiveName" ERROR
|
||||||
fi
|
fi
|
||||||
# it is now safe to overwrite archiveName for installFromPKG
|
# it is now safe to overwrite archiveName for installFromPKG
|
||||||
archiveName="${filearray[1]}"
|
archiveName="${filearray[1]}"
|
||||||
@@ -775,7 +735,7 @@ installPkgInZip() {
|
|||||||
findfiles=$(find "$tmpDir" -iname "$pkgName")
|
findfiles=$(find "$tmpDir" -iname "$pkgName")
|
||||||
filearray=( ${(f)findfiles} )
|
filearray=( ${(f)findfiles} )
|
||||||
if [[ ${#filearray} -eq 0 ]]; then
|
if [[ ${#filearray} -eq 0 ]]; then
|
||||||
cleanupAndExit 21 "couldn't find pkg “$pkgName” in zip $archiveName" ERROR
|
cleanupAndExit 20 "couldn't find pkg “$pkgName” in zip $archiveName" ERROR
|
||||||
fi
|
fi
|
||||||
# it is now safe to overwrite archiveName for installFromPKG
|
# it is now safe to overwrite archiveName for installFromPKG
|
||||||
archiveName="${filearray[1]}"
|
archiveName="${filearray[1]}"
|
||||||
@@ -798,7 +758,7 @@ installAppInDmgInZip() {
|
|||||||
findfiles=$(find "$tmpDir" -iname "*.dmg" -maxdepth 2 )
|
findfiles=$(find "$tmpDir" -iname "*.dmg" -maxdepth 2 )
|
||||||
filearray=( ${(f)findfiles} )
|
filearray=( ${(f)findfiles} )
|
||||||
if [[ ${#filearray} -eq 0 ]]; then
|
if [[ ${#filearray} -eq 0 ]]; then
|
||||||
cleanupAndExit 22 "couldn't find dmg in zip $archiveName" ERROR
|
cleanupAndExit 20 "couldn't find dmg in zip $archiveName" ERROR
|
||||||
fi
|
fi
|
||||||
archiveName="$(basename ${filearray[1]})"
|
archiveName="$(basename ${filearray[1]})"
|
||||||
# it is now safe to overwrite archiveName for installFromDMG
|
# it is now safe to overwrite archiveName for installFromDMG
|
||||||
@@ -850,8 +810,7 @@ runUpdateTool() {
|
|||||||
|
|
||||||
finishing() {
|
finishing() {
|
||||||
printlog "Finishing..."
|
printlog "Finishing..."
|
||||||
|
sleep 10 # wait a moment to let spotlight catch up
|
||||||
sleep 3 # wait a moment to let spotlight catch up
|
|
||||||
getAppVersion
|
getAppVersion
|
||||||
|
|
||||||
if [[ -z $appversion ]]; then
|
if [[ -z $appversion ]]; then
|
||||||
@@ -899,113 +858,3 @@ hasDisplaySleepAssertion() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
initNamedPipe() {
|
|
||||||
# create or delete a named pipe
|
|
||||||
# commands are "create" or "delete"
|
|
||||||
|
|
||||||
local cmd=$1
|
|
||||||
local pipe=$2
|
|
||||||
case $cmd in
|
|
||||||
"create")
|
|
||||||
if [[ -e $pipe ]]; then
|
|
||||||
rm $pipe
|
|
||||||
fi
|
|
||||||
# make named pipe
|
|
||||||
mkfifo -m 644 $pipe
|
|
||||||
;;
|
|
||||||
"delete")
|
|
||||||
# clean up
|
|
||||||
rm $pipe
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
readDownloadPipe() {
|
|
||||||
# reads from a previously created named pipe
|
|
||||||
# output from curl with --progress-bar. % downloaded is read in and then sent to the specified log file
|
|
||||||
local pipe=$1
|
|
||||||
local log=${2:-$DIALOG_CMD_FILE}
|
|
||||||
# set up read from pipe
|
|
||||||
while IFS= read -k 1 -u 0 char; do
|
|
||||||
if [[ $char =~ [0-9] ]]; then
|
|
||||||
keep=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $char == % ]]; then
|
|
||||||
updateDialog $progress "Downloading..."
|
|
||||||
progress=""
|
|
||||||
keep=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $keep == 1 ]]; then
|
|
||||||
progress="$progress$char"
|
|
||||||
fi
|
|
||||||
done < $pipe
|
|
||||||
}
|
|
||||||
|
|
||||||
readPKGInstallPipe() {
|
|
||||||
# reads from a previously created named pipe
|
|
||||||
# output from installer with -verboseR. % install status is read in and then sent to the specified log file
|
|
||||||
local pipe=$1
|
|
||||||
local log=${2:-$DIALOG_CMD_FILE}
|
|
||||||
local appname=${3:-$name}
|
|
||||||
|
|
||||||
while read -k 1 -u 0 char; do
|
|
||||||
if [[ $char == % ]]; then
|
|
||||||
keep=1
|
|
||||||
fi
|
|
||||||
if [[ $char =~ [0-9] && $keep == 1 ]]; then
|
|
||||||
progress="$progress$char"
|
|
||||||
fi
|
|
||||||
if [[ $char == . && $keep == 1 ]]; then
|
|
||||||
updateDialog $progress "Installing..."
|
|
||||||
progress=""
|
|
||||||
keep=0
|
|
||||||
fi
|
|
||||||
done < $pipe
|
|
||||||
}
|
|
||||||
|
|
||||||
killProcess() {
|
|
||||||
# will silently kill the specified PID
|
|
||||||
builtin kill $1 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
updateDialog() {
|
|
||||||
local state=$1
|
|
||||||
local message=$2
|
|
||||||
local listitem=${3:-$DIALOG_LIST_ITEM_NAME}
|
|
||||||
local cmd_file=${4:-$DIALOG_CMD_FILE}
|
|
||||||
local progress=""
|
|
||||||
|
|
||||||
if [[ $state =~ '^[0-9]' \
|
|
||||||
|| $state == "reset" \
|
|
||||||
|| $state == "increment" \
|
|
||||||
|| $state == "complete" \
|
|
||||||
|| $state == "indeterminate" ]]; then
|
|
||||||
progress=$state
|
|
||||||
fi
|
|
||||||
|
|
||||||
# when to cmdfile is set, do nothing
|
|
||||||
if [[ $cmd_file == "" ]]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $listitem == "" ]]; then
|
|
||||||
# no listitem set, update main progress bar and progress text
|
|
||||||
if [[ $progress != "" ]]; then
|
|
||||||
echo "progress: $progress" >> $cmd_file
|
|
||||||
fi
|
|
||||||
if [[ $message != "" ]]; then
|
|
||||||
echo "progresstext: $name - $message" >> $cmd_file
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# list item has a value, so we update the progress and text in the list
|
|
||||||
if [[ $progress != "" ]]; then
|
|
||||||
echo "listitem: title: $listitem, statustext: $message, progress: $progress" >> $cmd_file
|
|
||||||
else
|
|
||||||
echo "listitem: title: $listitem, statustext: $message, status: $state" >> $cmd_file
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ label="" # if no label is sent to the script, this will be used
|
|||||||
# 2020-2021 Installomator
|
# 2020-2021 Installomator
|
||||||
#
|
#
|
||||||
# inspired by the download scripts from William Smith and Sander Schram
|
# inspired by the download scripts from William Smith and Sander Schram
|
||||||
#
|
#
|
||||||
# Contributers:
|
# Contributers:
|
||||||
# Armin Briegel - @scriptingosx
|
# Armin Briegel - @scriptingosx
|
||||||
# Isaac Ordonez - @issacatmann
|
# Isaac Ordonez - @issacatmann
|
||||||
@@ -23,7 +23,7 @@ export PATH=/usr/bin:/bin:/usr/sbin:/sbin
|
|||||||
# set to 0 for production, 1 or 2 for debugging
|
# set to 0 for production, 1 or 2 for debugging
|
||||||
# while debugging, items will be downloaded to the parent directory of this script
|
# while debugging, items will be downloaded to the parent directory of this script
|
||||||
# also no actual installation will be performed
|
# also no actual installation will be performed
|
||||||
# debug mode 1 will download to the directory the script is run in, but will not check the version
|
# debug mode 1 will download to the directory the script is run in, but will not check the version
|
||||||
# debug mode 2 will download to the temp directory, check for blocking processes, check the version, but will not install anything or remove the current version
|
# debug mode 2 will download to the temp directory, check for blocking processes, check the version, but will not install anything or remove the current version
|
||||||
DEBUG=1
|
DEBUG=1
|
||||||
|
|
||||||
@@ -34,6 +34,7 @@ NOTIFY=success
|
|||||||
# - silent no notifications
|
# - silent no notifications
|
||||||
# - all all notifications (great for Self Service installation)
|
# - all all notifications (great for Self Service installation)
|
||||||
|
|
||||||
|
|
||||||
# behavior when blocking processes are found
|
# behavior when blocking processes are found
|
||||||
BLOCKING_PROCESS_ACTION=tell_user
|
BLOCKING_PROCESS_ACTION=tell_user
|
||||||
# options:
|
# options:
|
||||||
@@ -80,7 +81,6 @@ LOGO=appstore
|
|||||||
# - mosylem Mosyle Manager (Education)
|
# - mosylem Mosyle Manager (Education)
|
||||||
# - addigy Addigy
|
# - addigy Addigy
|
||||||
# - microsoft Microsoft Endpoint Manager (Intune)
|
# - microsoft Microsoft Endpoint Manager (Intune)
|
||||||
# - ws1 Workspace ONE (AirWatch)
|
|
||||||
# path can also be set in the command call, and if file exists, it will be used.
|
# path can also be set in the command call, and if file exists, it will be used.
|
||||||
# Like 'LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"'
|
# Like 'LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"'
|
||||||
# (spaces have to be escaped).
|
# (spaces have to be escaped).
|
||||||
@@ -139,26 +139,6 @@ IGNORE_DND_APPS=""
|
|||||||
# IGNORE_DND_APPS="firefox,Google Chrome,Safari,Microsoft Edge,Opera,Amphetamine,caffeinate"
|
# IGNORE_DND_APPS="firefox,Google Chrome,Safari,Microsoft Edge,Opera,Amphetamine,caffeinate"
|
||||||
|
|
||||||
|
|
||||||
# Swift Dialog integration
|
|
||||||
|
|
||||||
# These variables will allow Installomator to communicate progress with Swift Dialog
|
|
||||||
# https://github.com/bartreardon/swiftDialog
|
|
||||||
|
|
||||||
# This requires Swift Dialog 2.11.2 or higher.
|
|
||||||
|
|
||||||
DIALOG_CMD_FILE=""
|
|
||||||
# When this variable is set, Installomator will write Swift Dialog commands to this path.
|
|
||||||
# Installomator will not launch Swift Dialog. The process calling Installomator will have
|
|
||||||
# launch and configure Swift Dialog to listen to this file.
|
|
||||||
# See `MDM/swiftdialog_example.sh` for an example.
|
|
||||||
|
|
||||||
DIALOG_LIST_ITEM_NAME=""
|
|
||||||
# When this variable is set, progress for downloads and installs will be sent to this
|
|
||||||
# listitem.
|
|
||||||
# When the variable is unset, progress will be sent to Swift Dialog's main progress bar.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# NOTE: How labels work
|
# NOTE: How labels work
|
||||||
|
|
||||||
# Each workflow label needs to be listed in the case statement below.
|
# Each workflow label needs to be listed in the case statement below.
|
||||||
@@ -204,7 +184,7 @@ DIALOG_LIST_ITEM_NAME=""
|
|||||||
# How we get version number from app. Possible values:
|
# How we get version number from app. Possible values:
|
||||||
# - CFBundleShortVersionString
|
# - CFBundleShortVersionString
|
||||||
# - CFBundleVersion
|
# - CFBundleVersion
|
||||||
# Not all software titles uses fields the same.
|
# Not all software titles uses fields the same.
|
||||||
# See Opera label.
|
# See Opera label.
|
||||||
#
|
#
|
||||||
# - appCustomVersion(){}: (optional function)
|
# - appCustomVersion(){}: (optional function)
|
||||||
@@ -258,7 +238,7 @@ DIALOG_LIST_ITEM_NAME=""
|
|||||||
# - updateToolArguments:
|
# - updateToolArguments:
|
||||||
# When Installomator detects an existing installation of the application,
|
# When Installomator detects an existing installation of the application,
|
||||||
# and the updateTool variable is set
|
# and the updateTool variable is set
|
||||||
# $updateTool $updateArguments
|
# $updateTool $updateArguments
|
||||||
# Will be run instead of of downloading and installing a complete new version.
|
# Will be run instead of of downloading and installing a complete new version.
|
||||||
# Use this when the updateTool does differential and optimized downloads.
|
# Use this when the updateTool does differential and optimized downloads.
|
||||||
# e.g. msupdate on various Microsoft labels
|
# e.g. msupdate on various Microsoft labels
|
||||||
@@ -273,7 +253,7 @@ DIALOG_LIST_ITEM_NAME=""
|
|||||||
# We need to define `name` for the installed app (to be version checked), as well as
|
# We need to define `name` for the installed app (to be version checked), as well as
|
||||||
# `installerTool` for the installer app (if named differently than `name`. Installomator
|
# `installerTool` for the installer app (if named differently than `name`. Installomator
|
||||||
# will add the path to the folder/disk image with the binary, and it will be called like this:
|
# will add the path to the folder/disk image with the binary, and it will be called like this:
|
||||||
# $CLIInstaller $CLIArguments
|
`$CLIInstaller $CLIArguments`
|
||||||
# For most installations `CLIInstaller` should contain the `installerTool` for the CLI call
|
# For most installations `CLIInstaller` should contain the `installerTool` for the CLI call
|
||||||
# (if it’s the same).
|
# (if it’s the same).
|
||||||
# We can support a whole range of other software titles by implementing this.
|
# We can support a whole range of other software titles by implementing this.
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
1password8)
|
|
||||||
name="1Password 8"
|
|
||||||
appName="1Password.app"
|
|
||||||
type="zip"
|
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
|
||||||
archiveName="1Password-latest-aarch64.zip"
|
|
||||||
downloadURL="https://downloads.1password.com/mac/1Password-latest-aarch64.zip"
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
archiveName="1Password-latest-x86_64.zip"
|
|
||||||
downloadURL="https://downloads.1password.com/mac/1Password-latest-x86_64.zip"
|
|
||||||
fi
|
|
||||||
expectedTeamID="2BUA8C4S2C"
|
|
||||||
blockingProcesses=( "1Password Extension Helper" "1Password 7" "1Password" "1Password (Safari)" "1PasswordNativeMessageHost" "1PasswordSafariAppExtension" )
|
|
||||||
#forcefulQuit=YES
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
abetterfinderrename11)
|
|
||||||
name="A Better Finder Rename 11"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="https://www.publicspace.net/download/ABFRX11.dmg"
|
|
||||||
appNewVersion=$(curl -fs "https://www.publicspace.net/app/signed_abfr11.xml" | xpath '(//rss/channel/item/enclosure/@sparkle:version)' 2>/dev/null | cut -d '"' -f 2)
|
|
||||||
expectedTeamID="7Y9KW4ND8W"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
acroniscyberprotectconnect|\
|
|
||||||
remotix)
|
|
||||||
name="Acronis Cyber Protect Connect"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="https://go.acronis.com/AcronisCyberProtectConnect_ForMac"
|
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
appNewVersion=$(curl -fsIL "${downloadURL}" | grep -i "^location" | sed -E 's/.*\/[a-zA-Z]*-[0-9.]*-([0-9.]*)\.dmg/\1/g')
|
|
||||||
expectedTeamID="ZU2TV78AA6"
|
|
||||||
;;
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
acroniscyberprotectconnectagent|\
|
|
||||||
remotixagent)
|
|
||||||
name="Acronis Cyber Protect Connect Agent"
|
|
||||||
type="pkg"
|
|
||||||
#packageID="com.nulana.rxagentmac"
|
|
||||||
downloadURL="https://go.acronis.com/AcronisCyberProtectConnect_AgentForMac"
|
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
appNewVersion=$(curl -fsIL "${downloadURL}" | grep -i "^location" | sed -E 's/.*\/[a-zA-Z]*-[0-9.]*-([0-9.]*)\.pkg/\1/g')
|
|
||||||
expectedTeamID="H629V387SY"
|
|
||||||
;;
|
|
||||||
@@ -2,11 +2,10 @@ adobecreativeclouddesktop)
|
|||||||
name="Adobe Creative Cloud"
|
name="Adobe Creative Cloud"
|
||||||
#appName="Install.app"
|
#appName="Install.app"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
adobeurl="https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html"
|
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
if [[ $(arch) == "arm64" ]]; then
|
||||||
downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'osx10')][contains(text(),'Download')]/@href)" - 2> /dev/null)
|
downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*macarm64.*dmg" | cut -d '"' -f1 | head -1)
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
elif [[ $(arch) == "i386" ]]; then
|
||||||
downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'macarm64')][contains(text(),'Download')]/@href)" - 2> /dev/null)
|
downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*osx10.*dmg" | cut -d '"' -f1 | head -1)
|
||||||
fi
|
fi
|
||||||
#downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*dmg" | head -1)
|
#downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*dmg" | head -1)
|
||||||
appNewVersion=$(curl -fs "https://helpx.adobe.com/creative-cloud/release-note/cc-release-notes.html" | grep "mandatory" | head -1 | grep -o "Version *.* released" | cut -d " " -f2)
|
appNewVersion=$(curl -fs "https://helpx.adobe.com/creative-cloud/release-note/cc-release-notes.html" | grep "mandatory" | head -1 | grep -o "Version *.* released" | cut -d " " -f2)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
adobereaderdc-update)
|
adobereaderdc-update)
|
||||||
name="Adobe Acrobat Reader DC"
|
name="Adobe Acrobat Reader DC"
|
||||||
type="pkgInDmg"
|
type="pkgInDmg"
|
||||||
downloadURL=$(adobecurrent=`curl --fail --silent https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt | tr -d '.'` && echo https://ardownload2.adobe.com/pub/adobe/reader/mac/AcrobatDC/"$adobecurrent"/AcroRdrDC_"$adobecurrent"_MUI.dmg)
|
downloadURL=$(adobecurrent=`curl --fail --silent https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt | tr -d '.'` && echo http://ardownload.adobe.com/pub/adobe/reader/mac/AcrobatDC/"$adobecurrent"/AcroRdrDCUpd"$adobecurrent"_MUI.dmg)
|
||||||
appNewVersion=$(curl -s https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt)
|
appNewVersion=$(curl -s https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt)
|
||||||
#appNewVersion=$(curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" https://get.adobe.com/reader/ | grep ">Version" | sed -E 's/.*Version 20([0-9.]*)<.*/\1/g') # credit: Søren Theilgaard (@theilgaard)
|
#appNewVersion=$(curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" https://get.adobe.com/reader/ | grep ">Version" | sed -E 's/.*Version 20([0-9.]*)<.*/\1/g') # credit: Søren Theilgaard (@theilgaard)
|
||||||
expectedTeamID="JQ525L2MZD"
|
expectedTeamID="JQ525L2MZD"
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ adobereaderdc-install)
|
|||||||
name="Adobe Acrobat Reader DC"
|
name="Adobe Acrobat Reader DC"
|
||||||
type="pkgInDmg"
|
type="pkgInDmg"
|
||||||
packageID="com.adobe.acrobat.DC.reader.app.pkg.MUI"
|
packageID="com.adobe.acrobat.DC.reader.app.pkg.MUI"
|
||||||
#downloadURL=$(curl --silent --fail -H "Sec-Fetch-Site: same-origin" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: en-US;q=0.9,en;q=0.8" -H "DNT: 1" -H "Sec-Fetch-Mode: cors" -H "X-Requested-With: XMLHttpRequest" -H "Referer: https://get.adobe.com/reader/enterprise/" -H "Accept: */*" "https://get.adobe.com/reader/webservices/json/standalone/?platform_type=Macintosh&platform_dist=OSX&platform_arch=x86-32&language=English&eventname=readerotherversions" | grep -Eo '"download_url":.*?[^\]",' | head -n 1 | cut -d \" -f 4)
|
downloadURL=$(curl --silent --fail -H "Sec-Fetch-Site: same-origin" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: en-US;q=0.9,en;q=0.8" -H "DNT: 1" -H "Sec-Fetch-Mode: cors" -H "X-Requested-With: XMLHttpRequest" -H "Referer: https://get.adobe.com/reader/enterprise/" -H "Accept: */*" "https://get.adobe.com/reader/webservices/json/standalone/?platform_type=Macintosh&platform_dist=OSX&platform_arch=x86-32&language=English&eventname=readerotherversions" | grep -Eo '"download_url":.*?[^\]",' | head -n 1 | cut -d \" -f 4)
|
||||||
downloadURL=$(adobecurrent=`curl --fail --silent https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt | tr -d '.'` && echo https://ardownload2.adobe.com/pub/adobe/reader/mac/AcrobatDC/"$adobecurrent"/AcroRdrDC_"$adobecurrent"_MUI.dmg)
|
|
||||||
appNewVersion=$(curl -s https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt)
|
appNewVersion=$(curl -s https://armmf.adobe.com/arm-manifests/mac/AcrobatDC/reader/current_version.txt)
|
||||||
#appNewVersion=$(curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" https://get.adobe.com/reader/ | grep ">Version" | sed -E 's/.*Version 20([0-9.]*)<.*/\1/g') # credit: Søren Theilgaard (@theilgaard)
|
#appNewVersion=$(curl -s -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)" https://get.adobe.com/reader/ | grep ">Version" | sed -E 's/.*Version 20([0-9.]*)<.*/\1/g') # credit: Søren Theilgaard (@theilgaard)
|
||||||
expectedTeamID="JQ525L2MZD"
|
expectedTeamID="JQ525L2MZD"
|
||||||
|
|||||||
@@ -1,12 +1,7 @@
|
|||||||
amazoncorretto8jdk)
|
amazoncorretto8jdk)
|
||||||
name="Amazon Corretto 8 JDK"
|
name="Amazon Corretto 8 JDK"
|
||||||
type="pkg"
|
type="pkg"
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
downloadURL="https://corretto.aws/downloads/latest/amazon-corretto-8-x64-macos-jdk.pkg"
|
||||||
downloadURL="https://corretto.aws/downloads/latest/amazon-corretto-8-aarch64-macos-jdk.pkg"
|
appNewVersion=$(curl -s https://raw.githubusercontent.com/corretto/corretto-8/develop/CHANGELOG.md | grep "## Corretto version" | head -n 1 | awk '{ print $4; exit}')
|
||||||
appNewVersion=$(curl -s https://raw.githubusercontent.com/corretto/corretto-8/develop/CHANGELOG.md | grep "## Corretto version" | head -n 1 | awk '{ print $4; exit}')
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
downloadURL="https://corretto.aws/downloads/latest/amazon-corretto-8-x64-macos-jdk.pkg"
|
|
||||||
appNewVersion=$(curl -s https://raw.githubusercontent.com/corretto/corretto-8/develop/CHANGELOG.md | grep "## Corretto version" | head -n 1 | awk '{ print $4; exit}')
|
|
||||||
fi
|
|
||||||
expectedTeamID="94KV3E626L"
|
expectedTeamID="94KV3E626L"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
androidstudio)
|
|
||||||
name="Android Studio"
|
|
||||||
type="dmg"
|
|
||||||
if [[ $(arch) == arm64 ]]; then
|
|
||||||
downloadURL=$(curl -fsL "https://developer.android.com/studio#downloads" | grep -i arm.dmg | head -2 | grep -o -i -E "https.*" | cut -d '"' -f1)
|
|
||||||
appNewVersion=$( echo "${downloadURL}" | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' )
|
|
||||||
elif [[ $(arch) == i386 ]]; then
|
|
||||||
downloadURL=$(curl -fsL "https://developer.android.com/studio#downloads" | grep -i mac.dmg | head -2 | grep -o -i -E "https.*" | cut -d '"' -f1)
|
|
||||||
appNewVersion=$( echo "${downloadURL}" | head -1 | sed 's/^.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*$/\1/' )
|
|
||||||
fi
|
|
||||||
expectedTeamID="EQHXZ8M8AV"
|
|
||||||
blockingProcesses=( androidstudio )
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
atextlegacy)
|
|
||||||
# credit: Gabe Marchan (gabemarchan.com - @darklink87)
|
|
||||||
name="aText"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="https://trankynam.com/atext/downloads/aTextLegacy.dmg"
|
|
||||||
expectedTeamID="KHEMQ2FD9E"
|
|
||||||
;;
|
|
||||||
@@ -3,5 +3,5 @@ awsvpnclient)
|
|||||||
type="pkg"
|
type="pkg"
|
||||||
downloadURL="https://d20adtppz83p9s.cloudfront.net/OSX/latest/AWS_VPN_Client.pkg"
|
downloadURL="https://d20adtppz83p9s.cloudfront.net/OSX/latest/AWS_VPN_Client.pkg"
|
||||||
expectedTeamID="94KV3E626L"
|
expectedTeamID="94KV3E626L"
|
||||||
#appNewVersion=$(curl -is "https://beta2.communitypatch.com/jamf/v1/ba1efae22ae74a9eb4e915c31fef5dd2/patch/AWSVPNClient" | grep currentVersion | tr ',' '\n' | grep currentVersion | cut -d '"' -f 4)
|
appNewVersion=$(curl -is "https://beta2.communitypatch.com/jamf/v1/ba1efae22ae74a9eb4e915c31fef5dd2/patch/AWSVPNClient" | grep currentVersion | tr ',' '\n' | grep currentVersion | cut -d '"' -f 4)
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
blender)
|
blender)
|
||||||
name="blender"
|
name="blender"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
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)
|
||||||
downloadURL=$(curl -sfL "https://www.blender.org/download/" | xmllint --html --format - 2>/dev/null | grep -o "https://.*blender.*arm64.*.dmg" | sed '2p;d' | sed 's/www.blender.org\/download/download.blender.org/g')
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
downloadURL=$(curl -sfL "https://www.blender.org/download/" | xmllint --html --format - 2>/dev/null | grep -o "https://.*blender.*x64.*.dmg" | sed '2p;d' | sed 's/www.blender.org\/download/download.blender.org/g')
|
|
||||||
fi
|
|
||||||
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)-.*/\1/g' )
|
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)-.*/\1/g' )
|
||||||
expectedTeamID="68UA947AUU"
|
expectedTeamID="68UA947AUU"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
bluejeanswithaudiodriver)
|
|
||||||
name="BlueJeans"
|
|
||||||
type="pkg"
|
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
|
||||||
downloadURL=$(curl -fs "https://www.bluejeans.com/downloads" | xmllint --html --format - 2>/dev/null | grep -o "https://.*BlueJeans.*Installer.*arm.*.pkg" )
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
downloadURL=$(curl -fs "https://www.bluejeans.com/downloads" | xmllint --html --format - 2>/dev/null | grep -o "https://.*BlueJeansInstaller.*x86.*.dmg" | sed 's/dmg/pkg/g')
|
|
||||||
fi
|
|
||||||
appNewVersion=$(echo $downloadURL | cut -d '/' -f6)
|
|
||||||
choiceChangesXML='<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><array><dict><key>attributeSetting</key><integer>1</integer><key>choiceAttribute</key><string>selected</string><key>choiceIdentifier</key><string>com.tatvikmohit.BlueJeans-Audio</string></dict></array></plist>'
|
|
||||||
expectedTeamID="HE4P42JBGN"
|
|
||||||
;;
|
|
||||||
@@ -2,6 +2,5 @@ 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"
|
||||||
packageID="com.box.boxtools.installer.boxedit"
|
|
||||||
expectedTeamID="M683GB7CPW"
|
expectedTeamID="M683GB7CPW"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
camtasia|\
|
camtasia)
|
||||||
camtasia2021)
|
name="Camtasia 2020"
|
||||||
name="Camtasia 2021"
|
|
||||||
type="dmg"
|
type="dmg"
|
||||||
downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2021" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg)
|
downloadURL=https://download.techsmith.com/camtasiamac/releases/Camtasia.dmg
|
||||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2021" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//')
|
|
||||||
expectedTeamID="7TQL462TU8"
|
expectedTeamID="7TQL462TU8"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
camtasia2019)
|
|
||||||
name="Camtasia 2019"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2019" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg)
|
|
||||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2019" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//')
|
|
||||||
expectedTeamID="7TQL462TU8"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
camtasia2020)
|
|
||||||
name="Camtasia 2020"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2020" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg)
|
|
||||||
appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2020" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//')
|
|
||||||
expectedTeamID="7TQL462TU8"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
carboncopycloner)
|
|
||||||
name="Carbon Copy Cloner"
|
|
||||||
type="zip"
|
|
||||||
downloadURL=$(curl -fsIL "https://bombich.com/software/download_ccc.php?v=latest" | grep -i ^location | sed -E 's/.*(https.*\.zip).*/\1/g')
|
|
||||||
appNewVersion=$(sed -E 's/.*-([0-9.]*)\.zip/\1/g' <<< $downloadURL | sed 's/\.[^.]*$//')
|
|
||||||
expectedTeamID="L4F2DED5Q7"
|
|
||||||
;;
|
|
||||||
@@ -3,6 +3,6 @@ citrixworkspace)
|
|||||||
name="Citrix Workspace"
|
name="Citrix Workspace"
|
||||||
type="pkgInDmg"
|
type="pkgInDmg"
|
||||||
downloadURL="https:"$(curl -s -L "https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html#ctx-dl-eula-external" | grep "dmg?" | sed "s/.*rel=.\(.*\)..id=.*/\1/") # http://downloads.citrix.com/18823/CitrixWorkspaceApp.dmg?__gda__=1605791892_edc6786a90eb5197fb226861a8e27aa8
|
downloadURL="https:"$(curl -s -L "https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html#ctx-dl-eula-external" | grep "dmg?" | sed "s/.*rel=.\(.*\)..id=.*/\1/") # http://downloads.citrix.com/18823/CitrixWorkspaceApp.dmg?__gda__=1605791892_edc6786a90eb5197fb226861a8e27aa8
|
||||||
appNewVersion=$(curl -fs https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html | grep "<p>Version" | head -1 | awk '{print $2}' | cut -d "." -f 1-3)
|
appNewVersion=$(curl -fs https://www.citrix.com/downloads/workspace-app/mac/workspace-app-for-mac-latest.html | grep "<p>Version" | head -1 | cut -d " " -f1 | cut -d ";" -f2 | cut -d "." -f 1-3)
|
||||||
expectedTeamID="S272Y5R93J"
|
expectedTeamID="S272Y5R93J"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
clevershare2)
|
clevershare2)
|
||||||
name="Clevershare"
|
name="Clevershare"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
printlog "Label for $name broken in test" ERROR
|
downloadURL=$(curl -fs https://www.clevertouch.com/eu/clevershare2g | grep -i -o -E "https.*Mac.*\.dmg")
|
||||||
downloadURL=$(curl -fs https://www.clevertouch.com/eu/clevershare2g | grep -i -o -E "https.*notarized.*\.dmg")
|
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z-]*_Mac\.([0-9.]*)\.[0-9]*\.dmg$/\1/g' )
|
||||||
appNewVersion=$(echo "${downloadURL}" | sed -E 's/.*\/([0-9.]*)\/[0-9]*\/.*\.dmg$/\1/')
|
|
||||||
expectedTeamID="P76M9BE8DQ"
|
expectedTeamID="P76M9BE8DQ"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
clickshare)
|
clickshare)
|
||||||
|
# credit: Søren Theilgaard (@theilgaard)
|
||||||
name="ClickShare"
|
name="ClickShare"
|
||||||
type="appInDmgInZip"
|
type="appInDmgInZip"
|
||||||
downloadURL="https://www.barco.com$( curl -fs "https://www.barco.com/en/clickshare/app" | grep -A6 -i "macos" | grep -i "FileNumber" | tr '"' "\n" | grep -i "FileNumber" )"
|
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)
|
||||||
appNewVersion="$(eval "$( echo $downloadURL | sed -E 's/.*(MajorVersion.*BuildVersion=[0-9]*).*/\1/' | sed 's/&//g' )" ; ((MajorVersion++)) ; ((MajorVersion--)); ((MinorVersion++)) ; ((MinorVersion--)); ((PatchVersion++)) ; ((PatchVersion--)); ((BuildVersion++)) ; ((BuildVersion--)); echo "${MajorVersion}.${MinorVersion}.${PatchVersion}-b${BuildVersion}")"
|
|
||||||
expectedTeamID="P6CDJZR997"
|
expectedTeamID="P6CDJZR997"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
clue)
|
|
||||||
#For personal use and students
|
|
||||||
name="Clue"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL=$(curl -fsL https://clue.no/en/download | grep "For personal use and students:" | sed 's/.*href="//' | sed 's/".*//')
|
|
||||||
appNewVersion="$(echo "${downloadURL}" | sed -E 's/.*Clue*([0-9.]*)\..*/\1/g')"
|
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
expectedTeamID="3NX6B9TB2F"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
cluefull)
|
|
||||||
#For companies and schools
|
|
||||||
name="Clue"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL=$(curl -fsL https://clue.no/en/download | grep "For companies and schools:" | sed 's/.*href="//' | sed 's/".*//')
|
|
||||||
appNewVersion="$(echo "${downloadURL}" | sed -E 's/.*Clue*([0-9.]*)\F.*/\1/g')"
|
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
expectedTeamID="3NX6B9TB2F"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
cocoapods)
|
|
||||||
name="CocoaPods"
|
|
||||||
type="bz2"
|
|
||||||
downloadURL="$(downloadURLFromGit CocoaPods CocoaPods-app)"
|
|
||||||
appNewVersion="$(versionFromGit CocoaPods CocoaPods-app)"
|
|
||||||
expectedTeamID="AX2Q2BH2XR"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
coconutbattery)
|
|
||||||
name="coconutBattery"
|
|
||||||
type="zip"
|
|
||||||
downloadURL="https://coconut-flavour.com/downloads/coconutBattery_latest.zip"
|
|
||||||
appNewVersion=$(curl -fs https://www.coconut-flavour.com/coconutbattery/ | grep "<title>" | sed -e 's/.*coconutBattery \(.*\) - by coconut-flavour.co.*/\1/')
|
|
||||||
expectedTeamID="R5SC3K86L5"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
coderunner)
|
coderunner)
|
||||||
|
# credit: Erik Stam (@erikstam)
|
||||||
name="CodeRunner"
|
name="CodeRunner"
|
||||||
type="zip"
|
type="zip"
|
||||||
downloadURL="https://coderunnerapp.com/download"
|
downloadURL="https://coderunnerapp.com/download"
|
||||||
appNewVersion=$(curl -fsIL ${downloadURL} | grep -i "^location" | cut -d " " -f2 | sed -E 's/.*CodeRunner-([0-9.]*).zip/\1/')
|
|
||||||
expectedTeamID="R4GD98AJF9"
|
expectedTeamID="R4GD98AJF9"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
colourcontrastanalyser)
|
colourcontrastanalyser)
|
||||||
name="Colour Contrast Analyser"
|
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)
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
craftmanagerforsketch)
|
|
||||||
name="CraftManager"
|
|
||||||
type="zip"
|
|
||||||
downloadURL="https://craft-assets.invisionapp.com/CraftManager/production/CraftManager.zip"
|
|
||||||
appNewVersion=$(curl -fs https://craft-assets.invisionapp.com/CraftManager/production/appcast.xml | xpath '//rss/channel/item[1]/enclosure/@sparkle:shortVersionString' 2>/dev/null | cut -d '"' -f2)
|
|
||||||
expectedTeamID="VRXQSNCL5W"
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
cricutdesignspace)
|
|
||||||
name="Cricut Design Space"
|
|
||||||
type="dmg"
|
|
||||||
appNewVersion=$(getJSONValue "$(curl -fsL https://s3-us-west-2.amazonaws.com/staticcontent.cricut.com/a/software/osx-native/latest.json)" "rolloutVersion")
|
|
||||||
downloadURL=$(getJSONValue $(curl -fsL "https://apis.cricut.com/desktopdownload/InstallerFile?shard=a&operatingSystem=osxnative&fileName=CricutDesignSpace-Install-v${appNewVersion}.dmg") "result")
|
|
||||||
expectedTeamID="25627ZFVT7"
|
|
||||||
;;
|
|
||||||
@@ -1,12 +1,6 @@
|
|||||||
cryptomator)
|
cryptomator)
|
||||||
name="Cryptomator"
|
name="Cryptomator"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
|
||||||
archiveName="Cryptomator-[0-9.]*-arm64.dmg"
|
|
||||||
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
archiveName="Cryptomator-[0-9.]*.dmg"
|
|
||||||
fi
|
|
||||||
downloadURL=$(downloadURLFromGit cryptomator cryptomator)
|
downloadURL=$(downloadURLFromGit cryptomator cryptomator)
|
||||||
appNewVersion=$(versionFromGit cryptomator cryptomator)
|
appNewVersion=$(versionFromGit cryptomator cryptomator)
|
||||||
expectedTeamID="YZQJQUHA3L"
|
expectedTeamID="YZQJQUHA3L"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
dangerzone)
|
dangerzone)
|
||||||
name="Dangerzone"
|
name="Dangerzone"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
downloadURL="$(downloadURLFromGit freedomofpress dangerzone)"
|
downloadURL="$(downloadURLFromGit firstlookmedia dangerzone)"
|
||||||
appNewVersion="$(versionFromGit freedomofpress dangerzone)"
|
appNewVersion="$(versionFromGit firstlookmedia dangerzone)"
|
||||||
expectedTeamID="N9B95FDWH4"
|
expectedTeamID="N9B95FDWH4"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
displaylinkmanager)
|
|
||||||
name="DisplayLink Manager"
|
|
||||||
type="pkg"
|
|
||||||
#packageID="com.displaylink.displaylinkmanagerapp"
|
|
||||||
downloadURL=https://www.synaptics.com$(redirect=$(curl -sfL https://www.synaptics.com/products/displaylink-graphics/downloads/macos | grep 'class="download-link">Download' | head -n 1 | sed 's/.*href="//' | sed 's/".*//') && curl -sfL "https://www.synaptics.com$redirect" | grep Accept | head -n 1 | sed 's/.*href="//' | sed 's/".*//')
|
|
||||||
appNewVersion=$(curl -sfL https://www.synaptics.com/products/displaylink-graphics/downloads/macos | grep "Release:" | head -n 1 | cut -d ' ' -f2)
|
|
||||||
expectedTeamID="73YQY62QM3"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
drawio)
|
|
||||||
name="draw.io"
|
|
||||||
type="dmg"
|
|
||||||
archiveName="draw.io-universal-[0-9.]*.dmg$"
|
|
||||||
downloadURL="$(downloadURLFromGit jgraph drawio-desktop)"
|
|
||||||
appNewVersion="$(versionFromGit jgraph drawio-desktop)"
|
|
||||||
expectedTeamID="UZEUFB4N53"
|
|
||||||
blockingProcesses=( draw.io )
|
|
||||||
;;
|
|
||||||
@@ -2,6 +2,5 @@ dropbox)
|
|||||||
name="Dropbox"
|
name="Dropbox"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
downloadURL="https://www.dropbox.com/download?plat=mac&full=1"
|
downloadURL="https://www.dropbox.com/download?plat=mac&full=1"
|
||||||
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i "^location" | sed -E 's/.*%20([0-9.]*)\.dmg/\1/g')
|
|
||||||
expectedTeamID="G7HH3F8CAK"
|
expectedTeamID="G7HH3F8CAK"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
duckduckgo)
|
|
||||||
name="DuckDuckGo"
|
|
||||||
type="dmg"
|
|
||||||
#downloadURL="https://staticcdn.duckduckgo.com/macos-desktop-browser/duckduckgo.dmg"
|
|
||||||
#downloadURL=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[last()]' 2>/dev/null | cut -d '"' -f2)
|
|
||||||
downloadURL=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | cut -d '"' -f2)
|
|
||||||
#appNewVersion=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/enclosure/@sparkle:version)[last()]' 2>/dev/null | cut -d '"' -f2)
|
|
||||||
appNewVersion=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/sparkle:shortVersionString)[1]' 2>/dev/null | cut -d ">" -f2 | cut -d "<" -f1)
|
|
||||||
expectedTeamID="HKE973VLUW"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
duodevicehealth)
|
|
||||||
name="Duo Device Health"
|
|
||||||
type="pkgInDmg"
|
|
||||||
downloadURL="https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg"
|
|
||||||
appNewVersion=$(curl -fsLIXGET "https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg" | grep -i "^content-disposition" | sed -e 's/.*filename\=\"DuoDeviceHealth\-\(.*\)\.dmg\".*/\1/')
|
|
||||||
appName="Duo Device Health.app"
|
|
||||||
expectedTeamID="FNN8Z5JMFP"
|
|
||||||
;;
|
|
||||||
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
dynalist)
|
|
||||||
name="Dynalist"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="https://dynalist.io/standalone/download?file=Dynalist.dmg"
|
|
||||||
appNewVersion=""
|
|
||||||
expectedTeamID="6JSW4SJWN9"
|
|
||||||
;;
|
|
||||||
@@ -3,7 +3,6 @@ egnyte)
|
|||||||
name="Egnyte Connect"
|
name="Egnyte Connect"
|
||||||
type="pkg"
|
type="pkg"
|
||||||
downloadURL="https://egnyte-cdn.egnyte.com/egnytedrive/mac/en-us/latest/EgnyteConnectMac.pkg"
|
downloadURL="https://egnyte-cdn.egnyte.com/egnytedrive/mac/en-us/latest/EgnyteConnectMac.pkg"
|
||||||
appNewVersion=$(curl -fs "https://egnyte-cdn.egnyte.com/egnytedrive/mac/en-us/versions/default.xml" | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' | cut -d '"' -f 2)
|
|
||||||
expectedTeamID="FELUD555VC"
|
expectedTeamID="FELUD555VC"
|
||||||
blockingProcesses=( NONE )
|
blockingProcesses=( NONE )
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
egnytewebedit)
|
|
||||||
name="EgnyteWebEdit"
|
|
||||||
type="pkg"
|
|
||||||
downloadURL="https://egnyte-cdn.egnyte.com/webedit/mac/en-us/latest/EgnyteWebEdit.pkg"
|
|
||||||
expectedTeamID="FELUD555VC"
|
|
||||||
appName="Egnyte WebEdit.app"
|
|
||||||
blockingProcesses=( NONE )
|
|
||||||
;;
|
|
||||||
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
fellow)
|
|
||||||
name="Fellow"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="https://cdn.fellow.app/desktop/1.3.11/darwin/stable/universal/Fellow-1.3.11-universal.dmg"
|
|
||||||
appNewVersion=""
|
|
||||||
expectedTeamID="2NF46HY8D8"
|
|
||||||
;;
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
filezilla)
|
|
||||||
name="FileZilla"
|
|
||||||
type="tbz"
|
|
||||||
packageID="org.filezilla-project.filezilla"
|
|
||||||
downloadURL=$(curl -fsL https://filezilla-project.org/download.php\?show_all=1 | grep macosx | head -n 1 | awk -F '"' '{print $2}' )
|
|
||||||
appNewVersion=$( curl -fsL https://filezilla-project.org/download.php\?show_all=1 | grep macosx | head -n 1 | awk -F '_' '{print $2}' )
|
|
||||||
expectedTeamID="5VPGKXL75N"
|
|
||||||
blockingProcesses=( NONE )
|
|
||||||
;;
|
|
||||||
|
|
||||||
@@ -2,9 +2,7 @@ firefox)
|
|||||||
name="Firefox"
|
name="Firefox"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US"
|
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US"
|
||||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
||||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
|
||||||
expectedTeamID="43AQ936H96"
|
expectedTeamID="43AQ936H96"
|
||||||
blockingProcesses=( firefox )
|
blockingProcesses=( firefox )
|
||||||
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -2,9 +2,7 @@ firefox_da)
|
|||||||
name="Firefox"
|
name="Firefox"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=da"
|
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=da"
|
||||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
||||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
|
||||||
expectedTeamID="43AQ936H96"
|
expectedTeamID="43AQ936H96"
|
||||||
blockingProcesses=( firefox )
|
blockingProcesses=( firefox )
|
||||||
printlog "WARNING for ERROR: Label firefox, firefox_da and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,27 +1,23 @@
|
|||||||
firefox_intl)
|
firefox_intl)
|
||||||
# This label will try to figure out the selected language of the user,
|
# This label will try to figure out the selected language of the user,
|
||||||
# and install corrosponding version of Firefox
|
# and install corrosponding version of Firefox
|
||||||
name="Firefox"
|
name="Firefox"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
userLanguage=$(runAsUser defaults read .GlobalPreferences AppleLocale | tr '_' '-')
|
userLanguage=$(runAsUser defaults read .GlobalPreferences AppleLocale)
|
||||||
printlog "Found language $userLanguage to be used for $name."
|
printlog "Found language $userLanguage to be used for Firefox."
|
||||||
releaseURL="https://ftp.mozilla.org/pub/firefox/releases/latest/README.txt"
|
if ! curl -fs "https://ftp.mozilla.org/pub/firefox/releases/latest/README.txt" | grep -o "=$userLanguage"; then
|
||||||
until curl -fs $releaseURL | grep -q "=$userLanguage"; do
|
userLanguage=$(echo $userLanguage | cut -c 1-2)
|
||||||
if [ ${#userLanguage} -eq 2 ]; then
|
if ! curl -fs "https://ftp.mozilla.org/pub/firefox/releases/latest/README.txt" | grep "=$userLanguage"; then
|
||||||
break
|
userLanguage="en_US"
|
||||||
fi
|
fi
|
||||||
printlog "No locale matching '$userLanguage', trying '${userLanguage:0:2}'"
|
|
||||||
userLanguage=${userLanguage:0:2}
|
|
||||||
done
|
|
||||||
printlog "Using language '$userLanguage' for download."
|
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-latest-ssl&os=osx&lang=$userLanguage"
|
|
||||||
if ! curl -sfL --output /dev/null -r 0-0 $downloadURL; then
|
|
||||||
printlog "Download not found for '$userLanguage', using default ('en-US')."
|
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-latest-ssl&os=osx"
|
|
||||||
fi
|
fi
|
||||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
printlog "Using language $userLanguage for download."
|
||||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=$userLanguage"
|
||||||
|
if ! curl -sfL --output /dev/null -r 0-0 "$downloadURL" ; then
|
||||||
|
printlog "Download not found for that language. Using en-US"
|
||||||
|
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US"
|
||||||
|
fi
|
||||||
|
appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '<html' | grep -o -i -e "data-latest-firefox=\"[0-9.]*\"" | cut -d '"' -f2)
|
||||||
expectedTeamID="43AQ936H96"
|
expectedTeamID="43AQ936H96"
|
||||||
blockingProcesses=( firefox )
|
blockingProcesses=( firefox )
|
||||||
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ firefoxesrpkg)
|
|||||||
name="Firefox"
|
name="Firefox"
|
||||||
type="pkg"
|
type="pkg"
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-esr-pkg-latest-ssl&os=osx"
|
downloadURL="https://download.mozilla.org/?product=firefox-esr-pkg-latest-ssl&os=osx"
|
||||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i "^location" | awk '{print $2}' | sed -E 's/.*releases\/([0-9.]*)esr.*/\1/g')
|
||||||
appNewVersion=$(getJSONValue "$firefoxVersions" "FIREFOX_ESR")
|
|
||||||
expectedTeamID="43AQ936H96"
|
expectedTeamID="43AQ936H96"
|
||||||
blockingProcesses=( firefox )
|
blockingProcesses=( firefox )
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,27 +1,24 @@
|
|||||||
firefoxesr_intl)
|
firefoxesr_intl)
|
||||||
# This label will try to figure out the selected language of the user,
|
# This label will try to figure out the selected language of the user,
|
||||||
# and install corrosponding version of Firefox ESR
|
# and install corrosponding version of Firefox ESR
|
||||||
name="Firefox"
|
name="Firefox"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
userLanguage=$(runAsUser defaults read .GlobalPreferences AppleLocale | tr '_' '-')
|
userLanguage=$(runAsUser defaults read .GlobalPreferences AppleLocale)
|
||||||
printlog "Found language $userLanguage to be used for $name."
|
printlog "Found language $userLanguage to be used for Firefox."
|
||||||
releaseURL="https://ftp.mozilla.org/pub/firefox/releases/latest-esr/README.txt"
|
if ! curl -fs "https://ftp.mozilla.org/pub/firefox/releases/latest-esr/README.txt" | grep -o "=$userLanguage"; then
|
||||||
until curl -fs $releaseURL | grep -q "=$userLanguage"; do
|
userLanguage=$(echo $userLanguage | cut -c 1-2)
|
||||||
if [ ${#userLanguage} -eq 2 ]; then
|
if ! curl -fs "https://ftp.mozilla.org/pub/firefox/releases/latest-esr/README.txt" | grep "=$userLanguage"; then
|
||||||
break
|
userLanguage="en_US"
|
||||||
fi
|
fi
|
||||||
printlog "No locale matching '$userLanguage', trying '${userLanguage:0:2}'"
|
|
||||||
userLanguage=${userLanguage:0:2}
|
|
||||||
done
|
|
||||||
printlog "Using language '$userLanguage' for download."
|
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=osx&lang=$userLanguage"
|
|
||||||
if ! curl -sfL --output /dev/null -r 0-0 $downloadURL; then
|
|
||||||
printlog "Download not found for '$userLanguage', using default ('en-US')."
|
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=osx"
|
|
||||||
fi
|
fi
|
||||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
printlog "Using language $userLanguage for download."
|
||||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
downloadURL="https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=osx&lang=$userLanguage"
|
||||||
|
# https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=osx&lang=en-US
|
||||||
|
if ! curl -sfL --output /dev/null -r 0-0 "$downloadURL" ; then
|
||||||
|
printlog "Download not found for that language. Using en-US"
|
||||||
|
downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US"
|
||||||
|
fi
|
||||||
|
appNewVersion=$(curl -fsIL "$downloadURL" | grep -i "^location" | awk '{print $2}' | sed -E 's/.*releases\/([0-9.]*)esr.*/\1/g')
|
||||||
expectedTeamID="43AQ936H96"
|
expectedTeamID="43AQ936H96"
|
||||||
blockingProcesses=( firefox )
|
blockingProcesses=( firefox )
|
||||||
printlog "WARNING for ERROR: Label firefox and firefox_intl should not be used. Instead use firefoxpkg and firefoxpkg_intl as per recommendations from Firefox. It's not fully certain that the app actually gets updated here. firefoxpkg and firefoxpkg_intl will have built in updates and make sure the client is updated in the future." REQ
|
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ firefoxpkg)
|
|||||||
name="Firefox"
|
name="Firefox"
|
||||||
type="pkg"
|
type="pkg"
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
|
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
|
||||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
|
||||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
|
||||||
expectedTeamID="43AQ936H96"
|
expectedTeamID="43AQ936H96"
|
||||||
blockingProcesses=( firefox )
|
blockingProcesses=( firefox )
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
firefoxpkg_intl)
|
|
||||||
# This label will try to figure out the selected language of the user,
|
|
||||||
# and install corrosponding version of Firefox ESR
|
|
||||||
name="Firefox"
|
|
||||||
type="pkg"
|
|
||||||
userLanguage=$(runAsUser defaults read .GlobalPreferences AppleLocale)
|
|
||||||
printlog "Found language $userLanguage to be used for Firefox." WARN
|
|
||||||
if ! curl -fs "https://ftp.mozilla.org/pub/firefox/releases/latest/README.txt" | grep -o "=$userLanguage"; then
|
|
||||||
userLanguage=$(echo $userLanguage | cut -c 1-2)
|
|
||||||
if ! curl -fs "https://ftp.mozilla.org/pub/firefox/releases/latest/README.txt" | grep "=$userLanguage"; then
|
|
||||||
userLanguage="en_US"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
printlog "Using language $userLanguage for download." WARN
|
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=$userLanguage"
|
|
||||||
# https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US
|
|
||||||
if ! curl -sfL --output /dev/null -r 0-0 "$downloadURL" ; then
|
|
||||||
printlog "Download not found for that language. Using en-US" WARN
|
|
||||||
downloadURL="https://download.mozilla.org/?product=firefox-pkg-latest-ssl&os=osx&lang=en-US"
|
|
||||||
fi
|
|
||||||
firefoxVersions=$(curl -fs "https://product-details.mozilla.org/1.0/firefox_versions.json")
|
|
||||||
appNewVersion=$(getJSONValue "$firefoxVersions" "LATEST_FIREFOX_VERSION")
|
|
||||||
expectedTeamID="43AQ936H96"
|
|
||||||
blockingProcesses=( firefox )
|
|
||||||
;;
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
flexoptixapp)
|
|
||||||
name="FLEXOPTIX App"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="https://flexbox.reconfigure.me/download/electron/mac/x64/current"
|
|
||||||
appNewVersion=$(curl -fsIL "${downloadURL}" | grep -i ^location | sed -E 's/.*-([0-9.]*)\.dmg/\1/g')
|
|
||||||
expectedTeamID="C5JETSFPHL"
|
|
||||||
;;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
flycut)
|
|
||||||
name="Flycut"
|
|
||||||
type="zip"
|
|
||||||
archiveName="Flycut.[0-9.]*.zip"
|
|
||||||
downloadURL="$(downloadURLFromGit TermiT Flycut)"
|
|
||||||
appNewVersion=$(versionFromGit TermiT Flycut )
|
|
||||||
expectedTeamID="S8JLSG5ES7"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
fontexplorer)
|
|
||||||
name="FontExplorer X Pro"
|
|
||||||
type="dmg"
|
|
||||||
packageID="com.linotype.FontExplorerX"
|
|
||||||
downloadURL="http://www.fontexplorerx.com/download/free-trial/Mac/"
|
|
||||||
appNewVersion=$( curl -fsL http://fex.linotype.com/update/client/mac/pro/version.plist | grep string | tail -n 1 | sed 's/[^0-9.]//g' )
|
|
||||||
expectedTeamID="2V7G2B7WG4"
|
|
||||||
;;
|
|
||||||
|
|
||||||
9
fragments/labels/forticlient_ztna.sh
Normal file
9
fragments/labels/forticlient_ztna.sh
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
forticlient_ztna)
|
||||||
|
name="FortiClient ZTNA"
|
||||||
|
type="pkgInDmg"
|
||||||
|
pkgName="Install.mpkg"
|
||||||
|
packageID="com.fortinet.forticlient."
|
||||||
|
downloadURL="https://links.fortinet.com/forticlient/mac/fabricagent"
|
||||||
|
appNewVersion="$(curl -fsL "$downloadURL" --remote-header-name --remote-name -w "%{url_effective}\n" -r 0-0 | cut -d "_" -f2)"
|
||||||
|
expectedTeamID="AH4XFXJ7DK"
|
||||||
|
;;
|
||||||
@@ -2,11 +2,7 @@ golang)
|
|||||||
name="GoLang"
|
name="GoLang"
|
||||||
type="pkg"
|
type="pkg"
|
||||||
packageID="org.golang.go"
|
packageID="org.golang.go"
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
downloadURL="https://go.dev$(curl -fs "https://go.dev/dl/" | grep -i "downloadBox" | grep "pkg" | tr '"' '\n' | grep "pkg")"
|
||||||
downloadURL="https://go.dev$(curl -fs "https://go.dev/dl/" | grep -i "downloadBox" | grep "darwin-arm" | tr '"' '\n' | grep "pkg")"
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
downloadURL="https://go.dev$(curl -fs "https://go.dev/dl/" | grep -i "downloadBox" | grep "darwin-amd" | tr '"' '\n' | grep "pkg")"
|
|
||||||
fi
|
|
||||||
appNewVersion="$( echo "${downloadURL}" | sed -E 's/.*\/(go[0-9.]*)\..*/\1/g' )" # Version includes letters "go" in the beginning
|
appNewVersion="$( echo "${downloadURL}" | sed -E 's/.*\/(go[0-9.]*)\..*/\1/g' )" # Version includes letters "go" in the beginning
|
||||||
expectedTeamID="EQHXZ8M8AV"
|
expectedTeamID="EQHXZ8M8AV"
|
||||||
blockingProcesses=( NONE )
|
blockingProcesses=( NONE )
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
googleadseditor)
|
|
||||||
name="Google Ads Editor"
|
|
||||||
type="dmg"
|
|
||||||
downloadURL="https://dl.google.com/adwords_editor/google_ads_editor.dmg"
|
|
||||||
appNewVersion=""
|
|
||||||
expectedTeamID="EQHXZ8M8AV"
|
|
||||||
;;
|
|
||||||
@@ -4,5 +4,4 @@ googlechrome)
|
|||||||
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}')
|
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}')
|
||||||
expectedTeamID="EQHXZ8M8AV"
|
expectedTeamID="EQHXZ8M8AV"
|
||||||
printlog "WARNING for ERROR: Label googlechrome should not be used. Instead use googlechromepkg as per recommendations from Google. It's not fully certain that the app actually gets updated here. googlechromepkg will have built in updates and make sure the client is updated in the future." REQ
|
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
googlechromeenterprise)
|
|
||||||
name="Google Chrome"
|
|
||||||
type="pkg"
|
|
||||||
downloadURL="https://dl.google.com/dl/chrome/mac/universal/stable/gcem/GoogleChrome.pkg"
|
|
||||||
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}')
|
|
||||||
expectedTeamID="EQHXZ8M8AV"
|
|
||||||
updateTool="/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/MacOS/GoogleSoftwareUpdateAgent"
|
|
||||||
updateToolArguments=( -runMode oneshot -userInitiated YES )
|
|
||||||
updateToolRunAsCurrentUser=1
|
|
||||||
;;
|
|
||||||
@@ -6,7 +6,6 @@ googlechromepkg)
|
|||||||
# https://support.google.com/chrome/a/answer/9915669
|
# https://support.google.com/chrome/a/answer/9915669
|
||||||
#
|
#
|
||||||
downloadURL="https://dl.google.com/chrome/mac/stable/accept_tos%3Dhttps%253A%252F%252Fwww.google.com%252Fintl%252Fen_ph%252Fchrome%252Fterms%252F%26_and_accept_tos%3Dhttps%253A%252F%252Fpolicies.google.com%252Fterms/googlechrome.pkg"
|
downloadURL="https://dl.google.com/chrome/mac/stable/accept_tos%3Dhttps%253A%252F%252Fwww.google.com%252Fintl%252Fen_ph%252Fchrome%252Fterms%252F%26_and_accept_tos%3Dhttps%253A%252F%252Fpolicies.google.com%252Fterms/googlechrome.pkg"
|
||||||
appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}')
|
|
||||||
expectedTeamID="EQHXZ8M8AV"
|
expectedTeamID="EQHXZ8M8AV"
|
||||||
updateTool="/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/MacOS/GoogleSoftwareUpdateAgent"
|
updateTool="/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/MacOS/GoogleSoftwareUpdateAgent"
|
||||||
updateToolArguments=( -runMode oneshot -userInitiated YES )
|
updateToolArguments=( -runMode oneshot -userInitiated YES )
|
||||||
|
|||||||
@@ -3,13 +3,8 @@ googledrivefilestream)
|
|||||||
# credit: Isaac Ordonez, Mann consulting (@mannconsulting)
|
# credit: Isaac Ordonez, Mann consulting (@mannconsulting)
|
||||||
name="Google Drive File Stream"
|
name="Google Drive File Stream"
|
||||||
type="pkgInDmg"
|
type="pkgInDmg"
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
packageID="com.google.drivefs"
|
||||||
packageID="com.google.drivefs.arm64"
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
packageID="com.google.drivefs.x86_64"
|
|
||||||
fi
|
|
||||||
downloadURL="https://dl.google.com/drive-file-stream/GoogleDriveFileStream.dmg" # downloadURL="https://dl.google.com/drive-file-stream/GoogleDrive.dmg"
|
downloadURL="https://dl.google.com/drive-file-stream/GoogleDriveFileStream.dmg" # downloadURL="https://dl.google.com/drive-file-stream/GoogleDrive.dmg"
|
||||||
blockingProcesses=( "Google Docs" "Google Drive" "Google Sheets" "Google Slides" )
|
blockingProcesses=( "Google Docs" "Google Drive" "Google Sheets" "Google Slides" )
|
||||||
appName="Google Drive.app"
|
|
||||||
expectedTeamID="EQHXZ8M8AV"
|
expectedTeamID="EQHXZ8M8AV"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ gpgsuite)
|
|||||||
type="pkgInDmg"
|
type="pkgInDmg"
|
||||||
pkgName="Install.pkg"
|
pkgName="Install.pkg"
|
||||||
downloadURL=$(curl -s https://gpgtools.org/ | grep https://releases.gpgtools.org/GPG_Suite- | grep Download | cut -d'"' -f4)
|
downloadURL=$(curl -s https://gpgtools.org/ | grep https://releases.gpgtools.org/GPG_Suite- | grep Download | cut -d'"' -f4)
|
||||||
appNewVersion=$(echo $downloadURL | cut -d "-" -f 2 | cut -d "." -f 1-2)
|
|
||||||
expectedTeamID="PKV8ZPD836"
|
expectedTeamID="PKV8ZPD836"
|
||||||
blockingProcesses=( "GPG Keychain" )
|
blockingProcesses=( "GPG Keychain" )
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
grammarly)
|
grammarly)
|
||||||
name="Grammarly Desktop"
|
name="Grammarly Desktop"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
packageID="com.grammarly.ProjectLlama"
|
packageID="com.grammarly.ProjectLlama"
|
||||||
downloadURL="https://download-mac.grammarly.com/Grammarly.dmg"
|
downloadURL=$(curl -fsL "https://download-mac.grammarly.com/appcast.xml" | xpath '//rss/channel/item[1]/enclosure/@url' 2>/dev/null | cut -d '"' -f 2)
|
||||||
expectedTeamID="W8F64X92K3"
|
expectedTeamID="W8F64X92K3"
|
||||||
# appName="Grammarly Installer.app"
|
appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4)
|
||||||
installerTool="Grammarly Installer.app"
|
appName="Grammarly Installer.app"
|
||||||
CLIInstaller="Grammarly Installer.app/Contents/MacOS/Grammarly Desktop"
|
;;
|
||||||
;;
|
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
hype)
|
|
||||||
name="Hype4"
|
|
||||||
type="dmg"
|
|
||||||
packageID="com.tumult.Hype4"
|
|
||||||
downloadURL="https://static.tumult.com/hype/download/Hype.dmg"
|
|
||||||
appNewVersion=$( curl -fsL https://tumult.com/hype/download/all/ | grep Ongoing | awk -F '<' '{print $4}' | sed 's/[^0-9.]//g' )
|
|
||||||
expectedTeamID="8J356DM772"
|
|
||||||
blockingProcesses=( NONE )
|
|
||||||
;;
|
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
icons)
|
icons)
|
||||||
|
# credit: Mischa van der Bent (@mischavdbent)
|
||||||
name="Icons"
|
name="Icons"
|
||||||
type="zip"
|
type="zip"
|
||||||
downloadURL=$(downloadURLFromGit SAP macOS-icon-generator )
|
downloadURL=$(downloadURLFromGit sap macOS-icon-generator )
|
||||||
appNewVersion=$(versionFromGit SAP macOS-icon-generator )
|
appNewVersion=$(versionFromGit sap macOS-icon-generator )
|
||||||
expectedTeamID="7R5ZEU67FQ"
|
expectedTeamID="7R5ZEU67FQ"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
idrive)
|
|
||||||
name="IDrive"
|
|
||||||
type="pkgInDmg"
|
|
||||||
pkgName="IDrive.pkg"
|
|
||||||
downloadURL=$(curl -fs https://static.idriveonlinebackup.com/downloads/version_mac.js | sed -E 's/.*(https.*dmg).*/\1/g')
|
|
||||||
appNewVersion=$(curl -fs https://static.idriveonlinebackup.com/downloads/version_mac.js | sed -E 's/.*mac_vernum\=\"Version\ ([0-9.]*).*/\1/g')
|
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
expectedTeamID="JWDCNYZ922"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
idrivethin)
|
|
||||||
name="IDrive"
|
|
||||||
type="pkgInDmg"
|
|
||||||
pkgName="IDriveThin.pkg"
|
|
||||||
downloadURL=$(curl -fs https://static.idriveonlinebackup.com/downloads/idrivethin/thin_version.js | sed -E 's/.*thinclient-mac([^;]*).*/\1/g' | sed -E 's/.*(https.*dmg).*/\1/g')
|
|
||||||
appNewVersion=$(curl -fs https://static.idriveonlinebackup.com/downloads/idrivethin/thin_version.js | sed -E 's/.*thin\_mac\_ver\=\"Version\ ([0-9.]*).*/\1/g')
|
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
expectedTeamID="JWDCNYZ922"
|
|
||||||
;;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
imageoptim)
|
|
||||||
name="imageoptim"
|
|
||||||
type="tbz"
|
|
||||||
packageID="net.pornel.ImageOptim"
|
|
||||||
downloadURL="https://imageoptim.com/ImageOptim.tbz2"
|
|
||||||
appNewVersion=$( curl -fsL https://imageoptim.com/appcast.xml | grep "title" | tail -n 1 | sed 's/[^0-9.]//g' )
|
|
||||||
expectedTeamID="59KZTZA4XR"
|
|
||||||
blockingProcesses=( NONE )
|
|
||||||
;;
|
|
||||||
@@ -1,9 +1,7 @@
|
|||||||
insomnia)
|
insomnia)
|
||||||
name="Insomnia"
|
name="insomnia"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
#downloadURL=$(downloadURLFromGit kong insomnia)
|
downloadURL=$(downloadURLFromGit kong insomnia)
|
||||||
downloadURL=$(curl -fs "https://updates.insomnia.rest/downloads/mac/latest?app=com.insomnia.app&source=website" | grep -o "https.*\.dmg")
|
appNewVersion=$(versionFromGit kong insomnia)
|
||||||
#appNewVersion=$(versionFromGit kong insomnia)
|
|
||||||
appNewVersion=$(echo "$downloadURL" | sed -E 's/.*\/Insomnia.Core.([0-9.]*)\.dmg/\1/')
|
|
||||||
expectedTeamID="FX44YY62GV"
|
expectedTeamID="FX44YY62GV"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
ipswupdater)
|
|
||||||
name="IPSW Updater"
|
|
||||||
type="zip"
|
|
||||||
ipswupdaterVersions=$(curl -fs "https://ipsw.app/download/updates.php?current_version=0.9.16")
|
|
||||||
downloadURL=$(getJSONValue "$ipswupdaterVersions" "[0].url")
|
|
||||||
appNewVersion=$(getJSONValue "$ipswupdaterVersions" "[0].version")
|
|
||||||
expectedTeamID="YRW6NUGA63"
|
|
||||||
;;
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
kap)
|
|
||||||
# credit: Lance Stephens (@pythoninthegrass on MacAdmins Slack)
|
|
||||||
name="Kap"
|
|
||||||
type="dmg"
|
|
||||||
if [[ $(arch) = "i386" ]]; then
|
|
||||||
archiveName="${name}-[0-9.]*-x64.${type}"
|
|
||||||
downloadURL=$(downloadURLFromGit wulkano kap | grep -i x64)
|
|
||||||
else
|
|
||||||
archiveName="${name}-[0-9.]*-arm64.${type}"
|
|
||||||
downloadURL=$(downloadURLFromGit wulkano kap | grep -i arm64)
|
|
||||||
fi
|
|
||||||
appNewVersion=$(versionFromGit wulkano Kap)
|
|
||||||
expectedTeamID="2KEEHXF6R6"
|
|
||||||
;;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
keepingyouawake)
|
|
||||||
name="KeepingYouAwake"
|
|
||||||
type="zip"
|
|
||||||
downloadURL=$(downloadURLFromGit newmarcel KeepingYouAwake)
|
|
||||||
appNewVersion=$(versionFromGit newmarcel KeepingYouAwake)
|
|
||||||
expectedTeamID="5KESHV9W85"
|
|
||||||
blockingProcesses=( "KeepingYouAwake" )
|
|
||||||
;;
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
knockknock)
|
knockknock)
|
||||||
name="KnockKnock"
|
name="KnockKnock"
|
||||||
type="zip"
|
type="zip"
|
||||||
downloadURL="$(downloadURLFromGit objective-see KnockKnock)"
|
downloadURL=$( curl -fs "https://objective-see.com/products/knockknock.html" | grep https | grep "$type" | head -1 | tr '"' "\n" | grep "^http" )
|
||||||
appNewVersion="$(versionFromGit objective-see KnockKnock)"
|
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*_([0-9.]*)\..*/\1/g' )
|
||||||
expectedTeamID="VBG97UB4TA"
|
expectedTeamID="VBG97UB4TA"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
lcadvancedvpnclient)
|
|
||||||
name="LANCOM Advanced VPN Client"
|
|
||||||
type="pkgInDmg"
|
|
||||||
appNewVersion=$(curl -fs https://www.ncp-e.com/de/service/download-vpn-client/ | grep -m 1 "NCP Secure Entry macOS Client" -A 1 | grep -i Version | sed "s|.*Version \(.*\) Rev.*|\\1|")
|
|
||||||
downloadURL=$(appShortVersion=`sed 's/[^0-9]//g' <<< $appNewVersion` && echo https://ftp.lancom.de/LANCOM-Releases/LC-VPN-Client/LC-Advanced-VPN-Client-macOS-"${appShortVersion}"-Rel-x86-64.dmg)
|
|
||||||
expectedTeamID="LL3KBL2M3A"
|
|
||||||
;;
|
|
||||||
@@ -2,11 +2,11 @@ libreoffice)
|
|||||||
name="LibreOffice"
|
name="LibreOffice"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
if [[ $(arch) == "arm64" ]]; then
|
||||||
arch_type="aarch64"
|
downloadURL="https://download.documentfoundation.org/libreoffice/stable/$(curl -s https://www.libreoffice.org/download/download/ | grep dl_version_number | head -n 1 | cut -d'>' -f3 | cut -d'<' -f1)/mac/aarch64/LibreOffice_$(curl -s https://www.libreoffice.org/download/download/ | grep dl_version_number | head -n 1 | cut -d'>' -f3 | cut -d'<' -f1)_MacOS_aarch64.dmg"
|
||||||
|
elif [[ $(arch) == "i386" ]]; then
|
||||||
|
downloadURL="https://download.documentfoundation.org/libreoffice/stable/$(curl -s https://www.libreoffice.org/download/download/ | grep dl_version_number | head -n 1 | cut -d'>' -f3 | cut -d'<' -f1)/mac/x86_64/LibreOffice_$(curl -s https://www.libreoffice.org/download/download/ | grep dl_version_number | head -n 1 | cut -d'>' -f3 | cut -d'<' -f1)_MacOS_x86-64.dmg"
|
||||||
fi
|
fi
|
||||||
libreoffice_latest_version="$(curl -Ls https://www.libreoffice.org/download/download-libreoffice/ | grep dl_version_number | head -n 1 | cut -d'>' -f3 | cut -d'<' -f1)"
|
appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*_([0-9.]*)_.*/\1/g' )
|
||||||
downloadURL="https://download.documentfoundation.org/libreoffice/stable/${libreoffice_latest_version}/mac/${arch_type:-x86_64}/LibreOffice_${libreoffice_latest_version}_MacOS_${arch_type:-x86-64}.dmg"
|
|
||||||
appNewVersion=$(echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*_([0-9.]*)_.*/\1/g')
|
|
||||||
expectedTeamID="7P5S3ZLCN7"
|
expectedTeamID="7P5S3ZLCN7"
|
||||||
blockingProcesses=( soffice )
|
blockingProcesses=( soffice )
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
linear)
|
|
||||||
name="Linear"
|
|
||||||
type="dmg"
|
|
||||||
if [[ $(arch) == "arm64" ]]; then
|
|
||||||
downloadURL="https://desktop.linear.app/mac/dmg/arm64"
|
|
||||||
elif [[ $(arch) == "i386" ]]; then
|
|
||||||
downloadURL="https://desktop.linear.app/mac/dmg"
|
|
||||||
fi
|
|
||||||
appNewVersion=$(curl -sIkL $downloadURL | sed -r '/filename=/!d;s/.*filename=(.*)$/\1/' | awk '{print $2}')
|
|
||||||
expectedTeamID="7VZ2S3V9RV"
|
|
||||||
versionKey="CFBundleShortVersionString"
|
|
||||||
appName="Linear.app"
|
|
||||||
blockingProcesses=( "Linear" )
|
|
||||||
;;
|
|
||||||
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
logioptions|\
|
|
||||||
logitechoptions)
|
logitechoptions)
|
||||||
name="Logi Options"
|
name="Logitech Options"
|
||||||
type="pkgInZip"
|
type="pkgInZip"
|
||||||
#downloadURL=$(curl -fs "https://support.logi.com/api/v2/help_center/en-us/articles.json?label_names=webcontent=productdownload,webos=mac-macos-x-11.0" | tr "," "\n" | grep -A 10 "macOS" | grep -oie "https.*/.*/options/.*\.zip" | head -1)
|
#downloadURL=$(curl -fs "https://support.logi.com/api/v2/help_center/en-us/articles.json?label_names=webcontent=productdownload,webos=mac-macos-x-11.0" | tr "," "\n" | grep -A 10 "macOS" | grep -oie "https.*/.*/options/.*\.zip" | head -1)
|
||||||
downloadURL="https://download01.logi.com/web/ftp/pub/techsupport/options/options_installer.zip"
|
downloadURL="https://download01.logi.com/web/ftp/pub/techsupport/options/options_installer.zip"
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
macoslaps)
|
|
||||||
name="macOSLAPS"
|
|
||||||
type="pkg"
|
|
||||||
packageID="edu.psu.macOSLAPS"
|
|
||||||
downloadURL="$(downloadURLFromGit joshua-d-miller macOSLAPS)"
|
|
||||||
appNewVersion="$(versionFromGit joshua-d-miller macOSLAPS)"
|
|
||||||
expectedTeamID="9UYK4F9BSM"
|
|
||||||
;;
|
|
||||||
@@ -13,7 +13,7 @@ macports)
|
|||||||
archiveName="Catalina.pkg"
|
archiveName="Catalina.pkg"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
cleanupAndExit 98 "macOS 10.14 or earlier not supported by Installomator."
|
cleanupAndExit 1 "macOS 10.14 or earlier not supported by Installomator."
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
downloadURL=$(downloadURLFromGit macports macports-base)
|
downloadURL=$(downloadURLFromGit macports macports-base)
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ marathon)
|
|||||||
name="Marathon"
|
name="Marathon"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
archiveName="Marathon-[0-9.]*-Mac.dmg"
|
archiveName="Marathon-[0-9.]*-Mac.dmg"
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
|
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
|
||||||
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
|
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
|
||||||
expectedTeamID="E8K89CXZE7"
|
expectedTeamID="E8K89CXZE7"
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ marathon2)
|
|||||||
name="Marathon 2"
|
name="Marathon 2"
|
||||||
type="dmg"
|
type="dmg"
|
||||||
archiveName="Marathon2-[0-9.]*-Mac.dmg"
|
archiveName="Marathon2-[0-9.]*-Mac.dmg"
|
||||||
versionKey="CFBundleVersion"
|
|
||||||
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
|
downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)"
|
||||||
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
|
appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)"
|
||||||
expectedTeamID="E8K89CXZE7"
|
expectedTeamID="E8K89CXZE7"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user