はじめに
この記事はGitHub Actions Advent Calendar 2019の9日目の記事です。
GitHubのヘルプにリリースを自動的に作成の項目があるのですが、APIドキュメントへのリンクしか用意されていないので、GithubActionsでの実装例を紹介します。
課題
私が所属する開発チームではデプロイ後にリリースの下書きを作成して、そこに変更内容やリリースの前後に必要な作業をまとめてる運用をしています。
リリースの下書きを作成する際は、他のドキュメントツールに雛形を用意しておいて、毎度コピペしていて若干面倒でした。1
また、リリース直後は、動作確認や負荷を監視したりと、他に気を使うことがあるため忘れがちになるので、自動化するのは課題でした。
やったこと
- Github Actionsを利用して、リリースをPublishすると自動的に雛形どおりの下書きリリースを作成するようにしました。
作成例
テンプレート
以下のYAMLをリポジトリの.github/workflows
下に release_draft.yml
などのファイル名で配置するだけです。
name: release_draft
on:
release:
types: published
jobs:
comment:
runs-on: ubuntu-latest
steps:
- name: Post draft release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
URL: ${{ github.event.release.url }}
BODY: |
### 変更内容
-
### リリース前作業
- [ ]
<details>
<summary>実作業</summary>
</details>
### リリース後作業
- [ ]
<details>
<summary>実作業</summary>
</details>
run: |
URL=$(echo "$URL" | sed -E 's/\/[0-9]+$//g')
BODY=$(echo -e "$BODY" | sed ':a;N;$!ba;s/\n/\\n/g')
curl -X POST \
-H "Authorization: token ${GITHUB_TOKEN}" \
-d "{\"tag_name\": \"\", \"name\": \"Release 2019-MM-DD-N\", \"draft\": true, \"body\": \"${BODY}\"}" \
$URL
解説
github.event.release.url
から/${release-id}
の部分を除いてたものをAPIエンドポイントにしました。リポジトリを変更してもコードの変更は必要ありません。
テンプレートは環境変数で定義し、JSONで扱えるように改行をエスケープするようにしました。改行ありのYAMLなので、通常のMarkdownのように扱えます。
最後に
リリースを自動的に作成することで一つ手間が減り、リリース後の動作確認や負荷監視に専念できるようになりました。
リポジトリにYAMLを追加するだけなので、運用に合わせてタイトルや本文を変更して使ってもらえると幸いです。
-
クエリパラメータ付きのリリースフォームのための自動化 で雛形の代用はできます。 ↩