#!/bin/bash
set -euo pipefail

err() {
    >&2 echo "ERROR: $*"
    exit 1
}

git status --porcelain | grep -q "" &&
    err "working tree is dirty, commit your changes first."

# https://raimue.blog/2010/09/09/bash-for-loop-with-glob-patterns/
shopt -s nullglob
for file in sha256sum-*; do
    err "found $file from previous release, delete it first"
done
shopt -u nullglob

[[ "$1" =~ ^v([0-9]+)\.([0-9]+)(\.([0-9]+))?$ ]] || \
    err "arg1 accepts the following formats: v1.0 v1.0.0"

git tag | grep -q "^$1$" &&
    err "tag $1 already exists"

last_tag=$(git tag | tail -1)

make -B -j"$(nproc)" VSN="$1" sha256sum-asc

{
    echo undocker "$1"
    echo
    echo Changelog since "$last_tag":
    git log --pretty=format:"- [%cn] %s" "$last_tag"..HEAD
    echo
    echo
    echo sha256sums of released binaries:
    cat sha256sum-*.txt
    echo
} | git tag -u motiejus@jakstys.lt -F - "$1"