Prepare for dependency vendoring.
- Add helper script to simplify glide usage. - Add validation script for unwanted changes to vendoring. - Relax/tighten up .{git,docker}ignore to cover vendored files properly. - .validate: Protect from unbound variable in case of nounset setting. - Install more recent hg version in the build container. - Remove glide installation steps from Dockerfile. - Update documentation.
This commit is contained in:
parent
dae28f7f17
commit
49a09ab7dd
13 changed files with 196 additions and 42 deletions
|
@ -1,6 +1,6 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ -z "$VALIDATE_UPSTREAM" ]; then
|
||||
if [ -z "${VALIDATE_UPSTREAM:-}" ]; then
|
||||
# this is kind of an expensive check, so let's not do this twice if we
|
||||
# are running more than one validate bundlescript
|
||||
|
||||
|
|
119
script/glide.sh
Executable file
119
script/glide.sh
Executable file
|
@ -0,0 +1,119 @@
|
|||
#!/bin/bash
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
set -o nounset
|
||||
|
||||
####
|
||||
### Helper script for glide[-vc] to handle specifics for the Traefik repo.
|
||||
##
|
||||
# In particular, the 'integration/' directory contains its own set of
|
||||
# glide-managed dependencies which must not have its nested vendor folder
|
||||
# stripped. Depending on where the script is called from, it will do the Right
|
||||
# Thing.
|
||||
#
|
||||
|
||||
CWD="$(pwd)"; readonly CWD
|
||||
GLIDE_ARGS=()
|
||||
GLIDE_VC_ARGS=(
|
||||
'--use-lock-file' # `glide list` seems to miss test dependencies, e.g., github.com/mattn/go-shellwords
|
||||
'--only-code'
|
||||
'--no-tests'
|
||||
)
|
||||
|
||||
usage() {
|
||||
echo "usage: $(basename "$0") install | update | get <package> | trim
|
||||
install: Install all dependencies and trim the vendor folder afterwards (alternative command: i).
|
||||
update: Update all dependencies and trim the vendor folder afterwards (alternative command: up).
|
||||
get: Add a dependency and trim the vendor folder afterwards.
|
||||
trim: Trim the vendor folder only, do not install or update dependencies.
|
||||
|
||||
The current working directory must contain a glide.yaml file." >&2
|
||||
}
|
||||
|
||||
is_integration_dir() {
|
||||
[[ "$(basename ${CWD})" = 'integration' ]]
|
||||
}
|
||||
|
||||
if ! is_integration_dir; then
|
||||
GLIDE_ARGS+=('--strip-vendor' '--skip-test')
|
||||
fi
|
||||
|
||||
if ! type glide > /dev/null 2>&1; then
|
||||
echo "glide not found in PATH." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! type glide-vc > /dev/null 2>&1; then
|
||||
echo "glide-vc not found in PATH." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -e "${CWD}/glide.yaml" ]]; then
|
||||
echo "no glide.yaml file found in the current working directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ $# -lt 1 ]]; then
|
||||
echo "missing command" >&2
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
readonly glide_command="$1"
|
||||
shift
|
||||
|
||||
skip_glide_command=
|
||||
case "${glide_command}" in
|
||||
'install' | 'i')
|
||||
if [[ $# -ne 0 ]]; then
|
||||
echo "surplus parameters given" >&2
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
'update' | 'up')
|
||||
if [[ $# -ne 0 ]]; then
|
||||
echo "surplus parameters given" >&2
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
'get')
|
||||
if [[ $# -ne 1 ]]; then
|
||||
echo 'insufficient/surplus arguments given for "get" command' >&2
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
GLIDE_ARGS=("$1" "${GLIDE_ARGS[@]}")
|
||||
shift
|
||||
;;
|
||||
|
||||
'trim')
|
||||
if [[ $# -ne 0 ]]; then
|
||||
echo "surplus parameters given" >&2
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
skip_glide_command=yes
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "unknown command: ${glide_command}" >&2
|
||||
usage
|
||||
exit 1
|
||||
esac
|
||||
readonly skip_glide_command
|
||||
|
||||
if [[ -z "${skip_glide_command}" ]]; then
|
||||
# Use parameter substitution to account for an empty glide arguments array
|
||||
# that would otherwise lead to an "unbound variable" error due to the nounset
|
||||
# option.
|
||||
GLIDE_ARGS=("${GLIDE_ARGS+"${GLIDE_ARGS[@]}"}")
|
||||
echo "running: glide ${glide_command} ${GLIDE_ARGS[*]}"
|
||||
glide ${glide_command} ${GLIDE_ARGS[*]}
|
||||
fi
|
||||
|
||||
echo "trimming vendor folder using: glide-vc ${GLIDE_VC_ARGS[*]}"
|
||||
glide-vc ${GLIDE_VC_ARGS[*]}
|
|
@ -6,7 +6,7 @@ if grep -q "$(glide-hash)" glide.lock; then
|
|||
echo 'Congratulations! glide.lock is unchanged.'
|
||||
else
|
||||
{
|
||||
echo "Error: glide.lock has been manually changed. Don't do this. Use glide up instead."
|
||||
echo "Error: glide.lock has been manually changed. Don't do this. Use script/glide.sh up instead."
|
||||
echo
|
||||
} >&2
|
||||
false
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
source "$(dirname "$BASH_SOURCE")/.validate"
|
||||
|
||||
IFS=$'\n'
|
||||
files=( $(validate_diff --diff-filter=ACMR --name-only -- '*.go' | grep -v '^vendor' || true) )
|
||||
files=( $(validate_diff --diff-filter=ACMR --name-only -- '*.go' | grep -v '^\(integration/\)\?vendor/' || true) )
|
||||
unset IFS
|
||||
|
||||
badFiles=()
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
source "$(dirname "$BASH_SOURCE")/.validate"
|
||||
|
||||
IFS=$'\n'
|
||||
files=( $(validate_diff --diff-filter=ACMR --name-only -- '*.go' | grep -v '^vendor/\|autogen' || true) )
|
||||
files=( $(validate_diff --diff-filter=ACMR --name-only -- '*.go' | grep -v '^\(integration/\)\?vendor/\|autogen' || true) )
|
||||
unset IFS
|
||||
|
||||
errors=()
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
source "$(dirname "$BASH_SOURCE")/.validate"
|
||||
|
||||
IFS=$'\n'
|
||||
files=( $(validate_diff --diff-filter=ACMR --name-only -- '*.go' | grep -v '^vendor/' || true) )
|
||||
files=( $(validate_diff --diff-filter=ACMR --name-only -- '*.go' | grep -v '^\(integration/\)\?vendor/' || true) )
|
||||
unset IFS
|
||||
|
||||
errors=()
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
source "$(dirname "$BASH_SOURCE")/.validate"
|
||||
|
||||
IFS=$'\n'
|
||||
src=( $(validate_diff --diff-filter=ACMR --name-only -- '*.go' | grep -v '^vendor/\|autogen' || true) )
|
||||
src=( $(validate_diff --diff-filter=ACMR --name-only -- '*.go' | grep -v '^\(integration/\)\?vendor/\|autogen' || true) )
|
||||
docs=( $(validate_diff --diff-filter=ACMR --name-only -- 'docs/*.md') )
|
||||
unset IFS
|
||||
files=("${src[@]}" "${docs[@]}")
|
||||
|
|
37
script/validate-vendor
Executable file
37
script/validate-vendor
Executable file
|
@ -0,0 +1,37 @@
|
|||
#!/bin/bash
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
set -o nounset
|
||||
|
||||
SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"; export SCRIPTDIR
|
||||
source "${SCRIPTDIR}/.validate"
|
||||
|
||||
# Iterate over all directories containing vendor folders.
|
||||
for dir in . integration; do
|
||||
vendor_dir="${dir}/vendor/"
|
||||
IFS=$'\n' files=( $(validate_diff --diff-filter=ACMR --name-only -- ${vendor_dir} || true) )
|
||||
|
||||
if [[ ${#files[@]} -gt 0 ]]; then
|
||||
# We run glide install to and see if we have a diff afterwards
|
||||
echo "checking ${vendor_dir} for unintentional changes..."
|
||||
(
|
||||
cd ${dir}
|
||||
"${SCRIPTDIR}/glide.sh" install
|
||||
)
|
||||
# Let see if the working directory is clean
|
||||
diffs="$(git status --porcelain -- ${vendor_dir} 2>/dev/null)"
|
||||
if [[ "$diffs" ]]; then
|
||||
{
|
||||
echo "The result of 'glide install' for vendor directory '${dir}' differs"
|
||||
echo
|
||||
echo "$diffs"
|
||||
echo
|
||||
echo 'Please vendor your package(s) with script/glide.sh.'
|
||||
echo
|
||||
} >&2
|
||||
exit 2
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo 'Congratulations! All vendoring changes are done the right way.'
|
Loading…
Add table
Add a link
Reference in a new issue