[ubuntu] Refactor GitHub package download URL function (#8947)

* [ubuntu] Refactor Github Package URL function

* Fix function and selenium version

* Remove beta/release candidate versions
This commit is contained in:
Shamil Mubarakshin
2023-12-06 14:01:37 +01:00
committed by GitHub
parent 0ade9f36d3
commit 8437ff3990
13 changed files with 48 additions and 29 deletions

View File

@@ -17,7 +17,7 @@ echo "Setting up ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE variable to ${ACTION_ARCHIV
setEtcEnvironmentVariable "ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE" "${ACTION_ARCHIVE_CACHE_DIR}" setEtcEnvironmentVariable "ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE" "${ACTION_ARCHIVE_CACHE_DIR}"
# Download latest release from github.com/actions/action-versions and untar to /opt/actionarchivecache # Download latest release from github.com/actions/action-versions and untar to /opt/actionarchivecache
downloadUrl=$(get_github_package_download_url "actions/action-versions" "contains(\"action-versions.tar.gz\")") downloadUrl=$(resolve_github_release_asset_url "actions/action-versions" "contains(\"action-versions.tar.gz\")" "latest")
archive_path=$(download_with_retry "$downloadUrl") archive_path=$(download_with_retry "$downloadUrl")
tar -xzf "$archive_path" -C $ACTION_ARCHIVE_CACHE_DIR tar -xzf "$archive_path" -C $ACTION_ARCHIVE_CACHE_DIR

View File

@@ -15,7 +15,7 @@ if isUbuntu20; then
toolset_version=$(get_toolset_value '.aliyunCli.version') toolset_version=$(get_toolset_value '.aliyunCli.version')
download_url="https://github.com/aliyun/aliyun-cli/releases/download/v$toolset_version/aliyun-cli-linux-$toolset_version-amd64.tgz" download_url="https://github.com/aliyun/aliyun-cli/releases/download/v$toolset_version/aliyun-cli-linux-$toolset_version-amd64.tgz"
else else
download_url=$(get_github_package_download_url "aliyun/aliyun-cli" "contains(\"aliyun-cli-linux\") and endswith(\"amd64.tgz\")") download_url=$(resolve_github_release_asset_url "aliyun/aliyun-cli" "contains(\"aliyun-cli-linux\") and endswith(\"amd64.tgz\")" "latest")
hash_url="https://github.com/aliyun/aliyun-cli/releases/latest/download/SHASUMS256.txt" hash_url="https://github.com/aliyun/aliyun-cli/releases/latest/download/SHASUMS256.txt"
fi fi

View File

@@ -14,10 +14,10 @@ if command -v cmake; then
echo "cmake is already installed" echo "cmake is already installed"
else else
# Download script to install CMake # Download script to install CMake
download_url=$(get_github_package_download_url "Kitware/CMake" "endswith(\"inux-x86_64.sh\")") download_url=$(resolve_github_release_asset_url "Kitware/CMake" "endswith(\"inux-x86_64.sh\")" "latest")
curl -fsSL "${download_url}" -o cmakeinstall.sh curl -fsSL "${download_url}" -o cmakeinstall.sh
# Supply chain security - CMake # Supply chain security - CMake
hash_url=$(get_github_package_download_url "Kitware/CMake" "endswith(\"SHA-256.txt\")") hash_url=$(resolve_github_release_asset_url "Kitware/CMake" "endswith(\"SHA-256.txt\")" "latest")
external_hash=$(get_hash_from_remote_file "$hash_url" "linux-x86_64.sh") external_hash=$(get_hash_from_remote_file "$hash_url" "linux-x86_64.sh")
use_checksum_comparison "cmakeinstall.sh" "$external_hash" use_checksum_comparison "cmakeinstall.sh" "$external_hash"
# Install CMake and remove the install script # Install CMake and remove the install script

View File

@@ -19,10 +19,10 @@ apt-get update
apt-get install --no-install-recommends docker-ce docker-ce-cli containerd.io docker-buildx-plugin apt-get install --no-install-recommends docker-ce docker-ce-cli containerd.io docker-buildx-plugin
# Download docker compose v2 from releases # Download docker compose v2 from releases
URL=$(get_github_package_download_url "docker/compose" "contains(\"compose-linux-x86_64\")") URL=$(resolve_github_release_asset_url "docker/compose" "contains(\"compose-linux-x86_64\")" "latest")
curl -fsSL "${URL}" -o /tmp/docker-compose curl -fsSL "${URL}" -o /tmp/docker-compose
# Supply chain security - Docker Compose v2 # Supply chain security - Docker Compose v2
compose_hash_url=$(get_github_package_download_url "docker/compose" "contains(\"checksums.txt\")") compose_hash_url=$(resolve_github_release_asset_url "docker/compose" "contains(\"checksums.txt\")" "latest")
compose_external_hash=$(get_hash_from_remote_file "${compose_hash_url}" "compose-linux-x86_64") compose_external_hash=$(get_hash_from_remote_file "${compose_hash_url}" "compose-linux-x86_64")
use_checksum_comparison "/tmp/docker-compose" "${compose_external_hash}" use_checksum_comparison "/tmp/docker-compose" "${compose_external_hash}"
# Install docker compose v2 # Install docker compose v2

View File

@@ -33,7 +33,7 @@ echo "mozillateam $repo_url" >> $HELPER_SCRIPTS/apt-sources.txt
echo 'pref("intl.locale.requested","en_US");' >> "/usr/lib/firefox/browser/defaults/preferences/syspref.js" echo 'pref("intl.locale.requested","en_US");' >> "/usr/lib/firefox/browser/defaults/preferences/syspref.js"
# Download and unpack latest release of geckodriver # Download and unpack latest release of geckodriver
download_url=$(get_github_package_download_url "mozilla/geckodriver" "test(\"linux64.tar.gz$\")") download_url=$(resolve_github_release_asset_url "mozilla/geckodriver" "test(\"linux64.tar.gz$\")" "latest")
driver_archive_path=$(download_with_retry "$download_url") driver_archive_path=$(download_with_retry "$download_url")
GECKODRIVER_DIR="/usr/local/share/gecko_driver" GECKODRIVER_DIR="/usr/local/share/gecko_driver"

View File

@@ -10,10 +10,10 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
# Download GitHub CLI # Download GitHub CLI
gh_cli_url=$(get_github_package_download_url "cli/cli" "contains(\"linux\") and contains(\"amd64\") and contains(\".deb\")") gh_cli_url=$(resolve_github_release_asset_url "cli/cli" "contains(\"linux\") and contains(\"amd64\") and contains(\".deb\")" "latest")
gh_cli_deb_path=$(download_with_retry "$gh_cli_url") gh_cli_deb_path=$(download_with_retry "$gh_cli_url")
# Supply chain security - GitHub CLI # Supply chain security - GitHub CLI
hash_url=$(get_github_package_download_url "cli/cli" "contains(\"checksums.txt\")") hash_url=$(resolve_github_release_asset_url "cli/cli" "contains(\"checksums.txt\")" "latest")
external_hash=$(get_hash_from_remote_file "$hash_url" "linux_amd64.deb") external_hash=$(get_hash_from_remote_file "$hash_url" "linux_amd64.deb")
use_checksum_comparison "$gh_cli_deb_path" "$external_hash" use_checksum_comparison "$gh_cli_deb_path" "$external_hash"
# Install GitHub CLI # Install GitHub CLI

View File

@@ -8,7 +8,7 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
KOTLIN_ROOT="/usr/share" KOTLIN_ROOT="/usr/share"
download_url=$(get_github_package_download_url "JetBrains/kotlin" "contains(\"kotlin-compiler\")") download_url=$(resolve_github_release_asset_url "JetBrains/kotlin" "contains(\"kotlin-compiler\")" "latest")
archive_path=$(download_with_retry "$download_url") archive_path=$(download_with_retry "$download_url")
# Supply chain security - Kotlin # Supply chain security - Kotlin

View File

@@ -9,7 +9,7 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
# Download KIND # Download KIND
kind_url=$(get_github_package_download_url "kubernetes-sigs/kind" "contains(\"kind-linux-amd64\")") kind_url=$(resolve_github_release_asset_url "kubernetes-sigs/kind" "contains(\"kind-linux-amd64\")" "latest")
curl -fsSL -o /tmp/kind "${kind_url}" curl -fsSL -o /tmp/kind "${kind_url}"
# Supply chain security - KIND # Supply chain security - KIND
kind_external_hash=$(get_hash_from_remote_file "${kind_url}.sha256sum" "kind-linux-amd64") kind_external_hash=$(get_hash_from_remote_file "${kind_url}.sha256sum" "kind-linux-amd64")

View File

@@ -8,13 +8,13 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
# Determine latest ORAS CLI version # Determine latest ORAS CLI version
download_url=$(get_github_package_download_url "oras-project/oras" "endswith(\"linux_amd64.tar.gz\")") download_url=$(resolve_github_release_asset_url "oras-project/oras" "endswith(\"linux_amd64.tar.gz\")" "latest")
# Download ORAS CLI # Download ORAS CLI
archive_path=$(download_with_retry "$download_url") archive_path=$(download_with_retry "$download_url")
# Supply chain security - ORAS CLI # Supply chain security - ORAS CLI
hash_url=$(get_github_package_download_url "oras-project/oras" "contains(\"checksums.txt\")") hash_url=$(resolve_github_release_asset_url "oras-project/oras" "contains(\"checksums.txt\")" "latest")
external_hash=$(get_hash_from_remote_file "${hash_url}" "linux_amd64.tar.gz") external_hash=$(get_hash_from_remote_file "${hash_url}" "linux_amd64.tar.gz")
use_checksum_comparison "$archive_path" "${external_hash}" use_checksum_comparison "$archive_path" "${external_hash}"

View File

@@ -7,7 +7,7 @@
# Source the helpers for use with the script # Source the helpers for use with the script
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
download_url=$(get_github_package_download_url "actions/runner" 'test("actions-runner-linux-x64-[0-9]+\\.[0-9]{3}\\.[0-9]+\\.tar\\.gz")') download_url=$(resolve_github_release_asset_url "actions/runner" 'test("actions-runner-linux-x64-[0-9]+\\.[0-9]{3}\\.[0-9]+\\.tar\\.gz")' "latest")
archive_name="${download_url##*/}" archive_name="${download_url##*/}"
archive_path=$(download_with_retry "$download_url") archive_path=$(download_with_retry "$download_url")

View File

@@ -7,7 +7,7 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
# Install latest sbt release # Install latest sbt release
download_url=$(get_github_package_download_url "sbt/sbt" "endswith(\".tgz\")") download_url=$(resolve_github_release_asset_url "sbt/sbt" "endswith(\".tgz\")" "latest")
archive_path=$(download_with_retry "$download_url") archive_path=$(download_with_retry "$download_url")
tar zxf "$archive_path" -C /usr/share tar zxf "$archive_path" -C /usr/share
ln -s /usr/share/sbt/bin/sbt /usr/bin/sbt ln -s /usr/share/sbt/bin/sbt /usr/bin/sbt

View File

@@ -11,7 +11,7 @@ source $HELPER_SCRIPTS/etc-environment.sh
SELENIUM_MAJOR_VERSION=$(get_toolset_value '.selenium.version') SELENIUM_MAJOR_VERSION=$(get_toolset_value '.selenium.version')
# Download Selenium server # Download Selenium server
SELENIUM_DOWNLOAD_URL=$(get_github_package_download_url "SeleniumHQ/selenium" "contains(\"selenium-server-${SELENIUM_MAJOR_VERSION}\") and endswith(\".jar\")") SELENIUM_DOWNLOAD_URL=$(resolve_github_release_asset_url "SeleniumHQ/selenium" "contains(\"selenium-server-\") and endswith(\".jar\")" "$SELENIUM_MAJOR_VERSION\.*")
SELENIUM_JAR_PATH=$(download_with_retry "$SELENIUM_DOWNLOAD_URL" "/usr/share/java/selenium-server.jar") SELENIUM_JAR_PATH=$(download_with_retry "$SELENIUM_DOWNLOAD_URL" "/usr/share/java/selenium-server.jar")
# Create an epmty file to retrive selenium version # Create an epmty file to retrive selenium version

View File

@@ -66,26 +66,45 @@ get_toolset_value() {
echo "$(jq -r "$query" $toolset_path)" echo "$(jq -r "$query" $toolset_path)"
} }
get_github_package_download_url() { resolve_github_release_asset_url() {
local REPO_ORG=$1 local repo=$1
local FILTER=$2 local filter=$2
local VERSION=$3 local version=${3:-"*"}
local SEARCH_IN_COUNT="100" local allow_pre_release=${4:-false}
json=$(curl -fsSL "https://api.github.com/repos/${REPO_ORG}/releases?per_page=${SEARCH_IN_COUNT}") page_size="100"
if [ -n "$VERSION" ]; then json=$(curl -fsSL "https://api.github.com/repos/${repo}/releases?per_page=${page_size}")
tagName=$(echo $json | jq -r '.[] | select(.prerelease==false).tag_name' | sort --unique --version-sort | egrep -v ".*-[a-z]|beta" | egrep "\w*${VERSION}" | tail -1)
if [[ $allow_pre_release == "true" ]]; then
json=$(echo $json | jq -r '.[] | select(.assets | length > 0)')
else else
tagName=$(echo $json | jq -r '.[] | select((.prerelease==false) and (.assets | length > 0)).tag_name' | sort --unique --version-sort | egrep -v ".*-[a-z]|beta" | tail -1) json=$(echo $json | jq -r '.[] | select((.prerelease==false) and (.assets | length > 0))')
fi fi
downloadUrl=$(echo $json | jq -r ".[] | select(.tag_name==\"${tagName}\").assets[].browser_download_url | select(${FILTER})" | head -n 1) if [[ $version == "latest" ]]; then
if [ -z "$downloadUrl" ]; then tag_name=$(echo $json | jq -r '.tag_name' | sort --unique --version-sort | egrep -v ".*-[a-z]|beta" | tail -n 1)
echo "Failed to parse a download url for the '${tagName}' tag using '${FILTER}' filter" elif [[ $version == *"*"* ]]; then
tag_name=$(echo $json | jq -r '.tag_name' | sort --unique --version-sort | egrep -v ".*-[a-z]|beta" | egrep "${version}" | tail -n 1)
else
tag_names=$(echo $json | jq -r '.tag_name' | sort --unique --version-sort | egrep -v ".*-[a-z]|beta" | egrep "${version}")
for element in $tag_names; do
semver=$(echo "$element" | awk 'match($0, /[0-9]+\.[0-9]+\.[0-9]+/) {print substr($0, RSTART, RLENGTH)}')
if [[ $semver == $version ]]; then
tag_name=$element
fi
done
fi
download_url=$(echo $json | jq -r ". | select(.tag_name==\"${tag_name}\").assets[].browser_download_url | select(${filter})" | head -n 1)
if [ -z "$download_url" ]; then
echo "Failed to parse a download url for the '${tag_name}' tag using '${filter}' filter"
exit 1 exit 1
fi fi
echo $downloadUrl
echo $download_url
} }
get_github_package_hash() { get_github_package_hash() {