lib/asset.bash (61 lines of code) (raw):
#!/usr/bin/env bash
set -euo pipefail
# Get the OS name
# Arguments:
# $1: The system name - (optional)
# Returns:
# The OS name compatible with the asset name
function get_os() {
local -r system=${1:-$(uname -s)}
case "${system}" in
Darwin*)
echo 'darwin'
;;
Linux*)
echo 'linux'
;;
*)
>&2 echo "Unsupported OS. Exiting."
return 1
;;
esac
}
# Get the architecture name
# Arguments:
# $1: The machine name - (optional)
# Returns:
# The architecture name compatible with the asset name
function get_arch() {
local -r machine=${1:-$(uname -m)}
case "${machine}" in
x86_64)
echo 'amd64'
;;
arm64)
echo 'arm64'
;;
*)
>&2 echo "Unsupported architecture. Exiting."
return 1
;;
esac
}
# Get the asset name
# Arguments:
# $1: The oblt-cli version
# $2: The system name - (optional)
# $3: The machine name - (optional)
# Returns:
# The asset name
function get_asset_name() {
local -r version=$1
local -r system=${2:-}
local -r machine=${3:-}
local os
local arch
if ! os=$(get_os "$system"); then return 1; fi
if ! arch=$(get_arch "$machine"); then return 1; fi
echo "oblt-cli_${version}_${os}_${arch}.tar.gz"
}
# Get the asset ID
# Globals:
# VAULT_GITHUB_TOKEN
# Arguments:
# $1: The oblt-cli version
# Returns:
# The asset ID
function get_asset_id() {
local -r version=$1
local -r asset_name=$(get_asset_name "$version")
local release
release=$(curl -sL \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${VAULT_GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/elastic/observability-test-environments/releases/tags/${version}")
echo "$release" | jq -r --arg name "$asset_name" '.assets | .[] | select(.name == $name) | .id'
}
# Download the asset
# Globals:
# VAULT_GITHUB_TOKEN
# Arguments:
# $1: The asset ID
# $2: The target directory to extract the asset
# Returns:
# None
function download_asset() {
local -r asset_id=$1
local -r target_dir=$2
curl -sL \
-H "Accept: application/octet-stream" \
-H "Authorization: Bearer ${VAULT_GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/elastic/observability-test-environments/releases/assets/${asset_id}" | tar -xz -C "$target_dir"
}