| #!/bin/bash |
| # Copyright lowRISC contributors. |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| set -e -x |
| |
| # This doesn't install dependencies, but should otherwise behave the |
| # same as what CI would do on a pull request |
| DEFAULT="master" |
| |
| # use tests from a condonedlist |
| TESTS=( |
| "//sw/device/silicon_creator/lib:error_unittest" |
| "//sw/device/silicon_creator/lib:epmp_unittest" |
| "//sw/device/silicon_creator/lib:manifest_unittest" |
| "//sw/device/silicon_creator/lib:log_unittest" |
| "//sw/device/silicon_creator/lib:shutdown_unittest" |
| "//sw/device/silicon_creator/lib/base:sec_mmio_unittest" |
| "//sw/device/silicon_creator/lib/drivers:uart_unittest" |
| "//sw/device/silicon_creator/lib/drivers:lifecycle_unittest" |
| "//sw/device/silicon_creator/lib/drivers:flash_ctrl_unittest" |
| "//sw/device/silicon_creator/lib/drivers:rstmgr_unittest" |
| "//sw/device/silicon_creator/lib/drivers:keymgr_unittest" |
| "//sw/device/silicon_creator/lib/drivers:watchdog_unittest" |
| "//sw/device/silicon_creator/lib/drivers:otbn_unittest" |
| "//sw/device/silicon_creator/lib/drivers:otp_unittest" |
| "//sw/device/silicon_creator/lib/drivers:retention_sram_unittest" |
| "//sw/device/silicon_creator/lib/drivers:pinmux_unittest" |
| "//sw/device/silicon_creator/lib/drivers:hmac_unittest" |
| "//sw/device/silicon_creator/lib/drivers:alert_unittest" |
| "//sw/device/silicon_creator/lib/sigverify:mod_exp_ibex_unittest" |
| "//sw/device/silicon_creator/lib/sigverify:sigverify_unittest" |
| "//sw/device/silicon_creator/mask_rom:boot_policy_unittest" |
| "//sw/device/silicon_creator/mask_rom:sigverify_keys_unittest" |
| ) |
| |
| git config advice.detachedHead false |
| |
| ORIGINAL_BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "") |
| ORIGINAL_SHA=$(git rev-parse HEAD) |
| |
| summarize_tests () { |
| bazel test --keep_going --nobuild_tests_only -- ${TESTS[*]}\ |
| | grep '//'\ |
| | sed 's/ (cached) / / ; s/ in / / ; s/ [0-9]\+.[0-9]\+s// ; s/ \+/ /g' \ |
| | sort > "$1" |
| return "${PIPESTATUS[0]}" |
| } |
| |
| mkdir -p bazel-results |
| |
| if summarize_tests bazel-results/newresult.txt |
| then |
| exit 0 |
| fi |
| |
| git remote add upstream https://github.com/lowrisc/opentitan.git || true |
| git fetch upstream $DEFAULT |
| |
| if [ "$(git merge-base HEAD upstream/$DEFAULT)" != "$(git rev-parse HEAD)" ] |
| then |
| # If on a branch we want to compare to the merge-base with master |
| git checkout "$(git merge-base HEAD upstream/$DEFAULT)" |
| else |
| # If on master we want to compare to the last tested ancestor, but that's |
| # fairly hard to review so let's leave that alone for now. We wouldn't act on |
| # it anyway. |
| echo "Test is failing but I can't compare it to a merge base because we're on upstream/$DEFAULT" |
| cat bazel-results/newresult.txt |
| exit 0 |
| fi |
| |
| summarize_tests bazel-results/oldresult.txt || true |
| |
| { diff bazel-results/oldresult.txt bazel-results/newresult.txt > bazel-results/result.diff ; diffreturn="$?" ; } || true |
| case $diffreturn in |
| 0) |
| echo "Reran and compared a summary of the outputs and they matched so this was already broken." |
| cat bazel-results/newresult.txt |
| git switch "$ORIGINAL_BRANCH_NAME" || git checkout "$ORIGINAL_SHA" |
| exit 0 ;; |
| 1) |
| echo "I found a different result" |
| cat bazel-results/result.diff |
| # Fail if anything used to pass and doesn't anymore |
| echo "We'll pass only if none of the tests stopped passing when compared to the merge base" |
| if [[ $(grep "<.*PASSED" -c bazel-results/result.diff) != 0 ]] |
| then |
| exit 1 |
| else |
| git switch "$ORIGINAL_BRANCH_NAME" || git checkout "$ORIGINAL_SHA" |
| exit 0 |
| fi |
| ;; |
| *) |
| echo "diff returned $diffreturn which indicates trouble comparing" ; |
| echo "Old Result" |
| cat bazel-results/oldresult.txt |
| echo "New Result" |
| cat bazel-results/newresult.txt |
| exit $diffreturn ;; |
| esac |
| |