|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# Verify that all references point to the same version |
| 4 | + |
| 5 | +set -euo pipefail |
| 6 | + |
| 7 | +function get_first_nonblank_line() { |
| 8 | + while read line; do |
| 9 | + [[ "$line" =~ [^[:blank:]] ]] && break |
| 10 | + done < "$1" |
| 11 | + echo "$line" |
| 12 | +} |
| 13 | + |
| 14 | +### |
| 15 | +### SHA256SUM.md |
| 16 | +### |
| 17 | + |
| 18 | +line=$(get_first_nonblank_line SHA256SUM.md) |
| 19 | + |
| 20 | +# Ensure both visible text and link point to the same release |
| 21 | +version_txt="$(sed -E "s~.*\[v(.*)\].*~\1~" <<< "$line")" |
| 22 | +version_lnk="$(sed -E "s~.*/v(.*)\)$~\1~" <<< "$line")" |
| 23 | + |
| 24 | +if [[ "$version_txt" != "$version_lnk" ]]; then |
| 25 | + mark_txt="$(head -c ${#version_txt} < /dev/zero | tr '\0' '^')" |
| 26 | + mark_lnk="$(head -c ${#version_lnk} < /dev/zero | tr '\0' '^')" |
| 27 | + |
| 28 | + marks="${line/"$version_txt"/"$mark_txt"}" |
| 29 | + marks="${marks/"$version_lnk"/"$mark_lnk"}" |
| 30 | + marks="$(sed 's/[^^]/ /g' <<< "$marks")" |
| 31 | + |
| 32 | + echo "SHA256SUM.md: Visible text and linked URL do not match:" |
| 33 | + echo "$line" |
| 34 | + echo "$marks" |
| 35 | + |
| 36 | + exit 1 |
| 37 | +fi |
| 38 | + |
| 39 | +# Ensure version matches what's declared in the PR body |
| 40 | +if [[ "$version_txt" != "$RELEASE_TAG" ]]; then |
| 41 | + echo "SHA256SUM.md version doesn't match version declared in PR body" |
| 42 | + echo "PR body: #label:release v$RELEASE_TAG" |
| 43 | + echo "SHA256SUM.md: v$version_txt" |
| 44 | + |
| 45 | + exit 1 |
| 46 | +fi |
| 47 | + |
| 48 | +### |
| 49 | +### go.mod |
| 50 | +### |
| 51 | + |
| 52 | +# Get major version from go.mod |
| 53 | +major_version_go_mod="$(get_first_nonblank_line go.mod | sed -E 's~.*/v(.*)~\1~')" |
| 54 | + |
| 55 | +# Get major version declared in PR body |
| 56 | +major_version="$(sed -E 's/(.+)\..+\..+/\1/' <<< "$RELEASE_TAG")" |
| 57 | + |
| 58 | +# Ensure major version from SHA256SUM.md matches go.mod's |
| 59 | +if [[ "$major_version_go_mod" != "$major_version" ]]; then |
| 60 | + echo "go.mod version doesn't match version declared in PR body:" |
| 61 | + echo "PR body: v$major_version (v$RELEASE_TAG)" |
| 62 | + echo "go.mod: v$major_version_go_mod" |
| 63 | + |
| 64 | + exit 1 |
| 65 | +fi |
| 66 | + |
| 67 | +### |
| 68 | +### README.md |
| 69 | +### |
| 70 | + |
| 71 | +# Select all version numbers following a reference to slsa-verifier that are different |
| 72 | +# from the version defined in SHA256SUM.md |
| 73 | +results=$( |
| 74 | + grep -Pon ".*?slsa-verifier.*?\d+\.\d+\.\d+" README.md | |
| 75 | + grep -v "$RELEASE_TAG$" | |
| 76 | + sed -E 's/(.*)/ \1/' || true |
| 77 | +) |
| 78 | + |
| 79 | +if [[ "$results" != "" ]]; then |
| 80 | + echo "README.md version doesn't match version declared in PR body:" |
| 81 | + echo "PR body: #label:release v$RELEASE_TAG" |
| 82 | + echo "README.md:" |
| 83 | + echo "$results" |
| 84 | + exit 1 |
| 85 | +fi |
0 commit comments