141 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			2.7 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.10
 | 
						|
  case $? in
 | 
						|
    0) ;&
 | 
						|
    1)
 | 
						|
      printf "${GREEN}"
 | 
						|
      echo $GO_VERSION
 | 
						|
      printf "${NC}"
 | 
						|
      ;;
 | 
						|
    2)
 | 
						|
      printf "${RED}"
 | 
						|
      echo "$GO_VERSION < 1.10"
 | 
						|
      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... "
 | 
						|
  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
 | 
						|
 | 
						|
echo
 | 
						|
 | 
						|
cat <<- EOF > .env
 | 
						|
	MAKE := "${tools[make]}"
 | 
						|
  GO := "${tools[go]}"
 | 
						|
  GO_VERSION := ${tools[go_version]}
 | 
						|
  DEP := "${tools[dep]}"
 | 
						|
EOF
 | 
						|
 | 
						|
echo "Environment configuration written to .env"
 | 
						|
 | 
						|
cd - > /dev/null
 |