#!/bin/bash

set -Eeo

VERSIONPACKAGEJSON=$(npm run env | grep npm_package_version= | cut -d '=' -f 2)
RELEASE_TYPE=$(buildkite-agent meta-data get release-type)

# The `release-notes` field is optional (required: false)
# so we'll default it to "n/a" if a value doesn't exist
RELEASE_NOTES=$(buildkite-agent meta-data get release-notes || echo "n/a")

echo "+++ :book: Processing release notes"

echo
echo "---"
echo -e '\033[0;35m'
echo "Version in package.json:"
echo "$VERSIONPACKAGEJSON"
echo
echo "CHANGELOG:"
echo "$RELEASE_NOTES"
echo -e '\033[0m'
echo "---"
echo

echo "+++ :boom: Bumping $RELEASE_TYPE version"

echo "--- NPM CI"
npm ci --quiet
echo "--- GIT CHECKOUT"
git fetch origin $BUILDKITE_BRANCH
git checkout $BUILDKITE_BRANCH
git pull --ff-only origin $BUILDKITE_BRANCH
echo "--- GIT CONFIG"
git config --local user.name "$PRODUCT_NAME"
git config --local user.email "$PRODUCT_EMAIL"
echo "--- NPM VERSION"
npm version $RELEASE_TYPE -m "Upgrade to %s [skip ci]"
echo "--- GIT PUSH"
git push -u origin $BUILDKITE_BRANCH && git push --tags
echo "--- NPM PUBLISH"
npm publish

echo "✅"

echo "--- :slack: Notify about new :npm: published version"
PUBLISHEDVERSION=$(npm run env | grep npm_package_version= | cut -d '=' -f 2)
MESSAGEHEADER=":npm: $BUILDKITE_PIPELINE_NAME - Publish Bot"
BODYMESSAGE="A new _ $RELEASE_TYPE _ version (_*$PUBLISHEDVERSION*_) has been published by _*$BUILDKITE_BUILD_AUTHOR*_\n\n*Release Notes:*\n>>>$RELEASE_NOTES"

curl --location --request POST "https://slack.com/api/chat.postMessage" \
--header "Authorization: $SLACK_AUTH_TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
    \"channel\": \"$SLACK_CHANNEL\",
	\"blocks\": [
		{
			\"type\": \"header\",
			\"text\": {
				\"type\": \"plain_text\",
				\"text\": \"$MESSAGEHEADER\",
			}
		},
		{
			\"type\": \"section\",
            \"text\": {
				\"type\": \"mrkdwn\",
				\"text\": \"$BODYMESSAGE\"
			}
		}
	]
}"

echo "✅"