Installation
Releases are viable via https://github.com/pellepelster/solidblocks/releases, for direct usage in shell-scripts the following helper function provides automatic installation
SOLIDBLOCKS_SHELL_VERSION="v0.1.5"
SOLIDBLOCKS_SHELL_CHECKSUM="08ebe58cd648c9f4efc8f180a57f7a73ebb7ad7d28595f23a61d2d6588a51ab2"
# self contained function for initial Solidblocks bootstrapping
function bootstrap_solidblocks() {
local default_dir="$(cd "$(dirname "$0")" ; pwd -P)"
local install_dir="${1:-${default_dir}/.solidblocks-shell}"
local temp_file="$(mktemp)"
curl -v -L "${SOLIDBLOCKS_BASE_URL:-https://github.com}/pellepelster/solidblocks/releases/download/${SOLIDBLOCKS_SHELL_VERSION}/solidblocks-shell-${SOLIDBLOCKS_SHELL_VERSION}.zip" > "${temp_file}"
echo "${SOLIDBLOCKS_SHELL_CHECKSUM} ${temp_file}" | sha256sum -c
mkdir -p "${install_dir}" || true
(
cd "${install_dir}"
unzip -o -j "${temp_file}" -d "${install_dir}"
rm -f "${temp_file}"
)
}
A full example that you can use as a skeleton for your own scripts
#!/usr/bin/env bash
set -eu -o pipefail
DIR="$(cd "$(dirname "$0")" ; pwd -P)"
SOLIDBLOCKS_SHELL_VERSION="v0.1.5"
SOLIDBLOCKS_SHELL_CHECKSUM="08ebe58cd648c9f4efc8f180a57f7a73ebb7ad7d28595f23a61d2d6588a51ab2"
# self contained function for initial Solidblocks bootstrapping
function bootstrap_solidblocks() {
local default_dir="$(cd "$(dirname "$0")" ; pwd -P)"
local install_dir="${1:-${default_dir}/.solidblocks-shell}"
local temp_file="$(mktemp)"
curl -v -L "${SOLIDBLOCKS_BASE_URL:-https://github.com}/pellepelster/solidblocks/releases/download/${SOLIDBLOCKS_SHELL_VERSION}/solidblocks-shell-${SOLIDBLOCKS_SHELL_VERSION}.zip" > "${temp_file}"
echo "${SOLIDBLOCKS_SHELL_CHECKSUM} ${temp_file}" | sha256sum -c
mkdir -p "${install_dir}" || true
(
cd "${install_dir}"
unzip -o -j "${temp_file}" -d "${install_dir}"
rm -f "${temp_file}"
)
}
# makes sure all needed shell functions functions are available and all bootstrapped software is on the $PATH
function ensure_environment() {
if [[ ! -d "${DIR}/.solidblocks-shell" ]]; then
echo "environment is not bootstrapped, please run ./do bootstrap first"
exit 1
fi
# included needed shell functions
source "${DIR}/.solidblocks-shell/log.sh"
source "${DIR}/.solidblocks-shell/text.sh"
source "${DIR}/.solidblocks-shell/software.sh"
# ensure $PATH contains all software downloaded via the `software_ensure_*` functions
software_set_export_path
}
# bootstrap Solidblocks, and all other software needed using the software installer helpers from https://pellepelster.github.io/solidblocks/shell/software/
function task_bootstrap() {
bootstrap_solidblocks
ensure_environment
software_ensure_terraform
}
# run the downloaded terraform version, ensure_environment ensures the downloaded versions takes precedence over any system binaries
function task_terraform {
terraform -version
}
# provide some meaningful help using shell formatting from https://pellepelster.github.io/solidblocks/shell/text/
function task_usage {
cat <<EOF
Usage: $0
bootstrap initialize the development environment
${FORMAT_BOLD}deployment${FORMAT_RESET}
terraform run terraform
EOF
exit 1
}
ARG=${1:-}
shift || true
# if we see the bootstrap command assume Solidshell is not yet initialized and skip environment setup
case "${ARG}" in
bootstrap) ;;
*) ensure_environment ;;
esac
case ${ARG} in
bootstrap) task_bootstrap "$@" ;;
terraform) task_terraform "$@" ;;
*) task_usage ;;
esac
After download and extraction the different components can be sourced in via
DIR="$(cd "$(dirname "$0")" ; pwd -P)"
source "${DIR}/.solidblocks-shell/software.sh"
software_ensure_terraform
Info
Note than when sourcing in the different files, all dependencies are also automatically loaded. E.g. when using the software helpers it will automatically also source in download.sh
and file.sh
because it needs functions from this file.