From e8948dafb31ef4f5ccee54a227fbc8399ccff10b Mon Sep 17 00:00:00 2001 From: taboc741 <34924920+taboc741@users.noreply.github.com> Date: Mon, 14 Feb 2022 12:33:20 -0500 Subject: [PATCH 01/42] Create NordVPNTeams.sh Adding download package support for NordLayer aka NordVPN Teams --- fragments/labels/NordVPNTeams.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 fragments/labels/NordVPNTeams.sh diff --git a/fragments/labels/NordVPNTeams.sh b/fragments/labels/NordVPNTeams.sh new file mode 100644 index 0000000..bcdc377 --- /dev/null +++ b/fragments/labels/NordVPNTeams.sh @@ -0,0 +1,7 @@ +nordlayer) + # credit: Taboc741 (https://github.com/taboc741) + name="NordLayer" + type="pkg" + downloadURL="https://downloads.nordlayer.com/mac/latest/NordVPNTeams.pkg" + expectedTeamID="W5W395V82Y" + ;; From fbe58f8ee395299cad899269395cdb1a5fcada5f Mon Sep 17 00:00:00 2001 From: taboc741 <34924920+taboc741@users.noreply.github.com> Date: Mon, 14 Feb 2022 12:46:46 -0500 Subject: [PATCH 02/42] Update and rename NordVPNTeams.sh to NordLayer.sh Fixed legacy branding from their documentation and pointed to modern URL. --- fragments/labels/{NordVPNTeams.sh => NordLayer.sh} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename fragments/labels/{NordVPNTeams.sh => NordLayer.sh} (93%) diff --git a/fragments/labels/NordVPNTeams.sh b/fragments/labels/NordLayer.sh similarity index 93% rename from fragments/labels/NordVPNTeams.sh rename to fragments/labels/NordLayer.sh index bcdc377..614b8cf 100644 --- a/fragments/labels/NordVPNTeams.sh +++ b/fragments/labels/NordLayer.sh @@ -2,6 +2,6 @@ nordlayer) # credit: Taboc741 (https://github.com/taboc741) name="NordLayer" type="pkg" - downloadURL="https://downloads.nordlayer.com/mac/latest/NordVPNTeams.pkg" + downloadURL="https://downloads.nordlayer.com/mac/latest/NordLayer.pkg" expectedTeamID="W5W395V82Y" ;; From 902175fa0944975060ff64690ba3e96cdf675515 Mon Sep 17 00:00:00 2001 From: Adam Codega Date: Thu, 21 Apr 2022 09:49:24 -0400 Subject: [PATCH 03/42] Create installInstallomator.sh --- MDM/installInstallomator.sh | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 MDM/installInstallomator.sh diff --git a/MDM/installInstallomator.sh b/MDM/installInstallomator.sh new file mode 100644 index 0000000..d6f4ed6 --- /dev/null +++ b/MDM/installInstallomator.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# This script is an MDM/management platform agnostic way to install Installomator +# The only requirement is an Internet connection. + +# 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 + workDirectory=$( /usr/bin/basename "$0" ) + tempDirectory=$( /usr/bin/mktemp -d "/private/tmp/$workDirectory.XXXXXX" ) + echo "Created working directory '$tempDirectory'" + # Download the installer package + echo "Downloading Installomator package" + /usr/bin/curl --location --silent "$url" -o "$tempDirectory/Installomator.pkg" + # Verify the download + teamID=$(/usr/sbin/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" + /usr/sbin/installer -pkg "$tempDirectory/Installomator.pkg" -target / + exitCode=0 + 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" + /bin/rm -Rf "$tempDirectory" +else + echo "Installomator already installed." +fi + +exit $exitCode From 3449c24508a000243c034867eaa82c7246083a6d Mon Sep 17 00:00:00 2001 From: Adam Codega Date: Thu, 21 Apr 2022 09:50:11 -0400 Subject: [PATCH 04/42] Update and rename installInstallomator.sh to InstallInstallomator.sh --- MDM/{installInstallomator.sh => InstallInstallomator.sh} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename MDM/{installInstallomator.sh => InstallInstallomator.sh} (91%) diff --git a/MDM/installInstallomator.sh b/MDM/InstallInstallomator.sh similarity index 91% rename from MDM/installInstallomator.sh rename to MDM/InstallInstallomator.sh index d6f4ed6..173f705 100644 --- a/MDM/installInstallomator.sh +++ b/MDM/InstallInstallomator.sh @@ -1,7 +1,7 @@ #!/bin/bash -# This script is an MDM/management platform agnostic way to install Installomator -# The only requirement is an Internet connection. +# This script is meant to povide the simplest MDM/management platform agnostic way to install Installomator +# The only requirement is an Internet connection # 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 }") From 52ad8d9d88f8bc061982fe5c85c39295e174ddf5 Mon Sep 17 00:00:00 2001 From: Mike Matter Date: Mon, 9 May 2022 11:40:28 -0500 Subject: [PATCH 05/42] Adding Workspace ONE support --- Installomator.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Installomator.sh b/Installomator.sh index 3f64473..d20ff44 100755 --- a/Installomator.sh +++ b/Installomator.sh @@ -367,10 +367,13 @@ displaydialogContinue() { # $1: message $2: title displaynotification() { # $1: message $2: title message=${1:-"Message"} title=${2:-"Notification"} + hubcli="/usr/local/bin/hubcli" manageaction="/Library/Application Support/JAMF/bin/Management Action.app/Contents/MacOS/Management Action" if [[ -x "$manageaction" ]]; then "$manageaction" -message "$message" -title "$title" + elif [[ -x "$hubcli" ]]; then + sudo "$hubcli" notify -t "$title" -i "$message" -c "Dismiss" else runAsUser osascript -e "display notification \"$message\" with title \"$title\"" fi @@ -4837,6 +4840,11 @@ case $LOGO in LOGO="/Library/Intune/Microsoft Intune Agent.app/Contents/Resources/AppIcon.icns" if [[ -z $MDMProfileName ]]; then; MDMProfileName="Management Profile"; fi ;; + ws1) + # Mosyle Business + LOGO="/Applications/Workspace ONE Intelligent Hub.app/Contents/Resources/AppIcon.icns" + if [[ -z $MDMProfileName ]]; then; MDMProfileName="Device Manager"; fi + ;; esac if [[ ! -a "${LOGO}" ]]; then if [[ $(sw_vers -buildVersion) > "19" ]]; then From 4f3b130b0462a7081a8321f763718298695ce514 Mon Sep 17 00:00:00 2001 From: Mike Matter Date: Mon, 9 May 2022 11:50:27 -0500 Subject: [PATCH 06/42] Adding Workspace ONE support (fixing comment) --- Installomator.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installomator.sh b/Installomator.sh index d20ff44..6a6f725 100755 --- a/Installomator.sh +++ b/Installomator.sh @@ -4841,7 +4841,7 @@ case $LOGO in if [[ -z $MDMProfileName ]]; then; MDMProfileName="Management Profile"; fi ;; ws1) - # Mosyle Business + # Workspace ONE LOGO="/Applications/Workspace ONE Intelligent Hub.app/Contents/Resources/AppIcon.icns" if [[ -z $MDMProfileName ]]; then; MDMProfileName="Device Manager"; fi ;; From 5477c5ccfe12250aac4f50b83f1e39221fa6e67f Mon Sep 17 00:00:00 2001 From: Mike Matter Date: Mon, 9 May 2022 12:02:50 -0500 Subject: [PATCH 07/42] Adding WS1 support (Blocking app dialogue) --- Installomator.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/Installomator.sh b/Installomator.sh index 6a6f725..a520aed 100755 --- a/Installomator.sh +++ b/Installomator.sh @@ -81,6 +81,7 @@ LOGO=appstore # - mosylem Mosyle Manager (Education) # - addigy Addigy # - 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. # Like 'LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"' # (spaces have to be escaped). From 9e0bfd5818d426f85016227516bf5c99bcf841a5 Mon Sep 17 00:00:00 2001 From: Mike Matter Date: Wed, 11 May 2022 11:33:33 -0500 Subject: [PATCH 08/42] WS1 support (remove sudo) Removing sudo from notify command. --- Installomator.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installomator.sh b/Installomator.sh index a520aed..a6b4bb3 100755 --- a/Installomator.sh +++ b/Installomator.sh @@ -374,7 +374,7 @@ displaynotification() { # $1: message $2: title if [[ -x "$manageaction" ]]; then "$manageaction" -message "$message" -title "$title" elif [[ -x "$hubcli" ]]; then - sudo "$hubcli" notify -t "$title" -i "$message" -c "Dismiss" + "$hubcli" notify -t "$title" -i "$message" -c "Dismiss" else runAsUser osascript -e "display notification \"$message\" with title \"$title\"" fi From d3390fefe6162c9006b15198f4f0d478afd949d1 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Fri, 13 May 2022 10:22:53 +0200 Subject: [PATCH 09/42] html parsing now done with xmllint, should be more resilient, maybe --- fragments/labels/adobecreativeclouddesktop.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fragments/labels/adobecreativeclouddesktop.sh b/fragments/labels/adobecreativeclouddesktop.sh index 7445443..95582db 100644 --- a/fragments/labels/adobecreativeclouddesktop.sh +++ b/fragments/labels/adobecreativeclouddesktop.sh @@ -2,10 +2,11 @@ adobecreativeclouddesktop) name="Adobe Creative Cloud" #appName="Install.app" type="dmg" + adobeurl="https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" if [[ $(arch) == "arm64" ]]; then - downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*macarm64.*dmg" | cut -d '"' -f1 | head -1) + downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'osx10')][contains(text(),'Download')]/@href)" - 2> /dev/null) elif [[ $(arch) == "i386" ]]; then - downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*osx10.*dmg" | cut -d '"' -f1 | head -1) + downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'macarm64')][contains(text(),'Download')]/@href)" - 2> /dev/null) fi #downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*dmg" | head -1) appNewVersion=$(curl -fs "https://helpx.adobe.com/creative-cloud/release-note/cc-release-notes.html" | grep "mandatory" | head -1 | grep -o "Version *.* released" | cut -d " " -f2) From 2b658a576c00b6dbf1a23a3ec6687cced4b93b78 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Fri, 13 May 2022 10:44:26 +0200 Subject: [PATCH 10/42] added function for JSON parsing using JXA --- fragments/functions.sh | 12 +++++++++++- fragments/labels/firefox.sh | 3 ++- fragments/labels/firefox_da.sh | 3 ++- fragments/labels/firefox_intl.sh | 3 ++- fragments/labels/firefoxesr.sh | 3 ++- fragments/labels/firefoxesr_intl.sh | 3 ++- fragments/labels/firefoxpkg.sh | 3 ++- fragments/labels/firefoxpkg_intl.sh | 3 ++- 8 files changed, 25 insertions(+), 8 deletions(-) diff --git a/fragments/functions.sh b/fragments/functions.sh index 9e9e977..ddbe70f 100644 --- a/fragments/functions.sh +++ b/fragments/functions.sh @@ -22,7 +22,7 @@ cleanupAndExit() { # $1 = exit code, $2 message, $3 level printlog "$2" $3 fi printlog "################## End Installomator, exit code $1 \n" REQ - + # if label is wrong and we wanted name of the label, then return ################## if [[ $RETURN_LABEL_NAME -eq 1 ]]; then 1=0 # If only label name should be returned we exit without any errors @@ -199,6 +199,16 @@ xpath() { fi } +# from @Pico: https://macadmins.slack.com/archives/CGXNNJXJ9/p1652222365989229?thread_ts=1651786411.413349&cid=CGXNNJXJ9 +getJSONValue() { + # $1: JSON string OR file path to parse (tested to work with up to 1GB string and 2GB file). + # $2: JSON key path to look up (using dot or bracket notation). + printf '%s' "$1" | /usr/bin/osascript -l 'JavaScript' \ + -e "let json = $.NSString.alloc.initWithDataEncoding($.NSFileHandle.fileHandleWithStandardInput.readDataToEndOfFile$(/usr/bin/uname -r | /usr/bin/awk -F '.' '($1 > 18) { print "AndReturnError(ObjC.wrap())" }'), $.NSUTF8StringEncoding)" \ + -e 'if ($.NSFileManager.defaultManager.fileExistsAtPath(json)) json = $.NSString.stringWithContentsOfFileEncodingError(json, $.NSUTF8StringEncoding, ObjC.wrap())' \ + -e "const value = JSON.parse(json.js)$([ -n "${2%%[.[]*}" ] && echo '.')$2" \ + -e 'if (typeof value === "object") { JSON.stringify(value, null, 4) } else { value }' +} getAppVersion() { # modified by: Søren Theilgaard (@theilgaard) and Isaac Ordonez diff --git a/fragments/labels/firefox.sh b/fragments/labels/firefox.sh index 7b310e5..2ff72ab 100644 --- a/fragments/labels/firefox.sh +++ b/fragments/labels/firefox.sh @@ -2,7 +2,8 @@ firefox) name="Firefox" type="dmg" downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US" - appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep ' Date: Mon, 16 May 2022 13:24:35 -0700 Subject: [PATCH 11/42] Create googlechromeenterprise.sh --- fragments/labels/googlechromeenterprise.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 fragments/labels/googlechromeenterprise.sh diff --git a/fragments/labels/googlechromeenterprise.sh b/fragments/labels/googlechromeenterprise.sh new file mode 100644 index 0000000..9a07546 --- /dev/null +++ b/fragments/labels/googlechromeenterprise.sh @@ -0,0 +1,10 @@ +googlechromeenterprise) + name="Google Chrome" + type="pkg" + downloadURL="https://dl.google.com/dl/chrome/mac/universal/stable/gcem/GoogleChrome.pkg" + appNewVersion=$(curl -s https://omahaproxy.appspot.com/history | awk -F',' '/mac_arm64,stable/{print $3; exit}') + expectedTeamID="EQHXZ8M8AV" + updateTool="/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/MacOS/GoogleSoftwareUpdateAgent" + updateToolArguments=( -runMode oneshot -userInitiated YES ) + updateToolRunAsCurrentUser=1 + ;; From af6ab1ae563ed53038d60fbd9e3d2716a39e5b81 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Tue, 17 May 2022 18:29:04 +0200 Subject: [PATCH 12/42] add appNewVersion to egnyte label, closes #500 --- fragments/labels/egnyte.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/fragments/labels/egnyte.sh b/fragments/labels/egnyte.sh index 185156e..3188a5d 100644 --- a/fragments/labels/egnyte.sh +++ b/fragments/labels/egnyte.sh @@ -3,6 +3,7 @@ egnyte) name="Egnyte Connect" type="pkg" downloadURL="https://egnyte-cdn.egnyte.com/egnytedrive/mac/en-us/latest/EgnyteConnectMac.pkg" + appNewVersion=$(curl -fs "https://egnyte-cdn.egnyte.com/egnytedrive/mac/en-us/versions/default.xml" | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' | cut -d '"' -f 2) expectedTeamID="FELUD555VC" blockingProcesses=( NONE ) ;; From ca73eca5f22c822f1fb329a11217f4db9d07fa38 Mon Sep 17 00:00:00 2001 From: Chris Abbs Date: Tue, 17 May 2022 12:19:30 -0500 Subject: [PATCH 13/42] edited fragment per contribution guidelines --- fragments/labels/blender.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fragments/labels/blender.sh b/fragments/labels/blender.sh index f45255e..f024a77 100644 --- a/fragments/labels/blender.sh +++ b/fragments/labels/blender.sh @@ -1,7 +1,11 @@ blender) name="blender" type="dmg" - downloadURL=$(redirect=$(curl -sfL https://www.blender.org/download/ | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) && curl -sfL "$redirect" | sed 's/.*href="//' | sed 's/".*//' | grep -m1 .dmg) + if [[ $(arch) == "arm64" ]]; then + downloadURL=$(curl -sfL "https://www.blender.org/download/" | xmllint --html --format - 2>/dev/null | grep -o "https://.*blender.*arm64.*.dmg" | sed '2p;d' | sed 's/www.blender.org\/download/download.blender.org/g') + elif [[ $(arch) == "i386" ]]; then + downloadURL=$(curl -sfL "https://www.blender.org/download/" | xmllint --html --format - 2>/dev/null | grep -o "https://.*blender.*x64.*.dmg" | sed '2p;d' | sed 's/www.blender.org\/download/download.blender.org/g') + fi appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)-.*/\1/g' ) expectedTeamID="68UA947AUU" ;; From 8be5f4866ed0415e89662070ab3b2bb12db8884a Mon Sep 17 00:00:00 2001 From: Liam Steckler <553265+buckbanzai@users.noreply.github.com> Date: Tue, 17 May 2022 14:41:57 -0700 Subject: [PATCH 14/42] Update talkdeskcallbar to use JSON parsing --- fragments/labels/talkdeskcallbar.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fragments/labels/talkdeskcallbar.sh b/fragments/labels/talkdeskcallbar.sh index fb773b4..dbc9135 100644 --- a/fragments/labels/talkdeskcallbar.sh +++ b/fragments/labels/talkdeskcallbar.sh @@ -1,7 +1,8 @@ talkdeskcallbar) name="Callbar" type="dmg" - appNewVersion=$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p') + talkdeskcallbarVersions=$(curl -fsL "https://downloadcallbar.talkdesk.com/release_metadata.json") + appNewVersion=$(getJSONValue "$talkdeskcallbarVersions" "version") downloadURL=https://downloadcallbar.talkdesk.com/Callbar-${appNewVersion}.dmg expectedTeamID="YGGJX44TB8" ;; From ea6434c4760274963880221bbb7289160bc536c7 Mon Sep 17 00:00:00 2001 From: Liam Steckler <553265+buckbanzai@users.noreply.github.com> Date: Tue, 17 May 2022 14:48:21 -0700 Subject: [PATCH 15/42] Update talkdeskcxcloud to use JSON parsing --- fragments/labels/talkdeskcxcloud.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fragments/labels/talkdeskcxcloud.sh b/fragments/labels/talkdeskcxcloud.sh index 2326146..889dd13 100644 --- a/fragments/labels/talkdeskcxcloud.sh +++ b/fragments/labels/talkdeskcxcloud.sh @@ -1,7 +1,8 @@ talkdeskcxcloud) name="Talkdesk" type="dmg" - appNewVersion=$(curl -fs https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json | sed -n -e 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p' | head -n 1) + talkdeskcxcloudVersions=$(curl -fs "https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json") + appNewVersion=$(getJSONValue "$talkdeskcxcloudVersions" "[0].version") downloadURL="https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-${appNewVersion}.dmg" expectedTeamID="YGGJX44TB8" ;; From 8e26889e298169512fb056fb1bfc24e627eb8006 Mon Sep 17 00:00:00 2001 From: MacMike077 <104210875+MacMike077@users.noreply.github.com> Date: Wed, 18 May 2022 09:54:13 +0200 Subject: [PATCH 16/42] Create prune.sh 2022-05-18 09:51:50 : REQ : prune : ################## Start Installomator v. 9.2, date 2022-05-16 2022-05-18 09:51:50 : INFO : prune : ################## Version: 9.2 2022-05-18 09:51:50 : INFO : prune : ################## Date: 2022-05-16 2022-05-18 09:51:50 : INFO : prune : ################## prune 2022-05-18 09:51:51 : INFO : prune : BLOCKING_PROCESS_ACTION=tell_user 2022-05-18 09:51:51 : INFO : prune : NOTIFY=success 2022-05-18 09:51:51 : INFO : prune : LOGGING=INFO 2022-05-18 09:51:51 : INFO : prune : LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns 2022-05-18 09:51:51 : INFO : prune : Label type: zip 2022-05-18 09:51:51 : INFO : prune : archiveName: Prune.zip 2022-05-18 09:51:51 : INFO : prune : no blocking processes defined, using Prune as default 2022-05-18 09:51:51 : INFO : prune : name: Prune, appName: Prune.app 2022-05-18 09:51:52 : WARN : prune : No previous app found 2022-05-18 09:51:52 : WARN : prune : could not find Prune.app 2022-05-18 09:51:52 : INFO : prune : appversion: 2022-05-18 09:51:52 : INFO : prune : Latest version of Prune is 2.2.4 2022-05-18 09:51:52 : REQ : prune : Downloading https://github.com/BIG-RAT/Prune/releases/download/v2.2.4/Prune.zip to Prune.zip 2022-05-18 09:51:53 : REQ : prune : no more blocking processes, continue with update 2022-05-18 09:51:53 : REQ : prune : Installing Prune 2022-05-18 09:51:53 : INFO : prune : Unzipping Prune.zip 2022-05-18 09:51:53 : INFO : prune : Verifying: /var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/tmp.0beFjQd7/Prune.app 2022-05-18 09:51:53 : INFO : prune : Team ID matching: PS2F6S478M (expected: PS2F6S478M ) 2022-05-18 09:51:53 : INFO : prune : Installing Prune version 2.2.4 on versionKey CFBundleShortVersionString. 2022-05-18 09:51:53 : INFO : prune : App has LSMinimumSystemVersion: 10.13 2022-05-18 09:51:53 : INFO : prune : Copy /var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/tmp.0beFjQd7/Prune.app to /Applications 2022-05-18 09:51:53 : WARN : prune : No user logged in or SYSTEMOWNER=1, setting owner to root:wheel 2022-05-18 09:51:53 : INFO : prune : Finishing... 2022-05-18 09:52:04 : INFO : prune : App(s) found: /Applications/Prune.app 2022-05-18 09:52:04 : INFO : prune : found app at /Applications/Prune.app, version 2.2.4, on versionKey CFBundleShortVersionString 2022-05-18 09:52:04 : REQ : prune : Installed Prune, version 2.2.4 2022-05-18 09:52:04 : INFO : prune : notifying 2022-05-18 09:52:04 : INFO : prune : App not closed, so no reopen. 2022-05-18 09:52:04 : REQ : prune : All done! 2022-05-18 09:52:04 : REQ : prune : ################## End Installomator, exit code 0 --- fragments/labels/prune.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 fragments/labels/prune.sh diff --git a/fragments/labels/prune.sh b/fragments/labels/prune.sh new file mode 100644 index 0000000..2b76dd0 --- /dev/null +++ b/fragments/labels/prune.sh @@ -0,0 +1,7 @@ +prune) + name="Prune" + type="zip" + downloadURL=$(downloadURLFromGit BIG-RAT Prune) + appNewVersion=$(versionFromGit BIG-RAT Prune) + expectedTeamID="PS2F6S478M" +;; From 8789d2cd752cc7ba06d63277a6f808b7cd784bd8 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Wed, 18 May 2022 10:14:57 +0200 Subject: [PATCH 17/42] updated miro for arm download, closes #475 --- fragments/labels/miro.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fragments/labels/miro.sh b/fragments/labels/miro.sh index 284261d..d6a2bf6 100644 --- a/fragments/labels/miro.sh +++ b/fragments/labels/miro.sh @@ -2,6 +2,10 @@ miro) # credit: @matins name="Miro" type="dmg" - downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg" + if [[ $(arch) == arm64 ]]; then + downloadURL="https://desktop.miro.com/platforms/darwin-arm64/Miro.dmg" + elif [[ $(arch) == i386 ]]; then + downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg" + fi expectedTeamID="M3GM7MFY7U" ;; From 7e93eb647100115eeed1e87a16b060148ece3aa3 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Wed, 18 May 2022 10:29:13 +0200 Subject: [PATCH 18/42] updated version.sh --- fragments/version.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fragments/version.sh b/fragments/version.sh index 1a2c355..cdefeb2 100644 --- a/fragments/version.sh +++ b/fragments/version.sh @@ -1 +1 @@ -9.2 +10.0beta From b99c2619f4ac8e6b1556e91fc5b0802463eb1637 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Wed, 18 May 2022 10:36:39 +0200 Subject: [PATCH 19/42] updated assemble.sh to update Labels.txt when building script --- utils/assemble.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/utils/assemble.sh b/utils/assemble.sh index 7531173..834a0c1 100755 --- a/utils/assemble.sh +++ b/utils/assemble.sh @@ -127,6 +127,8 @@ if [[ $buildScript -eq 1 ]]; then echo "# copying script to $repo_dir/Installomator.sh" cp $destination_file $repo_dir/Installomator.sh chmod 755 $repo_dir/Installomator.sh + # also update Labels.txt + $repo_dir/Installomator.sh | tail -n +2 > $repo_dir/Labels.txt fi # build a pkg when flag is set From 124c0cf85f90272e612b61311047645a76fde0b1 Mon Sep 17 00:00:00 2001 From: MacMike077 <104210875+MacMike077@users.noreply.github.com> Date: Wed, 18 May 2022 11:07:54 +0200 Subject: [PATCH 20/42] Create googleadseditor.sh 2022-05-18 11:07:11 : REQ : googleadseditor : ################## Start Installomator v. 9.2, date 2022-05-16 2022-05-18 11:07:11 : INFO : googleadseditor : ################## Version: 9.2 2022-05-18 11:07:11 : INFO : googleadseditor : ################## Date: 2022-05-16 2022-05-18 11:07:11 : INFO : googleadseditor : ################## googleadseditor 2022-05-18 11:07:11 : INFO : googleadseditor : BLOCKING_PROCESS_ACTION=tell_user 2022-05-18 11:07:11 : INFO : googleadseditor : NOTIFY=success 2022-05-18 11:07:11 : INFO : googleadseditor : LOGGING=INFO 2022-05-18 11:07:11 : INFO : googleadseditor : LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns 2022-05-18 11:07:11 : INFO : googleadseditor : Label type: dmg 2022-05-18 11:07:11 : INFO : googleadseditor : archiveName: Google Ads Editor.dmg 2022-05-18 11:07:11 : INFO : googleadseditor : no blocking processes defined, using Google Ads Editor as default 2022-05-18 11:07:11 : INFO : googleadseditor : name: Google Ads Editor, appName: Google Ads Editor.app 2022-05-18 11:07:12 : WARN : googleadseditor : No previous app found 2022-05-18 11:07:12 : WARN : googleadseditor : could not find Google Ads Editor.app 2022-05-18 11:07:12 : INFO : googleadseditor : appversion: 2022-05-18 11:07:12 : INFO : googleadseditor : Latest version not specified. 2022-05-18 11:07:12 : REQ : googleadseditor : Downloading https://dl.google.com/adwords_editor/google_ads_editor.dmg to Google Ads Editor.dmg 2022-05-18 11:07:17 : REQ : googleadseditor : no more blocking processes, continue with update 2022-05-18 11:07:17 : REQ : googleadseditor : Installing Google Ads Editor 2022-05-18 11:07:17 : INFO : googleadseditor : Mounting /var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/tmp.q9auZnh3/Google Ads Editor.dmg 2022-05-18 11:07:19 : INFO : googleadseditor : Mounted: /Volumes/Google Ads Editor 1 2022-05-18 11:07:19 : INFO : googleadseditor : Verifying: /Volumes/Google Ads Editor 1/Google Ads Editor.app 2022-05-18 11:07:21 : INFO : googleadseditor : Team ID matching: EQHXZ8M8AV (expected: EQHXZ8M8AV ) 2022-05-18 11:07:21.509 defaults[65632:614893] The domain/default pair of (/Volumes/Google Ads Editor 1/Google Ads Editor.app/Contents/Info.plist, CFBundleShortVersionString) does not exist 2022-05-18 11:07:21 : INFO : googleadseditor : Installing Google Ads Editor version on versionKey CFBundleShortVersionString. 2022-05-18 11:07:21 : INFO : googleadseditor : App has LSMinimumSystemVersion: 10.13 2022-05-18 11:07:21 : INFO : googleadseditor : Copy /Volumes/Google Ads Editor 1/Google Ads Editor.app to /Applications 2022-05-18 11:07:22 : WARN : googleadseditor : No user logged in or SYSTEMOWNER=1, setting owner to root:wheel 2022-05-18 11:07:22 : INFO : googleadseditor : Finishing... 2022-05-18 11:07:32 : INFO : googleadseditor : App(s) found: /Applications/Google Ads Editor.app 2022-05-18 11:07:32.448 defaults[65669:615163] The domain/default pair of (/Applications/Google Ads Editor.app/Contents/Info.plist, CFBundleShortVersionString) does not exist 2022-05-18 11:07:32 : INFO : googleadseditor : found app at /Applications/Google Ads Editor.app, version , on versionKey CFBundleShortVersionString 2022-05-18 11:07:32 : REQ : googleadseditor : Installed Google Ads Editor 2022-05-18 11:07:32 : INFO : googleadseditor : notifying 2022-05-18 11:07:32 : INFO : googleadseditor : App not closed, so no reopen. 2022-05-18 11:07:32 : REQ : googleadseditor : All done! 2022-05-18 11:07:32 : REQ : googleadseditor : ################## End Installomator, exit code 0 --- googleadseditor.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 googleadseditor.sh diff --git a/googleadseditor.sh b/googleadseditor.sh new file mode 100644 index 0000000..9c2600b --- /dev/null +++ b/googleadseditor.sh @@ -0,0 +1,7 @@ +googleadseditor) + name="Google Ads Editor" + type="dmg" + downloadURL="https://dl.google.com/adwords_editor/google_ads_editor.dmg" + appNewVersion="" + expectedTeamID="EQHXZ8M8AV" + ;; From 1de3838a9b1dff13f0dab4f84eb19313670f3e48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Theilgaard?= Date: Wed, 18 May 2022 15:02:32 +0200 Subject: [PATCH 21/42] GitHub without API calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I have tested two labels, the first has an `archiveName`, the second does not: ``` ➜ Installomator/utils/assemble.sh marathoninfinity DEBUG=0 2022-05-18 14:58:34 : WARN : marathoninfinity : setting variable from argument DEBUG=0 2022-05-18 14:58:34 : REQ : marathoninfinity : ################## Start Installomator v. 9.2beta, date 2022-05-18 2022-05-18 14:58:34 : INFO : marathoninfinity : ################## Version: 9.2beta 2022-05-18 14:58:34 : INFO : marathoninfinity : ################## Date: 2022-05-18 2022-05-18 14:58:34 : INFO : marathoninfinity : ################## marathoninfinity 2022-05-18 14:58:34 : INFO : marathoninfinity : BLOCKING_PROCESS_ACTION=tell_user 2022-05-18 14:58:34 : INFO : marathoninfinity : NOTIFY=success 2022-05-18 14:58:34 : INFO : marathoninfinity : LOGGING=INFO 2022-05-18 14:58:34 : INFO : marathoninfinity : LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns 2022-05-18 14:58:34 : INFO : marathoninfinity : Label type: dmg 2022-05-18 14:58:34 : INFO : marathoninfinity : archiveName: MarathonInfinity-[0-9.]*-Mac.dmg 2022-05-18 14:58:34 : INFO : marathoninfinity : no blocking processes defined, using Marathon Infinity as default 2022-05-18 14:58:34 : INFO : marathoninfinity : App(s) found: /Applications/Marathon Infinity.app 2022-05-18 14:58:34 : INFO : marathoninfinity : found app at /Applications/Marathon Infinity.app, version 1.4, on versionKey CFBundleShortVersionString 2022-05-18 14:58:34 : INFO : marathoninfinity : appversion: 1.4 2022-05-18 14:58:34 : INFO : marathoninfinity : Latest version of Marathon Infinity is 20220115 2022-05-18 14:58:34 : REQ : marathoninfinity : Downloading https://github.com/Aleph-One-Marathon/alephone/releases/download/release-20220115/MarathonInfinity-20220115-Mac.dmg to MarathonInfinity-[0-9.]*-Mac.dmg 2022-05-18 14:58:35 : REQ : marathoninfinity : no more blocking processes, continue with update 2022-05-18 14:58:35 : REQ : marathoninfinity : Installing Marathon Infinity 2022-05-18 14:58:35 : INFO : marathoninfinity : Mounting /var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/tmp.uxoEpUyC/MarathonInfinity-[0-9.]*-Mac.dmg 2022-05-18 14:58:39 : INFO : marathoninfinity : Mounted: /Volumes/Marathon Infinity 2022-05-18 14:58:39 : INFO : marathoninfinity : Verifying: /Volumes/Marathon Infinity/Marathon Infinity.app 2022-05-18 14:58:43 : INFO : marathoninfinity : Team ID matching: E8K89CXZE7 (expected: E8K89CXZE7 ) 2022-05-18 14:58:43 : INFO : marathoninfinity : Downloaded version of Marathon Infinity is 1.5 on versionKey CFBundleShortVersionString (replacing version 1.4). 2022-05-18 14:58:43 : INFO : marathoninfinity : App has LSMinimumSystemVersion: 10.11.0 2022-05-18 14:58:43 : WARN : marathoninfinity : Removing existing /Applications/Marathon Infinity.app 2022-05-18 14:58:43 : INFO : marathoninfinity : Copy /Volumes/Marathon Infinity/Marathon Infinity.app to /Applications 2022-05-18 14:58:44 : WARN : marathoninfinity : Changing owner to st 2022-05-18 14:58:44 : INFO : marathoninfinity : Finishing... 2022-05-18 14:58:54 : INFO : marathoninfinity : App(s) found: /Applications/Marathon Infinity.app 2022-05-18 14:58:54 : INFO : marathoninfinity : found app at /Applications/Marathon Infinity.app, version 1.5, on versionKey CFBundleShortVersionString 2022-05-18 14:58:54 : REQ : marathoninfinity : Installed Marathon Infinity, version 1.5 2022-05-18 14:58:54 : INFO : marathoninfinity : notifying 2022-05-18 14:58:55 : INFO : marathoninfinity : App not closed, so no reopen. 2022-05-18 14:58:55 : REQ : marathoninfinity : All done! 2022-05-18 14:58:55 : REQ : marathoninfinity : ################## End Installomator, exit code 0 ➜ Installomator/utils/assemble.sh installomator DEBUG=0 INSTALL=force 2022-05-18 14:59:41 : WARN : installomator : setting variable from argument DEBUG=0 2022-05-18 14:59:41 : WARN : installomator : setting variable from argument INSTALL=force 2022-05-18 14:59:41 : REQ : installomator : ################## Start Installomator v. 9.2beta, date 2022-05-18 2022-05-18 14:59:41 : INFO : installomator : ################## Version: 9.2beta 2022-05-18 14:59:41 : INFO : installomator : ################## Date: 2022-05-18 2022-05-18 14:59:41 : INFO : installomator : ################## installomator 2022-05-18 14:59:42 : INFO : installomator : BLOCKING_PROCESS_ACTION=tell_user 2022-05-18 14:59:42 : INFO : installomator : NOTIFY=success 2022-05-18 14:59:42 : INFO : installomator : LOGGING=INFO 2022-05-18 14:59:42 : INFO : installomator : LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns 2022-05-18 14:59:42 : INFO : installomator : Label type: pkg 2022-05-18 14:59:42 : INFO : installomator : archiveName: Installomator.pkg 2022-05-18 14:59:42 : INFO : installomator : found packageID com.scriptingosx.Installomator installed, version 9.2 2022-05-18 14:59:42 : INFO : installomator : appversion: 9.2 2022-05-18 14:59:42 : INFO : installomator : Label is not of type “updateronly”, and it’s set to use force to install or ignoring app store apps, so not using updateTool. 2022-05-18 14:59:42 : INFO : installomator : Latest version of Installomator is 9.2 2022-05-18 14:59:42 : INFO : installomator : There is no newer version available. 2022-05-18 14:59:42 : REQ : installomator : Downloading https://github.com/Installomator/Installomator/releases/download/v9.2/Installomator-9.2.pkg to Installomator.pkg 2022-05-18 14:59:43 : REQ : installomator : Installing Installomator 2022-05-18 14:59:43 : INFO : installomator : Verifying: Installomator.pkg 2022-05-18 14:59:43 : INFO : installomator : Team ID: JME5BW3F3R (expected: JME5BW3F3R ) 2022-05-18 14:59:43 : INFO : installomator : Checking package version. 2022-05-18 14:59:43 : INFO : installomator : Downloaded package com.scriptingosx.Installomator version 9.2 2022-05-18 14:59:43 : INFO : installomator : Downloaded version of Installomator is the same as installed. 2022-05-18 14:59:43 : INFO : installomator : Using force to install anyway. 2022-05-18 14:59:43 : INFO : installomator : Installing Installomator.pkg to / 2022-05-18 14:59:46 : INFO : installomator : Finishing... 2022-05-18 14:59:56 : INFO : installomator : found packageID com.scriptingosx.Installomator installed, version 9.2 2022-05-18 14:59:56 : REQ : installomator : Installed Installomator, version 9.2 2022-05-18 14:59:56 : INFO : installomator : notifying 2022-05-18 14:59:57 : INFO : installomator : App not closed, so no reopen. 2022-05-18 14:59:57 : REQ : installomator : All done! 2022-05-18 14:59:57 : REQ : installomator : ################## End Installomator, exit code 0 ``` The version comparison in marathininfinity will be updated shortly. --- fragments/functions.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/fragments/functions.sh b/fragments/functions.sh index 9e9e977..5aac377 100644 --- a/fragments/functions.sh +++ b/fragments/functions.sh @@ -156,11 +156,11 @@ downloadURLFromGit() { # $1 git user name, $2 git repo name fi if [ -n "$archiveName" ]; then - downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \ - | awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }") + #downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }") + downloadURL=https://github.com$(curl -sL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -o "\/$gitusername\/$gitreponame.*$archiveName.*") else - downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \ - | awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }") + #downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }") + downloadURL=https://github.com$(curl -sL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -o "\/$gitusername\/$gitreponame.*\.$filetype") fi if [ -z "$downloadURL" ]; then cleanupAndExit 9 "could not retrieve download URL for $gitusername/$gitreponame" ERROR @@ -176,7 +176,8 @@ versionFromGit() { gitusername=${1?:"no git user name"} gitreponame=${2?:"no git repo name"} - appNewVersion=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g') + #appNewVersion=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g') + appNewVersion=$(curl -sLI "https://github.com/$gitusername/$gitreponame/releases/latest" | grep -i "^location" | tr "/" "\n" | tail -1 | sed 's/[^0-9\.]//g') if [ -z "$appNewVersion" ]; then printlog "could not retrieve version number for $gitusername/$gitreponame" WARN appNewVersion="" From 3ccc9dc93e85944467472776e2d9523260b07592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Theilgaard?= Date: Wed, 18 May 2022 15:23:52 +0200 Subject: [PATCH 22/42] `versionKey` added to the labels. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Output: ``` ➜ Installomator/utils/assemble.sh marathoninfinity DEBUG=0 2022-05-18 15:21:53 : WARN : marathoninfinity : setting variable from argument DEBUG=0 2022-05-18 15:21:53 : REQ : marathoninfinity : ################## Start Installomator v. 10.0beta, date 2022-05-18 2022-05-18 15:21:53 : INFO : marathoninfinity : ################## Version: 10.0beta 2022-05-18 15:21:53 : INFO : marathoninfinity : ################## Date: 2022-05-18 2022-05-18 15:21:53 : INFO : marathoninfinity : ################## marathoninfinity 2022-05-18 15:21:53 : INFO : marathoninfinity : BLOCKING_PROCESS_ACTION=tell_user 2022-05-18 15:21:53 : INFO : marathoninfinity : NOTIFY=success 2022-05-18 15:21:53 : INFO : marathoninfinity : LOGGING=INFO 2022-05-18 15:21:53 : INFO : marathoninfinity : LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns 2022-05-18 15:21:53 : INFO : marathoninfinity : Label type: dmg 2022-05-18 15:21:53 : INFO : marathoninfinity : archiveName: MarathonInfinity-[0-9.]*-Mac.dmg 2022-05-18 15:21:53 : INFO : marathoninfinity : no blocking processes defined, using Marathon Infinity as default 2022-05-18 15:21:53 : INFO : marathoninfinity : App(s) found: /Applications/Marathon Infinity.app 2022-05-18 15:21:53 : INFO : marathoninfinity : found app at /Applications/Marathon Infinity.app, version 20220115, on versionKey CFBundleVersion 2022-05-18 15:21:53 : INFO : marathoninfinity : appversion: 20220115 2022-05-18 15:21:53 : INFO : marathoninfinity : Latest version of Marathon Infinity is 20220115 2022-05-18 15:21:53 : INFO : marathoninfinity : There is no newer version available. 2022-05-18 15:21:53 : INFO : marathoninfinity : App not closed, so no reopen. 2022-05-18 15:21:53 : REQ : marathoninfinity : No newer version. 2022-05-18 15:21:53 : REQ : marathoninfinity : ################## End Installomator, exit code 0 ➜ Installomator/utils/assemble.sh marathon DEBUG=0 2022-05-18 15:22:04 : WARN : marathon : setting variable from argument DEBUG=0 2022-05-18 15:22:04 : REQ : marathon : ################## Start Installomator v. 10.0beta, date 2022-05-18 2022-05-18 15:22:04 : INFO : marathon : ################## Version: 10.0beta 2022-05-18 15:22:04 : INFO : marathon : ################## Date: 2022-05-18 2022-05-18 15:22:04 : INFO : marathon : ################## marathon 2022-05-18 15:22:04 : INFO : marathon : BLOCKING_PROCESS_ACTION=tell_user 2022-05-18 15:22:04 : INFO : marathon : NOTIFY=success 2022-05-18 15:22:04 : INFO : marathon : LOGGING=INFO 2022-05-18 15:22:04 : INFO : marathon : LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns 2022-05-18 15:22:04 : INFO : marathon : Label type: dmg 2022-05-18 15:22:04 : INFO : marathon : archiveName: Marathon-[0-9.]*-Mac.dmg 2022-05-18 15:22:04 : INFO : marathon : no blocking processes defined, using Marathon as default 2022-05-18 15:22:04 : INFO : marathon : App(s) found: /Applications/Marathon.app 2022-05-18 15:22:04 : INFO : marathon : found app at /Applications/Marathon.app, version 20220115, on versionKey CFBundleVersion 2022-05-18 15:22:04 : INFO : marathon : appversion: 20220115 2022-05-18 15:22:04 : INFO : marathon : Latest version of Marathon is 20220115 2022-05-18 15:22:04 : INFO : marathon : There is no newer version available. 2022-05-18 15:22:04 : INFO : marathon : App not closed, so no reopen. 2022-05-18 15:22:04 : REQ : marathon : No newer version. 2022-05-18 15:22:04 : REQ : marathon : ################## End Installomator, exit code 0 ➜ Installomator/utils/assemble.sh marathon2 DEBUG=0 2022-05-18 15:22:08 : WARN : marathon2 : setting variable from argument DEBUG=0 2022-05-18 15:22:08 : REQ : marathon2 : ################## Start Installomator v. 10.0beta, date 2022-05-18 2022-05-18 15:22:08 : INFO : marathon2 : ################## Version: 10.0beta 2022-05-18 15:22:08 : INFO : marathon2 : ################## Date: 2022-05-18 2022-05-18 15:22:08 : INFO : marathon2 : ################## marathon2 2022-05-18 15:22:08 : INFO : marathon2 : BLOCKING_PROCESS_ACTION=tell_user 2022-05-18 15:22:08 : INFO : marathon2 : NOTIFY=success 2022-05-18 15:22:08 : INFO : marathon2 : LOGGING=INFO 2022-05-18 15:22:08 : INFO : marathon2 : LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns 2022-05-18 15:22:08 : INFO : marathon2 : Label type: dmg 2022-05-18 15:22:08 : INFO : marathon2 : archiveName: Marathon2-[0-9.]*-Mac.dmg 2022-05-18 15:22:08 : INFO : marathon2 : no blocking processes defined, using Marathon 2 as default 2022-05-18 15:22:08 : INFO : marathon2 : App(s) found: /Applications/Marathon 2.app 2022-05-18 15:22:08 : INFO : marathon2 : found app at /Applications/Marathon 2.app, version 20220115, on versionKey CFBundleVersion 2022-05-18 15:22:08 : INFO : marathon2 : appversion: 20220115 2022-05-18 15:22:08 : INFO : marathon2 : Latest version of Marathon 2 is 20220115 2022-05-18 15:22:08 : INFO : marathon2 : There is no newer version available. 2022-05-18 15:22:08 : INFO : marathon2 : App not closed, so no reopen. 2022-05-18 15:22:08 : REQ : marathon2 : No newer version. 2022-05-18 15:22:08 : REQ : marathon2 : ################## End Installomator, exit code 0 ``` --- fragments/labels/marathon.sh | 1 + fragments/labels/marathon2.sh | 1 + fragments/labels/marathoninfinity.sh | 1 + 3 files changed, 3 insertions(+) diff --git a/fragments/labels/marathon.sh b/fragments/labels/marathon.sh index 75f5799..c45c597 100644 --- a/fragments/labels/marathon.sh +++ b/fragments/labels/marathon.sh @@ -2,6 +2,7 @@ marathon) name="Marathon" type="dmg" archiveName="Marathon-[0-9.]*-Mac.dmg" + versionKey="CFBundleVersion" downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)" appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)" expectedTeamID="E8K89CXZE7" diff --git a/fragments/labels/marathon2.sh b/fragments/labels/marathon2.sh index 02440fa..64114eb 100644 --- a/fragments/labels/marathon2.sh +++ b/fragments/labels/marathon2.sh @@ -2,6 +2,7 @@ marathon2) name="Marathon 2" type="dmg" archiveName="Marathon2-[0-9.]*-Mac.dmg" + versionKey="CFBundleVersion" downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)" appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)" expectedTeamID="E8K89CXZE7" diff --git a/fragments/labels/marathoninfinity.sh b/fragments/labels/marathoninfinity.sh index a9b5165..388fbb9 100644 --- a/fragments/labels/marathoninfinity.sh +++ b/fragments/labels/marathoninfinity.sh @@ -2,6 +2,7 @@ marathoninfinity) name="Marathon Infinity" type="dmg" archiveName="MarathonInfinity-[0-9.]*-Mac.dmg" + versionKey="CFBundleVersion" downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)" appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)" expectedTeamID="E8K89CXZE7" From 89c4d4fa5c31fd9e145cbcc7728893eef03f37cd Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Wed, 18 May 2022 17:09:52 +0200 Subject: [PATCH 23/42] Update CONTRIBUTING.md --- CONTRIBUTING.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 83637f6..32c7f0c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,13 +21,13 @@ Make sure you branch off of main for new and updated labels and off of `dev` for ## Labels -If you need a new label for a piece of software, please take a look at the tutorials in the Wiki, if those can be helpful for starting out on the creation of the label. +If you need a new label for a piece of software, please take a look [at the tutorials in the Wiki](https://github.com/Installomator/Installomator/wiki#tutorials), those can be helpful for starting out on the creation of the label. We expect you to try out finding the __version__ of the software online, so that `appNewVersion` can be filled in the label. It helps a lot when the software needs update, and greatly improve user experience. Please document what you found out about the __version__ of the software if it's not included. We will not accept a new label if this is not documented, we will ask about this if it was not included. This is very important for the quality and reliability of Installomator. -When creating a new label, please file a pull request (PR). And feel free to ask questions or make your comments about what else is needed, if we should take a look at the label, or help out in finding the version or isolating URLs or anything else. +When creating a new label, please file a pull request (PR). And feel free to ask questions or make your comments about what else is needed, if we should take a look at the label, or help out in finding the version or isolating URLs or anything else. You can find [a tutorial on how to create a PR here](https://github.com/Installomator/Installomator/wiki/GitHub-howto-create-PRs). Please include the log of installing this label in the description, like this: ``` @@ -39,11 +39,13 @@ Please include the log of installing this label in the description, like this: Please have one label per PR, so we can separate these. Also if you change/fix a label. -Thank you very much for your contribution! +__Thank you very much for your contribution!__ ## Issues Do not create an issue just when you have a questions, but do file an issue or pull request (PR) for bugs or wrong behavior. Include the full log and include the version of Installomator you're running. +Join [the MacAdmins Slack](https://macadmins.org) and find us in the `#intallomator` channel for questions, support and discussions. + When in doubt, use the MacAdmins.org Slack as described in [README.md](https://github.com/Installomator/Installomator/) From dd98c13e405e38f1236492e4a1866d1397dc25ab Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Wed, 18 May 2022 17:21:35 +0200 Subject: [PATCH 24/42] Many new links and clarifications --- CONTRIBUTING.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 32c7f0c..2fe5c9f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,23 +1,25 @@ # Contributing to Installomator -__Please note, that if you are contributing to this project with new labels or other suggestions in PRs, please put your changes in the files below `fragments`-folder. DO NOT edit the full `Installomator.sh` script. The full script is now a build of the fragments, and will be overwritten.__ +__Please note, that if you are contributing to this project with new labels or other suggestions in PRs, please put your changes in the files in the `fragments` sub-folder. DO NOT edit the full `Installomator.sh` script. The full script is generated from the fragments, and will be overwritten. More details on [how the script is assembled from the fragments here](https://github.com/Installomator/Installomator/tree/main/utils#how-to-assemble-installomatorsh).__ -We try to keep the script as short as possible, and with more than 300 labels, we can save 300 lines in the script, if we do not have credit lines on each of these. So we are thankful for your contribution, but we will be removing these lines in the coming releases. +We try to keep the script as short as possible, and with more than 400 labels, we can save 400 lines in the script, if we do not have credit lines on each of these. So we are thankful for your contribution, but we will be removing these lines in the coming releases. ## Branches The branch list is as follows: - `release`: this branch will have the latest released version -- `main`: (default) this branch will be the latest release plus new and updated app labels, and critical bug fixes -- `dev`: this will contain new and updated app labels, as well as any other code changes -there will be other branches for new features and testing +- `main`: (default) this branch will be the current build we are working on. It includes new and updated app labels, and critical bug fixes +- `dev`: this will contain new and updated app labels, as well as other code changes that have the risk of significantly changing or breaking behavior +there will be other branches for new features and testing. This should allow the contributing team to release minor updates for new and updated app labels while also work on new features for the next major release. With all the new branches, your local repo may get confused. If you don’t have local changes, it is easiest to delete your local repo and re-clone it. If you have local changes you want to preserve, then you should commit those to a local branch, pull the latest changes `git pull --all`, then delete the old master branch: `git branch -d master`. -Make sure you branch off of main for new and updated labels and off of `dev` for other code changes. Thank you for contributing! +Please make sure you branch off of main for your PRs. + +__Thank you for contributing!__ ## Labels @@ -44,8 +46,8 @@ __Thank you very much for your contribution!__ ## Issues -Do not create an issue just when you have a questions, but do file an issue or pull request (PR) for bugs or wrong behavior. Include the full log and include the version of Installomator you're running. +Do not create an issue just when you have a questions, but do file an issue or pull request (PR) for bugs or wrong behavior. Include the full log and include the version of Installomator you're running. When you create a PR to follow-up and solve an issue make sure to [mention the issue using the `#xxx` syntax in a commit message or comment to link the issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue). -Join [the MacAdmins Slack](https://macadmins.org) and find us in the `#intallomator` channel for questions, support and discussions. +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/) From a22e65614680105d7d2508b115781f5bae9b4874 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Wed, 18 May 2022 17:27:34 +0200 Subject: [PATCH 25/42] Update README.md --- utils/README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/utils/README.md b/utils/README.md index dad799a..0808636 100644 --- a/utils/README.md +++ b/utils/README.md @@ -1,6 +1,6 @@ # How to assemble Installomator.sh -Since the Installomator.sh script has grown to over 3000 lines, its management on git has become very unwieldy. The single file with all the logic and the data required to download and install the applications creates constant merge conflicts which add to the workload of the repo admins, especially when part of the team is working on the logic of the script while we still get PRs to add labels. +Since the Installomator.sh script has grown to over 5000 lines, its management on git has become very unwieldy. The single file with all the logic and the data required to download and install the applications creates constant merge conflicts which add to the workload of the repo admins, especially when part of the team is working on the logic of the script while we still get PRs to add labels. Because of that we have split the main script into multiple files which are easier to manage. Having multiple files results in less merge conflicts. @@ -53,7 +53,7 @@ Once you are certain that your new custom label works, you can use the code from The `Installomator.sh` script at the root of the repo does not really get involved in your building and testing. Similarly, if you want to apply, test, and contribute changes to the script's logic, you should modify the fragment file in question and test using the assemble script. -Pull requests against the `Installomator.sh` script in the root of the repo will be rejected. (Excepting the backlog of existing PRs.) +Pull requests against the `Installomator.sh` script in the root of the repo will be rejected. ## How do I contribute new or modified labels back to the Installomator project? @@ -70,11 +70,13 @@ If you have multiple labels (or other changes) you want to contribute, please cr Once your Pull Request is merged into the main repo, you can pull the change to your local repo, push it to your fork, and delete the branch, because it should be fully merged. +When you have multiple labels or changes, please create a separate issue for each label or change, unless they are closely related + + ### When you are not familiar with git and GitHub -Create an Issue in the Installomator repo and include the contents of your custom label file. +We have a tutorial on [How to create Pull Requests in GitHub](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue). -If you have multiple labels, please create a separate issue for each label. ## Fragments @@ -109,7 +111,7 @@ All the contents of the label files in `labels` (and any custom label locations Finally, the `main.sh` fragment contains most of the main logic. -The assemble script does not check _any_ of the files for syntax or completeness. You are responsible that everything fits together properly. (Pay special attention to remember the closing semi-colons `;;` in the label files.) +The assemble script does not check _any_ of the files for syntax or completeness. You are responsible that everything fits together properly. (Pay special attention to remember the closing semi-colons `;;` and a final line break in the label files.) ## assemble.sh Usage From b96e1dbca132fb11ed019676d3768c49ff5566e2 Mon Sep 17 00:00:00 2001 From: Liam Steckler <553265+buckbanzai@users.noreply.github.com> Date: Wed, 18 May 2022 08:50:57 -0700 Subject: [PATCH 26/42] Add ipswupdater label using JSON parsing --- fragments/labels/ipswupdater.sh | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 fragments/labels/ipswupdater.sh diff --git a/fragments/labels/ipswupdater.sh b/fragments/labels/ipswupdater.sh new file mode 100644 index 0000000..bd6c024 --- /dev/null +++ b/fragments/labels/ipswupdater.sh @@ -0,0 +1,8 @@ +ipswupdater) + name="IPSW Updater" + type="zip" + ipswupdaterVersions=$(curl -fs "https://ipsw.app/download/updates.php?current_version=0.9.16") + downloadURL=$(getJSONValue "$ipswupdaterVersions" "[0].url") + appNewVersion=$(getJSONValue "$ipswupdaterVersions" "[0].version") + expectedTeamID="YRW6NUGA63" + ;; From 2a236e9b2c0cea067682b6e9a41968276b00fe60 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Thu, 19 May 2022 10:23:47 +0200 Subject: [PATCH 27/42] fixed stray whitespace at the end of camtasia2019.sh, closes #547 --- Installomator.sh | 6 +++--- Labels.txt | 1 + fragments/labels/camtasia2019.sh | 1 - 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Installomator.sh b/Installomator.sh index 4d9f31a..a568068 100755 --- a/Installomator.sh +++ b/Installomator.sh @@ -302,8 +302,8 @@ if [[ $(/usr/bin/arch) == "arm64" ]]; then rosetta2=no fi fi -VERSION="9.2" -VERSIONDATE="2022-05-16" +VERSION="10.0beta" +VERSIONDATE="2022-05-19" # MARK: Functions @@ -1859,7 +1859,7 @@ camtasia2019) appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2019" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//') expectedTeamID="7TQL462TU8" ;; - camtasia2020) +camtasia2020) name="Camtasia 2020" type="dmg" downloadURL=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep -A 3 "Camtasia (Mac) 2020" | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) diff --git a/Labels.txt b/Labels.txt index cabdcf4..e294113 100644 --- a/Labels.txt +++ b/Labels.txt @@ -68,6 +68,7 @@ calibre camostudio camtasia camtasia2019 +camtasia2020 camtasia2021 canva chatwork diff --git a/fragments/labels/camtasia2019.sh b/fragments/labels/camtasia2019.sh index 170c056..26ffd61 100644 --- a/fragments/labels/camtasia2019.sh +++ b/fragments/labels/camtasia2019.sh @@ -5,4 +5,3 @@ camtasia2019) appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://support.techsmith.com/hc/en-us/articles/360004908652-Desktop-Product-Download-Links" | grep "Camtasia (Mac) 2019" | sed -e 's/.*Camtasia (Mac) //' -e 's/<\/td>.*//') expectedTeamID="7TQL462TU8" ;; - \ No newline at end of file From f8b91946c64f9c1b4653d4d35e3de6a0228645bb Mon Sep 17 00:00:00 2001 From: Fletcher Salesky Date: Thu, 19 May 2022 21:35:27 -0700 Subject: [PATCH 28/42] Create mmhmm.sh --- fragments/labels/mmhmm.sh | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 fragments/labels/mmhmm.sh diff --git a/fragments/labels/mmhmm.sh b/fragments/labels/mmhmm.sh new file mode 100644 index 0000000..0ef52b2 --- /dev/null +++ b/fragments/labels/mmhmm.sh @@ -0,0 +1,8 @@ +mmhmm) + name="mmhmm" + type="pkg" + downloadURL="https://updates.mmhmm.app/mac/mmhmm.pkg" + curlOptions=( -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15" ) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://help.mmhmm.app/hc/en-us/articles/4420969712151-mmhmm-for-Mac" | grep 'The latest version of mmhmm for Mac is *' | sed -e 's/.*\\(.*\)\.\<\/strong\>.*/\1/') + expectedTeamID="M3KUT44L48" + ;; From 442a4ae0af133a3f602d221efb23d4d90f78d6f9 Mon Sep 17 00:00:00 2001 From: Fletcher Salesky Date: Thu, 19 May 2022 22:19:13 -0700 Subject: [PATCH 29/42] Create duodevicehealth.sh --- fragments/labels/duodevicehealth.sh | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 fragments/labels/duodevicehealth.sh diff --git a/fragments/labels/duodevicehealth.sh b/fragments/labels/duodevicehealth.sh new file mode 100644 index 0000000..c863652 --- /dev/null +++ b/fragments/labels/duodevicehealth.sh @@ -0,0 +1,9 @@ +duodevicehealth) + name="Duo Device Health" + type="pkgInDmg" + downloadURL="https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg" + appNewVersion=$(curl -fsLIXGET "https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg" | grep -i "^content-disposition" | sed -e 's/.*filename\=\"DuoDeviceHealth\-\(.*\)\.dmg\".*/\1/') + appName="Duo Device Health.app" + expectedTeamID="FNN8Z5JMFP" + ;; + From e56be4f18a2637bdfc8e16e7bcba9ac4b2c99844 Mon Sep 17 00:00:00 2001 From: Fletcher Salesky Date: Fri, 20 May 2022 19:31:58 -0700 Subject: [PATCH 30/42] Update ringcentralapp.sh --- fragments/labels/ringcentralapp.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fragments/labels/ringcentralapp.sh b/fragments/labels/ringcentralapp.sh index fbd047e..dd052d3 100644 --- a/fragments/labels/ringcentralapp.sh +++ b/fragments/labels/ringcentralapp.sh @@ -1,6 +1,6 @@ ringcentralapp) # credit: Isaac Ordonez, Mann consulting (@mannconsulting) - name="Ringcentral" + name="RingCentral" type="pkg" if [[ $(arch) != "i386" ]]; then downloadURL="https://app.ringcentral.com/download/RingCentral-arm64.pkg" @@ -8,5 +8,5 @@ ringcentralapp) downloadURL="https://app.ringcentral.com/download/RingCentral.pkg" fi expectedTeamID="M932RC5J66" - blockingProcesses=( "Ringcentral" ) + blockingProcesses=( "RingCentral" ) ;; From c219f38459aa92ebc8670fc858904ff1eeb7b7f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Theilgaard?= Date: Wed, 25 May 2022 13:26:37 +0200 Subject: [PATCH 31/42] Create barcoclickshare.sh --- fragments/labels/barcoclickshare.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 fragments/labels/barcoclickshare.sh diff --git a/fragments/labels/barcoclickshare.sh b/fragments/labels/barcoclickshare.sh new file mode 100644 index 0000000..1b99cd0 --- /dev/null +++ b/fragments/labels/barcoclickshare.sh @@ -0,0 +1,7 @@ +barcoclickshare) + name="ClickShare" + 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" )" + 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" + ;; From 7b4b1d12d14b1aae09c7ebaf64a6d7f7c18bdaa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Theilgaard?= Date: Wed, 25 May 2022 14:03:51 +0200 Subject: [PATCH 32/42] WhatRoute label A network utility: ``` Installomator/utils/assemble.sh whatroute 2022-05-25 13:46:54 : REQ : whatroute : ################## Start Installomator v. 10.0beta, date 2022-05-25 2022-05-25 13:46:54 : INFO : whatroute : ################## Version: 10.0beta 2022-05-25 13:46:54 : INFO : whatroute : ################## Date: 2022-05-25 2022-05-25 13:46:54 : INFO : whatroute : ################## whatroute 2022-05-25 13:46:54 : DEBUG : whatroute : DEBUG mode 1 enabled. 2022-05-25 13:46:58 : INFO : whatroute : BLOCKING_PROCESS_ACTION=tell_user 2022-05-25 13:46:58 : INFO : whatroute : NOTIFY=success 2022-05-25 13:46:58 : INFO : whatroute : LOGGING=DEBUG 2022-05-25 13:46:58 : INFO : whatroute : LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns 2022-05-25 13:46:58 : INFO : whatroute : Label type: zip 2022-05-25 13:46:58 : INFO : whatroute : archiveName: WhatRoute.zip 2022-05-25 13:46:58 : INFO : whatroute : no blocking processes defined, using WhatRoute as default 2022-05-25 13:46:58 : DEBUG : whatroute : Changing directory to /Users/st/Documents/GitHub/Installomator/build 2022-05-25 13:46:58 : INFO : whatroute : App(s) found: /Applications/WhatRoute.app 2022-05-25 13:46:58 : INFO : whatroute : found app at /Applications/WhatRoute.app, version 2.5.0, on versionKey CFBundleShortVersionString 2022-05-25 13:46:58 : INFO : whatroute : appversion: 2.5.0 2022-05-25 13:46:58 : INFO : whatroute : Latest version of WhatRoute is 2.5.0 2022-05-25 13:46:58 : WARN : whatroute : DEBUG mode 1 enabled, not exiting, but there is no new version of app. 2022-05-25 13:46:58 : REQ : whatroute : Downloading https://www.whatroute.net/software/whatroute-2.5.0.zip to WhatRoute.zip 2022-05-25 13:47:18 : DEBUG : whatroute : File list: -rw-r--r-- 1 st staff 38M May 25 13:47 WhatRoute.zip 2022-05-25 13:47:18 : DEBUG : whatroute : File type: WhatRoute.zip: Zip archive data, at least v1.0 to extract, compression method=store 2022-05-25 13:47:18 : DEBUG : whatroute : curl output was: * Trying 222.154.233.147:443... * Connected to www.whatroute.net (222.154.233.147) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/cert.pem * CApath: none * (304) (OUT), TLS handshake, Client hello (1): } [322 bytes data] * (304) (IN), TLS handshake, Server hello (2): { [122 bytes data] * (304) (IN), TLS handshake, Unknown (8): { [25 bytes data] * (304) (IN), TLS handshake, Certificate (11): { [4423 bytes data] * (304) (IN), TLS handshake, CERT verify (15): { [264 bytes data] * (304) (IN), TLS handshake, Finished (20): { [36 bytes data] * (304) (OUT), TLS handshake, Finished (20): } [36 bytes data] * SSL connection using TLSv1.3 / AEAD-CHACHA20-POLY1305-SHA256 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: CN=bryanc.co.nz * start date: May 15 06:02:07 2022 GMT * expire date: Aug 13 06:02:06 2022 GMT * subjectAltName: host "www.whatroute.net" matched cert's "www.whatroute.net" * issuer: C=US; O=Let's Encrypt; CN=R3 * SSL certificate verify ok. > GET /software/whatroute-2.5.0.zip HTTP/1.1 > Host: www.whatroute.net > User-Agent: curl/7.79.1 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Date: Wed, 25 May 2022 11:46:59 GMT < Server: Apache < Last-Modified: Thu, 31 Mar 2022 01:31:34 GMT < ETag: "2586bfd-5db799f55fabc" < Accept-Ranges: bytes < Content-Length: 39349245 < Content-Type: application/zip < { [7964 bytes data] * Connection #0 to host www.whatroute.net left intact 2022-05-25 13:47:18 : DEBUG : whatroute : DEBUG mode 1, not checking for blocking processes 2022-05-25 13:47:18 : REQ : whatroute : Installing WhatRoute 2022-05-25 13:47:18 : INFO : whatroute : Unzipping WhatRoute.zip 2022-05-25 13:47:19 : INFO : whatroute : Verifying: /Users/st/Documents/GitHub/Installomator/build/WhatRoute.app 2022-05-25 13:47:19 : DEBUG : whatroute : App size: 60M /Users/st/Documents/GitHub/Installomator/build/WhatRoute.app 2022-05-25 13:47:19 : DEBUG : whatroute : Debugging enabled, App Verification output was: /Users/st/Documents/GitHub/Installomator/build/WhatRoute.app: accepted source=Notarized Developer ID origin=Developer ID Application: Bryan Christianson (H5879E8LML) 2022-05-25 13:47:20 : INFO : whatroute : Team ID matching: H5879E8LML (expected: H5879E8LML ) 2022-05-25 13:47:20 : INFO : whatroute : Downloaded version of WhatRoute is 2.5.0 on versionKey CFBundleShortVersionString, same as installed. 2022-05-25 13:47:20 : DEBUG : whatroute : DEBUG mode 1, not reopening anything 2022-05-25 13:47:20 : REG : whatroute : No new version to install 2022-05-25 13:47:20 : REQ : whatroute : ################## End Installomator, exit code 0 ``` --- fragments/labels/whatroute.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 fragments/labels/whatroute.sh diff --git a/fragments/labels/whatroute.sh b/fragments/labels/whatroute.sh new file mode 100644 index 0000000..2577a23 --- /dev/null +++ b/fragments/labels/whatroute.sh @@ -0,0 +1,7 @@ +whatroute) + name="WhatRoute" + type="zip" + downloadURL="$(curl -fs https://www.whatroute.net/whatroute2appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | cut -d '"' -f2)" + appNewVersion="$(curl -fs https://www.whatroute.net/whatroute2appcast.xml | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | cut -d '"' -f2)" + expectedTeamID="H5879E8LML" + ;; From abe2e51f138641ee74572f2c557283ff781554e3 Mon Sep 17 00:00:00 2001 From: Fletcher Salesky Date: Thu, 26 May 2022 12:03:42 -0700 Subject: [PATCH 33/42] Update googledrive.sh --- fragments/labels/googledrive.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fragments/labels/googledrive.sh b/fragments/labels/googledrive.sh index 16faa2c..6132e6b 100644 --- a/fragments/labels/googledrive.sh +++ b/fragments/labels/googledrive.sh @@ -3,8 +3,13 @@ googledrivefilestream) # credit: Isaac Ordonez, Mann consulting (@mannconsulting) name="Google Drive File Stream" type="pkgInDmg" - packageID="com.google.drivefs" + if [[ $(arch) == "arm64" ]]; then + packageID="com.google.drivefs.arm64" + elif [[ $(arch) == "i386" ]]; then + packageID="com.google.drivefs.x86_64" + fi downloadURL="https://dl.google.com/drive-file-stream/GoogleDriveFileStream.dmg" # downloadURL="https://dl.google.com/drive-file-stream/GoogleDrive.dmg" blockingProcesses=( "Google Docs" "Google Drive" "Google Sheets" "Google Slides" ) + appName="Google Drive.app" expectedTeamID="EQHXZ8M8AV" ;; From 9e24f2b8e8603e4c6b40bb4dfa4a59cbe49f8d2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Theilgaard?= Date: Fri, 27 May 2022 12:18:18 +0200 Subject: [PATCH 34/42] rename label name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It already existed… --- fragments/labels/barcoclickshare.sh | 7 ------- fragments/labels/clickshare.sh | 4 ++-- 2 files changed, 2 insertions(+), 9 deletions(-) delete mode 100644 fragments/labels/barcoclickshare.sh diff --git a/fragments/labels/barcoclickshare.sh b/fragments/labels/barcoclickshare.sh deleted file mode 100644 index 1b99cd0..0000000 --- a/fragments/labels/barcoclickshare.sh +++ /dev/null @@ -1,7 +0,0 @@ -barcoclickshare) - name="ClickShare" - 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" )" - 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" - ;; diff --git a/fragments/labels/clickshare.sh b/fragments/labels/clickshare.sh index 6911551..1b0221b 100644 --- a/fragments/labels/clickshare.sh +++ b/fragments/labels/clickshare.sh @@ -1,7 +1,7 @@ clickshare) - # credit: Søren Theilgaard (@theilgaard) name="ClickShare" type="appInDmgInZip" - downloadURL=https://www.barco.com$(curl -fs "https://www.barco.com/en/clickshare/app" | grep -E -o '(\/\S*Download\?FileNumber=R3306192\S*ShowDownloadPage=False)' | tail -1) + downloadURL="https://www.barco.com$( curl -fs "https://www.barco.com/en/clickshare/app" | grep -A6 -i "macos" | grep -i "FileNumber" | tr '"' "\n" | grep -i "FileNumber" )" + appNewVersion="$(eval "$( echo $downloadURL | sed -E 's/.*(MajorVersion.*BuildVersion=[0-9]*).*/\1/' | sed 's/&//g' )" ; ((MajorVersion++)) ; ((MajorVersion--)); ((MinorVersion++)) ; ((MinorVersion--)); ((PatchVersion++)) ; ((PatchVersion--)); ((BuildVersion++)) ; ((BuildVersion--)); echo "${MajorVersion}.${MinorVersion}.${PatchVersion}-b${BuildVersion}")" expectedTeamID="P6CDJZR997" ;; From 5e0e77c346e64d96ba88d182d1ae17c971576cef Mon Sep 17 00:00:00 2001 From: Fletcher Salesky Date: Tue, 31 May 2022 19:42:57 -0700 Subject: [PATCH 35/42] Update notion.sh --- fragments/labels/notion.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fragments/labels/notion.sh b/fragments/labels/notion.sh index aa1ab0a..7e608e8 100644 --- a/fragments/labels/notion.sh +++ b/fragments/labels/notion.sh @@ -4,9 +4,10 @@ notion) type="dmg" if [[ $(arch) == "arm64" ]]; then downloadURL="https://www.notion.so/desktop/apple-silicon/download" + appNewVersion=$( curl -fsIL "https://www.notion.so/desktop/apple-silicon/download" | grep -i "^location" | awk '{print $2}' | sed -e 's/.*Notion\-\(.*\)\-arm64.dmg.*/\1/' ) elif [[ $(arch) == "i386" ]]; then downloadURL="https://www.notion.so/desktop/mac/download" + appNewVersion=$( curl -fsIL "https://www.notion.so/desktop/mac/download" | grep -i "^location" | awk '{print $2}' | sed -e 's/.*Notion\-\(.*\).dmg.*/\1/' ) fi - appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | tr -d '\r\n' | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g' ) expectedTeamID="LBQJ96FQ8D" ;; From 1ec9c3f0b010828082d577fb58ab42be2ee8ba91 Mon Sep 17 00:00:00 2001 From: Thomas Bartlett Date: Tue, 14 Jun 2022 10:05:11 -0400 Subject: [PATCH 36/42] Update grammarly.sh Updated download URL as Grammarly removed the appcast.xml feed. --- fragments/labels/grammarly.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fragments/labels/grammarly.sh b/fragments/labels/grammarly.sh index 4534682..7dfcb93 100644 --- a/fragments/labels/grammarly.sh +++ b/fragments/labels/grammarly.sh @@ -2,9 +2,8 @@ grammarly) name="Grammarly Desktop" type="dmg" packageID="com.grammarly.ProjectLlama" - downloadURL=$(curl -fsL "https://download-mac.grammarly.com/appcast.xml" | xpath '//rss/channel/item[1]/enclosure/@url' 2>/dev/null | cut -d '"' -f 2) + downloadURL="https://download-mac.grammarly.com/Grammarly.dmg" expectedTeamID="W8F64X92K3" - appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4) # appName="Grammarly Installer.app" installerTool="Grammarly Installer.app" CLIInstaller="Grammarly Installer.app/Contents/MacOS/Grammarly Desktop" From ae7db2621c11542cc9976bd184dedc573589571c Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Fri, 17 Jun 2022 15:49:00 +0200 Subject: [PATCH 37/42] removed absolute paths from commands --- MDM/InstallInstallomator.sh | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/MDM/InstallInstallomator.sh b/MDM/InstallInstallomator.sh index 173f705..382ae2c 100644 --- a/MDM/InstallInstallomator.sh +++ b/MDM/InstallInstallomator.sh @@ -3,6 +3,8 @@ # 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 @@ -13,20 +15,20 @@ exitCode=0 if [ ! -e "/usr/local/Installomator/Installomator.sh" ]; then echo "Installomator not found. Installing." # Create temporary working directory - workDirectory=$( /usr/bin/basename "$0" ) - tempDirectory=$( /usr/bin/mktemp -d "/private/tmp/$workDirectory.XXXXXX" ) + workDirectory=$( basename "$0" ) + tempDirectory=$( mktemp -d ) echo "Created working directory '$tempDirectory'" # Download the installer package echo "Downloading Installomator package" - /usr/bin/curl --location --silent "$url" -o "$tempDirectory/Installomator.pkg" + curl --location --silent "$url" -o "$tempDirectory/Installomator.pkg" # Verify the download - teamID=$(/usr/sbin/spctl -a -vv -t install "$tempDirectory/Installomator.pkg" 2>&1 | awk '/origin=/ {print $NF }' | tr -d '()') + 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" - /usr/sbin/installer -pkg "$tempDirectory/Installomator.pkg" -target / - exitCode=0 + 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 @@ -34,7 +36,7 @@ if [ ! -e "/usr/local/Installomator/Installomator.sh" ]; then fi # Remove the temporary working directory when done echo "Deleting working directory '$tempDirectory' and its contents" - /bin/rm -Rf "$tempDirectory" + rm -Rf "$tempDirectory" else echo "Installomator already installed." fi From 158a30b6f1fa7b41a632b04c689863b37133cd61 Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Fri, 17 Jun 2022 15:50:01 +0200 Subject: [PATCH 38/42] removed unused variable --- MDM/InstallInstallomator.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/MDM/InstallInstallomator.sh b/MDM/InstallInstallomator.sh index 382ae2c..9bb131f 100644 --- a/MDM/InstallInstallomator.sh +++ b/MDM/InstallInstallomator.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/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 @@ -15,7 +15,6 @@ exitCode=0 if [ ! -e "/usr/local/Installomator/Installomator.sh" ]; then echo "Installomator not found. Installing." # Create temporary working directory - workDirectory=$( basename "$0" ) tempDirectory=$( mktemp -d ) echo "Created working directory '$tempDirectory'" # Download the installer package From ae34d5591e916761223fd8a108a4de91a75ac4ff Mon Sep 17 00:00:00 2001 From: Fletcher Salesky Date: Mon, 20 Jun 2022 10:50:20 -0700 Subject: [PATCH 39/42] Update Wireshark download URL Update Wireshark to use version from appNewVersion to prevent grabbing dev builds. --- fragments/labels/wireshark.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fragments/labels/wireshark.sh b/fragments/labels/wireshark.sh index d293dd8..6932319 100644 --- a/fragments/labels/wireshark.sh +++ b/fragments/labels/wireshark.sh @@ -1,11 +1,11 @@ wireshark) name="Wireshark" type="dmg" - if [[ $(arch) == i386 ]]; then - downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20Latest%20Intel%2064.dmg" - elif [[ $(arch) == arm64 ]]; then - downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20Latest%20Arm%2064.dmg" - fi appNewVersion=$(curl -fs https://www.wireshark.org/download.html | grep -i "href.*_stable" | sed -E 's/.*\(([0-9.]*)\).*/\1/g') + if [[ $(arch) == i386 ]]; then + downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20$appNewVersion%20Intel%2064.dmg" + elif [[ $(arch) == arm64 ]]; then + downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20$appNewVersion%20Arm%2064.dmg" + fi expectedTeamID="7Z6EMTD2C6" ;; From acb2963f7a6b747ba0af58985bdb99e28a2d444b Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Wed, 22 Jun 2022 14:55:10 +0200 Subject: [PATCH 40/42] changed filename case --- fragments/labels/{NordLayer.sh => nordlayer.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename fragments/labels/{NordLayer.sh => nordlayer.sh} (100%) diff --git a/fragments/labels/NordLayer.sh b/fragments/labels/nordlayer.sh similarity index 100% rename from fragments/labels/NordLayer.sh rename to fragments/labels/nordlayer.sh From 1dfa162783047b4e29f98a846436630523e0ae37 Mon Sep 17 00:00:00 2001 From: MrAZisHere Date: Fri, 24 Jun 2022 20:40:48 +0800 Subject: [PATCH 41/42] Update sublimetext.sh download url has changed --- fragments/labels/sublimetext.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fragments/labels/sublimetext.sh b/fragments/labels/sublimetext.sh index 5f63257..1fda13f 100644 --- a/fragments/labels/sublimetext.sh +++ b/fragments/labels/sublimetext.sh @@ -2,7 +2,7 @@ sublimetext) # credit: Søren Theilgaard (@theilgaard) name="Sublime Text" type="zip" - downloadURL="$(curl -fs https://www.sublimetext.com/download | grep -io "https://download.*_mac.zip")" + downloadURL="$(curl -fs "https://www.sublimetext.com/download_thanks?target=mac#direct-downloads" | grep -io "https://download.*_mac.zip" | head -1)" appNewVersion=$(curl -fs https://www.sublimetext.com/download | grep -i -A 4 "id.*changelog" | grep -io "Build [0-9]*") expectedTeamID="Z6D26JE4Y4" ;; From e7c72349d0456a51725a8d67bb68c08c5e06ad2e Mon Sep 17 00:00:00 2001 From: Armin Briegel <1933192+scriptingosx@users.noreply.github.com> Date: Fri, 12 Aug 2022 17:01:34 +0200 Subject: [PATCH 42/42] preparing for 10beta1 release --- CHANGELOG.md | 38 +++++++++ Installomator.sh | 185 +++++++++++++++++++++++++++++++++---------- Labels.txt | 8 ++ fragments/version.sh | 2 +- 4 files changed, 188 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d927514..f4d3ff6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,41 @@ +## v10beta1 + +- [swiftDialog](https://github.com/bartreardon/swiftDialog) integration (#641, #632), many thanks to @bartreardon, [sample scripts](in the MDM folder) +- added WorkspaceOne option for LOGO (#517) +- added function for JSON parsing with JXA (#529) +- updated assemble.sh script to update Labels.txt when script is rebuilt (#540) +- added a no requisite install script (#493) +- GitHub lookup now don't use API calls, this should avoid or at least reduce rate limiting (#543) +- fixed redundant exit codes (#643, #561) + +NOTE: some exit codes have changed! see [Installomator Exit Codes](https://github.com/Installomator/Installomator/wiki/Installomator-Exit-Codes) for a list + +- new labels: + - bluejeanswithaudiodriver (#473) + - duodevicehealth (#548) + - googlechromeenterprise (#532) + - ipswupdater (#545) + - mmhmm (#571) + - nordlayer (#419) + - prune (#538) + - whatroute (#560) +- updated labels: + - blender (#535, #622) + - camtasia2019 (#547) + - clickshare (#565) + - egnyte (#500) + - googledrive (#563) + - grammarly (#576) + - marathon, marathon2, marathoninfinity (#544) + - miro (#475, #539) + - notion (#566) + - ringcentralapp (#550) + - sublimetext (#593, #578, #567, #623, #626) + - talkdeskcallbar (#536) + - talkdeskcxcloud (#537) + - wireshark (#585) + + ## v9.2 **Note**: Both Google and Mozilla recommend using the pkg installers instead of the dmg downloads for managed deployments. So far, Installomator has provided labels for both. (`googlechrome` and `googlechromepkg` or `firefox` and `firefoxpkg`, respectively) Since there are problems with the dmg downloads, a future release of Installomator will _disable_ the `firefox` and `googlechrome` dmg labels. You should switch to using `googlechromepkg` and `firefoxpkg` labels instead. diff --git a/Installomator.sh b/Installomator.sh index 54d2fbb..0c689d4 100755 --- a/Installomator.sh +++ b/Installomator.sh @@ -81,7 +81,6 @@ LOGO=appstore # - mosylem Mosyle Manager (Education) # - addigy Addigy # - 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. # Like 'LOGO="/System/Applications/App\ Store.app/Contents/Resources/AppIcon.icns"' # (spaces have to be escaped). @@ -303,8 +302,8 @@ if [[ $(/usr/bin/arch) == "arm64" ]]; then rosetta2=no fi fi -VERSION="10.0beta" -VERSIONDATE="2022-05-19" +VERSION="10.0beta1" +VERSIONDATE="2022-08-12" # MARK: Functions @@ -330,7 +329,7 @@ cleanupAndExit() { # $1 = exit code, $2 message, $3 level printlog "$2" $3 fi printlog "################## End Installomator, exit code $1 \n" REQ - + # if label is wrong and we wanted name of the label, then return ################## if [[ $RETURN_LABEL_NAME -eq 1 ]]; then 1=0 # If only label name should be returned we exit without any errors @@ -368,13 +367,10 @@ displaydialogContinue() { # $1: message $2: title displaynotification() { # $1: message $2: title message=${1:-"Message"} title=${2:-"Notification"} - hubcli="/usr/local/bin/hubcli" manageaction="/Library/Application Support/JAMF/bin/Management Action.app/Contents/MacOS/Management Action" if [[ -x "$manageaction" ]]; then "$manageaction" -message "$message" -title "$title" - elif [[ -x "$hubcli" ]]; then - "$hubcli" notify -t "$title" -i "$message" -c "Dismiss" else runAsUser osascript -e "display notification \"$message\" with title \"$title\"" fi @@ -467,11 +463,11 @@ downloadURLFromGit() { # $1 git user name, $2 git repo name fi if [ -n "$archiveName" ]; then - downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \ - | awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }") + #downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$archiveName\"/ { print \$4; exit }") + downloadURL=https://github.com$(curl -sL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -o "\/$gitusername\/$gitreponame.*$archiveName.*") else - downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" \ - | awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }") + #downloadURL=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | awk -F '"' "/browser_download_url/ && /$filetype\"/ { print \$4; exit }") + downloadURL=https://github.com$(curl -sL "https://github.com/$gitusername/$gitreponame/releases/latest" | tr '"' "\n" | grep -o "\/$gitusername\/$gitreponame.*\.$filetype") fi if [ -z "$downloadURL" ]; then cleanupAndExit 9 "could not retrieve download URL for $gitusername/$gitreponame" ERROR @@ -487,7 +483,8 @@ versionFromGit() { gitusername=${1?:"no git user name"} gitreponame=${2?:"no git repo name"} - appNewVersion=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g') + #appNewVersion=$(curl -L --silent --fail "https://api.github.com/repos/$gitusername/$gitreponame/releases/latest" | grep tag_name | cut -d '"' -f 4 | sed 's/[^0-9\.]//g') + appNewVersion=$(curl -sLI "https://github.com/$gitusername/$gitreponame/releases/latest" | grep -i "^location" | tr "/" "\n" | tail -1 | sed 's/[^0-9\.]//g') if [ -z "$appNewVersion" ]; then printlog "could not retrieve version number for $gitusername/$gitreponame" WARN appNewVersion="" @@ -510,6 +507,16 @@ xpath() { fi } +# from @Pico: https://macadmins.slack.com/archives/CGXNNJXJ9/p1652222365989229?thread_ts=1651786411.413349&cid=CGXNNJXJ9 +getJSONValue() { + # $1: JSON string OR file path to parse (tested to work with up to 1GB string and 2GB file). + # $2: JSON key path to look up (using dot or bracket notation). + printf '%s' "$1" | /usr/bin/osascript -l 'JavaScript' \ + -e "let json = $.NSString.alloc.initWithDataEncoding($.NSFileHandle.fileHandleWithStandardInput.readDataToEndOfFile$(/usr/bin/uname -r | /usr/bin/awk -F '.' '($1 > 18) { print "AndReturnError(ObjC.wrap())" }'), $.NSUTF8StringEncoding)" \ + -e 'if ($.NSFileManager.defaultManager.fileExistsAtPath(json)) json = $.NSString.stringWithContentsOfFileEncodingError(json, $.NSUTF8StringEncoding, ObjC.wrap())' \ + -e "const value = JSON.parse(json.js)$([ -n "${2%%[.[]*}" ] && echo '.')$2" \ + -e 'if (typeof value === "object") { JSON.stringify(value, null, 4) } else { value }' +} getAppVersion() { # modified by: Søren Theilgaard (@theilgaard) and Isaac Ordonez @@ -1375,10 +1382,11 @@ adobecreativeclouddesktop) name="Adobe Creative Cloud" #appName="Install.app" type="dmg" + adobeurl="https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" if [[ $(arch) == "arm64" ]]; then - downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*macarm64.*dmg" | cut -d '"' -f1 | head -1) + downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'osx10')][contains(text(),'Download')]/@href)" - 2> /dev/null) elif [[ $(arch) == "i386" ]]; then - downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*osx10.*dmg" | cut -d '"' -f1 | head -1) + downloadURL=$(curl -fs "$adobeurl" | xmllint -html -xpath "string(//a[contains(@href,'macarm64')][contains(text(),'Download')]/@href)" - 2> /dev/null) fi #downloadURL=$(curl -fs "https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html" | grep -o "https*.*dmg" | head -1) appNewVersion=$(curl -fs "https://helpx.adobe.com/creative-cloud/release-note/cc-release-notes.html" | grep "mandatory" | head -1 | grep -o "Version *.* released" | cut -d " " -f2) @@ -1747,7 +1755,11 @@ bitwarden) blender) name="blender" type="dmg" - downloadURL=$(redirect=$(curl -sfL https://www.blender.org/download/ | sed 's/.*href="//' | sed 's/".*//' | grep .dmg) && curl -sfL "$redirect" | sed 's/.*href="//' | sed 's/".*//' | grep -m1 .dmg) + if [[ $(arch) == "arm64" ]]; then + downloadURL=$(curl -sfL "https://www.blender.org/download/" | xmllint --html --format - 2>/dev/null | grep -o "https://.*blender.*arm64.*.dmg" | sed '2p;d' | sed 's/www.blender.org\/download/download.blender.org/g') + elif [[ $(arch) == "i386" ]]; then + downloadURL=$(curl -sfL "https://www.blender.org/download/" | xmllint --html --format - 2>/dev/null | grep -o "https://.*blender.*x64.*.dmg" | sed '2p;d' | sed 's/www.blender.org\/download/download.blender.org/g') + fi appNewVersion=$( echo "${downloadURL}" | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)-.*/\1/g' ) expectedTeamID="68UA947AUU" ;; @@ -1762,6 +1774,18 @@ bluejeans) appNewVersion=$(echo $downloadURL | cut -d '/' -f6) expectedTeamID="HE4P42JBGN" ;; +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='attributeSetting1choiceAttributeselectedchoiceIdentifiercom.tatvikmohit.BlueJeans-Audio' + expectedTeamID="HE4P42JBGN" + ;; boxdrive) name="Box" type="pkg" @@ -1911,10 +1935,10 @@ clevershare2) expectedTeamID="P76M9BE8DQ" ;; clickshare) - # credit: Søren Theilgaard (@theilgaard) name="ClickShare" type="appInDmgInZip" - downloadURL=https://www.barco.com$(curl -fs "https://www.barco.com/en/clickshare/app" | grep -E -o '(\/\S*Download\?FileNumber=R3306192\S*ShowDownloadPage=False)' | tail -1) + downloadURL="https://www.barco.com$( curl -fs "https://www.barco.com/en/clickshare/app" | grep -A6 -i "macos" | grep -i "FileNumber" | tr '"' "\n" | grep -i "FileNumber" )" + appNewVersion="$(eval "$( echo $downloadURL | sed -E 's/.*(MajorVersion.*BuildVersion=[0-9]*).*/\1/' | sed 's/&//g' )" ; ((MajorVersion++)) ; ((MajorVersion--)); ((MinorVersion++)) ; ((MinorVersion--)); ((PatchVersion++)) ; ((PatchVersion--)); ((BuildVersion++)) ; ((BuildVersion--)); echo "${MajorVersion}.${MinorVersion}.${PatchVersion}-b${BuildVersion}")" expectedTeamID="P6CDJZR997" ;; clipy) @@ -2193,6 +2217,15 @@ duckduckgo) appNewVersion=$(curl -fs https://staticcdn.duckduckgo.com/macos-desktop-browser/appcast.xml | xpath '(//rss/channel/item/sparkle:shortVersionString)[1]' 2>/dev/null | cut -d ">" -f2 | cut -d "<" -f1) expectedTeamID="HKE973VLUW" ;; +duodevicehealth) + name="Duo Device Health" + type="pkgInDmg" + downloadURL="https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg" + appNewVersion=$(curl -fsLIXGET "https://dl.duosecurity.com/DuoDeviceHealth-latest.dmg" | grep -i "^content-disposition" | sed -e 's/.*filename\=\"DuoDeviceHealth\-\(.*\)\.dmg\".*/\1/') + appName="Duo Device Health.app" + expectedTeamID="FNN8Z5JMFP" + ;; + easeusdatarecoverywizard) # credit: Søren Theilgaard (@theilgaard) name="EaseUS Data Recovery Wizard" @@ -2213,6 +2246,7 @@ egnyte) name="Egnyte Connect" type="pkg" downloadURL="https://egnyte-cdn.egnyte.com/egnytedrive/mac/en-us/latest/EgnyteConnectMac.pkg" + appNewVersion=$(curl -fs "https://egnyte-cdn.egnyte.com/egnytedrive/mac/en-us/versions/default.xml" | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' | cut -d '"' -f 2) expectedTeamID="FELUD555VC" blockingProcesses=( NONE ) ;; @@ -2343,7 +2377,8 @@ firefox) name="Firefox" type="dmg" downloadURL="https://download.mozilla.org/?product=firefox-latest&os=osx&lang=en-US" - appNewVersion=$(curl -fs https://www.mozilla.org/en-US/firefox/releases/ | grep '/dev/null | cut -d '"' -f 2) + downloadURL="https://download-mac.grammarly.com/Grammarly.dmg" expectedTeamID="W8F64X92K3" - appNewVersion=$(curl -is "https://download-mac.grammarly.com/appcast.xml" | grep sparkle:version | tr ',' '\n' | grep sparkle:version | cut -d '"' -f 4) # appName="Grammarly Installer.app" installerTool="Grammarly Installer.app" CLIInstaller="Grammarly Installer.app/Contents/MacOS/Grammarly Desktop" @@ -2803,6 +2858,14 @@ installomator_theile) expectedTeamID="JME5BW3F3R" blockingProcesses=( NONE ) ;; +ipswupdater) + name="IPSW Updater" + type="zip" + ipswupdaterVersions=$(curl -fs "https://ipsw.app/download/updates.php?current_version=0.9.16") + downloadURL=$(getJSONValue "$ipswupdaterVersions" "[0].url") + appNewVersion=$(getJSONValue "$ipswupdaterVersions" "[0].version") + expectedTeamID="YRW6NUGA63" + ;; istatmenus) # credit: AP Orlebeke (@apizz) name="iStat Menus" @@ -3244,6 +3307,7 @@ marathon) name="Marathon" type="dmg" archiveName="Marathon-[0-9.]*-Mac.dmg" + versionKey="CFBundleVersion" downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)" appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)" expectedTeamID="E8K89CXZE7" @@ -3252,6 +3316,7 @@ marathon2) name="Marathon 2" type="dmg" archiveName="Marathon2-[0-9.]*-Mac.dmg" + versionKey="CFBundleVersion" downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)" appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)" expectedTeamID="E8K89CXZE7" @@ -3260,6 +3325,7 @@ marathoninfinity) name="Marathon Infinity" type="dmg" archiveName="MarathonInfinity-[0-9.]*-Mac.dmg" + versionKey="CFBundleVersion" downloadURL="$(downloadURLFromGit Aleph-One-Marathon alephone)" appNewVersion="$(versionFromGit Aleph-One-Marathon alephone)" expectedTeamID="E8K89CXZE7" @@ -3569,9 +3635,21 @@ miro) # credit: @matins name="Miro" type="dmg" - downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg" + if [[ $(arch) == arm64 ]]; then + downloadURL="https://desktop.miro.com/platforms/darwin-arm64/Miro.dmg" + elif [[ $(arch) == i386 ]]; then + downloadURL="https://desktop.miro.com/platforms/darwin/Miro.dmg" + fi expectedTeamID="M3GM7MFY7U" ;; +mmhmm) + name="mmhmm" + type="pkg" + downloadURL="https://updates.mmhmm.app/mac/mmhmm.pkg" + curlOptions=( -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15" ) + appNewVersion=$(curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" -fs "https://help.mmhmm.app/hc/en-us/articles/4420969712151-mmhmm-for-Mac" | grep 'The latest version of mmhmm for Mac is *' | sed -e 's/.*\\(.*\)\.\<\/strong\>.*/\1/') + expectedTeamID="M3KUT44L48" + ;; mobikinassistantforandroid) name="MobiKin Assistant for Android" type="dmg" @@ -3733,16 +3811,24 @@ nomadlogin) appNewVersion=$(curl -fs https://nomad.menu/support/ | grep "NoMAD Login AD Downloads" | sed -E 's/.*Current Version ([0-9\.]*)<.*/\1/g') expectedTeamID="AAPZK3CB24" ;; +nordlayer) + # credit: Taboc741 (https://github.com/taboc741) + name="NordLayer" + type="pkg" + downloadURL="https://downloads.nordlayer.com/mac/latest/NordLayer.pkg" + expectedTeamID="W5W395V82Y" + ;; notion) # credit: Søren Theilgaard (@theilgaard) name="Notion" type="dmg" if [[ $(arch) == "arm64" ]]; then downloadURL="https://www.notion.so/desktop/apple-silicon/download" + appNewVersion=$( curl -fsIL "https://www.notion.so/desktop/apple-silicon/download" | grep -i "^location" | awk '{print $2}' | sed -e 's/.*Notion\-\(.*\)\-arm64.dmg.*/\1/' ) elif [[ $(arch) == "i386" ]]; then downloadURL="https://www.notion.so/desktop/mac/download" + appNewVersion=$( curl -fsIL "https://www.notion.so/desktop/mac/download" | grep -i "^location" | awk '{print $2}' | sed -e 's/.*Notion\-\(.*\).dmg.*/\1/' ) fi - appNewVersion=$( curl -fsIL "${downloadURL}" | grep -i "^location" | awk '{print $2}' | tr -d '\r\n' | sed -E 's/.*\/[a-zA-Z]*-([0-9.]*)\..*/\1/g' ) expectedTeamID="LBQJ96FQ8D" ;; nudge) @@ -4062,6 +4148,13 @@ proxyman) appNewVersion="$(versionFromGit ProxymanApp Proxyman)" expectedTeamID="3X57WP8E8V" ;; +prune) + name="Prune" + type="zip" + downloadURL=$(downloadURLFromGit BIG-RAT Prune) + appNewVersion=$(versionFromGit BIG-RAT Prune) + expectedTeamID="PS2F6S478M" +;; pymol) name="PyMOL" type="dmg" @@ -4170,7 +4263,7 @@ ricohpsprinters) ;; ringcentralapp) # credit: Isaac Ordonez, Mann consulting (@mannconsulting) - name="Ringcentral" + name="RingCentral" type="pkg" if [[ $(arch) != "i386" ]]; then downloadURL="https://app.ringcentral.com/download/RingCentral-arm64.pkg" @@ -4178,7 +4271,7 @@ ringcentralapp) downloadURL="https://app.ringcentral.com/download/RingCentral.pkg" fi expectedTeamID="M932RC5J66" - blockingProcesses=( "Ringcentral" ) + blockingProcesses=( "RingCentral" ) ;; ringcentralclassicapp) name="Glip" @@ -4521,7 +4614,7 @@ sublimetext) # credit: Søren Theilgaard (@theilgaard) name="Sublime Text" type="zip" - downloadURL="$(curl -fs https://www.sublimetext.com/download | grep -io "https://download.*_mac.zip")" + downloadURL="$(curl -fs "https://www.sublimetext.com/download_thanks?target=mac#direct-downloads" | grep -io "https://download.*_mac.zip" | head -1)" appNewVersion=$(curl -fs https://www.sublimetext.com/download | grep -i -A 4 "id.*changelog" | grep -io "Build [0-9]*") expectedTeamID="Z6D26JE4Y4" ;; @@ -4600,14 +4693,16 @@ tageditor) talkdeskcallbar) name="Callbar" type="dmg" - appNewVersion=$(curl -fsL https://downloadcallbar.talkdesk.com/release_metadata.json | sed -n 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p') + talkdeskcallbarVersions=$(curl -fsL "https://downloadcallbar.talkdesk.com/release_metadata.json") + appNewVersion=$(getJSONValue "$talkdeskcallbarVersions" "version") downloadURL=https://downloadcallbar.talkdesk.com/Callbar-${appNewVersion}.dmg expectedTeamID="YGGJX44TB8" ;; talkdeskcxcloud) name="Talkdesk" type="dmg" - appNewVersion=$(curl -fs https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json | sed -n -e 's/^.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*$/\1/p' | head -n 1) + talkdeskcxcloudVersions=$(curl -fs "https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-latest-metadata.json") + appNewVersion=$(getJSONValue "$talkdeskcxcloudVersions" "[0].version") downloadURL="https://td-infra-prd-us-east-1-s3-atlaselectron.s3.amazonaws.com/talkdesk-${appNewVersion}.dmg" expectedTeamID="YGGJX44TB8" ;; @@ -4955,6 +5050,13 @@ wechat) downloadURL="https://dldir1.qq.com/weixin/mac/WeChatMac.dmg" expectedTeamID="5A4RE8SF68" ;; +whatroute) + name="WhatRoute" + type="zip" + downloadURL="$(curl -fs https://www.whatroute.net/whatroute2appcast.xml | xpath '(//rss/channel/item/enclosure/@url)[1]' 2>/dev/null | cut -d '"' -f2)" + appNewVersion="$(curl -fs https://www.whatroute.net/whatroute2appcast.xml | xpath '(//rss/channel/item/enclosure/@sparkle:shortVersionString)[1]' 2>/dev/null | cut -d '"' -f2)" + expectedTeamID="H5879E8LML" + ;; whatsapp) name="WhatsApp" type="dmg" @@ -4980,12 +5082,12 @@ wickrpro) wireshark) name="Wireshark" type="dmg" - if [[ $(arch) == i386 ]]; then - downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20Latest%20Intel%2064.dmg" - elif [[ $(arch) == arm64 ]]; then - downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20Latest%20Arm%2064.dmg" - fi appNewVersion=$(curl -fs https://www.wireshark.org/download.html | grep -i "href.*_stable" | sed -E 's/.*\(([0-9.]*)\).*/\1/g') + if [[ $(arch) == i386 ]]; then + downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20$appNewVersion%20Intel%2064.dmg" + elif [[ $(arch) == arm64 ]]; then + downloadURL="https://1.as.dl.wireshark.org/osx/Wireshark%20$appNewVersion%20Arm%2064.dmg" + fi expectedTeamID="7Z6EMTD2C6" ;; wordservice) @@ -5268,11 +5370,6 @@ case $LOGO in LOGO="/Library/Intune/Microsoft Intune Agent.app/Contents/Resources/AppIcon.icns" if [[ -z $MDMProfileName ]]; then; MDMProfileName="Management Profile"; fi ;; - ws1) - # Workspace ONE - LOGO="/Applications/Workspace ONE Intelligent Hub.app/Contents/Resources/AppIcon.icns" - if [[ -z $MDMProfileName ]]; then; MDMProfileName="Device Manager"; fi - ;; esac if [[ ! -a "${LOGO}" ]]; then if [[ $(sw_vers -buildVersion) > "19" ]]; then diff --git a/Labels.txt b/Labels.txt index e294113..674ddf2 100644 --- a/Labels.txt +++ b/Labels.txt @@ -56,6 +56,7 @@ bettertouchtool bitwarden blender bluejeans +bluejeanswithaudiodriver boxdrive boxsync boxtools @@ -110,6 +111,7 @@ drawio drift dropbox duckduckgo +duodevicehealth easeusdatarecoverywizard easyfind egnyte @@ -146,6 +148,7 @@ gimp githubdesktop golang googlechrome +googlechromeenterprise googlechromepkg googledrive googledrivebackupandsync @@ -181,6 +184,7 @@ insomnia installomator installomator_theile intellijideace +ipswupdater istatmenus iterm2 itsycal @@ -259,6 +263,7 @@ microsoftyammer mightymike mindmanager miro +mmhmm mobikinassistantforandroid mochakeyboard mochatelnet @@ -274,6 +279,7 @@ netnewswire nextcloud nomad nomadlogin +nordlayer notion nudge nvivo @@ -317,6 +323,7 @@ promiseutilityr propresenter7 protonvpn proxyman +prune pycharmce pymol qgis-pr @@ -437,6 +444,7 @@ webex webexmeetings webexteams wechat +whatroute whatsapp wickrme wickrpro diff --git a/fragments/version.sh b/fragments/version.sh index cdefeb2..8bfae47 100644 --- a/fragments/version.sh +++ b/fragments/version.sh @@ -1 +1 @@ -10.0beta +10.0beta1