k8s-conformance/docs/check-conformance-test-suit...

98 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
set -x
cd "$(realpath "$(dirname "$0")")" && cd "$(git rev-parse --show-toplevel)"
GITHUB_WORKSPACE="${GITHUB_WORKSPACE:-$PWD}"
echo "GITHUB_WORKSPACE=$GITHUB_WORKSPACE"
function init_settings() {
TEST_SUITE_DOCUMENT="unchecked"
STABLE_VERSION="$(curl -sSL https://dl.k8s.io/release/stable.txt)"
echo "STABLE_VERSION: $STABLE_VERSION"
RELEASE_VERSION="$(echo "$STABLE_VERSION" | awk -F '.' '{print $1 "." $2}').0"
echo "RELEASE_VERSION: $RELEASE_VERSION"
KUBE_CONFORMANCE_FILENAME="KubeConformance-$(echo "$STABLE_VERSION" | awk -F '.' '{print $1 "." $2}' | sed 's/v//').md"
echo "KUBE_CONFORMANCE_FILENAME: $KUBE_CONFORMANCE_FILENAME"
CONFORMANCE_BASE_URL="${CONFORMANCE_BASE_URL:-https://raw.githubusercontent.com/cncf/k8s-conformance/master/docs}"
echo "CONFORMANCE_BASE_URL: $CONFORMANCE_BASE_URL"
MD_FILE_URL=${CONFORMANCE_BASE_URL}/${KUBE_CONFORMANCE_FILENAME}
echo "MD_FILE_URL: $MD_FILE_URL"
RESPONSE_CODE=$(curl -s -o /dev/null "$MD_FILE_URL" --write-out "%{http_code}")
if [[ $RESPONSE_CODE == "404" ]]; then
TEST_SUITE_DOCUMENT="missing"
fi
}
function setup_k8s_repo() {
mkdir -p /tmp/go/src/k8s.io
cd "$_"
if [ ! -d /tmp/go/src/k8s.io/kubernetes ]; then
git clone --depth 1 --branch "${RELEASE_VERSION}" https://github.com/kubernetes/kubernetes.git
fi
export KUBE_ROOT=/tmp/go/src/k8s.io/kubernetes
cd "${KUBE_ROOT}"
git log -1
}
function install_go() {
cd ${KUBE_ROOT}
GO_VERSION=$(grep -A1 "golang: upstream version" build/dependencies.yaml | tail -1 | awk -F ':' '{print $2}' | sed 's/^ *//')
echo "GO_VERSION: $GO_VERSION"
if [ "$(/usr/local/go/bin/go version | cut -d' ' -f 3 | sed 's/go1/1/')" != "${GO_VERSION}" ]; then
curl -L https://dl.google.com/go/go"${GO_VERSION}".linux-amd64.tar.gz \
| sudo tar --directory /usr/local --extract --ungzip
fi
export PATH="/usr/local/go/bin:$PATH"
go version
}
function build_deps() {
sudo apt-get update
sudo apt-get install -y gcc
cd "${KUBE_ROOT}"
DBG=1 hack/make-rules/build.sh vendor/github.com/onsi/ginkgo/v2/ginkgo test/e2e/e2e.test
}
function build_release_documentation() {
cd "${KUBE_ROOT}"
test/conformance/gen-specsummaries.sh
DOC_VERSION="$(echo "$STABLE_VERSION" | awk -F '.' '{print $1 "." $2}' | sed 's/v//')"
go run ./test/conformance/walk.go --version="$DOC_VERSION" \
--source "${KUBE_ROOT}" \
--url https://github.com/kubernetes/kubernetes/tree/release-"${DOC_VERSION}"/ \
--docs ./_output/specsummaries.json > ./_output/KubeConformance-"${DOC_VERSION}".md
cp ./_output/KubeConformance-"${DOC_VERSION}".md "${GITHUB_WORKSPACE}"/docs/KubeConformance-"${DOC_VERSION}".md
echo "${RELEASE_VERSION}" > /tmp/release-version
echo "Conformance test suite documention for $(< /tmp/release-version) has been created"
}
function main() {
echo "Executing script: $(basename "$0")"
echo "Checking status of Kubernetes Conformance test suite documention"
init_settings
if [[ $TEST_SUITE_DOCUMENT == "missing" ]]; then
echo "Conformance test suite documentation for ${RELEASE_VERSION} was not found."
echo "Generating documentation..."
setup_k8s_repo
install_go
build_deps
build_release_documentation
else
echo "Conformance test suite documentation for ${RELEASE_VERSION} was found. No further action required"
fi
}
main