From 472f8caca7ba4fcfbd9813e3a4a05e3be07dba26 Mon Sep 17 00:00:00 2001 From: Pat O'Connor Date: Fri, 19 Oct 2018 19:57:31 -0700 Subject: [PATCH 1/4] Add Changelog script --- generate_changelog.sh | 79 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100755 generate_changelog.sh diff --git a/generate_changelog.sh b/generate_changelog.sh new file mode 100755 index 000000000..c21bb66bd --- /dev/null +++ b/generate_changelog.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash + +# default arguments +host="https://github.com" +api_host="https://api.github.com" +origin="sendgrid" +repo="sendgrid-python" + +# helpers +usage() { + cat << EOF +Usage: + generate_changelog [-h] + generate_changelog [-v] + +Options: + -h Print usage information + -v Specify the new version number +EOF +} + +create_changelog() { + + content="" + # Get merge commits + merges="$(git log ${latest_release}..HEAD --merges --format="* %s (%h)" --grep="^Merge pull request #" | cut -d "#" -f2 | cut -d " " -f1)" + for pr in $merges; do + echo "Getting title of PR #$pr" + url="$host/$origin/$repo/pull/$pr" + api_url="$api_host/repos/$origin/$repo/pulls/$pr" + title=$(curl -s $api_url | grep '"title": ' | cut -d '"' -f4) + content="$content- [PR #$pr]($url): $title\n" + done + + # Output changelog + echo | awk -v v_header1="## [$version] - $(date +'%Y')-$(date +'%m')-$(date +'%d') ##" \ + -v v_header2="### Added" \ + -v v_content="$content" \ + '/All notable changes to this project will be documented in this file/{print;print v_header1;print v_header2;print v_content;next}1' CHANGELOG.md \ + > CHANGELOG.md.temp + mv CHANGELOG.md.temp CHANGELOG.md +} + + +# script + +# Exit if not in a Git repository. +if [ "true" != "$(git rev-parse --is-inside-work-tree 2> /dev/null)" ] + then + echo -e "This does not seem to be a Git repository.\n" + exit +fi + +# Parse all options +while [ "$1" != "" ]; do + case $1 in + -h | --help ) usage + exit + ;; + -v | --version ) shift + version=$1 + ;; + * ) usage + exit 1 + esac + shift +done + +# Validate options +if [ "$version" == "" ] + then + echo "Must supply a version with -v" + exit 1 +fi + +# Generate changelog from last tag +latest_release="$(git describe --tags --abbrev=0)" +create_changelog +echo "Successfully wrote to CHANGELOG.md" \ No newline at end of file From c5cbdb2824ae92d08679bbcc9557f5c4cf18bc2a Mon Sep 17 00:00:00 2001 From: Patrick O'Connor Date: Wed, 24 Oct 2018 18:51:15 -0700 Subject: [PATCH 2/4] Allow specifying token based on arg or env var --- generate_changelog.sh | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/generate_changelog.sh b/generate_changelog.sh index c21bb66bd..fa499882d 100755 --- a/generate_changelog.sh +++ b/generate_changelog.sh @@ -5,16 +5,20 @@ host="https://github.com" api_host="https://api.github.com" origin="sendgrid" repo="sendgrid-python" +authorization_token="" # helpers usage() { cat << EOF Usage: generate_changelog [-h] + generate_changelog [-t] generate_changelog [-v] Options: -h Print usage information + -t Specify a token to authenticate with the api that gets PR titles + May also set the AUTHORIZATION_TOKEN environment variable -v Specify the new version number EOF } @@ -28,7 +32,12 @@ create_changelog() { echo "Getting title of PR #$pr" url="$host/$origin/$repo/pull/$pr" api_url="$api_host/repos/$origin/$repo/pulls/$pr" - title=$(curl -s $api_url | grep '"title": ' | cut -d '"' -f4) + curl_command="curl -s $api_url" + if [ "$authorization_token" != "" ] + then + curl_command="curl -H \"Authorization: token $authorization_token\" -s $api_url" + fi + title=$(${curl_command} | grep '"title": ' | cut -d '"' -f4) content="$content- [PR #$pr]($url): $title\n" done @@ -57,6 +66,9 @@ while [ "$1" != "" ]; do -h | --help ) usage exit ;; + -t | --token ) shift + authorization_token=$1 + ;; -v | --version ) shift version=$1 ;; @@ -72,6 +84,10 @@ if [ "$version" == "" ] echo "Must supply a version with -v" exit 1 fi +if [ "$authorization_token" == "" ] + then + authorization_token="$AUTHORIZATION_TOKEN" +fi # Generate changelog from last tag latest_release="$(git describe --tags --abbrev=0)" From e88885ab21d889290b287e180d36259b232cb84c Mon Sep 17 00:00:00 2001 From: Patrick O'Connor Date: Wed, 24 Oct 2018 19:20:16 -0700 Subject: [PATCH 3/4] Eval the command. Whoops --- generate_changelog.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generate_changelog.sh b/generate_changelog.sh index fa499882d..762989008 100755 --- a/generate_changelog.sh +++ b/generate_changelog.sh @@ -37,7 +37,7 @@ create_changelog() { then curl_command="curl -H \"Authorization: token $authorization_token\" -s $api_url" fi - title=$(${curl_command} | grep '"title": ' | cut -d '"' -f4) + title=$(eval $curl_command | grep '"title": ' | cut -d '"' -f4) content="$content- [PR #$pr]($url): $title\n" done From a1fc8c749c5d4c86ea379733cac7ba862e156e7b Mon Sep 17 00:00:00 2001 From: Patrick O'Connor Date: Tue, 30 Oct 2018 21:01:41 -0700 Subject: [PATCH 4/4] Change if-statements and catch errors --- generate_changelog.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/generate_changelog.sh b/generate_changelog.sh index 762989008..368d59a0d 100755 --- a/generate_changelog.sh +++ b/generate_changelog.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +set -e # default arguments host="https://github.com" @@ -33,9 +34,9 @@ create_changelog() { url="$host/$origin/$repo/pull/$pr" api_url="$api_host/repos/$origin/$repo/pulls/$pr" curl_command="curl -s $api_url" - if [ "$authorization_token" != "" ] + if [ -n "$authorization_token" ] then - curl_command="curl -H \"Authorization: token $authorization_token\" -s $api_url" + curl_command="$curl_command -H \"Authorization: token $authorization_token\"" fi title=$(eval $curl_command | grep '"title": ' | cut -d '"' -f4) content="$content- [PR #$pr]($url): $title\n" @@ -47,7 +48,7 @@ create_changelog() { -v v_content="$content" \ '/All notable changes to this project will be documented in this file/{print;print v_header1;print v_header2;print v_content;next}1' CHANGELOG.md \ > CHANGELOG.md.temp - mv CHANGELOG.md.temp CHANGELOG.md + mv -f CHANGELOG.md.temp CHANGELOG.md } @@ -79,12 +80,12 @@ while [ "$1" != "" ]; do done # Validate options -if [ "$version" == "" ] +if [ -z "$version" ] then echo "Must supply a version with -v" exit 1 fi -if [ "$authorization_token" == "" ] +if [ -z "$authorization_token" ] then authorization_token="$AUTHORIZATION_TOKEN" fi