#!/usr/bin/env bash

# run by the release-prepare.yml github action workflow
# * start from a release/A.B.x branch
# * update notification channel in ci.hcl and version in version.go
# * generate static assets (make prerelease)
# * commit and push changes to a new release/A.B.C branch
# * prepare workflow will commit changes

[ -n "$DEBUG" ] && set -x
set -euo pipefail

source "$(dirname "${BASH_SOURCE[0]}")/shared"

echo 'Checking variables'
  # starting with a release line branch like 'release/A.B.x'
  SOURCE_BRANCH="${SOURCE_BRANCH:-$(git branch --show-current)}"

  # make a new specific release branch 'release/A.B.C'
  branch_prefix="$(cut -d/ -f1 <<< "$SOURCE_BRANCH")"
  if [ -z "$branch_prefix" ]; then
    echo 'expect source branch to have a "/" in it, e.g. "release/A.B.x"'
    exit 1
  fi
  NEW_BRANCH="${NEW_BRANCH:-$branch_prefix/$NEW_VERSION}"

  REPO="${REPO:-$(basename "$PWD")}"
  GO_TAGS="${GO_TAGS:-release}"
  # vars displayed this way for easier troubleshooting
  cat <<VARS
export NEW_VERSION='${NEW_VERSION?is required}'
export SOURCE_BRANCH='$SOURCE_BRANCH'
export NEW_BRANCH='$NEW_BRANCH'
export REPO='$REPO'
export GO_TAGS='$GO_TAGS'
export GOPRIVATE='${GOPRIVATE:-}'
$0

VARS

trap check_unstaged_changes EXIT

echo 'Checking required commands'
  semver --version
  # these are run by `make prerelease`
  go version
  echo 'buf:' ; buf --version
  echo 'pnpm:' ; pnpm --version
echo

echo 'Ensuring source branch'
  git fetch origin "$SOURCE_BRANCH"
  git switch "$SOURCE_BRANCH"
  git pull origin "$SOURCE_BRANCH"
echo

echo 'Creating new branch'
  git switch --force-create "$NEW_BRANCH"
echo

echo 'Updating version.go'
  v_go='version/version.go'
  release=$(semver get release "$NEW_VERSION")
  prerel=$(semver get prerel "$NEW_VERSION")
  sed -i.bak \
    -e "s|\(Version * = *\"\)[^\"]*|\1${release}|g" \
    -e "s|\(VersionPrerelease * = *\"\)[^\"]*|\1${prerel}|g" \
    "$v_go"
  rm -f "$v_go.bak"
  git diff --color=always "$v_go"
  git add "$v_go"
echo

echo '::group::Generate static assets'
  make prerelease
  git add --force \
    ./{nomad,client}/structs/*.generated.go \
    ./command/agent/bindata_assetfs.go
echo '::endgroup::'
echo
