hack/versions: extract most from vendor.conf

This sets `$what_VERSION` and `$what_REPO` for runc, cni, containerd and
kubernetes based on vendor.conf, removing the need to duplicate things in
hack/versions.

With this `update_hack_versions` becomes redundant so remove it and both calls.

Since CONTAINERD_REPO is now unconditionally set we can also simplify the
fetching of vendor.conf in update-vendor.sh a bit, so do so. Further since
`*_REPO` are now unconditionally set we can support alternative clone paths for
all of these repos by adjusting checkout_repo to make the 3rd argument
non-optional and always passing it. Since `CRITOOL_VERSION` is not coming from
`vendor.conf` (since it is not used from Go code) we manually set
`CRITOOL_REPO` for consistency.

The final wrinkle is that `k8s.io/kubernetes` is has a Go specific redirect in
the form of HTML meta headers returned from https://k8s.io/kubernetes/?go-get=1
which point to the real repo to clone. Parsing that in shell is tricky so just
hardcode that.

Fixes #540.

Signed-off-by: Ian Campbell <ijc@docker.com>
This commit is contained in:
Ian Campbell
2018-01-17 16:30:50 +00:00
parent 5e7347db53
commit f6dd8c9e52
5 changed files with 49 additions and 56 deletions

View File

@@ -61,3 +61,29 @@ sha256() {
shasum -a256 "$1" | awk '{ print $1 }'
fi
}
# Takes a prefix ($what) and a $repo and sets `$what_VERSION` and
# `$what_REPO` from vendor.conf, where `$what_REPO` defaults to $repo
# but is overridden by the 3rd field of vendor.conf.
from-vendor() {
local what=$1
local repo=$2
local vendor=$(dirname "${BASH_SOURCE[0]}")/../vendor.conf
setvars=$(awk -v REPO=$repo -v WHAT=$what -- '
BEGIN { rc=1 } # Assume we did not find what we were looking for.
// {
if ($1 == REPO) {
if ($3 != "") { REPO = $3 }; # Override repo.
printf("%s_VERSION=%s; %s_REPO=%s\n", WHAT, $2, WHAT, REPO);
rc=0; # Note success for use in END block.
exit # No point looking further.
}
}
END { exit rc } # Exit with the desired code.
' $vendor)
if [ $? -ne 0 ] ; then
echo "failed to get version of $repo from $vendor" >&2
exit 1
fi
eval $setvars
}