どんなプロダクトもそうですが、リリース作業をしていると「あれっ、このバージョンってこの修正入れてたっけ?」といったことが起こってきます。
一人で管理していても起こりますが、複数人のチーム開発をしているとなおさらです。
リリース(デプロイ)を行うごとにリリースノートを細かく書いていけばよいのですが、なかなかそこに労力を費やすこともできません。
できるだけ自動化できないかなということでスクリプトを作成してもらいました。
release_note.bash
#!/usr/bin/env bash
set -e
# 差分を取りたいバージョンを2つ指定してください
# e.g. $ release_note.sh v1.7.6.2 v1.7.6.3
# 1 各種バージョンに分ける
# 2 差分ごとの結果を表示する
PRE_VER=$1
CURRENT_VER=$2
RESULT=""
GIT_HUB_API_TOKEN="xxxxxxxxxxx" # GitHubのトークンを指定
REPO_PATH="yousan/testrepo"
function markdown() {
# git logからIssue番号を抜き出す
numArray=($(git log ${PRE_VER}...${CURRENT_VER} | grep "Merge pull" | awk '{print substr($4,2,5)}'))
# Releaseノート用、Markdown形式
for issueNum in "${numArray[@]}"; do
ISSUE_TITLE=$(curl -sH "Authorization: token ${GIT_HUB_API_TOKEN}" https://api.github.com/repos/${REPO_PATH}/issues/${issueNum} |
grep title | tr ':' '\n' | sed -n 2P | sed -e 's/ \|"\|,//g' | sed -e 's/",$//g' | sed -e 's/ "//g') # issueのタイトルを取得
ISSUE_DESC="[#${issueNum}](https://github.com/${REPO_PATH}/pull/${issueNum}) ${ISSUE_TITLE}"
echo ${ISSUE_DESC}
RESULT+=${ISSUE_DESC}$'\n'
done
}
# パターン
# 1. 比較対象バージョンのみ指定 relese_note.sh v1.7.6.2
## v1.7.6.2 と現在の差分を取る => CURRENT_VER: HEAD, PRE_VER: v1.7.6.2
# 2. 指定なし relese_note.sh
## 一つ前のバージョンと現在の差分を取る => CURRENT_VER: HEAD, PRE_VER: v1.7.6.2
if [ -z "$CURRENT_VER" ]; then # 未設定の場合には
CURRENT_VER="HEAD"
fi
if [ -z "$PRE_VER" ]; then # 未設定の場合には
PRE_VER=$(git tag | sort -V | tail -1)
fi
echo "## [${PRE_VER}](https://github.com/${REPO_PATH}/releases/tag/${PRE_VER}}) -> [${CURRENT_VER}](https://github.com/${REPO_PATH}/releases/tag/${CURRENT_VER})"
markdown
動かし方としては
1. git log
で2つのバージョン間の差分(PR)を取る
2. 差分の詳細をGitHub APIで取ってくる
という流れになっています。