#!/bin/bash set -e print_help() { cat < [--platform {linux|macos|windows}] [--branch ] To build staging binaries from the current branch: script/release --current [--platform {linux|macos|windows}] To build binaries locally with goreleaser: script/release --local --platform {linux|macos|windows} EOF } if [ $# -eq 0 ]; then print_help >&2 exit 1 fi tag_name="" is_local="" do_push="" platform="" branch="trunk" deploy_env="production" while [ $# -gt 0 ]; do case "$1" in -h | --help ) print_help exit 0 ;; -b | --branch ) branch="$2" shift 2 ;; -p | --platform ) platform="$2" shift 2 ;; --local ) is_local=1 shift 1 ;; --staging ) deploy_env="staging" shift 1 ;; --current ) deploy_env="staging" tag_name="$(git describe --tags --abbrev=0)" branch="$(git rev-parse --symbolic-full-name '@{upstream}' 2>/dev/null || git branch --show-current)" branch="${branch#refs/remotes/*/}" do_push=1 shift 1 ;; -* ) printf "unrecognized flag: %s\n" "$1" >&2 exit 1 ;; * ) tag_name="$1" shift 1 ;; esac done announce() { local tmpdir="${TMPDIR:-/tmp}" echo "$*" | sed "s:${tmpdir%/}:\$TMPDIR:" "$@" } trigger_deployment() { announce gh workflow -R cli/cli run deployment.yml --ref "$branch" -f tag_name="$tag_name" -f environment="$deploy_env" } build_local() { local goreleaser_config=".goreleaser.yml" case "$platform" in linux ) sed '/#build:windows/,/^$/d; /#build:macos/,/^$/d' .goreleaser.yml >.goreleaser.generated.yml goreleaser_config=".goreleaser.generated.yml" ;; macos ) sed '/#build:windows/,/^$/d; /#build:linux/,/^$/d' .goreleaser.yml >.goreleaser.generated.yml goreleaser_config=".goreleaser.generated.yml" ;; windows ) sed '/#build:linux/,/^$/d; /#build:macos/,/^$/d' .goreleaser.yml >.goreleaser.generated.yml goreleaser_config=".goreleaser.generated.yml" ;; esac [ -z "$tag_name" ] || export GORELEASER_CURRENT_TAG="$tag_name" announce goreleaser release -f "$goreleaser_config" --clean --skip-validate --skip-publish --release-notes="$(mktemp)" } if [ -n "$is_local" ]; then build_local else if [ -n "$do_push" ]; then if ! git diff --quiet || ! git diff --cached --quiet; then echo "refusing to continue due to uncommitted local changes" >&2 exit 1 fi announce git push fi trigger_deployment if [ "$deploy_env" = "production" ]; then echo echo "Go to Slack to manually approve this production deployment." fi fi