browsh/scripts/releasing.bash

138 lines
3.6 KiB
Bash

#!/usr/bin/env bash
export BROWSH_VERSION
export LATEST_TAGGED_VERSION
function _goreleaser_production() {
if ! command -v goreleaser &>/dev/null; then
echo "Installing \`goreleaser'..."
go install github.com/goreleaser/goreleaser@v"$GORELEASER_VERSION"
fi
pushd "$PROJECT_ROOT"/interfacer || _panic
_export_versions
[ "$BROWSH_VERSION" = "" ] && _panic "BROWSH_VERSION unset (goreleaser needs it)"
goreleaser release \
--config "$PROJECT_ROOT"/goreleaser.yml \
--rm-dist
popd || _panic
}
function _export_versions() {
BROWSH_VERSION=$(_parse_browsh_version)
LATEST_TAGGED_VERSION=$(
git tag --sort=v:refname --list 'v*.*.*' | tail -n1 | sed -e "s/^v//"
)
}
function _parse_browsh_version() {
local version_file=$PROJECT_ROOT/interfacer/src/browsh/version.go
local line && line=$(grep 'browshVersion' <"$version_file")
local version && version=$(echo "$line" | grep -o '".*"' | sed 's/"//g')
echo -n "$version"
}
function _is_new_version() {
_export_versions
[ "$BROWSH_VERSION" = "" ] && _panic "BROWSH_VERSION unset"
[ "$LATEST_TAGGED_VERSION" = "" ] && _panic "LATEST_TAGGED_VERSION unset"
[[ "$BROWSH_VERSION" != "$LATEST_TAGGED_VERSION" ]]
}
function _tag_on_version_change() {
_export_versions
echo_versions
if ! _is_new_version; then
echo "Not tagging as there's no new version."
exit 0
fi
git tag v"$BROWSH_VERSION"
git show v"$BROWSH_VERSION" --quiet
git config --global user.email "ci@github.com"
git config --global user.name "Github Actions"
git add --all
git reset --hard v"$BROWSH_VERSION"
}
function echo_versions() {
_export_versions
echo "Browsh binary version: $BROWSH_VERSION"
echo "Git latest tag: $LATEST_TAGGED_VERSION"
}
function browsh_version() {
_export_versions
echo -n "$BROWSH_VERSION"
}
function github_actions_output_version_status() {
local status="false"
if _is_new_version; then
status="true"
fi
echo "::set-output name=is_new_version::$status"
}
function webext_build_release() {
pushd "$PROJECT_ROOT"/webext || _panic
build_webextension_production
popd || _panic
}
function update_browsh_website_with_new_version() {
_export_versions
local remote="git@github.com:browsh-org/www.brow.sh.git"
pushd /tmp || _panic
git clone "$remote"
cd www.brow.sh || _panic
echo "latest_version: $BROWSH_VERSION" >_data/browsh.yml
git add _data/browsh.yml
git commit -m "Github Actions: updated Browsh version to $BROWSH_VERSION"
git push "$remote"
popd || _panic
}
function update_homebrew_tap_with_new_version() {
_export_versions
local remote="git@github.com:browsh-org/homebrew-browsh.git"
pushd /tmp || _panic
git clone "$remote"
cd homebrew-browsh || _panic
cp -f "$PROJECT_ROOT"/interfacer/dist/browsh.rb browsh.rb
git add browsh.rb
git commit -m "Github Actions: updated to $BROWSH_VERSION"
git push "$remote"
popd || _panic
}
function goreleaser_local_only() {
pushd "$PROJECT_ROOT"/interfacer || _panic
goreleaser release \
--config "$PROJECT_ROOT"/goreleaser.yml \
--snapshot \
--rm-dist
popd || _panic
}
function build_browsh_binary() {
# Requires $path argument because it's used in the Dockerfile where the GOROOT is
# outside .git/
local path=$1
pushd "$path" || _panic
local webextension="src/browsh/browsh.xpi"
[ ! -f "$webextension" ] && _panic "browsh.xpi not present"
md5sum "$webextension"
go build ./cmd/browsh
echo "Freshly built \`browsh' version: $(./browsh --version 2>&1)"
popd || _panic
}
function release() {
[ "$(git rev-parse --abbrev-ref HEAD)" != "master" ] && _panic "Not releasing unless on the master branch"
webext_build_release
build_browsh_binary "$PROJECT_ROOT"/interfacer
_tag_on_version_change
_goreleaser_production
}