From c6fc48a68db23da8549d933c96f6b1bb52da970d Mon Sep 17 00:00:00 2001 From: Dave Shanley Date: Tue, 19 Jul 2022 15:24:47 -0400 Subject: [PATCH] updating go-releaser, v0.0.14 will be a test release attempting to automate the homebrew tap formula update, as well as add a new shell-install file for CI/CD. the new file needs a standardized naming convention. Signed-off-by: Dave Shanley --- .goreleaser.yaml | 57 ++++++++++++- bin/install.sh | 212 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 266 insertions(+), 3 deletions(-) create mode 100755 bin/install.sh diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 56418203..8ec5ced7 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -13,9 +13,9 @@ builds: - darwin archives: - replacements: - darwin: Darwin - linux: Linux - windows: Windows + darwin: darwin + linux: linux + windows: windows 386: i386 amd64: x86_64 checksum: @@ -28,3 +28,54 @@ changelog: exclude: - '^docs:' - '^test:' +brews: + - + # Name template of the recipe + # Default to project name + name: vacuum + + # GitHub/GitLab repository to push the formula to + tap: + owner: daveshanley + name: homebrew-vacuum + + # Optionally a branch can be provided. + # Defaults to the default repository branch. + branch: main + + # The project name and current git tag are used in the format string. + commit_msg_template: "Brew formula update for {{ .ProjectName }} version {{ .Tag }}" + + # Folder inside the repository to put the formula. + # Default is the root folder. + folder: Formula + + # Your app's homepage. + # Default is empty. + homepage: "https://quobix.com/vacuum/" + + # Template of your app's description. + # Default is empty. + description: "The world's fastes, most scalable and industrial strength OpenAPI linter in the world." + + # SPDX identifier of your app's license. + # Default is empty. + license: "MIT" + + # Setting this will prevent goreleaser to actually try to commit the updated + # formula - instead, the formula file will be stored on the dist folder only, + # leaving the responsibility of publishing it to the user. + # If set to auto, the release will not be uploaded to the homebrew tap + # in case there is an indicator for prerelease in the tag e.g. v1.0.0-rc1 + # Default is false. + skip_upload: true + + # So you can `brew test` your formula. + # Default is empty. + test: | + system "#{bin}/vacuum --version" + + # Custom install script for brew. + # Default is 'bin.install "program"'. + install: | + bin.install "vacuum" \ No newline at end of file diff --git a/bin/install.sh b/bin/install.sh new file mode 100755 index 00000000..20665657 --- /dev/null +++ b/bin/install.sh @@ -0,0 +1,212 @@ +#!/bin/sh +set -e + +# Adapted/Copied from https://raw.githubusercontent.com/railwayapp/cli/master/install.sh +# +# vacuum +# https://quobix.com/vacuum/start +# +# Designed for quick installs over the network and CI/CD +# sh -c "$(curl -sSL https://github.com/daveshanley/vacuum/blob/main/bin/install.sh)" + +INSTALL_DIR=${INSTALL_DIR:-"/tmp/hack"} +BINARY_NAME=${BINARY_NAME:-"vacuum"} + +REPO_NAME="daveshanley/vacuum" +ISSUE_URL="https://github.com/daveshanley/vacuum/issues/new" + +# get_latest_release "daveshanley/vacuum" +get_latest_release() { + curl --silent "https://api.github.com/repos/$1/releases/latest" | # Get latest release from GitHub api + grep '"tag_name":' | # Get tag line + sed -E 's/.*"([^"]+)".*/\1/' # Pluck JSON value +} + +get_asset_name() { + echo "vacuum_$1_$2_$3.tar.gz" +} + +get_download_url() { + local asset_name=$(get_asset_name $1 $2 $3) + echo "https://github.com/daveshanley/vacuum/releases/download/v$1/${asset_name}" +} + +get_checksum_url() { + echo "https://github.com/daveshanley/vacuum/releases/download/v$1/checksums.txt" +} + +command_exists() { + command -v "$@" >/dev/null 2>&1 +} + +fmt_error() { + echo ${RED}"Error: $@"${RESET} >&2 +} + +fmt_warning() { + echo ${YELLOW}"Warning: $@"${RESET} >&2 +} + +fmt_underline() { + echo "$(printf '\033[4m')$@$(printf '\033[24m')" +} + +fmt_code() { + echo "\`$(printf '\033[38;5;247m')$@${RESET}\`" +} + +setup_color() { + # Only use colors if connected to a terminal + if [ -t 1 ]; then + RED=$(printf '\033[31m') + GREEN=$(printf '\033[32m') + YELLOW=$(printf '\033[33m') + BLUE=$(printf '\033[34m') + MAGENTA=$(printf '\033[35m') + BOLD=$(printf '\033[1m') + RESET=$(printf '\033[m') + else + RED="" + GREEN="" + YELLOW="" + BLUE="" + MAGENTA="" + BOLD="" + RESET="" + fi +} + +get_os() { + case "$(uname -s)" in + *linux* ) echo "linux" ;; + *Linux* ) echo "linux" ;; + *darwin* ) echo "darwin" ;; + *Darwin* ) echo "darwin" ;; + esac +} + +get_machine() { + case "$(uname -m)" in + "x86_64"|"amd64"|"x64") + echo "amd64" ;; + "i386"|"i86pc"|"x86"|"i686") + echo "i386" ;; + "arm64"|"armv6l"|"aarch64") + echo "arm64" + esac +} + +get_tmp_dir() { + echo $(mktemp -d) +} + +do_checksum() { + checksum_url=$(get_checksum_url $version) + get_checksum_url $version + expected_checksum=$(curl -sL $checksum_url | grep $asset_name | awk '{print $1}') + + + + if command_exists sha256sum; then + checksum=$(sha256sum $asset_name | awk '{print $1}') + elif command_exists shasum; then + checksum=$(shasum -a 256 $asset_name | awk '{print $1}') + else + fmt_warning "Could not find a checksum program. Install shasum or sha256sum to validate checksum." + return 0 + fi + + if [ "$checksum" != "$expected_checksum" ]; then + fmt_error "Checksums do not match" + exit 1 + fi +} + +do_install_binary() { + asset_name=$(get_asset_name $version $os $machine) + download_url=$(get_download_url $version $os $machine) + + command_exists curl || { + fmt_error "curl is not installed" + exit 1 + } + + command_exists tar || { + fmt_error "tar is not installed" + exit 1 + } + + local tmp_dir=$(get_tmp_dir) + + # Download tar.gz to tmp directory + echo "Downloading $download_url" + (cd $tmp_dir && curl -sL -O "$download_url") + + (cd $tmp_dir && do_checksum) + + # Extract download + (cd $tmp_dir && tar -xzf "$asset_name") + + # Install binary + mv "$tmp_dir/$BINARY_NAME" $INSTALL_DIR + echo "Installed railway to $INSTALL_DIR" + + # Cleanup + rm -rf $tmp_dir +} + +install_termux() { + echo "Installing vacuum, this may take a few minutes..." + pkg upgrade && pkg install golang git -y && git clone https://github.com/daveshanley/vacuum.git && cd cli/ && go build -o $PREFIX/bin/vacuum +} + +main() { + setup_color + + latest_tag=$(get_latest_release $REPO_NAME) + latest_version=$(echo $latest_tag | sed 's/v//') + version=${VERSION:-$latest_version} + + os=$(get_os) + if test -z "$os"; then + fmt_error "$(uname -s) os type is not supported" + echo "Please create an issue so we can add support. $ISSUE_URL" + exit 1 + fi + + machine=$(get_machine) + if test -z "$machine"; then + fmt_error "$(uname -m) machine type is not supported" + echo "Please create an issue so we can add support. $ISSUE_URL" + exit 1 + fi + if [ ${TERMUX_VERSION} ] ; then + install_termux + else + do_install_binary + fi + + printf "$MAGENTA" + cat <<'EOF' + . + /^\ . + /\ "V" + /__\ I O o + //..\\ I . Poof! + \].`[/ I + /l\/j\ (] . O + /. ~~ ,\/I . vacuum is now installed + \\L__j^\/I o Run `vacuum help` for commands + \/--v} I o . + | | I _________ + | | I c(` ')o + | l I \. ,/ +_/j L l\_! _//^---^\\_ + +EOF + printf "$RESET" + +} + +main +