113 lines
2.3 KiB
Bash
113 lines
2.3 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
main() {
|
|
[[ $(type -t _verify-prerequisites) == "function" ]] && ! _verify-prerequisites && exit 1
|
|
|
|
redefine-functions-defined-with-selector-16
|
|
|
|
if [[ $(type -t "⚡${1:-}") == "function" ]]; then
|
|
command="$1"
|
|
shift
|
|
_task_args=( "$@" )
|
|
⚡$command "$@"
|
|
else
|
|
⚡help
|
|
fi
|
|
}
|
|
|
|
redefine-functions-defined-with-selector-16() {
|
|
for function in $(compgen -c $(printf "⚡\uFE0F")); do
|
|
original_definition="$(typeset -f $function)"
|
|
eval "${original_definition//$(printf "⚡\uFE0F")/⚡}"
|
|
unset $function
|
|
done
|
|
}
|
|
|
|
⚡help() {
|
|
_help-line "Show this list"
|
|
export HELP_LINE=please
|
|
echo Usage: "$0" SUBCOMMAND
|
|
echo
|
|
echo "Available subcommands:"
|
|
for subcommand in $(_subcommands); do
|
|
if [[ $(type ⚡$subcommand) =~ _help-line ]]; then
|
|
printf "\t%-20s - %s\n" "$subcommand" "$(⚡$subcommand help-line)"
|
|
else
|
|
printf "\t%-20s\n" $subcommand
|
|
fi
|
|
done
|
|
}
|
|
|
|
_subcommands() {
|
|
prefix_length=1
|
|
while [[ "$(cut -c ${prefix_length}- <<< "⚡tomato")" != "tomato" ]]; do
|
|
prefix_length=$((prefix_length + 1))
|
|
done
|
|
|
|
compgen -c ⚡ | cut -c ${prefix_length}-
|
|
}
|
|
|
|
_help-line() {
|
|
if [[ "${HELP_LINE:-}" == "please" ]]; then
|
|
echo "$1" && exit 0
|
|
fi
|
|
}
|
|
|
|
_argument() {
|
|
for arg in "${_task_args[@]}"; do
|
|
key="$(<<< "$arg" cut -d= -f1)"
|
|
value="$(<<< "$arg" cut -d= -f2-)"
|
|
if [[ "$key" == "$1" ]]; then
|
|
declare -g "_arg_$key"="$value"
|
|
fi
|
|
done
|
|
}
|
|
|
|
_required_argument() {
|
|
_argument "$@"
|
|
if [[ ! -v "_arg_$1" ]]; then
|
|
_bad-message "'hello' is a required argument" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
_good-message() {
|
|
echo -e "\e[32m$@\e[0m"
|
|
}
|
|
|
|
_bad-message() {
|
|
echo -e "\e[31m$@\e[0m"
|
|
}
|
|
|
|
_wrapper() {
|
|
unset OPTIND
|
|
while getopts "l:d:n:v:" opt; do
|
|
case $opt in
|
|
l) linux_url=$OPTARG ;;
|
|
d) darwin_url=$OPTARG ;;
|
|
n) name=$OPTARG ;;
|
|
v) version=$OPTARG ;;
|
|
esac
|
|
done
|
|
|
|
while [[ -n "${1:-}" && "$1" != "--" ]]; do
|
|
shift
|
|
done
|
|
shift
|
|
|
|
if [[ $(uname -s) == Linux ]]; then
|
|
url=$linux_url
|
|
else
|
|
url=$darwin_url
|
|
fi
|
|
|
|
wrapper_root=".generated/wrapper/$name/$version/"
|
|
mkdir -p $wrapper_root
|
|
[[ -f $wrapper_root/bin ]] || curl --location ${url//VERSION/$version} > $wrapper_root/bin
|
|
chmod +x $wrapper_root/bin
|
|
./$wrapper_root/bin "$@"
|
|
}
|
|
|
|
main "$@"
|