mirror of
https://github.com/actions/runner-images.git
synced 2025-12-20 06:35:47 +00:00
[Ubuntu] Add helpers to work with checksums (#8552)
This commit is contained in:
@@ -95,3 +95,81 @@ get_github_package_download_url() {
|
||||
fi
|
||||
echo $downloadUrl
|
||||
}
|
||||
|
||||
get_github_package_hash() {
|
||||
local repo_owner=$1
|
||||
local repo_name=$2
|
||||
local file_name=$3
|
||||
local url=$4
|
||||
local version=${5:-"latest"}
|
||||
local prerelease=${6:-false}
|
||||
local delimiter=${7:-'|'}
|
||||
local word_number=${8:-2}
|
||||
|
||||
if [[ -z "$file_name" ]]; then
|
||||
echo "File name is not specified."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -n "$url" ]]; then
|
||||
release_url="$url"
|
||||
else
|
||||
if [ "$version" == "latest" ]; then
|
||||
release_url="https://api.github.com/repos/${repo_owner}/${repo_name}/releases/latest"
|
||||
else
|
||||
json=$(curl -fsSL "https://api.github.com/repos/${repo_owner}/${repo_name}/releases?per_page=100")
|
||||
tags=$(echo "$json" | jq -r --arg prerelease "$prerelease" '.[] | select(.prerelease == ($prerelease | test("true"; "i"))) | .tag_name')
|
||||
tag=$(echo "$tags" | grep -o "$version")
|
||||
if [[ "$(echo "$tag" | wc -l)" -gt 1 ]]; then
|
||||
echo "Multiple tags found matching the version $version. Please specify a more specific version."
|
||||
exit 1
|
||||
fi
|
||||
if [[ -z "$tag" ]]; then
|
||||
echo "Failed to get a tag name for version $version."
|
||||
exit 1
|
||||
fi
|
||||
release_url="https://api.github.com/repos/${repo_owner}/${repo_name}/releases/tags/$tag"
|
||||
fi
|
||||
fi
|
||||
|
||||
body=$(curl -fsSL "$release_url" | jq -r '.body' | tr -d '`')
|
||||
matching_line=$(echo "$body" | grep "$file_name")
|
||||
if [[ "$(echo "$matching_line" | wc -l)" -gt 1 ]]; then
|
||||
echo "Multiple lines found included the file $file_name. Please specify a more specific file name."
|
||||
exit 1
|
||||
fi
|
||||
if [[ -z "$matching_line" ]]; then
|
||||
echo "File name '$file_name' not found in release body."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
result=$(echo "$matching_line" | cut -d "$delimiter" -f "$word_number" | tr -d -c '[:alnum:]')
|
||||
if [[ -z "$result" ]]; then
|
||||
echo "Empty result. Check parameters delimiter and/or word_number for the matching line."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$result"
|
||||
}
|
||||
|
||||
use_checksum_comparison() {
|
||||
local file_path=$1
|
||||
local checksum=$2
|
||||
local sha_type=${3:-"256"}
|
||||
|
||||
echo "Performing checksum verification"
|
||||
|
||||
if [[ ! -f "$file_path" ]]; then
|
||||
echo "File not found: $file_path"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local_file_hash=$(shasum --algorithm "$sha_type" "$file_path" | awk '{print $1}')
|
||||
|
||||
if [[ "$local_file_hash" != "$checksum" ]]; then
|
||||
echo "Checksum verification failed. Expected hash: $checksum; Actual hash: $local_file_hash."
|
||||
exit 1
|
||||
else
|
||||
echo "Checksum verification passed"
|
||||
fi
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user