144 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/usr/bin/env bash
 | |
| 
 | |
| RED='\033[0;31m'
 | |
| GREEN='\033[0;32m'
 | |
| BLUE='\033[0;34m'
 | |
| NC='\033[0m'
 | |
| 
 | |
| declare -A tools=()
 | |
| declare -A desired=()
 | |
| 
 | |
| for arg in "$@"; do
 | |
|   case ${arg%%=*} in
 | |
|     "--with-go")
 | |
|       desired[go]="${arg##*=}"
 | |
|       ;;
 | |
|     "--with-dep")
 | |
|       desired[dep]="${arg##*=}"
 | |
|       ;;
 | |
|     "--help")
 | |
|       printf "${GREEN}$0${NC}\n"
 | |
|       printf "  available options:\n"
 | |
|       printf "  --with-dep=${BLUE}<path_to_dep_binary>${NC}\n"
 | |
|       printf "  --with-go=${BLUE}<path_to_go_binary>${NC}\n"
 | |
|       exit 0
 | |
|       ;;
 | |
|     *)
 | |
|       echo "Unknown option: $arg"
 | |
|       exit 2
 | |
|       ;;
 | |
|     esac
 | |
| done
 | |
| 
 | |
| vercomp () {
 | |
|     if [[ $1 == $2 ]]
 | |
|     then
 | |
|         return 0
 | |
|     fi
 | |
|     local IFS=.
 | |
|     local i ver1=($1) ver2=($2)
 | |
|     # fill empty fields in ver1 with zeros
 | |
|     for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
 | |
|     do
 | |
|         ver1[i]=0
 | |
|     done
 | |
|     for ((i=0; i<${#ver1[@]}; i++))
 | |
|     do
 | |
|         if [[ -z ${ver2[i]} ]]
 | |
|         then
 | |
|             # fill empty fields in ver2 with zeros
 | |
|             ver2[i]=0
 | |
|         fi
 | |
|         if ((10#${ver1[i]} > 10#${ver2[i]}))
 | |
|         then
 | |
|             return 1
 | |
|         fi
 | |
|         if ((10#${ver1[i]} < 10#${ver2[i]}))
 | |
|         then
 | |
|             return 2
 | |
|         fi
 | |
|     done
 | |
|     return 0
 | |
| }
 | |
| 
 | |
| check_for() {
 | |
|   echo -n "Checking for $1... "
 | |
|   if ! [ -z "${desired[$1]}" ]; then
 | |
|     TOOL_PATH="${desired[$1]}"
 | |
|   else
 | |
|     TOOL_PATH=$(command -v $1)
 | |
|   fi
 | |
|   if ! [ -x "$TOOL_PATH" -a -f "$TOOL_PATH" ]; then
 | |
|     printf "${RED}not found${NC}\n"
 | |
|     cd -
 | |
|     exit 1
 | |
|   else
 | |
|     printf "${GREEN}found${NC}\n"
 | |
|     tools[$1]=$TOOL_PATH
 | |
|   fi
 | |
| }
 | |
| 
 | |
| check_go_version() {
 | |
|   echo -n "Checking go version... "
 | |
|   GO_VERSION=$(${tools[go]} version | ${tools[awk]} '{where = match($0, /[0-9]\.[0-9]+\.[0-9]*/); if (where != 0) print substr($0, RSTART, RLENGTH)}')
 | |
|   vercomp $GO_VERSION 1.12
 | |
|   case $? in
 | |
|     0) ;&
 | |
|     1)
 | |
|       printf "${GREEN}"
 | |
|       echo $GO_VERSION
 | |
|       printf "${NC}"
 | |
|       ;;
 | |
|     2)
 | |
|       printf "${RED}"
 | |
|       echo "$GO_VERSION < 1.12"
 | |
|       exit 1
 | |
|       ;;
 | |
|   esac
 | |
|   VERSION=$(${tools[go]} version | ${tools[awk]} '{print $3}')
 | |
|   tools["go_version"]="${VERSION}"
 | |
| }
 | |
| 
 | |
| check_docker_version() {
 | |
|   echo -n "Checking docker version... "
 | |
|   DOCKER_VERSION=$(${tools[docker]} version | ${tools[awk]})
 | |
| }
 | |
| 
 | |
| check_go_env() {
 | |
|   echo -n "Checking \$GOPATH... "
 | |
|   GOPATH="$(go env GOPATH)"
 | |
|   if [ -z "$GOPATH" ]; then
 | |
|     printf "${RED}invalid${NC} - GOPATH not set\n"
 | |
|     exit 1
 | |
|   fi
 | |
|   printf "${GREEN}valid${NC} - $GOPATH\n"
 | |
| }
 | |
| 
 | |
| cd ${0%/*}
 | |
| 
 | |
| if [ ! -f .env ]; then
 | |
|   rm .env
 | |
| fi
 | |
| 
 | |
| check_for make
 | |
| check_for awk
 | |
| check_for go
 | |
| check_go_version
 | |
| check_go_env
 | |
| check_for dep
 | |
| check_for gometalinter
 | |
| 
 | |
| echo
 | |
| 
 | |
| cat <<- EOF > .env
 | |
| 	MAKE := "${tools[make]}"
 | |
|   GO := "${tools[go]}"
 | |
|   GO_VERSION := ${tools[go_version]}
 | |
|   DEP := "${tools[dep]}"
 | |
|   GOMETALINTER := "${tools[gometalinter]}"
 | |
| EOF
 | |
| 
 | |
| echo "Environment configuration written to .env"
 | |
| 
 | |
| cd - > /dev/null
 |