93 lines
3.4 KiB
Bash
Executable File
93 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright 2021 The Kubernetes Authors All rights reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# This script is called once per integration test. If all integration tests that
|
|
# have registered themselves in the started environment list have also
|
|
# registered themselves in the finished environment list, this script reports
|
|
# flakes or uploads flakes to flake data.
|
|
#
|
|
# This script expects the following env variables:
|
|
# MINIKUBE_LOCATION: The GitHub location being run on (e.g. master, 11000).
|
|
# COMMIT: Commit hash the tests ran on.
|
|
# ROOT_JOB_ID: Job ID to use for synchronization.
|
|
|
|
set -o pipefail
|
|
|
|
BUCKET_PATH="gs://minikube-builds/logs/${MINIKUBE_LOCATION}/${ROOT_JOB_ID}"
|
|
STARTED_LIST=$(gsutil cat "${BUCKET_PATH}/started_environments.txt" | sort | uniq)
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Unable to read environment list. Likely being run before all tests are ready or after tests have already been uploaded." 1>&2
|
|
exit 0
|
|
fi
|
|
|
|
set -eu -o pipefail
|
|
|
|
FINISHED_LIST_REMOTE="${BUCKET_PATH}/finished_environments.txt"
|
|
# Ensure FINISHED_LIST_REMOTE exists so we can append (but don't erase any existing entries in FINISHED_LIST_REMOTE)
|
|
< /dev/null gsutil cp -n - "${FINISHED_LIST_REMOTE}"
|
|
# Copy the job name to APPEND_TMP. If the job name ends in "_integration" remove it.
|
|
APPEND_TMP="${BUCKET_PATH}/$(basename $(mktemp))"
|
|
echo "${UPSTREAM_JOB}"\
|
|
| sed -r 's/_integration$//'\
|
|
| gsutil cp - "${APPEND_TMP}"
|
|
# Append job name to remote finished list.
|
|
gsutil compose "${FINISHED_LIST_REMOTE}" "${APPEND_TMP}" "${FINISHED_LIST_REMOTE}"
|
|
gsutil rm "${APPEND_TMP}"
|
|
|
|
FINISHED_LIST=$(mktemp)
|
|
gsutil cat "${FINISHED_LIST_REMOTE}"\
|
|
| sort\
|
|
| uniq > "${FINISHED_LIST}"
|
|
|
|
STARTED_COUNT=$(echo "${STARTED_LIST}" | wc -l)
|
|
FINISHED_LIST_JOINED=$(\
|
|
echo "${STARTED_LIST}"\
|
|
| join - "${FINISHED_LIST}")
|
|
FINISHED_COUNT=$(\
|
|
echo "${FINISHED_LIST_JOINED}"\
|
|
| wc -l)
|
|
|
|
if [ ${STARTED_COUNT} -ne ${FINISHED_COUNT} ]; then
|
|
echo "Started environments are not all finished! Started: ${STARTED_LIST}, Finished: $(cat ${FINISHED_LIST}))"
|
|
exit 0
|
|
fi
|
|
|
|
# Prevent other invocations of this script from uploading the same thing multiple times.
|
|
gsutil rm "${BUCKET_PATH}/started_environments.txt"
|
|
|
|
# At this point, we know all integration tests are done and we can process all summaries safely.
|
|
echo "${FINISHED_LIST_JOINED}" > ${FINISHED_LIST}
|
|
|
|
# Get directory of this script.
|
|
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
|
|
|
# Ensure jq is installed on this machine.
|
|
sudo apt-get install jq -y
|
|
|
|
if [[ "${MINIKUBE_LOCATION}" == "master" ]]; then
|
|
for ENVIRONMENT in ${STARTED_LIST}; do
|
|
SUMMARY="${BUCKET_PATH}/${ENVIRONMENT}_summary.json"
|
|
"${DIR}/upload_tests.sh" "${SUMMARY}" || true
|
|
done
|
|
"${DIR}/process_last_90/process_last_90.sh"
|
|
else
|
|
"${DIR}/report_flakes.sh" "${MINIKUBE_LOCATION}" "${ROOT_JOB_ID}" "${FINISHED_LIST}"
|
|
fi
|
|
|
|
gsutil rm "${BUCKET_PATH}/finished_environments.txt"
|
|
rm "${FINISHED_LIST}"
|