Sardine では、新機能の開発を高速に反復しています。チームの規模が拡大するにつれて、アカウントマネージャー、インテグレーションマネージャー、テクニカルサポートを含むさまざまなステークホルダーに適切な情報を共有し続けることが、私たちにとって非常に重要になります。さらに、コンプライアンスおよびセキュリティ上の理由から、各デプロイメントについて、書面による変更履歴(チェンジログ)と承認履歴を残しておくことが不可欠です。
このブログ記事では、リリースノートの作成を自動化するスクリプトをどのように実装したかを説明します。
私たちはコードリポジトリとしてgithubを、タスク管理にはasanaを、コミュニケーションにはslackを使用しています。リリース用スクリプトはgithubとasanaから情報を自動的に取得し、その内容をslackに投稿します。

リリース情報を取得する
スクリプトの最初のステップは、リモートサーバーからリリースバージョンを取得することです。常に本番環境への CD デプロイの前にサンドボックスへデプロイしているため、リリースしたいバージョン(サンドボックスにあるもの)と、最後にデプロイしたバージョン(本番環境にあるもの)を簡単に取得できます。
def get_release():
url = "https://api.sandbox.sardine.ai/healthz"
res = requests.get(url)
return res.headers['X-Version-Id']
変更内容に関する情報を取得する
前のステップで取得したリリースバージョン(git のコミット SHA)を使って、関連するすべての PR と、それに紐づく Asana タスクの一覧を取得できるようになります。すべての開発者には、PR の説明文に Asana タスクへのリンクを含めてもらうようにしているため、GitHub から Asana タスクの一覧を取得できます。このステップでは、まずスクリプトが「git log」コマンドでコミットの一覧を取得し、その後 GitHub API を呼び出します。このスクリプトの以前のバージョンではGH CLIを使用していましたが、CLI がをサポートしていないため、REST API に移行しました。きめ細かいアクセス トークン
def get_all_prs(repo, previous, release): result = subprocess.getstatusoutput(f"git log --pretty=format:'%h - %an, %ar : %s' {previous}..{release}") pr_numbers = re.findall("#([0-9]+)", result[1]) pr_numbers = list(map(int, pr_numbers)) github_pat = os.getenv('GITHUB_PAT', None) url = 'https://api.github.com/repos/sardine-ai/' + repo + '/pulls?state=closed&direction=desc&per_page=100' prs = [] # 500 件の PR を取得 for page in range(1, 6): prs += requests.get( url + "&page=" + str(page), headers={"Authorization":"Bearer " + github_pat} ).json() return list(filter(lambda pr: pr['number'] in pr_numbers, prs))
デプロイチケットを作成する
これで、関連する情報がすべてそろったので、すべての変更内容をまとめて記録するデプロイ承認チケットを作成できます。私たちが有用だと感じた方法のひとつは、みんなにConventional Commits(“fix” や “feat” のようなプレフィックスを付ける)に従ってもらうようお願いすることです。そうすることで、スクリプトが新機能、バグ修正などに自動的に分類できるようになります。

Slack通知
デプロイ承認チケットが作成されると、自動的に Slack に投稿されて承認依頼が行われます。また、デプロイスクリプトはデプロイ完了時にも通知を行うため、関係者は何がデプロイ予定で、何が実際にデプロイされているのかを簡単に把握できます。

自動生成されたリリースノートを公開用リリースノートに変換する
最後に、自動生成されたリリースノートはプロダクトマネージャーのような社内の準技術系ステークホルダーにはすぐに役立ちますが、社外向けにはそのままでは分かりやすいとは言えません。そこで、優秀なプロダクトマネージャーが、外部向けに分かりやすく整えたリリースノートへと変換しています。
また、私たちのスクリプトはこちらでも公開しているので、車輪の再発明をする必要はありません。すべてを自動化して、本当に面白いものを作ることに集中しましょう!


