dotcloud/docker

View on GitHub
hack/validate/vendor

Summary

Maintainability
Test Coverage
#!/usr/bin/env bash

set -e

SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPTDIR}/.validate"

tidy_files=('vendor.mod' 'vendor.sum')
vendor_files=("${tidy_files[@]}" 'vendor/')

validate_vendor_tidy() {
    # run mod tidy
    ./hack/vendor.sh tidy
    # check if any files have changed
    git diff --quiet HEAD -- "${tidy_files[@]}"
}

validate_vendor_diff() {
    mapfile -t changed_files < <(validate_diff --diff-filter=ACMR --name-only -- "${vendor_files[@]}")

    if [ -n "${TEST_FORCE_VALIDATE:-}" ] || [ "${#changed_files[@]}" -gt 0 ]; then
        # recreate vendor/
        ./hack/vendor.sh vendor
        # check if any files have changed
        git diff --quiet HEAD -- "${vendor_files[@]}"
    else
        echo >&2 'INFO: no vendor changes in diff; skipping vendor check.'
    fi
}

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_vendor_tidy && validate_vendor_diff && validate_vendor_license; then
    echo >&2 'PASS: Vendoring has been performed correctly!'
else
    {
        echo 'FAIL: Vendoring was not performed correctly!'
        echo
        echo 'The following files changed during re-vendor:'
        echo
        git diff --name-status HEAD -- "${vendor_files[@]}"
        echo
        echo 'Please revendor with hack/vendor.sh'
        echo
        git diff --diff-filter=M -- "${vendor_files[@]}"
    } >&2
    exit 1
fi