# Copyright 2021 The Go Authors. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. # Library of useful bash functions and variables for presubmit checks. RED=; GREEN=; YELLOW=; NORMAL=; MAXWIDTH=0 if tput setaf 1 >& /dev/null; then RED=`tput setaf 1` GREEN=`tput setaf 2` YELLOW=`tput setaf 3` NORMAL=`tput sgr0` MAXWIDTH=$(( $(tput cols) - 2 )) fi EXIT_CODE=0 info() { echo -e "${GREEN}$@${NORMAL}" 1>&2; } warn() { echo -e "${YELLOW}$@${NORMAL}" 1>&2; } err() { echo -e "${RED}$@${NORMAL}" 1>&2; EXIT_CODE=1; } die() { err $@ exit 1 } dryrun=false # runcmd prints an info log describing the command that is about to be run, and # then runs it. It sets EXIT_CODE to non-zero if the command fails, but does not exit # the script. runcmd() { msg="$@" if $dryrun; then echo -e "${YELLOW}dryrun${GREEN}\$ $msg${NORMAL}" return 0 fi # Truncate command logging for narrow terminals. # Account for the 2 characters of '$ '. if [[ $MAXWIDTH -gt 0 && ${#msg} -gt $MAXWIDTH ]]; then msg="${msg::$(( MAXWIDTH - 3 ))}..." fi echo -e "$@\n" 1>&2; $@ || err "command failed" } # check_header checks that all given files contain the standard header for Go # projects. check_header() { if [[ "$@" != "" ]]; then for FILE in $@ do line="$(head -4 $FILE)" if [[ ! $line == *"The Go Authors. All rights reserved."* ]] && [[ ! $line == "// DO NOT EDIT. This file was copied from" ]]; then err "missing license header: $FILE" fi done fi } # ensure_go_binary verifies that a binary exists in $PATH corresponding to the # given go-gettable URI. If no such binary exists, it is fetched via `go install`. ensure_go_binary() { local binary=$(basename $1) if ! [ -x "$(command -v $binary)" ]; then info "Installing: $1" go install $1 fi }