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