#!/usr/bin/env bash set -e SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "${SCRIPTDIR}/.validate" modules_files=('api/go.mod' 'client/go.mod' 'man/go.mod' 'go.mod') tidy_files=("${modules_files[@]}" 'api/go.sum' 'client/go.sum' 'man/go.sum' 'go.sum') vendor_files=("${tidy_files[@]}" 'vendor/') validate_tidy_modules() { # check that all go.mod files exist in HEAD; go.sum files are generated by 'go mod tidy' # so we don't need to check for their existence beforehand for f in "${modules_files[@]}"; do if [ ! -f "$f" ]; then echo >&2 "ERROR: missing $f" return 1 fi done # run mod tidy ./hack/vendor.sh tidy # check if any files have changed git diff --quiet HEAD -- "${tidy_files[@]}" && [ -z "$(git ls-files --others --exclude-standard)" ] } validate_vendor_diff() { # recreate vendor/ ./hack/vendor.sh vendor # check if any files have changed git diff --quiet HEAD -- "${vendor_files[@]}" && [ -z "$(git ls-files --others --exclude-standard)" ] } validate_vendor_license() { while IFS= read -r module; do test -d "vendor/$module" || continue if ! compgen -G "vendor/$module/*" | grep -qEi '/(LICENSE|COPYING)[^/]*$'; then echo >&2 "WARNING: could not find copyright information for $module" fi done < <(awk '/^# /{ print $2 }' vendor/modules.txt) } if validate_tidy_modules && validate_vendor_diff && validate_vendor_license; then echo >&2 'PASS: Vendoring has been performed correctly!' else { echo 'FAIL: Vendoring was not performed correctly!' echo if [ -n "$(git ls-files --others --exclude-standard)" ]; then echo 'The following files are missing:' git ls-files --others --exclude-standard echo fi if [ -n "$(git diff --name-status HEAD -- "${vendor_files[@]}")" ]; then echo 'The following files changed during re-vendor:' git diff --name-status HEAD -- "${vendor_files[@]}" echo fi echo 'Please revendor with hack/vendor.sh' echo git diff --diff-filter=M -- "${vendor_files[@]}" } >&2 exit 1 fi