-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
253 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
#------------------------------------------------------------------------------ | ||
name: Release | ||
#------------------------------------------------------------------------------ | ||
# Workflow conditions | ||
on: | ||
push: | ||
tags: | ||
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 | ||
#------------------------------------------------------------------------------ | ||
jobs: | ||
#---------------------------------------------------------------------------- | ||
release-notes: | ||
name: Release Notes 📰 | ||
if: startsWith(github.ref, 'refs/tags/v') | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout Repository | ||
uses: actions/checkout@v2 | ||
with: | ||
lfs: true | ||
fetch-depth: 0 | ||
|
||
# Check 2 most recent tags, overwrites | ||
- name: Tagged Release Notes | ||
run: | | ||
workflow/scripts/notes_release.sh `git tag | tail -n2 | head -n1` `git tag | tail -n1` > release-notes.md | ||
- name: Upload Artifact | ||
uses: actions/upload-artifact@v2 | ||
with: | ||
name: release-notes | ||
path: release-notes.md | ||
retention-days: 7 | ||
#---------------------------------------------------------------------------- | ||
tagged-release: | ||
name: Tagged Release | ||
needs: [release-notes] | ||
if: startsWith(github.ref, 'refs/tags/v') | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
|
||
- name: Download Release Notes | ||
uses: actions/download-artifact@v2 | ||
with: | ||
name: release-notes | ||
|
||
- name: Create Release | ||
id: create_release | ||
uses: actions/create-release@v1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
tag_name: ${{ github.ref }} | ||
release_name: Release ${{ github.ref }} | ||
draft: true | ||
prerelease: false | ||
body_path: release-notes.md |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# Release v0.1.0 | ||
|
||
1. Create repository. | ||
1. Add scripts. | ||
1. Add release workflow. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
#!/bin/bash | ||
|
||
NEW_VER=$1 | ||
|
||
#------------------------------ | ||
# Constants | ||
BASE=`git log -r | head -n 1 | cut -d " " -f2` | ||
TAGS=`git tag | tr '\n' ' '` | ||
HEAD="HEAD" | ||
SCRIPTS_DIR="scripts" | ||
NOTES_DIR="docs/releases" | ||
# -1 will impose no restrictions on the number of commits | ||
MAX_COMMITS=-1 | ||
|
||
#------------------------------ | ||
# Parse Versions | ||
arr_ver=($BASE $TAGS $HEAD) | ||
num_ver=${#arr_ver[@]} | ||
|
||
# An obscure way to reverse a list | ||
arr_ver=(`for ((i=${num_ver}-1; i>=0; i--)); do echo ${arr_ver[$i]}; done | tr '\n' ' ' `) | ||
prev_ver=${arr_ver[0]} | ||
latest_ver=${arr_ver[1]} | ||
|
||
#------------------------------ | ||
# Get New Ver | ||
# By default next ver will be a new patch if not specified | ||
if [[ -z $NEW_VER ]]; then | ||
arr_latest_ver=( `echo $latest_ver | sed 's/v//g' | tr "." " "` ) | ||
major=${arr_latest_ver[0]} | ||
minor=${arr_latest_ver[1]} | ||
patch=${arr_latest_ver[2]} | ||
NEW_VER="v"$major.$minor.`expr $patch + 1` | ||
fi | ||
|
||
#------------------------------ | ||
# Remove old changelog | ||
new_ver_log=${NOTES_DIR}/"CHANGELOG_"`echo $NEW_VER | sed 's/v//g' | sed 's/\./-/g'`".md" | ||
|
||
if [[ -f CHANGELOG.md ]]; then | ||
echo "CHANGELOG.md will be moved to ${new_ver_log}" | ||
mv CHANGELOG.md ${new_ver_log} | ||
fi | ||
|
||
#------------------------------ | ||
# Changelog Header | ||
echo -e "# Changelog\n" > CHANGELOG.md | ||
|
||
#------------------------------ | ||
# Write updates | ||
for ((i=1; i<${num_ver}; i++)); | ||
do | ||
cur_ver=${arr_ver[$i]} | ||
echo "Comparing $cur_ver to $prev_ver" | ||
${SCRIPTS_DIR}/notes_release.sh ${cur_ver} ${prev_ver} $MAX_COMMITS >> CHANGELOG.md | ||
prev_ver=$cur_ver | ||
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
#!/bin/bash | ||
|
||
OLD_VER=$1 | ||
# Default is the first commit | ||
first_commit=`git log -r | head -n 1 | cut -d " " -f2` | ||
OLD_VER="$OLD_VER:=${first_commit}}" | ||
|
||
echo $OLD_VER | ||
exit | ||
|
||
NEW_VER=$2 | ||
# Default number of commits to print is 20 (use -1 for infinite) | ||
MAX_COMMITS=$3 | ||
MAX_COMMITS="${MAX_COMMITS:=20}" | ||
|
||
# Fetch the remote origin url | ||
origin=`git remote -v | grep -E "origin.*push" | sed 's/origin\t//g' | sed 's/ (push)//g' | sed 's/\.git//g'` | ||
# Get the base url for commits | ||
base="$origin/commit" | ||
|
||
# Counter for commits to print | ||
i=0; | ||
|
||
git log --pretty=oneline --abbrev-commit ${OLD_VER}..${NEW_VER} | \ | ||
while read line; | ||
do | ||
if [[ $i -ge $MAX_COMMITS && $MAX_COMMITS != -1 ]]; then | ||
break | ||
fi | ||
hash=`echo $line | cut -d " " -f 1` | ||
msg=`echo $line | sed "s/$hash //g"` | ||
echo -e "* [\`\`\`$hash\`\`\`]($BASE/$hash) $msg"; | ||
|
||
# Increment commit counter | ||
i=`expr $i + 1` | ||
done; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
#!/bin/bash | ||
|
||
# First ="a58299c51609ad" | ||
OLD_VER=$1 | ||
NEW_VER=$2 | ||
# if MAX_COMMITS not specified, will use default in notes_commits script | ||
MAX_COMMITS=$3 | ||
|
||
SCRIPTS_DIR=workflow/scripts | ||
NOTES_DIR=docs/releases | ||
REPO="ktmeaton/plague-phylogeography" | ||
|
||
# ---------------- | ||
# PR info | ||
|
||
# Retieve PR hashes | ||
arr_pr_commits=( `git ls-remote origin 'pull/*/head' | awk '{print substr($1,1,7)}' | tr '\n' ' ' ` ) | ||
pr_id=( `git ls-remote origin 'pull/*/head' | cut -f 2 | cut -d "/" -f 3 | tr '\n' ' ' ` ) | ||
num_pr=${#arr_pr_commits[@]} | ||
|
||
# Retrieve commit hashes | ||
arr_new_ver_commits=( $(${SCRIPTS_DIR}/notes_commits.sh ${OLD_VER} ${NEW_VER} | cut -d '`' -f 4 | tr '\n' ' ') ) | ||
|
||
arr_ver_pr=() | ||
# Search for matching PRs | ||
for commit in ${arr_new_ver_commits[@]}; do | ||
for ((i=0; i<num_pr; i++)); do | ||
pr=${arr_pr_commits[$i]} | ||
if [[ $pr == $commit ]]; then | ||
ver_pr=${pr_id[$i]}; | ||
arr_ver_pr=(${arr_ver_pr[@]} $ver_pr) | ||
fi; | ||
done | ||
done | ||
|
||
# ---------------- | ||
# Version Parsing | ||
if [[ $NEW_VER == "HEAD" ]]; then | ||
target_ver=$OLD_VER | ||
else | ||
target_ver=$NEW_VER | ||
fi | ||
|
||
arr_ver=(`echo ${target_ver} | sed 's/v//g' | tr '.' ' '`) | ||
major=${arr_ver[0]} | ||
minor=${arr_ver[1]} | ||
patch=${arr_ver[2]} | ||
|
||
if [[ $NEW_VER == "HEAD" ]]; then | ||
rel="Development" | ||
else | ||
rel="Release v$major.$minor.$patch" | ||
fi | ||
|
||
# ---------------- | ||
# Release Header | ||
echo "## ${rel}" | ||
echo | ||
|
||
# ---------------- | ||
# PR Header | ||
|
||
# If a pull request was found | ||
if [[ $ver_pr ]]; then | ||
echo "### Pull Requests" | ||
echo | ||
|
||
for pr in ${arr_ver_pr[@]}; do | ||
pr_title=`curl -s https://api.github.com/repos/${REPO}/pulls/2 | grep title | cut -d '"' -f 4 ` | ||
echo "* [\`\`\`pull/${pr}\`\`\`](https://github.com/${REPO}/pull/${pr}) ${pr_title}" | ||
done | ||
echo | ||
fi | ||
|
||
# ---------------- | ||
# Notes Header | ||
|
||
# If on the head, look at 'next' release notes | ||
if [[ $NEW_VER == "HEAD" ]]; then | ||
patch=`expr $patch + 1` | ||
fi | ||
|
||
target_notes=${NOTES_DIR}/Release_$major-$minor-$patch.md | ||
|
||
if [[ -f $target_notes ]]; then | ||
echo "### Notes" | ||
echo | ||
grep -r '[0-9]\. ' $target_notes | ||
echo | ||
fi | ||
|
||
# ---------------- | ||
# Commits Header | ||
echo "### Commits" | ||
echo | ||
${SCRIPTS_DIR}/notes_commits.sh ${OLD_VER} ${NEW_VER} ${MAX_COMMITS} | ||
echo |