diff --git a/scripts/changelog-links.sh b/scripts/changelog-links.sh deleted file mode 100755 index 2f8ba80acb94..000000000000 --- a/scripts/changelog-links.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -# This script rewrites [GH-nnnn]-style references in the CHANGELOG.md file to -# be Markdown links to the given github issues. -# -# This is run during releases so that the issue references in all of the -# released items are presented as clickable links, but we can just use the -# easy [GH-nnnn] shorthand for quickly adding items to the "Unrelease" section -# while merging things between releases. - -set -e - -if [[ ! -f CHANGELOG.md ]]; then - echo "ERROR: CHANGELOG.md not found in pwd." - echo "Please run this from the root of the terraform provider repository" - exit 1 -fi - -if [[ `uname` == "Darwin" ]]; then - echo "Using BSD sed" - SED="sed -i.bak -E -e" -else - echo "Using GNU sed" - SED="sed -i.bak -r -e" -fi - -PROVIDER_URL="https:\/\/github.com\/hashicorp\/terraform-provider-azurerm\/issues" - -$SED "s/GH-([0-9]+)/\[#\1\]\($PROVIDER_URL\/\1\)/g" -e 's/\[\[#(.+)([0-9])\)]$/(\[#\1\2))/g' CHANGELOG.md - -rm CHANGELOG.md.bak diff --git a/scripts/release.sh b/scripts/release.sh new file mode 100755 index 000000000000..d85bb0e44aef --- /dev/null +++ b/scripts/release.sh @@ -0,0 +1,123 @@ +#!/bin/bash + +REPO_DIR="$(cd "$(dirname "$0")"/.. && pwd)" +cd "${REPO_DIR}" + +TRUNK="main" + +usage() { + echo "Usage: $0 -y [-C] [-f]" >&2 + echo >&2 + echo " -y Proceed with release. Must be specified." >&2 + echo " -C Only prepare the changelog; do not commit, tag or push" >&2 + echo " -T Skip tests before preparing release" >&2 + echo " -f Force release prep when \`${TRUNK}\` branch is not checked out" >&2 + echo >&2 +} + +while getopts ':yCTfh' opt; do + case "$opt" in + y) + GOTIME=1 + ;; + C) + NOTAG=1 + ;; + T) + NOTEST=1 + ;; + f) + FORCE=1 + ;; + *) + usage + exit 1 + ;; + esac +done + +if [[ "${GOTIME}" != "1" ]]; then + echo "Specify \`-y\` to initiate release!" >&2 + usage + exit 1 +fi + +if [[ "$(uname)" == "Darwin" ]]; then + echo "(Using BSD sed)" + SED="sed -E" +else + echo "(Using GNU sed)" + SED="sed -r" +fi + +DATE="$(date '+%B %d, %Y')" +PROVIDER_URL="https:\/\/github.com\/hashicorp\/terraform-provider-azuread\/issues" + +BRANCH="$(git rev-parse --abbrev-ref HEAD)" +if [[ "${BRANCH}" != "${TRUNK}" ]]; then + if [[ "${FORCE}" == "1" ]]; then + echo "Caution: Proceeding with release prep on branch: ${BRANCH}" + else + echo "Release must be prepped on \`${TRUNK}\` branch. Specify \`-f\` to override." >&2 + exit 1 + fi +fi + +if [[ "$(git status --short)" != "" ]]; then + echo "Error: working tree is dirty" >&2 + exit 4 +fi + +set -e + +if [[ "${NOTEST}" == "1" ]]; then + echo "Warning: Skipping tests" +else + echo "Running tests..." + ( set -x; TF_ACC= scripts/run-test.sh ) +fi + +echo "Preparing changelog for release..." + +if [[ ! -f CHANGELOG.md ]]; then + echo "Error: CHANGELOG.md not found." + exit 2 +fi + +# Get the next release +RELEASE="$($SED -n 's/^## v?([0-9.]+) \(Unreleased\)/\1/p' CHANGELOG.md)" +if [[ "${RELEASE}" == "" ]]; then + echo "Error: could not determine next release in CHANGELOG.md" >&2 + exit 3 +fi + +# Ensure latest changes are checked out +( set -x; git pull --rebase origin "${TRUNK}" ) + +# Replace [GH-nnnn] references with issue links +( set -x; $SED -i.bak "s/\[GH-([0-9]+)\]/\(\[#\1\]\(${PROVIDER_URL}\/\1\)\)/g" CHANGELOG.md ) + +# Set the date for the latest release +( set -x; $SED -i.bak "s/^(## v?[0-9.]+) \(Unreleased\)/\1 (${DATE})/i" CHANGELOG.md ) + +rm CHANGELOG.md.bak + +if [[ "${NOTAG}" == "1" ]]; then + echo "Warning: Skipping commit, tag and push." + exit 0 +fi + +echo "Committing changelog..." +( + set -x + git commit CHANGELOG.md -m v"${RELEASE}" + git push origin "${BRANCH}" +) + +echo "Releasing v${RELEASE}..." + +( + set -x + git tag v"${RELEASE}" + git push origin v"${RELEASE}" +) diff --git a/terraform-registry-manifest.json b/terraform-registry-manifest.json index a8286e383e5d..1931b0e00217 100644 --- a/terraform-registry-manifest.json +++ b/terraform-registry-manifest.json @@ -3,4 +3,4 @@ "metadata": { "protocol_versions": ["5.0"] } -} \ No newline at end of file +}