kube-state-metrics/tests/compare_benchmarks.sh

50 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# exit immediately when a command fails
set -e
# only exit with zero if all commands of the pipeline exit successfully
set -o pipefail
# error on unset variables
set -u
[[ "$#" -le 2 ]] || echo "At least one argument required, $# provided."
REF_CURRENT="$(git rev-parse --abbrev-ref HEAD)"
REF_TO_COMPARE="${1}"
COUNT=${2:-"1"}
echo "Running benchmarks ${COUNT} time(s)"
RESULT_CURRENT="$(mktemp)-${REF_CURRENT}"
RESULT_TO_COMPARE="$(mktemp)-${REF_TO_COMPARE}"
echo ""
echo "### Testing ${REF_CURRENT}"
go test -benchmem -run=NONE -bench=. -count="${COUNT}" ./... | tee "${RESULT_CURRENT}"
echo ""
echo "### Done testing ${REF_CURRENT}"
echo ""
echo "### Testing ${REF_TO_COMPARE}"
git checkout "${REF_TO_COMPARE}"
go test -benchmem -run=NONE -bench=. -count="${COUNT}" ./... | tee "${RESULT_TO_COMPARE}"
echo ""
echo "### Done testing ${REF_TO_COMPARE}"
git checkout -
echo ""
echo "### Result"
echo "old=${REF_TO_COMPARE} new=${REF_CURRENT}"
if [[ -z "${BENCHSTAT_OUTPUT_FILE}" ]]; then
go tool golang.org/x/perf/cmd/benchstat "${REF_TO_COMPARE}=${RESULT_TO_COMPARE}" "${REF_CURRENT}=${RESULT_CURRENT}"
else
go tool golang.org/x/perf/cmd/benchstat "${REF_TO_COMPARE}=${RESULT_TO_COMPARE}" "${REF_CURRENT}=${RESULT_CURRENT}" | tee -a "${BENCHSTAT_OUTPUT_FILE}"
fi