| #!/bin/bash |
| |
| # Copyright 2018 Google LLC |
| # Copyright 2022 Centipede Authors |
| # |
| # 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 |
| # |
| # https://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. |
| # |
| |
| set -eu -o pipefail |
| |
| source ./centipede/install_dependencies_debian.sh |
| # The above script installs a custom version of clang and exports its bin subdir |
| # in CLANG_BIN_DIR envvar. |
| export PATH="${CLANG_BIN_DIR}:$PATH" |
| declare MAYBE_SUDO="" |
| if (( "$EUID" != 0 )); then |
| MAYBE_SUDO="sudo" |
| fi |
| |
| ${MAYBE_SUDO} apt install -y rename |
| |
| ######################################## |
| # LOG ENVIRONMENT DEBUG INFO |
| ######################################## |
| date --rfc-3339=seconds |
| echo "Debug Info" |
| echo "OUTPUT_ARTIFACTS_DIR=${OUTPUT_ARTIFACTS_DIR}" |
| |
| mkdir -p "${OUTPUT_ARTIFACTS_DIR}" |
| find . >"${OUTPUT_ARTIFACTS_DIR}/full_file_list.log" |
| { |
| printenv |
| which bazel |
| bazel version |
| bazel info --show_make_env |
| } >"${OUTPUT_ARTIFACTS_DIR}/build_environment.log" |
| |
| ######################################## |
| # RUN TESTS |
| ######################################## |
| date --rfc-3339=seconds |
| echo "Building and testing with Bazel" |
| |
| declare BAZEL_OUTPUT_DIR |
| BAZEL_OUTPUT_DIR="$(bazel info output_base)" |
| readonly BAZEL_OUTPUT_DIR |
| declare -ra BAZEL_ARGS=("--color=no" "--curses=no" "--noshow_progress") |
| |
| set +e |
| # TODO(b/259298232): When/if any part of the bug ever gets fixed, do some of: |
| # - Remove `--local_test_jobs=1`. |
| # - Remove `--test_filter`. |
| # - Use `testing:all` instead of specific tests under `testing`. |
| # - Use a single `bazel test "${BAZEL_ARGS[@]}" ...`. |
| bazel test "${BAZEL_ARGS[@]}" --local_test_jobs=1 --test_output=streamed \ |
| --test_filter="-CommandDeathTest.Execute" centipede:all && |
| bazel test "${BAZEL_ARGS[@]}" centipede/testing:instrumentation_test centipede/testing:runner_test && |
| bazel test "${BAZEL_ARGS[@]}" centipede/puzzles:all |
| declare -ri exit_code=$? |
| set -e |
| |
| # Capture the build log as a fake test to reduce download spam |
| declare -r FULL_BUILD_LOG_DIR="bazel_full_build_log" |
| mkdir -p "${OUTPUT_ARTIFACTS_DIR}/${FULL_BUILD_LOG_DIR}" |
| cp "${BAZEL_OUTPUT_DIR}/command.log" "${OUTPUT_ARTIFACTS_DIR}/${FULL_BUILD_LOG_DIR}/sponge_log.log" |
| cat >"${OUTPUT_ARTIFACTS_DIR}/${FULL_BUILD_LOG_DIR}/sponge_log.xml" <<DOC |
| <?xml version="1.0" encoding="UTF-8"?> |
| <testsuites name=""> |
| <testsuite name="${FULL_BUILD_LOG_DIR}" tests="1" errors="${exit_code}"></testsuite> |
| </testsuites> |
| DOC |
| chmod -R a+w "${OUTPUT_ARTIFACTS_DIR}/${FULL_BUILD_LOG_DIR}" |
| |
| ######################################## |
| # REMAP OUTPUT FILES |
| ######################################## |
| declare -r OUTPUT_BAZEL_LOGS_DIR="${OUTPUT_ARTIFACTS_DIR}/bazel_test_logs" |
| rm -rf "${OUTPUT_BAZEL_LOGS_DIR}" # For local testing |
| mkdir -p "${OUTPUT_BAZEL_LOGS_DIR}" |
| |
| # Copy test.{log,xml} files to kokoro artifacts directory, then rename them. |
| find -L bazel-testlogs -name "test.log" -exec cp --parents {} "${OUTPUT_BAZEL_LOGS_DIR}" \; |
| find -L "${OUTPUT_BAZEL_LOGS_DIR}" -name "test.log" -exec rename 's/test\.log/sponge_log.log/' {} \; |
| find -L bazel-testlogs -name "test.xml" -exec cp --parents {} "${OUTPUT_BAZEL_LOGS_DIR}" \; |
| find -L "${OUTPUT_BAZEL_LOGS_DIR}" -name "test.xml" -exec rename 's/test\.xml/sponge_log.xml/' {} \; |
| |
| chmod -R a+w "${OUTPUT_BAZEL_LOGS_DIR}" |
| |
| date --rfc-3339=seconds |
| echo "Exiting test workflow" |
| |
| exit ${exit_code} |