#!/usr/bin/env bash # # Copyright (c) 2018-2020 Intel Corporation # # SPDX-License-Identifier: Apache-2.0 # export GOPATH=${GOPATH:-${HOME}/go} export tests_repo="${tests_repo:-github.com/kata-containers/tests}" export tests_repo_dir="$GOPATH/src/$tests_repo" hub_bin="hub-bin" clone_tests_repo() { # KATA_CI_NO_NETWORK is (has to be) ignored if there is # no existing clone. if [ -d "${tests_repo_dir}" ] && [ -n "${KATA_CI_NO_NETWORK:-}" ]; then return fi go get -d -u "$tests_repo" || true } install_yq() { clone_tests_repo pushd "$tests_repo_dir" .ci/install_yq.sh popd } get_from_kata_deps() { local dependency="$1" BRANCH=${branch:-master} local branch="${2:-${BRANCH}}" local runtime_repo="github.com/kata-containers/kata-containers" GOPATH=${GOPATH:-${HOME}/go} local runtime_repo_dir="${GOPATH}/src/${runtime_repo}" # For our CI, we will query the local versions.yaml file both for kernel and # all other subsystems. eg: a new version of NEMU would be good to test # through CI. For the kernel, .ci/install_kata_kernel.sh file in tests # repository will pass the kernel version as an override to this function to # allow testing of kernels before they land in tree. if [ "${CI:-}" = "true" ] && [ -d "${runtime_repo_dir}" ]; then versions_file="${runtime_repo_dir}/versions.yaml" else versions_file="versions-${branch}.yaml" fi #make sure yq is installed install_yq >&2 if [ ! -e "${versions_file}" ]; then yaml_url="https://raw.githubusercontent.com/kata-containers/runtime/${branch}/versions.yaml" echo "versions file (${versions_file}) does not exist" >&2 echo "Download from ${yaml_url}" >&2 curl --silent -o "${versions_file}" "$yaml_url" fi result=$("${GOPATH}/bin/yq" read -X "$versions_file" "$dependency") [ "$result" = "null" ] && result="" echo "$result" } die() { echo >&2 "ERROR: $*" exit 1 } info() { echo >&2 "INFO: $*" } get_repo_hash() { local repo_dir=${1:-} [ -d "${repo_dir}" ] || die "${repo_dir} is not a directory" pushd "${repo_dir}" >>/dev/null git rev-parse --verify HEAD popd >>/dev/null } build_hub() { info "Get hub" if cmd=$(command -v hub); then hub_bin="${cmd}" return else hub_bin="${tmp_dir:-/tmp}/hub-bin" fi local hub_repo="github.com/github/hub" local hub_repo_dir="${GOPATH}/src/${hub_repo}" [ -d "${hub_repo_dir}" ] || git clone --quiet --depth 1 "https://${hub_repo}.git" "${hub_repo_dir}" pushd "${hub_repo_dir}" >>/dev/null git checkout master git pull ./script/build -o "${hub_bin}" popd >>/dev/null } arch_to_golang() { local -r arch="$1" case "$arch" in aarch64) echo "arm64";; ppc64le) echo "$arch";; x86_64) echo "amd64";; s390x) echo "s390x";; *) die "unsupported architecture: $arch";; esac } get_kata_hash() { repo=$1 ref=$2 git ls-remote --heads --tags "https://github.com/${project}/${repo}.git" | grep "${ref}" | awk '{print $1}' }