/
dwenge
/
binscripts
Обзор
Документация
Войти
/
dwenge
/
binscripts
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
utils.sh
216 строк
5 KB
Shirinkin Denis
добавил sqlc
17 окт 2025, 14:26
17 окт 2025, 14:26
63c71aa
Код
Авторство
О чём код?
#!/usr/bin/bash # set -x set -eu CACHE_DIR=$(realpath "${CACHE_DIR:-"."}") TMPDIR=${TMPDIR:-"/tmp"} DIRNAME=$(dirname $(realpath "$0")) # echo "CACHE_DIR: $CACHE_DIR" # echo "TMPDIR: $TMPDIR" # echo "DIRNAME: $DIRNAME" function get_os { echo $(uname -s | tr "[:upper:]" "[:lower:]") } function get_arch { case "$(uname -m)" in x86_64) echo "amd64" ;; *) echo "unknown" ;; esac } # Пример: # echo "--- latest --------------------" # get_github_releases "upx" "upx" "latest" # echo "--- tags/v5.0.0 ---------------" # get_github_releases "upx" "upx" "tags/v5.0.0" function get_github_releases { local user=$1 local repo=$2 local version=$3 local gh="https://api.github.com/repos/$user/$repo/releases/$version" local url=$(curl -sL "$gh" | jq .assets[].browser_download_url | sed 's/"//g') echo "$url" } # Пример: # download "https://github.com/upx/upx/releases/download/v5.0.0/upx-5.0.0-amd64_linux.tar.xz" "." function download { local url="$1" local dest="${2:-.}" local filename=`basename $url` curl -L --progress-bar -o "$filename" --output-dir "$dest" "$url" echo "${dest}/${filename}" } # Пример: # extract_archive "./upx-5.0.0-amd64_linux.tar.xz" "." "*/upx" function extract_archive { local archive="$1" local outputDir="$2" shift 2 local files="$@" case "$archive" in *.tar.xz) tar --wildcards -xJv -f "$archive" -C "$outputDir" "$files" ;; *.zip) unzip "$archive" "$files" -d "$outputDir" ;; *.tar.gz) tar --wildcards -xv -f "$archive" -C "$outputDir" "$files" ;; *) echo "unknown type archive" return 1 ;; esac } # --- utils --- # upx function execute_upx { local binary="$CACHE_DIR/upx" local version=${UPX_VERSION:-"latest"} if [ ! -f "$binary" ]; then local os=`get_os` local arch=`get_arch` local downloadUrl=` get_github_releases "upx" "upx" "$version" \ | grep "${arch}_${os}" \ | head -n1 ` echo "download url: $downloadUrl" local fnArchive=`download "$downloadUrl" "$TMPDIR"` echo "extract archive: $fnArchive" local fn=`extract_archive "$fnArchive" "$TMPDIR" "*/upx" | head -n1` echo "moved binary to: $binary" mv "${TMPDIR}/${fn}" "$binary" fi $binary $@ } # protoc function execute_protoc { local binary="$CACHE_DIR/protoc" local version="${PROTOC_VERSION:-"latest"}" if [ ! -f "$binary" ]; then local os="linux" # TODO:... local arch=`uname -m` # TODO:... local downloadUrl=` get_github_releases "protocolbuffers" "protobuf" "$version" \ | grep "${os}-${arch}" \ | head -n1 ` echo "download url: $downloadUrl" local fnArchive=`download "$downloadUrl" "$TMPDIR"` echo "extract archive: $fnArchive" local fn="bin/protoc" extract_archive "$fnArchive" "$TMPDIR" "$fn" echo "moved binary to: $binary" mv "${TMPDIR}/${fn}" "$binary" fi $binary $@ } # goose function execute_goose { local binary="$CACHE_DIR/goose" local version="${GOOSE_VERSION:-"latest"}" if [ ! -f "$binary" ]; then local os="linux" # TODO:... local arch=`uname -m` # TODO:... local downloadUrl=` get_github_releases "pressly" "goose" "$version" \ | grep "${os}_${arch}" \ | head -n1 ` echo "download url: $downloadUrl" local fn=`download "$downloadUrl" "$TMPDIR"` echo "moved binary to: $binary" mv "${fn}" "$binary" chmod +x "$binary" fi $binary $@ } # sqlc function execute_sqlc { local binary="$CACHE_DIR/sqlc" local version="${SQLC_VERSION:-"latest"}" if [ ! -f "$binary" ]; then local os=`get_os` local arch=`get_arch` local downloadUrl=` get_github_releases "sqlc-dev" "sqlc" "$version" \ | grep "${os}_${arch}" \ | head -n1 ` echo "download url: $downloadUrl" local fnArchive=`download "$downloadUrl" "$TMPDIR"` echo "extract archive: $fnArchive" local fn="sqlc" extract_archive "$fnArchive" "$TMPDIR" "$fn" echo "moved binary to: $binary" mv "${TMPDIR}/${fn}" "$binary" fi $binary $@ } # --- /utils --- execute="$1" shift 1 case "$execute" in upx) execute_upx $@ ;; protoc) execute_protoc $@ ;; goose) execute_goose $@ ;; sqlc) execute_sqlc $@ ;; *) echo "Utility \"$execute\" not defined" exit 1 ;; esac