2
4

More than 1 year has passed since last update.

GitHubでリリースノートをいい感じに作る

Posted at

どんなプロダクトもそうですが、リリース作業をしていると「あれっ、このバージョンってこの修正入れてたっけ?」といったことが起こってきます。

一人で管理していても起こりますが、複数人のチーム開発をしているとなおさらです。
リリース(デプロイ)を行うごとにリリースノートを細かく書いていけばよいのですが、なかなかそこに労力を費やすこともできません。

できるだけ自動化できないかなということでスクリプトを作成してもらいました。

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で取ってくる

という流れになっています。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4