blob: 32d48fce2f3659dc99da009e68fc587d27f51ef7 [file] [log] [blame]
#!/bin/bash
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: MPL-2.0
set -e
set -x
# release.sh will:
# 1. Modify changelog
# 2. Run changelog links script
# 3. Modify version in internal/version/version.go
# 4. Commit and push changes
# 5. Create a Git tag
function pleaseUseGNUsed {
echo "Please install GNU sed to your PATH as 'sed'."
exit 1
}
function init {
sed --version > /dev/null || pleaseUseGNUsed
DATE=$(date '+%B %d, %Y')
if [ "$CI" = true ] ; then
git config --global user.email "proj-terraform-exec@hashicorp.com"
git config --global user.name "terraform-exec [bot]"
git config --global gpg.program scripts/release/signore-wrapper.sh
fi
TARGET_VERSION="$(getTargetVersion)"
if [ "$TARGET_VERSION" = "" ] ; then
printf "Target version not found in changelog, exiting\n"
exit 1
fi
}
semverRegex='\([0-9]\+\.[0-9]\+\.[0-9]\+\)\(-\?\)\([0-9a-zA-Z.]\+\)\?'
function getTargetVersion {
# parse target version from CHANGELOG
sed -n 's/^# '"$semverRegex"' (Unreleased)$/\1\2\3/p' CHANGELOG.md
}
function modifyChangelog {
sed -i "s/$TARGET_VERSION (Unreleased)$/$TARGET_VERSION ($DATE)/" CHANGELOG.md
}
function changelogLinks {
./scripts/release/changelog_links.sh
}
function changelogMain {
printf "Modifying Changelog..."
modifyChangelog
printf "ok!\n"
printf "Running Changelog Links..."
changelogLinks
printf "ok!\n"
}
function modifyVersionFiles {
sed -i "s/const version =.*/const version = \"${TARGET_VERSION}\"/" internal/version/version.go
}
function commitChanges {
git add CHANGELOG.md
modifyVersionFiles
git add internal/version/version.go
if [ "$CI" = true ] ; then
git commit --gpg-sign="${SIGNORE_SIGNER}" -m "v${TARGET_VERSION} [skip ci]"
git tag -a -m "v${TARGET_VERSION}" -s -u "${SIGNORE_SIGNER}" "v${TARGET_VERSION}"
else
git commit -m "v${TARGET_VERSION} [skip ci]"
git tag -a -m "v${TARGET_VERSION}" -s "v${TARGET_VERSION}"
fi
git push origin "${GITHUB_REF_NAME}"
git push origin "v${TARGET_VERSION}"
}
function commitMain {
printf "Committing Changes..."
commitChanges
printf "ok!\n"
}
function main {
init
changelogMain
commitMain
}
main