From 8c197db6641418a0ee41a3e11a8c321435609d42 Mon Sep 17 00:00:00 2001 From: John Maguire Date: Thu, 12 Sep 2024 12:55:35 -0400 Subject: [PATCH] add script to generate changelog for a PR (#21719) * add script to generate changelog for a PR * handle enterprise changelogs * add command to generate changelog * remove script to handle changelog release --- Makefile | 9 ++++ build-support/scripts/gen-changelog.sh | 73 ++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100755 build-support/scripts/gen-changelog.sh diff --git a/Makefile b/Makefile index 6ad1da52a1..7d759ecdd9 100644 --- a/Makefile +++ b/Makefile @@ -619,6 +619,14 @@ envoy-regen: ## Regenerating envoy golden files @find "command/connect/envoy/testdata" -name '*.golden' -delete @go test -tags '$(GOTAGS)' ./command/connect/envoy -update + +##@ Changelog + +.PHONY: gen-changelog +gen-changelog: ## Generate changelog entry for the current branch based on the currently open PR for that branch + @$(SHELL) $(CURDIR)/build-support/scripts/gen-changelog.sh + + ##@ Help # The help target prints out all targets with their descriptions organized @@ -634,3 +642,4 @@ envoy-regen: ## Regenerating envoy golden files .PHONY: help help: ## Display this help. @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) + diff --git a/build-support/scripts/gen-changelog.sh b/build-support/scripts/gen-changelog.sh new file mode 100755 index 0000000000..0e2835e95e --- /dev/null +++ b/build-support/scripts/gen-changelog.sh @@ -0,0 +1,73 @@ +#! /bin/bash +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: BUSL-1.1 + +set -eo pipefail + +pr_number=$(gh pr list -H "$(git rev-parse --abbrev-ref HEAD)" -q ".[0].number" --json "number") + +# check if this changelog is referencing an enterprise change +curdir=$(pwd) + +filename = ".changelog/$pr_number.txt" +if [[ ! $curdir == *"enterprise"* ]]; then + is_enterprise = "n" + read -p "Is this an enterprise PR? (y/n): " is_enterprise + + if [[ $is_enterprise == "y" ]]; then + filename = ".changelog/_$pr_number.txt" + fi +else + filename = ".changelog/_$pr_number.txt" +fi + +# create a new changelog file +touch $filename + +echo "Created a new changelog file for PR $pr_number." + +# prompt user to pick from list of types of changlog from "breaking-change", "security", "feature", "deprecation", or "bug" +echo "Please select the type of change:" +echo "1. breaking-change" +echo "2. security" +echo "3. feature" +echo "4. deprecation" +echo "5. bug" + +if [ -z "$1" ]; then + read -p "Enter your choice: " choice +else + choice=$1 +fi + +type="" + +case $choice in +1) + type="breaking-change" + ;; +2) + type="security" + ;; +3) + type="feature" + ;; +4) + type="deprecation" + ;; +5) + type="bug" + ;; +*) + echo "Invalid choice. Please select a number from 1 to 5." + exit 1 + ;; +esac + +msg="" + +read -ep $'Please enter the changelog message:\n' msg + +echo -e "\`\`\`release-note:$type\n$msg\n\`\`\`" >>"$filename" + +cat .changelog/$pr_number.txt