Skip to content

Release notes formatting update #1634

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 16, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion tools/build-release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -315,8 +315,8 @@ set -e
rm -f "$releasesJson"

echo " previous Release: $prev_release"
echo " previous (?Pre-)release: $prev_any_release"
echo " previous Pre-release: $prev_pre_release"
echo " previous (any)release: $prev_any_release"

# add generated items to JSON package-definition contents
jq_arg=".packages[0].platforms[0].version = \"$ver\" | \
Expand Down
101 changes: 71 additions & 30 deletions tools/deploy.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
#!/bin/bash


json_escape () {
printf '%s' "$1" | python -c 'import json,sys; print(json.dumps(sys.stdin.read()))'
#printf '%s' "$1" | php -r 'echo json_encode(file_get_contents("php://stdin"));'
}

set -e

#Cmdline options
Expand Down Expand Up @@ -77,6 +83,7 @@ shopt -u nocasematch
# other lines: converted to bullets
# empty lines ignored
# if '* ' found as a first char pair, it's converted to '- ' to keep bulleting unified
echo
echo Preparing release notes
echo -----------------------
echo "Tag's message:"
Expand All @@ -89,85 +96,124 @@ if [ $arrLen > 3 ]; then
ind=3
while [ $ind -lt $arrLen ]; do
if [ $ind -eq 3 ]; then
releaseNotes="#### ${msgArray[ind]}\\n"
releaseNotes="#### ${msgArray[ind]}"
releaseNotes+=$'\r\n'
else
oneLine="$(echo -e "${msgArray[ind]}" | sed -e 's/^[[:space:]]*//')"

if [ ${#oneLine} -gt 0 ]; then
if [ "${oneLine:0:2}" == "* " ]; then oneLine=$(echo ${oneLine/\*/-}); fi
if [ "${oneLine:0:2}" != "- " ]; then releaseNotes+="- "; fi
releaseNotes+="$oneLine\\n"
releaseNotes+="$oneLine"
releaseNotes+=$'\r\n'

#debug output
echo " ${oneLine}"
fi
fi
let ind=$ind+1
done
echo "<tag's message end>"
else
releaseNotes="#### Release of $varTagName\\n"
releaseNotes="#### Release of $varTagName"
releaseNotes+=$'\r\n'

#debug output
echo " Release of $varTagName"
fi

# - list of commits (commits.txt must exit in the output dir)
commitFile=$varAssetsDir/commits.txt
if [ -e "$commitFile" ]; then
if [ -s "$commitFile" ]; then

releaseNotes+="\\n##### Commits\\n"
releaseNotes+=$'\r\n##### Commits\r\n'

#debug output
echo
echo "Commits:"

IFS=$'\n'
for next in `cat $commitFile`
do
IFS=' ' read -r commitId commitMsg <<< "$next"
releaseNotes+="- [$commitId](https://github.com/$varRepoSlug/commit/$commitId) $commitMsg\\n"
commitLine="- [$commitId](https://github.com/$varRepoSlug/commit/$commitId) $commitMsg"
echo " $commitLine"

#debug output
echo " - [$commitId](https://github.com/$varRepoSlug/commit/$commitId) $commitMsg"
releaseNotes+="$commitLine"
releaseNotes+=$'\r\n'
done
rm -f $commitFile
fi

releaseNotes=$(perl -pe 's/\r?\n/\\n/' <<< ${releaseNotes})

# Check possibly existing release for current tag
echo "Checking for possible releases of current tag $varTagName..."
# (eg build invoked by Create New Release GHUI button -> GH default release pack created immediatelly including default assests)
echo
echo "Processing GitHub release record for $varTagName:"
echo "-------------------------------------------------"

echo " - check $varTagName possible existence..."

# (eg build invoked by Create New Release GHUI button -> GH default release pack created immediately including default assests)
HTTP_RESPONSE=$(curl -L --silent --write-out "HTTPSTATUS:%{http_code}" https://api.github.com/repos/$varRepoSlug/releases/tags/$varTagName?access_token=$varAccessToken)
if [ $? -ne 0 ]; then echo "FAILED: $? => aborting"; exit 1; fi

HTTP_BODY=$(echo $HTTP_RESPONSE | sed -e 's/HTTPSTATUS\:.*//g')
HTTP_STATUS=$(echo $HTTP_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
echo " HTTP server response code: $HTTP_STATUS"
echo " ---> GitHub server HTTP response: $HTTP_STATUS"

# if the release exists, append/update recent files to its assets vector
if [ $HTTP_STATUS -eq 200 ]; then
releaseId=$(echo $HTTP_BODY | jq -r '.id')
echo " - $varTagName release found (id $releaseId)"

#merge release notes and overwrite pre-release flag. all other attributes remain unchanged
#Merge release notes and overwrite pre-release flag. all other attributes remain unchanged:

# 1. take existing notes from server (added by release creator)
releaseNotesGH=$(echo $HTTP_BODY | jq -r '.body')
releaseNotes="$releaseNotesGH\\n$releaseNotes"

echo " ... updating release notes and pre-release flag"
# - strip possibly trailing CR
if [ "${releaseNotesGH: -1}" == $'\r' ]; then
releaseNotesTemp="${releaseNotesGH:0:-1}"
else
releaseNotesTemp="$releaseNotesGH"
fi
# - add CRLF to make relnotes consistent for JSON encoding
releaseNotesTemp+=$'\r\n'

# 2. #append generated relnotes (usually commit oneliners)
releaseNotes="$releaseNotesTemp$releaseNotes"

# 3. JSON-encode whole string for GH API transfer
releaseNotes=$(json_escape "$releaseNotes")

# 4. remove extra quotes returned by python (dummy but whatever)
releaseNotes=${releaseNotes:1:-1}

#Update current GH release record
echo " - updating release notes and pre-release flag:"

curlData="{\"body\": \"$releaseNotes\",\"prerelease\": $varPrerelease}"
curl --data "$curlData" https://api.github.com/repos/$varRepoSlug/releases/$releaseId?access_token=$varAccessToken
echo " <data.begin>$curlData<data.end>"
echo
#echo "DEBUG: curl --data \"$curlData\" https://api.github.com/repos/$varRepoSlug/releases/$releaseId?access_token=$varAccessToken"

curl --data "$curlData" https://api.github.com/repos/$varRepoSlug/releases/$releaseId?access_token=$varAccessToken
if [ $? -ne 0 ]; then echo "FAILED: $? => aborting"; exit 1; fi

echo " - $varTagName release record successfully updated"

#... or create a new release record
else
releaseNotes=$(json_escape "$releaseNotes")
releaseNotes=${releaseNotes:1:-1}

echo " - release $varTagName not found, creating a new record:"

curlData="{\"tag_name\": \"$varTagName\",\"target_commitish\": \"master\",\"name\": \"v$varTagName\",\"body\": \"$releaseNotes\",\"draft\": false,\"prerelease\": $varPrerelease}"
echo " <data.begin>$curlData<data.end>"

#echo "DEBUG: curl --data \"${curlData}\" https://api.github.com/repos/${varRepoSlug}/releases?access_token=$varAccessToken | jq -r '.id'"
releaseId=$(curl --data "$curlData" https://api.github.com/repos/$varRepoSlug/releases?access_token=$varAccessToken | jq -r '.id')
echo " - new release created for $varTagName (id $releaseId)"

if [ $? -ne 0 ]; then echo "FAILED: $? => aborting"; exit 1; fi

echo " - $varTagName release record successfully created (id $releaseId)"
fi

# Assets defined by dir contents
Expand All @@ -180,19 +226,19 @@ if [ ! -z $varAssetsDir ]; then
done
fi

echo
echo varAssets: $varAssets

#Upload additional assets
if [ ! -z $varAssets ]; then
echo
echo "Uploading assets:"
echo "-----------------"
echo " Files to upload:"
echo " $varAssets"
echo

curlAuth="Authorization: token $varAccessToken"
for filename in $(echo $varAssets | tr ";" "\n")
do
echo " - ${filename}..."
echo " - ${filename}:"
curl -X POST -sH "$curlAuth" -H "Content-Type: application/octet-stream" --data-binary @"$filename" https://uploads.github.com/repos/$varRepoSlug/releases/$releaseId/assets?name=$(basename $filename)

if [ $? -ne 0 ]; then echo "FAILED: $? => aborting"; exit 1; fi
Expand All @@ -203,8 +249,3 @@ if [ ! -z $varAssets ]; then

done
fi

echo
echo