#!/usr/bin/env bash set -e if tty -s; then bold=$(tput bold) normal=$(tput sgr0) else bold="" normal="" fi step() { echo "${bold}$1${normal}" } godep() { step "install build dependencies (versions pinned in build/go.mod and build/tools.go)" if ! type go >/dev/null; then step "go binary not installed or not in \$PATH" 1>&2 exit 1 fi if [ -z "$GOPATH" ]; then step "Your GOPATH is not configured correctly" 1>&2 exit 1 fi if ! (echo "$PATH" | grep "${GOPATH}/bin" > /dev/null); then step "GOPATH/bin is not in your PATH (it should be towards the start of it)" exit 1 fi pushd "$(dirname "${BASH_SOURCE[0]}")"/build set -x export GO111MODULE=on # otherwise, a checkout of this repo in GOPATH will disable modules on Go 1.12 and earlier source <(go env) export GOOS="$GOHOSTOS" export GOARCH="$GOHOSTARCH" # TODO GOARM=$GOHOSTARM? cat tools.go | grep _ | awk -F'"' '{print $2}' | tee | xargs -tI '{}' go install '{}' set +x popd if ! type stringer || ! type protoc-gen-go || ! type protoc-gen-go-grpc || ! type enumer || ! type goimports || ! type golangci-lint || ! type gocovmerge; then echo "Installed dependencies but can't find them in \$PATH, adjust it to contain \$GOPATH/bin" 1>&2 exit 1 fi } docdep() { if ! type pip3; then step "pip3 binary not installed or not in \$PATH" 1>&2 exit 1 fi step "Installing doc build dependencies" # shellcheck disable=SC2155 local reqpath="$(dirname "${BASH_SOURCE[0]}")/docs/requirements.txt" if [ -n "$ZREPL_LAZY_DOCS_REQPATH" ]; then reqpath="$ZREPL_LAZY_DOCS_REQPATH" fi pip3 install -r "$reqpath" } release() { step "Making release" make release } # shellcheck disable=SC2198 if [ -z "$@" ]; then step "No command specified, exiting" exit 1 fi for cmd in "$@"; do case "$cmd" in godep|docdep|release|docs) eval $cmd continue ;; devsetup) step "Installing development dependencies" godep docdep step "Development dependencies installed" continue ;; *) step "Invalid command ${cmd}, exiting" exit 1 ;; esac done