[Ubuntu] Rewrite function download_with_retry (#8912)

* [Ubuntu] Rewrite function download_with_retry

* Fix loop exit condition
This commit is contained in:
Vasilii Polikarpov
2023-11-29 20:25:29 +01:00
committed by GitHub
parent 7dba8776df
commit abb81511d4
37 changed files with 203 additions and 222 deletions

View File

@@ -18,8 +18,7 @@ setEtcEnvironmentVariable "ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE" "${ACTION_ARCHIV
# 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=$(get_github_package_download_url "actions/action-versions" "contains(\"action-versions.tar.gz\")")
echo "Downloading action-versions $downloadUrl" archive_path=$(download_with_retry "$downloadUrl")
download_with_retries "$downloadUrl" "/tmp" action-versions.tar.gz tar -xzf "$archive_path" -C $ACTION_ARCHIVE_CACHE_DIR
tar -xzf /tmp/action-versions.tar.gz -C $ACTION_ARCHIVE_CACHE_DIR
invoke_tests "ActionArchiveCache" invoke_tests "ActionArchiveCache"

View File

@@ -19,8 +19,7 @@ else
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
package_name="aliyun-cli-linux-amd64.tgz" archive_path=$(download_with_retry "$download_url")
download_with_retries "$download_url" "/tmp" "$package_name"
# Supply chain security - Alibaba Cloud CLI # Supply chain security - Alibaba Cloud CLI
if isUbuntu20; then if isUbuntu20; then
@@ -29,9 +28,9 @@ else
external_hash=$(get_hash_from_remote_file "$hash_url" "aliyun-cli-linux" "amd64.tgz") external_hash=$(get_hash_from_remote_file "$hash_url" "aliyun-cli-linux" "amd64.tgz")
fi fi
use_checksum_comparison "/tmp/$package_name" "$external_hash" use_checksum_comparison "$archive_path" "$external_hash"
tar xzf "/tmp/$package_name" tar xzf "$archive_path"
mv aliyun /usr/local/bin mv aliyun /usr/local/bin
invoke_tests "CLI.Tools" "Aliyun CLI" invoke_tests "CLI.Tools" "Aliyun CLI"

View File

@@ -43,18 +43,16 @@ setEtcEnvironmentVariable "ANDROID_HOME" "${ANDROID_SDK_ROOT}"
# Create android sdk directory # Create android sdk directory
mkdir -p ${ANDROID_SDK_ROOT} mkdir -p ${ANDROID_SDK_ROOT}
cmdlineTools="android-cmdline-tools.zip"
# Download the latest command line tools so that we can accept all of the licenses. # Download the latest command line tools so that we can accept all of the licenses.
# See https://developer.android.com/studio/#command-tools # See https://developer.android.com/studio/#command-tools
cmdlineToolsVersion=$(get_toolset_value '.android."cmdline-tools"') cmdlineToolsVersion=$(get_toolset_value '.android."cmdline-tools"')
if [[ $cmdlineToolsVersion == "latest" ]]; then if [[ $cmdlineToolsVersion == "latest" ]]; then
repositoryXmlUrl="https://dl.google.com/android/repository/repository2-1.xml" repository_xml_url="https://dl.google.com/android/repository/repository2-1.xml"
download_with_retries $repositoryXmlUrl "/tmp" "repository2-1.xml" repository_xml_file=$(download_with_retry "$repository_xml_url")
cmdlineToolsVersion=$( cmdlineToolsVersion=$(
yq -p=xml \ yq -p=xml \
'.sdk-repository.remotePackage[] | select(."+@path" == "cmdline-tools;latest" and .channelRef."+@ref" == "channel-0").archives.archive[].complete.url | select(contains("commandlinetools-linux"))' \ '.sdk-repository.remotePackage[] | select(."+@path" == "cmdline-tools;latest" and .channelRef."+@ref" == "channel-0").archives.archive[].complete.url | select(contains("commandlinetools-linux"))' \
/tmp/repository2-1.xml "${repository_xml_file}"
) )
if [[ -z $cmdlineToolsVersion ]]; then if [[ -z $cmdlineToolsVersion ]]; then
@@ -63,12 +61,10 @@ if [[ $cmdlineToolsVersion == "latest" ]]; then
fi fi
fi fi
download_with_retries "https://dl.google.com/android/repository/${cmdlineToolsVersion}" "." $cmdlineTools archive_path=$(download_with_retry "https://dl.google.com/android/repository/${cmdlineToolsVersion}")
unzip -qq "$archive_path" -d ${ANDROID_SDK_ROOT}/cmdline-tools
unzip -qq $cmdlineTools -d ${ANDROID_SDK_ROOT}/cmdline-tools
# Command line tools need to be placed in ${ANDROID_SDK_ROOT}/sdk/cmdline-tools/latest to determine SDK root # Command line tools need to be placed in ${ANDROID_SDK_ROOT}/sdk/cmdline-tools/latest to determine SDK root
mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest
rm -f $cmdlineTools
# Check sdk manager installation # Check sdk manager installation
${SDKMANAGER} --list 1>/dev/null ${SDKMANAGER} --list 1>/dev/null

View File

@@ -9,23 +9,23 @@
source $HELPER_SCRIPTS/os.sh source $HELPER_SCRIPTS/os.sh
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
download_with_retries "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" "/tmp" "awscliv2.zip" awscliv2_archive_path=$(download_with_retry "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip")
unzip -qq /tmp/awscliv2.zip -d /tmp unzip -qq "$awscliv2_archive_path" -d /tmp
/tmp/aws/install -i /usr/local/aws-cli -b /usr/local/bin /tmp/aws/install -i /usr/local/aws-cli -b /usr/local/bin
download_with_retries "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" "/tmp" "session-manager-plugin.deb" smplugin_deb_path=$(download_with_retry "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb")
apt install /tmp/session-manager-plugin.deb apt install "$smplugin_deb_path"
# Download the latest aws sam cli release # Download the latest aws sam cli release
aws_sam_cli_zip_name="aws-sam-cli-linux-x86_64.zip" aws_sam_cli_archive_name="aws-sam-cli-linux-x86_64.zip"
download_with_retries "https://github.com/aws/aws-sam-cli/releases/latest/download/${aws_sam_cli_zip_name}" "/tmp" $aws_sam_cli_zip_name aws_sam_cli_archive_path=$(download_with_retry "https://github.com/aws/aws-sam-cli/releases/latest/download/${aws_sam_cli_archive_name}")
# Supply chain security - AWS SAM CLI # Supply chain security - AWS SAM CLI
aws_sam_cli_hash=$(get_github_package_hash "aws" "aws-sam-cli" "${aws_sam_cli_zip_name}.. ") aws_sam_cli_hash=$(get_github_package_hash "aws" "aws-sam-cli" "${aws_sam_cli_archive_name}.. ")
use_checksum_comparison "/tmp/${aws_sam_cli_zip_name}" "$aws_sam_cli_hash" use_checksum_comparison "$aws_sam_cli_archive_path" "$aws_sam_cli_hash"
# Install the latest aws sam cli release # Install the latest aws sam cli release
unzip /tmp/${aws_sam_cli_zip_name} -d /tmp unzip "$aws_sam_cli_archive_path" -d /tmp
/tmp/install /tmp/install
invoke_tests "CLI.Tools" "AWS" invoke_tests "CLI.Tools" "AWS"

View File

@@ -7,10 +7,9 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
# Install AzCopy10 # Install AzCopy10
download_with_retries "https://aka.ms/downloadazcopy-v10-linux" "/tmp" "azcopy.tar.gz" archive_path=$(download_with_retry "https://aka.ms/downloadazcopy-v10-linux")
tar xzf /tmp/azcopy.tar.gz --strip-components=1 -C /tmp tar xzf "$archive_path" --strip-components=1 -C /tmp
mv /tmp/azcopy /usr/local/bin/azcopy install /tmp/azcopy /usr/local/bin/azcopy
chmod +x /usr/local/bin/azcopy
# Create azcopy 10 alias for backward compatibility # Create azcopy 10 alias for backward compatibility
ln -sf /usr/local/bin/azcopy /usr/local/bin/azcopy10 ln -sf /usr/local/bin/azcopy /usr/local/bin/azcopy10

View File

@@ -7,10 +7,8 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
# Install Bicep CLI # Install Bicep CLI
download_with_retries "https://github.com/Azure/bicep/releases/latest/download/bicep-linux-x64" "." "bicep.bin" bicep_binary_path=$(download_with_retry "https://github.com/Azure/bicep/releases/latest/download/bicep-linux-x64")
# Mark it as executable # Mark it as executable
chmod +x ./bicep.bin install "$bicep_binary_path" /usr/local/bin/bicep
# Add bicep to PATH (requires admin)
sudo mv ./bicep.bin /usr/local/bin/bicep
invoke_tests "Tools" "Bicep" invoke_tests "Tools" "Bicep"

View File

@@ -14,8 +14,7 @@ bundle_tag_name="codeql-bundle-v$bundle_version"
echo "Downloading CodeQL bundle $bundle_version..." echo "Downloading CodeQL bundle $bundle_version..."
# Note that this is the all-platforms CodeQL bundle, to support scenarios where customers run # Note that this is the all-platforms CodeQL bundle, to support scenarios where customers run
# different operating systems within containers. # different operating systems within containers.
download_with_retries "https://github.com/github/codeql-action/releases/download/$bundle_tag_name/codeql-bundle.tar.gz" "/tmp" "codeql-bundle.tar.gz" codeql_archive=$(download_with_retry "https://github.com/github/codeql-action/releases/download/$bundle_tag_name/codeql-bundle.tar.gz")
codeql_archive="/tmp/codeql-bundle.tar.gz"
codeql_toolcache_path="$AGENT_TOOLSDIRECTORY/CodeQL/$bundle_version/x64" codeql_toolcache_path="$AGENT_TOOLSDIRECTORY/CodeQL/$bundle_version/x64"
mkdir -p "$codeql_toolcache_path" mkdir -p "$codeql_toolcache_path"

View File

@@ -64,15 +64,14 @@ else
fi fi
# Download amazon-ecr-credential-helper # Download amazon-ecr-credential-helper
aws_helper="docker-credential-ecr-login"
aws_latest_release_url="https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/releases/latest" aws_latest_release_url="https://api.github.com/repos/awslabs/amazon-ecr-credential-helper/releases/latest"
aws_helper_url=$(curl "${authString[@]}" -fsSL "${aws_latest_release_url}" | jq -r '.body' | awk -F'[()]' '/linux-amd64/ {print $2}') aws_helper_url=$(curl "${authString[@]}" -fsSL "${aws_latest_release_url}" | jq -r '.body' | awk -F'[()]' '/linux-amd64/ {print $2}')
download_with_retries "${aws_helper_url}" "/tmp" "${aws_helper}" aws_helper_binary_path=$(download_with_retry "$aws_helper_url")
# Supply chain security - amazon-ecr-credential-helper # Supply chain security - amazon-ecr-credential-helper
aws_helper_external_hash=$(get_hash_from_remote_file "${aws_helper_url}.sha256" "${aws_helper}") aws_helper_external_hash=$(get_hash_from_remote_file "${aws_helper_url}.sha256" "docker-credential-ecr-login")
use_checksum_comparison "/tmp/${aws_helper}" "${aws_helper_external_hash}" use_checksum_comparison "$aws_helper_binary_path" "$aws_helper_external_hash"
# Install amazon-ecr-credential-helper # Install amazon-ecr-credential-helper
install "/tmp/${aws_helper}" "/usr/bin/${aws_helper}" install "$aws_helper_binary_path" "/usr/bin/docker-credential-ecr-login"
# Cleanup custom repositories # Cleanup custom repositories
rm $gpg_key rm $gpg_key

View File

@@ -47,15 +47,13 @@ apt-get update
sdks=() sdks=()
for version in ${DOTNET_VERSIONS[@]}; do for version in ${DOTNET_VERSIONS[@]}; do
release_url="https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/${version}/releases.json" release_url="https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/${version}/releases.json"
download_with_retries "${release_url}" "." "${version}.json" releases=$(cat "$(download_with_retry "$release_url")")
releases=$(cat "./${version}.json")
if [[ $version == "6.0" ]]; then if [[ $version == "6.0" ]]; then
sdks=("${sdks[@]}" $(echo "${releases}" | jq -r 'first(.releases[].sdks[]?.version | select(contains("preview") or contains("rc") | not))')) sdks=("${sdks[@]}" $(echo "${releases}" | jq -r 'first(.releases[].sdks[]?.version | select(contains("preview") or contains("rc") | not))'))
else else
sdks=("${sdks[@]}" $(echo "${releases}" | jq -r '.releases[].sdk.version | select(contains("preview") or contains("rc") | not)')) sdks=("${sdks[@]}" $(echo "${releases}" | jq -r '.releases[].sdk.version | select(contains("preview") or contains("rc") | not)'))
sdks=("${sdks[@]}" $(echo "${releases}" | jq -r '.releases[].sdks[]?.version | select(contains("preview") or contains("rc") | not)')) sdks=("${sdks[@]}" $(echo "${releases}" | jq -r '.releases[].sdks[]?.version | select(contains("preview") or contains("rc") | not)'))
fi fi
rm ./${version}.json
done done
sortedSdks=$(echo ${sdks[@]} | tr ' ' '\n' | sort -r | uniq -w 5) sortedSdks=$(echo ${sdks[@]} | tr ' ' '\n' | sort -r | uniq -w 5)
@@ -73,12 +71,12 @@ extract_dotnet_sdk() {
} }
# Download/install additional SDKs in parallel # Download/install additional SDKs in parallel
export -f download_with_retries export -f download_with_retry
export -f extract_dotnet_sdk export -f extract_dotnet_sdk
parallel --jobs 0 --halt soon,fail=1 \ parallel --jobs 0 --halt soon,fail=1 \
'url="https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{}/dotnet-sdk-{}-linux-x64.tar.gz"; \ 'url="https://dotnetcli.blob.core.windows.net/dotnet/Sdk/{}/dotnet-sdk-{}-linux-x64.tar.gz"; \
download_with_retries $url' ::: "${sortedSdks[@]}" download_with_retry $url' ::: "${sortedSdks[@]}"
find . -name "*.tar.gz" | parallel --halt soon,fail=1 'extract_dotnet_sdk {}' find . -name "*.tar.gz" | parallel --halt soon,fail=1 'extract_dotnet_sdk {}'

View File

@@ -19,8 +19,8 @@ apt-get install --no-install-recommends esl-erlang
# Install rebar3 # Install rebar3
rebar3_url="https://github.com/erlang/rebar3/releases/latest/download/rebar3" rebar3_url="https://github.com/erlang/rebar3/releases/latest/download/rebar3"
download_with_retries $rebar3_url "/usr/local/bin" "rebar3" rebar3_binary_path=$(download_with_retry "$rebar3_url")
chmod +x /usr/local/bin/rebar3 install "$rebar3_binary_path" /usr/local/bin/rebar3
# Clean up source list # Clean up source list
rm $source_list rm $source_list

View File

@@ -33,14 +33,14 @@ 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
downloadUrl=$(get_github_package_download_url "mozilla/geckodriver" "test(\"linux64.tar.gz$\")") download_url=$(get_github_package_download_url "mozilla/geckodriver" "test(\"linux64.tar.gz$\")")
download_with_retries "$downloadUrl" "/tmp" geckodriver.tar.gz driver_archive_path=$(download_with_retry "$download_url")
GECKODRIVER_DIR="/usr/local/share/gecko_driver" GECKODRIVER_DIR="/usr/local/share/gecko_driver"
GECKODRIVER_BIN="$GECKODRIVER_DIR/geckodriver" GECKODRIVER_BIN="$GECKODRIVER_DIR/geckodriver"
mkdir -p $GECKODRIVER_DIR mkdir -p $GECKODRIVER_DIR
tar -xzf /tmp/geckodriver.tar.gz -C $GECKODRIVER_DIR tar -xzf "$driver_archive_path" -C $GECKODRIVER_DIR
chmod +x $GECKODRIVER_BIN chmod +x $GECKODRIVER_BIN
ln -s "$GECKODRIVER_BIN" /usr/bin/ ln -s "$GECKODRIVER_BIN" /usr/bin/

View File

@@ -10,13 +10,13 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
# Download GitHub CLI # Download GitHub CLI
URL=$(get_github_package_download_url "cli/cli" "contains(\"linux\") and contains(\"amd64\") and contains(\".deb\")") gh_cli_url=$(get_github_package_download_url "cli/cli" "contains(\"linux\") and contains(\"amd64\") and contains(\".deb\")")
download_with_retries "${URL}" "/tmp" "gh_cli_linux_amd64.deb" 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=$(get_github_package_download_url "cli/cli" "contains(\"checksums.txt\")")
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 "/tmp/gh_cli_linux_amd64.deb" "${external_hash}" use_checksum_comparison "$gh_cli_deb_path" "$external_hash"
# Install GitHub CLI # Install GitHub CLI
apt install /tmp/gh_cli_linux_amd64.deb apt install "$gh_cli_deb_path"
invoke_tests "CLI.Tools" "GitHub CLI" invoke_tests "CLI.Tools" "GitHub CLI"

View File

@@ -34,9 +34,8 @@ function GetChromiumRevision {
# Download and install Google Chrome # Download and install Google Chrome
CHROME_DEB_URL="https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb" CHROME_DEB_URL="https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"
CHROME_DEB_NAME="google-chrome-stable_current_amd64.deb" CHROME_DEB_PATH=$(download_with_retry "$CHROME_DEB_URL")
download_with_retries $CHROME_DEB_URL "/tmp" "${CHROME_DEB_NAME}" apt install "$CHROME_DEB_PATH" -f
apt install "/tmp/${CHROME_DEB_NAME}" -f
setEtcEnvironmentVariable "CHROME_BIN" "/usr/bin/google-chrome" setEtcEnvironmentVariable "CHROME_BIN" "/usr/bin/google-chrome"
# Remove Google Chrome repo # Remove Google Chrome repo
@@ -55,13 +54,12 @@ CHROME_VERSIONS_JSON=$(curl -fsSL "${CHROME_VERSIONS_URL}")
# Download and unpack the latest release of chromedriver # Download and unpack the latest release of chromedriver
CHROMEDRIVER_VERSION=$(echo "${CHROME_VERSIONS_JSON}" | jq -r '.builds["'"$CHROME_VERSION"'"].version') CHROMEDRIVER_VERSION=$(echo "${CHROME_VERSIONS_JSON}" | jq -r '.builds["'"$CHROME_VERSION"'"].version')
CHROMEDRIVER_URL=$(echo "${CHROME_VERSIONS_JSON}" | jq -r '.builds["'"$CHROME_VERSION"'"].downloads.chromedriver[] | select(.platform=="'"${CHROME_PLATFORM}"'").url') CHROMEDRIVER_URL=$(echo "${CHROME_VERSIONS_JSON}" | jq -r '.builds["'"$CHROME_VERSION"'"].downloads.chromedriver[] | select(.platform=="'"${CHROME_PLATFORM}"'").url')
CHROMEDRIVER_ARCHIVE="chromedriver_linux64.zip"
CHROMEDRIVER_DIR="/usr/local/share/chromedriver-linux64" CHROMEDRIVER_DIR="/usr/local/share/chromedriver-linux64"
CHROMEDRIVER_BIN="$CHROMEDRIVER_DIR/chromedriver" CHROMEDRIVER_BIN="$CHROMEDRIVER_DIR/chromedriver"
echo "Installing chromedriver version $CHROMEDRIVER_VERSION" echo "Installing chromedriver version $CHROMEDRIVER_VERSION"
download_with_retries $CHROMEDRIVER_URL "/tmp" $CHROMEDRIVER_ARCHIVE driver_archive_path=$(download_with_retry "$CHROMEDRIVER_URL")
unzip -qq /tmp/$CHROMEDRIVER_ARCHIVE -d /usr/local/share unzip -qq "$driver_archive_path" -d /usr/local/share
chmod +x $CHROMEDRIVER_BIN chmod +x $CHROMEDRIVER_BIN
ln -s "$CHROMEDRIVER_BIN" /usr/bin/ ln -s "$CHROMEDRIVER_BIN" /usr/bin/
@@ -71,14 +69,13 @@ setEtcEnvironmentVariable "CHROMEWEBDRIVER" "${CHROMEDRIVER_DIR}"
CHROME_REVISION=$(echo "${CHROME_VERSIONS_JSON}" | jq -r '.builds["'"$CHROME_VERSION"'"].revision') CHROME_REVISION=$(echo "${CHROME_VERSIONS_JSON}" | jq -r '.builds["'"$CHROME_VERSION"'"].revision')
CHROMIUM_REVISION=$(GetChromiumRevision $CHROME_REVISION) CHROMIUM_REVISION=$(GetChromiumRevision $CHROME_REVISION)
CHROMIUM_URL="https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2F${CHROMIUM_REVISION}%2Fchrome-linux.zip?alt=media" CHROMIUM_URL="https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2F${CHROMIUM_REVISION}%2Fchrome-linux.zip?alt=media"
CHROMIUM_ARCHIVE="${CHROMIUM_REVISION}-chromium-linux.zip"
CHROMIUM_DIR="/usr/local/share/chromium" CHROMIUM_DIR="/usr/local/share/chromium"
CHROMIUM_BIN="${CHROMIUM_DIR}/chrome-linux/chrome" CHROMIUM_BIN="${CHROMIUM_DIR}/chrome-linux/chrome"
echo "Installing chromium revision $CHROMIUM_REVISION" echo "Installing chromium revision $CHROMIUM_REVISION"
download_with_retries $CHROMIUM_URL "/tmp" $CHROMIUM_ARCHIVE CHROMIUM_ARCHIVE_PATH=$(download_with_retry "$CHROMIUM_URL")
mkdir $CHROMIUM_DIR mkdir $CHROMIUM_DIR
unzip -qq /tmp/$CHROMIUM_ARCHIVE -d $CHROMIUM_DIR unzip -qq "$CHROMIUM_ARCHIVE_PATH" -d $CHROMIUM_DIR
ln -s $CHROMIUM_BIN /usr/bin/chromium ln -s $CHROMIUM_BIN /usr/bin/chromium
ln -s $CHROMIUM_BIN /usr/bin/chromium-browser ln -s $CHROMIUM_BIN /usr/bin/chromium-browser

View File

@@ -98,8 +98,8 @@ setEtcEnvironmentVariable "ANT_HOME" "/usr/share/ant"
# Install Maven # Install Maven
mavenVersion=$(get_toolset_value '.java.maven') mavenVersion=$(get_toolset_value '.java.maven')
mavenDownloadUrl="https://dlcdn.apache.org/maven/maven-3/${mavenVersion}/binaries/apache-maven-${mavenVersion}-bin.zip" mavenDownloadUrl="https://dlcdn.apache.org/maven/maven-3/${mavenVersion}/binaries/apache-maven-${mavenVersion}-bin.zip"
download_with_retries ${mavenDownloadUrl} "/tmp" "maven.zip" maven_archive_path=$(download_with_retry "$mavenDownloadUrl")
unzip -qq -d /usr/share /tmp/maven.zip unzip -qq -d /usr/share "$maven_archive_path"
ln -s /usr/share/apache-maven-${mavenVersion}/bin/mvn /usr/bin/mvn ln -s /usr/share/apache-maven-${mavenVersion}/bin/mvn /usr/bin/mvn
# Install Gradle # Install Gradle
@@ -110,8 +110,8 @@ gradleLatestVersion=$(echo ${gradleJson} | jq -r '.[] | select(.version | contai
gradleDownloadUrl=$(echo ${gradleJson} | jq -r ".[] | select(.version==\"$gradleLatestVersion\") | .downloadUrl") gradleDownloadUrl=$(echo ${gradleJson} | jq -r ".[] | select(.version==\"$gradleLatestVersion\") | .downloadUrl")
echo "gradleUrl=${gradleDownloadUrl}" echo "gradleUrl=${gradleDownloadUrl}"
echo "gradleVersion=${gradleLatestVersion}" echo "gradleVersion=${gradleLatestVersion}"
download_with_retries ${gradleDownloadUrl} "/tmp" "gradleLatest.zip" gradle_archive_path=$(download_with_retry "$gradleDownloadUrl")
unzip -qq -d /usr/share /tmp/gradleLatest.zip unzip -qq -d /usr/share "$gradle_archive_path"
ln -s /usr/share/gradle-"${gradleLatestVersion}"/bin/gradle /usr/bin/gradle ln -s /usr/share/gradle-"${gradleLatestVersion}"/bin/gradle /usr/bin/gradle
gradle_home_dir=$(find /usr/share -depth -maxdepth 1 -name "gradle*") gradle_home_dir=$(find /usr/share -depth -maxdepth 1 -name "gradle*")
setEtcEnvironmentVariable "GRADLE_HOME" "${gradle_home_dir}" setEtcEnvironmentVariable "GRADLE_HOME" "${gradle_home_dir}"

View File

@@ -13,15 +13,12 @@ julia_version=$(echo $json | jq -r '.[].files[] | select(.triplet=="x86_64-linux
# download julia archive # download julia archive
julia_tar_url=$(echo $json | jq -r ".[].files[].url | select(endswith(\"julia-${julia_version}-linux-x86_64.tar.gz\"))") julia_tar_url=$(echo $json | jq -r ".[].files[].url | select(endswith(\"julia-${julia_version}-linux-x86_64.tar.gz\"))")
julia_tar_name="julia-${julia_version}-linux-x86_64.tar.gz" julia_archive_path=$(download_with_retry "$julia_tar_url")
download_with_retries $julia_tar_url "/tmp" "${julia_tar_name}"
# extract files and make symlink # extract files and make symlink
julia_tar_tmp="/tmp/${julia_tar_name}"
julia_installation_path="/usr/local/julia${julia_version}" julia_installation_path="/usr/local/julia${julia_version}"
mkdir -p "${julia_installation_path}" mkdir -p "${julia_installation_path}"
tar -C "${julia_installation_path}" -xzf "${julia_tar_tmp}" --strip-components=1 tar -C "${julia_installation_path}" -xzf "$julia_archive_path" --strip-components=1
ln -s "${julia_installation_path}/bin/julia" /usr/bin/julia ln -s "${julia_installation_path}/bin/julia" /usr/bin/julia
rm "${julia_tar_tmp}"
invoke_tests "Tools" "Julia" invoke_tests "Tools" "Julia"

View File

@@ -8,15 +8,14 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
KOTLIN_ROOT="/usr/share" KOTLIN_ROOT="/usr/share"
kotlin_zip_name="kotlin-compiler.zip"
download_url=$(get_github_package_download_url "JetBrains/kotlin" "contains(\"kotlin-compiler\")") download_url=$(get_github_package_download_url "JetBrains/kotlin" "contains(\"kotlin-compiler\")")
download_with_retries "$download_url" "/tmp" "$kotlin_zip_name" archive_path=$(download_with_retry "$download_url")
# Supply chain security - Kotlin # Supply chain security - Kotlin
kotlin_hash=$(get_github_package_hash "JetBrains" "kotlin" "kotlin-compiler-.*\.zip" "" "latest" "false" "|" 3) kotlin_hash=$(get_github_package_hash "JetBrains" "kotlin" "kotlin-compiler-.*\.zip" "" "latest" "false" "|" 3)
use_checksum_comparison "/tmp/${kotlin_zip_name}" "$kotlin_hash" use_checksum_comparison "$archive_path" "$kotlin_hash"
unzip -qq /tmp/${kotlin_zip_name} -d $KOTLIN_ROOT unzip -qq "$archive_path" -d $KOTLIN_ROOT
rm $KOTLIN_ROOT/kotlinc/bin/*.bat rm $KOTLIN_ROOT/kotlinc/bin/*.bat
ln -sf $KOTLIN_ROOT/kotlinc/bin/* /usr/bin ln -sf $KOTLIN_ROOT/kotlinc/bin/* /usr/bin

View File

@@ -40,9 +40,9 @@ EDGE_DRIVER_VERSION_URL="https://msedgedriver.azureedge.net/LATEST_RELEASE_${EDG
EDGE_DRIVER_LATEST_VERSION=$(curl -fsSL "$EDGE_DRIVER_VERSION_URL" | iconv -f utf-16 -t utf-8 | tr -d '\r') EDGE_DRIVER_LATEST_VERSION=$(curl -fsSL "$EDGE_DRIVER_VERSION_URL" | iconv -f utf-16 -t utf-8 | tr -d '\r')
EDGEDRIVER_URL="https://msedgedriver.azureedge.net/${EDGE_DRIVER_LATEST_VERSION}/edgedriver_linux64.zip" EDGEDRIVER_URL="https://msedgedriver.azureedge.net/${EDGE_DRIVER_LATEST_VERSION}/edgedriver_linux64.zip"
download_with_retries $EDGEDRIVER_URL "/tmp" "edgedriver_linux64.zip" EDGEDRIVER_ARCHIVE_PATH=$(download_with_retry "$EDGEDRIVER_URL")
unzip -qq /tmp/edgedriver_linux64.zip -d $EDGEDRIVER_DIR unzip -qq "$EDGEDRIVER_ARCHIVE_PATH" -d "$EDGEDRIVER_DIR"
chmod +x $EDGEDRIVER_BIN chmod +x $EDGEDRIVER_BIN
ln -s $EDGEDRIVER_BIN /usr/bin ln -s $EDGEDRIVER_BIN /usr/bin

View File

@@ -7,9 +7,8 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
# Install the oc CLI # Install the oc CLI
DOWNLOAD_URL="https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-client-linux.tar.gz" download_url="https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-client-linux.tar.gz"
PACKAGE_TAR_NAME="oc.tar.gz" archive_path=$(download_with_retry "$download_url")
download_with_retries $DOWNLOAD_URL "/tmp" $PACKAGE_TAR_NAME tar xzf "$archive_path" -C "/usr/local/bin" oc
tar xzf "/tmp/$PACKAGE_TAR_NAME" -C "/usr/local/bin" oc
invoke_tests "CLI.Tools" "OC CLI" invoke_tests "CLI.Tools" "OC CLI"

View File

@@ -8,16 +8,17 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
# Determine latest ORAS CLI version # Determine latest ORAS CLI version
URL=$(get_github_package_download_url "oras-project/oras" "endswith(\"linux_amd64.tar.gz\")") download_url=$(get_github_package_download_url "oras-project/oras" "endswith(\"linux_amd64.tar.gz\")")
archive_name=$(basename "${URL}")
# Download ORAS CLI # Download ORAS CLI
download_with_retries "${URL}" "/tmp" "${archive_name}" 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=$(get_github_package_download_url "oras-project/oras" "contains(\"checksums.txt\")")
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 "/tmp/${archive_name}" "${external_hash}" use_checksum_comparison "$archive_path" "${external_hash}"
# Unzip ORAS CLI # Unzip ORAS CLI
tar xzf "/tmp/${archive_name}" -C /usr/local/bin oras tar xzf "$archive_path" -C /usr/local/bin oras
invoke_tests "CLI.Tools" "Oras CLI" invoke_tests "CLI.Tools" "Oras CLI"

View File

@@ -7,10 +7,8 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
# Install Packer # Install Packer
URL=$(curl -fsSL https://api.releases.hashicorp.com/v1/releases/packer/latest | jq -r '.builds[] | select((.arch=="amd64") and (.os=="linux")).url') download_url=$(curl -fsSL https://api.releases.hashicorp.com/v1/releases/packer/latest | jq -r '.builds[] | select((.arch=="amd64") and (.os=="linux")).url')
ZIP_NAME="packer_linux_amd64.zip" archive_path=$(download_with_retry "$download_url")
download_with_retries "${URL}" "/tmp" "${ZIP_NAME}" unzip -qq "$archive_path" -d /usr/local/bin
unzip -qq "/tmp/${ZIP_NAME}" -d /usr/local/bin
rm -f "/tmp/${ZIP_NAME}"
invoke_tests "Tools" "Packer" invoke_tests "Tools" "Packer"

View File

@@ -7,13 +7,20 @@
# 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
# Install PhantomJS # Install required dependencies
apt-get install -y chrpath libssl-dev libxft-dev libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev apt-get install -y chrpath libssl-dev libxft-dev libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev
phantom_js=phantomjs-2.1.1-linux-x86_64
download_with_retries https://bitbucket.org/ariya/phantomjs/downloads/$phantom_js.tar.bz2 "/tmp" # Define the version and hash of PhantomJS to be installed
phantom_js_hash="86dd9a4bf4aee45f1a84c9f61cf1947c1d6dce9b9e8d2a907105da7852460d2f" dir_name=phantomjs-2.1.1-linux-x86_64
use_checksum_comparison "/tmp/${phantom_js}.tar.bz2" "${phantom_js_hash}" archive_hash="86dd9a4bf4aee45f1a84c9f61cf1947c1d6dce9b9e8d2a907105da7852460d2f"
tar xjf /tmp/$phantom_js.tar.bz2 -C /usr/local/share
ln -sf /usr/local/share/$phantom_js/bin/phantomjs /usr/local/bin # Download the archive and verify its integrity using checksum comparison
download_url="https://bitbucket.org/ariya/phantomjs/downloads/$dir_name.tar.bz2"
archive_path=$(download_with_retry "$download_url")
use_checksum_comparison "$archive_path" "$archive_hash"
# Extract the archive and create a symbolic link to the executable
tar xjf "$archive_path" -C /usr/local/share
ln -sf /usr/local/share/$dir_name/bin/phantomjs /usr/local/bin
invoke_tests "Tools" "Phantomjs" invoke_tests "Tools" "Phantomjs"

View File

@@ -10,12 +10,14 @@ source $HELPER_SCRIPTS/install.sh
# Dowload Pulumi # Dowload Pulumi
version=$(curl -fsSL "https://www.pulumi.com/latest-version") version=$(curl -fsSL "https://www.pulumi.com/latest-version")
URL="https://get.pulumi.com/releases/sdk/pulumi-v${version}-linux-x64.tar.gz" download_url="https://get.pulumi.com/releases/sdk/pulumi-v${version}-linux-x64.tar.gz"
download_with_retries "${URL}" "/tmp" "pulumi-v${version}.tar.gz" archive_path=$(download_with_retry "$download_url")
# Supply chain security - Pulumi # Supply chain security - Pulumi
external_hash=$(get_hash_from_remote_file "https://github.com/pulumi/pulumi/releases/download/v${version}/SHA512SUMS" "linux-x64.tar.gz") external_hash=$(get_hash_from_remote_file "https://github.com/pulumi/pulumi/releases/download/v${version}/SHA512SUMS" "linux-x64.tar.gz")
use_checksum_comparison "/tmp/pulumi-v${version}.tar.gz" "${external_hash}" "512" use_checksum_comparison "$archive_path" "$external_hash" "512"
# Unzipping Pulumi # Unzipping Pulumi
tar --strip=1 -xf "/tmp/pulumi-v${version}.tar.gz" -C /usr/local/bin tar --strip=1 -xf "$archive_path" -C /usr/local/bin
invoke_tests "Tools" "Pulumi" invoke_tests "Tools" "Pulumi"

View File

@@ -12,16 +12,16 @@ function InstallPyPy
{ {
PACKAGE_URL=$1 PACKAGE_URL=$1
PACKAGE_TAR_NAME=$(echo $PACKAGE_URL | awk -F/ '{print $NF}') PACKAGE_TAR_NAME=$(echo "$PACKAGE_URL" | awk -F/ '{print $NF}')
echo "Downloading tar archive '$PACKAGE_TAR_NAME'" PACKAGE_NAME=${PACKAGE_TAR_NAME/.tar.bz2/}
PACKAGE_TAR_TEMP_PATH="/tmp/$PACKAGE_TAR_NAME"
download_with_retries $PACKAGE_URL "/tmp" $PACKAGE_TAR_NAME
echo "Expand '$PACKAGE_TAR_NAME' to the /tmp folder" echo "Downloading tar archive '$PACKAGE_NAME'"
tar xf $PACKAGE_TAR_TEMP_PATH -C /tmp PACKAGE_TAR_TEMP_PATH=$(download_with_retry $PACKAGE_URL)
echo "Expand '$PACKAGE_NAME' to the /tmp folder"
tar xf "$PACKAGE_TAR_TEMP_PATH" -C /tmp
# Get Python version # Get Python version
PACKAGE_NAME=${PACKAGE_TAR_NAME/.tar.bz2/}
MAJOR_VERSION=$(echo ${PACKAGE_NAME/pypy/} | cut -d. -f1) MAJOR_VERSION=$(echo ${PACKAGE_NAME/pypy/} | cut -d. -f1)
PYTHON_MAJOR="python$MAJOR_VERSION" PYTHON_MAJOR="python$MAJOR_VERSION"

View File

@@ -42,10 +42,10 @@ for TOOLSET_VERSION in ${TOOLSET_VERSIONS[@]}; do
echo "Downloading tar archive $PACKAGE_TAR_NAME" echo "Downloading tar archive $PACKAGE_TAR_NAME"
DOWNLOAD_URL="https://github.com/ruby/ruby-builder/releases/download/toolcache/${PACKAGE_TAR_NAME}" DOWNLOAD_URL="https://github.com/ruby/ruby-builder/releases/download/toolcache/${PACKAGE_TAR_NAME}"
download_with_retries $DOWNLOAD_URL "/tmp" $PACKAGE_TAR_NAME PACKAGE_ARCHIVE_PATH=$(download_with_retry "$DOWNLOAD_URL")
echo "Expand '$PACKAGE_TAR_NAME' to the '$RUBY_VERSION_PATH' folder" echo "Expand '$PACKAGE_TAR_NAME' to the '$RUBY_VERSION_PATH' folder"
tar xf "/tmp/$PACKAGE_TAR_NAME" -C $RUBY_VERSION_PATH tar xf "$PACKAGE_ARCHIVE_PATH" -C $RUBY_VERSION_PATH
COMPLETE_FILE_PATH="$RUBY_VERSION_PATH/x64.complete" COMPLETE_FILE_PATH="$RUBY_VERSION_PATH/x64.complete"
if [ ! -f $COMPLETE_FILE_PATH ]; then if [ ! -f $COMPLETE_FILE_PATH ]; then

View File

@@ -7,12 +7,9 @@
# 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=$(get_github_package_download_url "actions/runner" 'test("actions-runner-linux-x64-[0-9]+\\.[0-9]{3}\\.[0-9]+\\.tar\\.gz")')
archive_name="${download_url##*/}"
archive_path=$(download_with_retry "$download_url")
FILE_NAME="${DOWNLOAD_URL##*/}" mkdir -p /opt/runner-cache
mv "$archive_path" "/opt/runner-cache/$archive_name"
sudo mkdir -p /opt/runner-cache
download_with_retries "${DOWNLOAD_URL}" "/tmp" "${FILE_NAME}"
sudo mv /tmp/$FILE_NAME /opt/runner-cache/$FILE_NAME

View File

@@ -7,9 +7,9 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
# Install latest sbt release # Install latest sbt release
downloadUrl=$(get_github_package_download_url "sbt/sbt" "endswith(\".tgz\")") download_url=$(get_github_package_download_url "sbt/sbt" "endswith(\".tgz\")")
download_with_retries "$downloadUrl" "/tmp" "sbt.tgz" archive_path=$(download_with_retry "$download_url")
tar zxf /tmp/sbt.tgz -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
invoke_tests "Tools" "Sbt" invoke_tests "Tools" "Sbt"

View File

@@ -8,19 +8,17 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
source $HELPER_SCRIPTS/etc-environment.sh source $HELPER_SCRIPTS/etc-environment.sh
# Download Selenium server
SELENIUM_MAJOR_VERSION=$(get_toolset_value '.selenium.version') SELENIUM_MAJOR_VERSION=$(get_toolset_value '.selenium.version')
SELENIUM_BINARY_NAME=$(get_toolset_value '.selenium.binary_name')
SELENIUM_JAR_PATH="/usr/share/java" # Download Selenium server
SELENIUM_JAR_NAME="$SELENIUM_BINARY_NAME.jar" SELENIUM_DOWNLOAD_URL=$(get_github_package_download_url "SeleniumHQ/selenium" "contains(\"selenium-server-${SELENIUM_MAJOR_VERSION}\") and endswith(\".jar\")")
SELENIUM_DOWNLOAD_URL=$(get_github_package_download_url "SeleniumHQ/selenium" "contains(\"${SELENIUM_BINARY_NAME}-${SELENIUM_MAJOR_VERSION}\") and endswith(\".jar\")") SELENIUM_JAR_PATH=$(download_with_retry "$SELENIUM_DOWNLOAD_URL" "/usr/share/java/selenium-server.jar")
download_with_retries $SELENIUM_DOWNLOAD_URL $SELENIUM_JAR_PATH $SELENIUM_JAR_NAME
# Create an epmty file to retrive selenium version # Create an epmty file to retrive selenium version
SELENIUM_FULL_VERSION=$(echo $SELENIUM_DOWNLOAD_URL | awk -F"${SELENIUM_BINARY_NAME}-|.jar" '{print $2}') SELENIUM_FULL_VERSION=$(echo $SELENIUM_DOWNLOAD_URL | awk -F"selenium-server-|.jar" '{print $2}')
touch "$SELENIUM_JAR_PATH/$SELENIUM_BINARY_NAME-$SELENIUM_FULL_VERSION" touch "/usr/share/java/selenium-server-$SELENIUM_FULL_VERSION"
# Add SELENIUM_JAR_PATH environment variable # Add SELENIUM_JAR_PATH environment variable
setEtcEnvironmentVariable "SELENIUM_JAR_PATH" "${SELENIUM_JAR_PATH}/${SELENIUM_JAR_NAME}" setEtcEnvironmentVariable "SELENIUM_JAR_PATH" "$SELENIUM_JAR_PATH"
invoke_tests "Tools" "Selenium" invoke_tests "Tools" "Selenium"

View File

@@ -10,17 +10,15 @@ source $HELPER_SCRIPTS/os.sh
# Install libssl1.1 dependency # Install libssl1.1 dependency
if isUbuntu22; then if isUbuntu22; then
download_with_retries "http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.20_amd64.deb" "/tmp" libssl_deb_path=$(download_with_retry "http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.20_amd64.deb")
libssl_hash="0b3251aee55db6e20d02f4b9a2b703c9874a85ab6a20b12f4870f52f91633d37" libssl_hash="0b3251aee55db6e20d02f4b9a2b703c9874a85ab6a20b12f4870f52f91633d37"
use_checksum_comparison "/tmp/libssl1.1_1.1.1f-1ubuntu2.20_amd64.deb" "${libssl_hash}" use_checksum_comparison "$libssl_deb_path" "$libssl_hash"
dpkg -i /tmp/libssl1.1_1.1.1f-1ubuntu2.20_amd64.deb dpkg -i "$libssl_deb_path"
fi fi
# Install SqlPackage # Install SqlPackage
download_with_retries "https://aka.ms/sqlpackage-linux" "." "sqlpackage.zip" archive_path=$(download_with_retry "https://aka.ms/sqlpackage-linux")
unzip -qq "$archive_path" -d /usr/local/sqlpackage
unzip -qq sqlpackage.zip -d /usr/local/sqlpackage
rm -f sqlpackage.zip
chmod +x /usr/local/sqlpackage/sqlpackage chmod +x /usr/local/sqlpackage/sqlpackage
ln -sf /usr/local/sqlpackage/sqlpackage /usr/local/bin ln -sf /usr/local/sqlpackage/sqlpackage /usr/local/bin

View File

@@ -9,33 +9,33 @@ source $HELPER_SCRIPTS/install.sh
source $HELPER_SCRIPTS/etc-environment.sh source $HELPER_SCRIPTS/etc-environment.sh
# Install # Install
image_label="$(lsb_release -rs)" image_label="ubuntu$(lsb_release -rs)"
swift_version=$(curl -fsSL "https://api.github.com/repos/apple/swift/releases/latest" | jq -r '.tag_name | match("[0-9.]+").string') swift_version=$(curl -fsSL "https://api.github.com/repos/apple/swift/releases/latest" | jq -r '.tag_name | match("[0-9.]+").string')
swift_release_name="swift-${swift_version}-RELEASE-${image_label}"
swift_tar_name="swift-$swift_version-RELEASE-ubuntu$image_label.tar.gz" archive_url="https://swift.org/builds/swift-${swift_version}-release/${image_label//./}/swift-${swift_version}-RELEASE/${swift_release_name}.tar.gz"
swift_tar_url="https://swift.org/builds/swift-$swift_version-release/ubuntu${image_label//./}/swift-$swift_version-RELEASE/$swift_tar_name" archive_path=$(download_with_retry "$archive_url")
download_with_retries $swift_tar_url "/tmp" "$swift_tar_name"
# Verifing pgp signature using official swift pgp key. Referring to https://www.swift.org/install/linux/#Installation-via-Tarball # Verifing pgp signature using official swift pgp key. Referring to https://www.swift.org/install/linux/#Installation-via-Tarball
# Download swift pgp key # Download and import swift pgp key
download_with_retries "https://swift.org/keys/all-keys.asc" "/tmp" "all-keys.asc" pgp_key_path=$(download_with_retry "https://swift.org/keys/all-keys.asc")
# Import swift pgp key gpg --no-default-keyring --keyring swift --import "$pgp_key_path"
gpg --no-default-keyring --keyring swift --import /tmp/all-keys.asc
# Download signature file # Download and verify signature
download_with_retries "$swift_tar_url.sig" "/tmp" "$swift_tar_name.sig" signature_path=$(download_with_retry "${archive_url}.sig")
# Verify signature gpg --no-default-keyring --keyring swift --verify "$signature_path" "$archive_path"
gpg --no-default-keyring --keyring swift --verify "/tmp/$swift_tar_name.sig" "/tmp/$swift_tar_name"
# Remove swift pgp public key with temporary keyring # Remove swift pgp public key with temporary keyring
rm ~/.gnupg/swift rm ~/.gnupg/swift
# Extract and install swift
tar xzf /tmp/$swift_tar_name tar xzf "$archive_path" -C /tmp
SWIFT_INSTALL_ROOT="/usr/share/swift" SWIFT_INSTALL_ROOT="/usr/share/swift"
SWIFT_BIN_ROOT="$SWIFT_INSTALL_ROOT/usr/bin" SWIFT_BIN_ROOT="$SWIFT_INSTALL_ROOT/usr/bin"
SWIFT_LIB_ROOT="$SWIFT_INSTALL_ROOT/usr/lib" SWIFT_LIB_ROOT="$SWIFT_INSTALL_ROOT/usr/lib"
mv swift-$swift_version-RELEASE-ubuntu$image_label $SWIFT_INSTALL_ROOT mv "/tmp/${swift_release_name}" $SWIFT_INSTALL_ROOT
mkdir -p /usr/local/lib mkdir -p /usr/local/lib
ln -s "$SWIFT_BIN_ROOT/swift" /usr/local/bin/swift ln -s "$SWIFT_BIN_ROOT/swift" /usr/local/bin/swift

View File

@@ -7,10 +7,8 @@
source $HELPER_SCRIPTS/install.sh source $HELPER_SCRIPTS/install.sh
# Install Terraform # Install Terraform
URL=$(curl -fsSL https://api.releases.hashicorp.com/v1/releases/terraform/latest | jq -r '.builds[] | select((.arch=="amd64") and (.os=="linux")).url') download_url=$(curl -fsSL https://api.releases.hashicorp.com/v1/releases/terraform/latest | jq -r '.builds[] | select((.arch=="amd64") and (.os=="linux")).url')
ZIP_NAME="terraform_linux_amd64.zip" archive_path=$(download_with_retry "${download_url}")
download_with_retries "${URL}" "/tmp" "${ZIP_NAME}" unzip -qq "$archive_path" -d /usr/local/bin
unzip -qq "/tmp/${ZIP_NAME}" -d /usr/local/bin
rm -f "/tmp/${ZIP_NAME}"
invoke_tests "Tools" "Terraform" invoke_tests "Tools" "Terraform"

View File

@@ -1,20 +1,22 @@
#!/bin/bash -e #!/bin/bash -e
################################################################################ ################################################################################
## File: install-yq.sh ## File: install-yq.sh
## Desc: Install YQ ## Desc: Install yq - a command-line YAML, JSON and XML processor
## Supply chain security: YQ - checksum validation ## Supply chain security: yq - checksum validation
################################################################################ ################################################################################
# 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 YQ # Download yq
base_url="https://github.com/mikefarah/yq/releases/latest/download" base_url="https://github.com/mikefarah/yq/releases/latest/download"
download_with_retries "${base_url}/yq_linux_amd64" "/tmp" "yq" binary_path=$(download_with_retry "${base_url}/yq_linux_amd64")
# Supply chain security - YQ
# Supply chain security - yq
external_hash=$(get_hash_from_remote_file "${base_url}/checksums" "yq_linux_amd64 " "" " " "19") external_hash=$(get_hash_from_remote_file "${base_url}/checksums" "yq_linux_amd64 " "" " " "19")
use_checksum_comparison "/tmp/yq" "${external_hash}" use_checksum_comparison "$binary_path" "$external_hash"
# Install YQ
sudo install /tmp/yq /usr/bin/yq # Install yq
sudo install "$binary_path" /usr/bin/yq
invoke_tests "Tools" "yq" invoke_tests "Tools" "yq"

View File

@@ -10,19 +10,29 @@ source $HELPER_SCRIPTS/install.sh
# Download zstd # Download zstd
release_tag=$(curl -fsSL https://api.github.com/repos/facebook/zstd/releases/latest | jq -r '.tag_name') release_tag=$(curl -fsSL https://api.github.com/repos/facebook/zstd/releases/latest | jq -r '.tag_name')
zstd_tar_name=zstd-${release_tag//v}.tar.gz release_name="zstd-${release_tag//v}"
URL=https://github.com/facebook/zstd/releases/download/${release_tag}/${zstd_tar_name} download_url="https://github.com/facebook/zstd/releases/download/${release_tag}/${release_name}.tar.gz"
download_with_retries "${URL}" "/tmp" "${zstd_tar_name}" archive_path=$(download_with_retry "${download_url}")
# Supply chain security - zstd # Supply chain security - zstd
external_hash=$(get_hash_from_remote_file "${URL}.sha256" "${zstd_tar_name}") external_hash=$(get_hash_from_remote_file "${download_url}.sha256" "${release_name}.tar.gz")
use_checksum_comparison "/tmp/${zstd_tar_name}" "${external_hash}" use_checksum_comparison "$archive_path" "$external_hash"
# Install zstd # Install zstd
apt-get install -y liblz4-dev apt-get install -y liblz4-dev
tar xzf /tmp/$zstd_tar_name -C /tmp tar xzf "$archive_path" -C /tmp
make -C /tmp/zstd-${release_tag//v}/contrib/pzstd all
make -C /tmp/zstd-${release_tag//v} zstd-release make -C "/tmp/${release_name}/contrib/pzstd" all
for copyprocess in zstd zstdless zstdgrep; do cp /tmp/zstd-${release_tag//v}/programs/$copyprocess /usr/local/bin/; done make -C "/tmp/${release_name}" zstd-release
cp /tmp/zstd-${release_tag//v}/contrib/pzstd/pzstd /usr/local/bin/
for symlink in zstdcat zstdmt unzstd; do ln -sf /usr/local/bin/zstd /usr/local/bin/$symlink; done for copyprocess in zstd zstdless zstdgrep; do
cp "/tmp/${release_name}/programs/${copyprocess}" /usr/local/bin/
done
cp "/tmp/${release_name}/contrib/pzstd/pzstd" /usr/local/bin/
for symlink in zstdcat zstdmt unzstd; do
ln -sf /usr/local/bin/zstd /usr/local/bin/${symlink}
done
invoke_tests "Tools" "Zstd" invoke_tests "Tools" "Zstd"

View File

@@ -34,8 +34,7 @@ function Get-EdgeDriverVersion {
} }
function Get-SeleniumVersion { function Get-SeleniumVersion {
$seleniumBinaryName = Get-ToolsetValue "selenium.binary_name" $fullSeleniumVersion = (Get-ChildItem "/usr/share/java/selenium-server-*").Name -replace "selenium-server-"
$fullSeleniumVersion = (Get-ChildItem "/usr/share/java/${seleniumBinaryName}-*").Name -replace "${seleniumBinaryName}-"
return $fullSeleniumVersion return $fullSeleniumVersion
} }

View File

@@ -4,50 +4,45 @@
## Desc: Helper functions for installing tools ## Desc: Helper functions for installing tools
################################################################################ ################################################################################
download_with_retries() { download_with_retry() {
# Due to restrictions of bash functions, positional arguments are used here. url=$1
# In case if you using latest argument NAME, you should also set value to all previous parameters. download_path=$2
# Example: download_with_retries $ANDROID_SDK_URL "." "android_sdk.zip"
local URL="$1"
local DEST="${2:-.}"
local NAME="${3:-${URL##*/}}"
local COMPRESSED="$4"
if [[ $COMPRESSED == "compressed" ]]; then if [ -z "$download_path" ]; then
local COMMAND="curl $URL -4 -sL --compressed -o '$DEST/$NAME' -w '%{http_code}'" download_path="/tmp/$(basename "$url")"
else
local COMMAND="curl $URL -4 -sL -o '$DEST/$NAME' -w '%{http_code}'"
fi fi
# Save current errexit state and disable it to prevent unexpected exit on error echo "Downloading package from $url to $download_path..." >&2
if echo $SHELLOPTS | grep '\(^\|:\)errexit\(:\|$\)' > /dev/null;
then
local ERR_EXIT_ENABLED=true
else
local ERR_EXIT_ENABLED=false
fi
set +e
echo "Downloading '$URL' to '${DEST}/${NAME}'..."
retries=20
interval=30 interval=30
while [ $retries -gt 0 ]; do download_start_time=$(date +%s)
((retries--))
test "$ERR_EXIT_ENABLED" = true && set +e for ((retries=20; retries>0; retries--)); do
http_code=$(eval $COMMAND) attempt_start_time=$(date +%s)
exit_code=$? if http_code=$(curl -4sSLo "$download_path" "$url" -w '%{http_code}'); then
test "$ERR_EXIT_ENABLED" = true && set -e attempt_seconds=$(($(date +%s) - attempt_start_time))
if [ $http_code -eq 200 ] && [ $exit_code -eq 0 ]; then if [ "$http_code" -eq 200 ]; then
echo "Download completed" echo "Package downloaded in $attempt_seconds seconds" >&2
return 0 break
else
echo "Received HTTP status code $http_code after $attempt_seconds seconds" >&2
fi
else else
echo "Error — Either HTTP response code for '$URL' is wrong - '$http_code' or exit code is not 0 - '$exit_code'. Waiting $interval seconds before the next attempt, $retries attempts left" attempt_seconds=$(($(date +%s) - attempt_start_time))
sleep $interval echo "Package download failed in $attempt_seconds seconds" >&2
fi fi
if [ "$retries" -le 1 ]; then
total_seconds=$(($(date +%s) - download_start_time))
echo "Package download failed after $total_seconds seconds" >&2
exit 1
fi
echo "Waiting $interval seconds before retrying (retries left: $retries)..." >&2
sleep $interval
done done
echo "Could not download $URL" echo "$download_path"
return 1
} }
## Use dpkg to figure out if a package has already been installed ## Use dpkg to figure out if a package has already been installed

View File

@@ -208,8 +208,7 @@ Describe "Sbt" {
Describe "Selenium" { Describe "Selenium" {
It "Selenium is installed" { It "Selenium is installed" {
$seleniumBinaryName = (Get-ToolsetContent).selenium.binary_name $seleniumPath = Join-Path "/usr/share/java" "selenium-server.jar"
$seleniumPath = Join-Path "/usr/share/java" "$seleniumBinaryName.jar"
$seleniumPath | Should -Exist $seleniumPath | Should -Exist
} }
} }

View File

@@ -298,8 +298,7 @@
{"name": "fastlane"} {"name": "fastlane"}
], ],
"selenium": { "selenium": {
"version": "4", "version": "4"
"binary_name": "selenium-server"
}, },
"node": { "node": {
"default": "18" "default": "18"

View File

@@ -289,8 +289,7 @@
{"name": "fastlane"} {"name": "fastlane"}
], ],
"selenium": { "selenium": {
"version": "4", "version": "4"
"binary_name": "selenium-server"
}, },
"node": { "node": {
"default": "18" "default": "18"