Skip to content

Commit

Permalink
updating go-releaser, v0.0.14 will be a test release
Browse files Browse the repository at this point in the history
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 <dshanley@splunk.com>
  • Loading branch information
daveshanley committed Jul 19, 2022
1 parent 1055ed7 commit c6fc48a
Show file tree
Hide file tree
Showing 2 changed files with 266 additions and 3 deletions.
57 changes: 54 additions & 3 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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"
212 changes: 212 additions & 0 deletions bin/install.sh
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit c6fc48a

Please sign in to comment.