2018-10-22 05:07:26 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
function GetNativeInstallDirectory {
|
|
|
|
local install_dir
|
|
|
|
|
|
|
|
if [[ -z $NETCOREENG_INSTALL_DIRECTORY ]]; then
|
|
|
|
install_dir=$HOME/.netcoreeng/native/
|
|
|
|
else
|
|
|
|
install_dir=$NETCOREENG_INSTALL_DIRECTORY
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo $install_dir
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
function GetTempDirectory {
|
|
|
|
|
|
|
|
echo $(GetNativeInstallDirectory)temp/
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
function ExpandZip {
|
|
|
|
local zip_path=$1
|
|
|
|
local output_directory=$2
|
|
|
|
local force=${3:-false}
|
|
|
|
|
|
|
|
echo "Extracting $zip_path to $output_directory"
|
|
|
|
if [[ -d $output_directory ]] && [[ $force = false ]]; then
|
|
|
|
echo "Directory '$output_directory' already exists, skipping extract"
|
|
|
|
return 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -d $output_directory ]]; then
|
|
|
|
echo "'Force flag enabled, but '$output_directory' exists. Removing directory"
|
|
|
|
rm -rf $output_directory
|
|
|
|
if [[ $? != 0 ]]; then
|
2019-11-22 13:41:58 +00:00
|
|
|
Write-PipelineTelemetryError -category 'NativeToolsBootstrap' "Unable to remove '$output_directory'"
|
2018-10-22 05:07:26 +00:00
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "Creating directory: '$output_directory'"
|
|
|
|
mkdir -p $output_directory
|
|
|
|
|
|
|
|
echo "Extracting archive"
|
|
|
|
tar -xf $zip_path -C $output_directory
|
|
|
|
if [[ $? != 0 ]]; then
|
2019-11-22 13:41:58 +00:00
|
|
|
Write-PipelineTelemetryError -category 'NativeToolsBootstrap' "Unable to extract '$zip_path'"
|
2018-10-22 05:07:26 +00:00
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
function GetCurrentOS {
|
|
|
|
local unameOut="$(uname -s)"
|
|
|
|
case $unameOut in
|
|
|
|
Linux*) echo "Linux";;
|
|
|
|
Darwin*) echo "MacOS";;
|
|
|
|
esac
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
function GetFile {
|
|
|
|
local uri=$1
|
|
|
|
local path=$2
|
|
|
|
local force=${3:-false}
|
|
|
|
local download_retries=${4:-5}
|
|
|
|
local retry_wait_time_seconds=${5:-30}
|
|
|
|
|
|
|
|
if [[ -f $path ]]; then
|
|
|
|
if [[ $force = false ]]; then
|
|
|
|
echo "File '$path' already exists. Skipping download"
|
|
|
|
return 0
|
|
|
|
else
|
|
|
|
rm -rf $path
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -f $uri ]]; then
|
|
|
|
echo "'$uri' is a file path, copying file to '$path'"
|
|
|
|
cp $uri $path
|
|
|
|
return $?
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "Downloading $uri"
|
|
|
|
# Use curl if available, otherwise use wget
|
|
|
|
if command -v curl > /dev/null; then
|
|
|
|
curl "$uri" -sSL --retry $download_retries --retry-delay $retry_wait_time_seconds --create-dirs -o "$path" --fail
|
|
|
|
else
|
|
|
|
wget -q -O "$path" "$uri" --tries="$download_retries"
|
|
|
|
fi
|
|
|
|
|
|
|
|
return $?
|
|
|
|
}
|
|
|
|
|
|
|
|
function GetTempPathFileName {
|
|
|
|
local path=$1
|
|
|
|
|
|
|
|
local temp_dir=$(GetTempDirectory)
|
|
|
|
local temp_file_name=$(basename $path)
|
|
|
|
echo $temp_dir$temp_file_name
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
function DownloadAndExtract {
|
|
|
|
local uri=$1
|
|
|
|
local installDir=$2
|
|
|
|
local force=${3:-false}
|
|
|
|
local download_retries=${4:-5}
|
|
|
|
local retry_wait_time_seconds=${5:-30}
|
|
|
|
|
|
|
|
local temp_tool_path=$(GetTempPathFileName $uri)
|
|
|
|
|
|
|
|
echo "downloading to: $temp_tool_path"
|
|
|
|
|
|
|
|
# Download file
|
|
|
|
GetFile "$uri" "$temp_tool_path" $force $download_retries $retry_wait_time_seconds
|
|
|
|
if [[ $? != 0 ]]; then
|
2019-11-22 13:41:58 +00:00
|
|
|
Write-PipelineTelemetryError -category 'NativeToolsBootstrap' "Failed to download '$uri' to '$temp_tool_path'."
|
2018-10-22 05:07:26 +00:00
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Extract File
|
|
|
|
echo "extracting from $temp_tool_path to $installDir"
|
|
|
|
ExpandZip "$temp_tool_path" "$installDir" $force $download_retries $retry_wait_time_seconds
|
|
|
|
if [[ $? != 0 ]]; then
|
2019-11-22 13:41:58 +00:00
|
|
|
Write-PipelineTelemetryError -category 'NativeToolsBootstrap' "Failed to extract '$temp_tool_path' to '$installDir'."
|
2018-10-22 05:07:26 +00:00
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
function NewScriptShim {
|
|
|
|
local shimpath=$1
|
|
|
|
local tool_file_path=$2
|
|
|
|
local force=${3:-false}
|
|
|
|
|
|
|
|
echo "Generating '$shimpath' shim"
|
|
|
|
if [[ -f $shimpath ]]; then
|
|
|
|
if [[ $force = false ]]; then
|
|
|
|
echo "File '$shimpath' already exists." >&2
|
|
|
|
return 1
|
|
|
|
else
|
|
|
|
rm -rf $shimpath
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ ! -f $tool_file_path ]]; then
|
2021-08-25 19:26:46 +00:00
|
|
|
# try to see if the path is lower cased
|
|
|
|
tool_file_path="$(echo $tool_file_path | tr "[:upper:]" "[:lower:]")"
|
|
|
|
if [[ ! -f $tool_file_path ]]; then
|
|
|
|
Write-PipelineTelemetryError -category 'NativeToolsBootstrap' "Specified tool file path:'$tool_file_path' does not exist"
|
|
|
|
return 1
|
|
|
|
fi
|
2018-10-22 05:07:26 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
local shim_contents=$'#!/usr/bin/env bash\n'
|
|
|
|
shim_contents+="SHIMARGS="$'$1\n'
|
|
|
|
shim_contents+="$tool_file_path"$' $SHIMARGS\n'
|
|
|
|
|
|
|
|
# Write shim file
|
|
|
|
echo "$shim_contents" > $shimpath
|
|
|
|
|
|
|
|
chmod +x $shimpath
|
|
|
|
|
|
|
|
echo "Finished generating shim '$shimpath'"
|
|
|
|
|
|
|
|
return $?
|
|
|
|
}
|
|
|
|
|