summaryrefslogtreecommitdiff
path: root/vendor/github.com/jackc/pgx/v5/internal/sanitize/benchmmark.sh
blob: ec0f7b03abc6e32bbd3aee3dd09b0fd3d7a3cd95 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/env bash

current_branch=$(git rev-parse --abbrev-ref HEAD)
if [ "$current_branch" == "HEAD" ]; then
    current_branch=$(git rev-parse HEAD)
fi

restore_branch() {
    echo "Restoring original branch/commit: $current_branch"
    git checkout "$current_branch"
}
trap restore_branch EXIT

# Check if there are uncommitted changes
if ! git diff --quiet || ! git diff --cached --quiet; then
    echo "There are uncommitted changes. Please commit or stash them before running this script."
    exit 1
fi

# Ensure that at least one commit argument is passed
if [ "$#" -lt 1 ]; then
    echo "Usage: $0 <commit1> <commit2> ... <commitN>"
    exit 1
fi

commits=("$@")
benchmarks_dir=benchmarks

if ! mkdir -p "${benchmarks_dir}"; then
    echo "Unable to create dir for benchmarks data"
    exit 1
fi

# Benchmark results
bench_files=()

# Run benchmark for each listed commit
for i in "${!commits[@]}"; do
    commit="${commits[i]}"
    git checkout "$commit" || {
        echo "Failed to checkout $commit"
        exit 1
    }

    # Sanitized commmit message
    commit_message=$(git log -1 --pretty=format:"%s" | tr -c '[:alnum:]-_' '_')

    # Benchmark data will go there
    bench_file="${benchmarks_dir}/${i}_${commit_message}.bench"

    if ! go test -bench=. -count=10 >"$bench_file"; then
        echo "Benchmarking failed for commit $commit"
        exit 1
    fi

    bench_files+=("$bench_file")
done

# go install golang.org/x/perf/cmd/benchstat[@latest]
benchstat "${bench_files[@]}"