| #!/bin/bash |
| |
| 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 |
| GPG_KEY_ID=C6DC8F8C8E78B36A |
| gpg --batch --import <(echo -e "${GPG_PUBLIC_KEY}") |
| gpg --batch --import <(echo -e "${GPG_PRIVATE_KEY}") |
| git config --global user.email hashibot-feedback+tf-sdk-circleci@hashicorp.com |
| git config --global user.name "Terraform SDK CircleCI" |
| fi |
| |
| TARGET_VERSION="$(getTargetVersion)" |
| } |
| |
| 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 || \ |
| (printf "\nTarget version not found in changelog, exiting" && \ |
| exit 1) |
| } |
| |
| 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="${GPG_KEY_ID}" -m "v${TARGET_VERSION} [skip ci]" |
| git tag -a -m "v${TARGET_VERSION}" -s -u "${GPG_KEY_ID}" "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 "${CIRCLE_BRANCH}" |
| git push origin "v${TARGET_VERSION}" |
| } |
| |
| function commitMain { |
| printf "Committing Changes..." |
| commitChanges |
| printf "ok!\n" |
| } |
| |
| function main { |
| init |
| changelogMain |
| commitMain |
| } |
| |
| main |