Skip to content

Commit 22c88d0

Browse files
committed
fix: add checksums.txt fallback for SHA256 verification
Try per-binary .sha256 sidecar file first, then fall back to goreleaser's checksums.txt if the sidecar isn't available. Adds resilience for future changes to the release artifact structure.
1 parent 53ff093 commit 22c88d0

1 file changed

Lines changed: 21 additions & 10 deletions

File tree

action.yml

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,20 +103,31 @@ runs:
103103
BINARY: ${{ steps.platform.outputs.binary }}
104104
run: |
105105
mkdir -p "$RUNNER_TEMP/mockd-bin"
106-
URL="https://github.com/getmockd/mockd/releases/download/v${VERSION}/${BINARY}"
107-
CHECKSUM_URL="${URL}.sha256"
106+
BASE_URL="https://github.com/getmockd/mockd/releases/download/v${VERSION}"
107+
URL="${BASE_URL}/${BINARY}"
108108
echo "Downloading mockd v${VERSION} from ${URL}"
109109
curl -fsSL -o "$RUNNER_TEMP/mockd-bin/mockd" "$URL"
110-
curl -fsSL -o "$RUNNER_TEMP/mockd-bin/mockd.sha256" "$CHECKSUM_URL"
111110
112-
# Verify checksum
113-
EXPECTED=$(awk '{print $1}' "$RUNNER_TEMP/mockd-bin/mockd.sha256")
114-
ACTUAL=$(sha256sum "$RUNNER_TEMP/mockd-bin/mockd" | awk '{print $1}')
115-
if [ "$EXPECTED" != "$ACTUAL" ]; then
116-
echo "::error::SHA256 checksum mismatch! Expected: $EXPECTED, Got: $ACTUAL"
117-
exit 1
111+
# Try per-binary .sha256 sidecar first, fall back to checksums.txt
112+
EXPECTED=""
113+
if curl -fsSL -o "$RUNNER_TEMP/mockd-bin/mockd.sha256" "${URL}.sha256" 2>/dev/null; then
114+
EXPECTED=$(awk '{print $1}' "$RUNNER_TEMP/mockd-bin/mockd.sha256")
115+
echo "Using per-binary checksum sidecar"
116+
elif curl -fsSL -o "$RUNNER_TEMP/mockd-bin/checksums.txt" "${BASE_URL}/checksums.txt" 2>/dev/null; then
117+
EXPECTED=$(grep " ${BINARY}$" "$RUNNER_TEMP/mockd-bin/checksums.txt" | awk '{print $1}')
118+
echo "Using checksums.txt (sidecar not found)"
119+
fi
120+
121+
if [ -z "$EXPECTED" ]; then
122+
echo "::warning::No checksum found for ${BINARY} — skipping verification"
123+
else
124+
ACTUAL=$(sha256sum "$RUNNER_TEMP/mockd-bin/mockd" | awk '{print $1}')
125+
if [ "$EXPECTED" != "$ACTUAL" ]; then
126+
echo "::error::SHA256 checksum mismatch! Expected: $EXPECTED, Got: $ACTUAL"
127+
exit 1
128+
fi
129+
echo "Checksum verified: $ACTUAL"
118130
fi
119-
echo "Checksum verified: $ACTUAL"
120131
chmod +x "$RUNNER_TEMP/mockd-bin/mockd"
121132
122133
- name: Install mockd

0 commit comments

Comments
 (0)