LoginSignup
4
3

More than 1 year has passed since last update.

CircleCIでデプロイした後にGitHub Actionsでタグとリリースノートを作成する方法

Last updated at Posted at 2021-08-01

これはなに

元々、CircleCI でデプロイした後に、手動でタグを作成して GitHub に push していたのですが、タグ作成部分を GitHub Actions で自動化したので、本記事でまとめておこうと思います。(リリースノートはついで・・)

事前準備

  1. GitHubの個人アクセストークンを作成するrepo権限が必要なので、権限を選択する際にチェックを入れてください)

  2. 取得したトークンをCircleCI側に設定する(本記事では、GITHUB_TOKENという名前で設定していることを前提で進めます)

git tagについて

git tag については、本筋ではないのでさらっと。git tag を使うことによって、特定のコミットに対してタグをつけることができるので、バージョン(v1.0.0のようなもの)を管理したい時に便利です。詳細な使い方については下記を参照ください。
https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%82%BF%E3%82%B0

設定していく!

GitHub Actionsでタグとリリースノートを作成するワークフローを追加

タグを作成できるアクションがないか探していたところ、GitHub Tagというアクションを見つけました。GitHub Tag を使うと、簡単にタグを作成できるようになるので、こちらを使用していきます。この後少し説明しますが、タグの他にリリースノートも自動で作成してくれます。(ありがたい・・)
https://github.com/marketplace/actions/github-tag

設定方法

ほとんどサンプル通りですが、下記のように設定しました。

.github/workflows/create_tag.yml
jobs:
  create_tag:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Bump version and push tag
        id: tag_version
        uses: mathieudutour/github-tag-action@v5
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          default_bump: "minor"
      - name: Publish release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ steps.tag_version.outputs.new_tag }}
          release_name: Release ${{ steps.tag_version.outputs.new_tag }}
          body: ${{ steps.tag_version.outputs.changelog }}

CircleCIでデプロイが終わった後に、GitHub Actionsのワークフローを実行できるようにする

CircleCI と GitHub Actions の連携部分です。

GitHub Actions側

まずは、GitHub Actions 側から設定していきます。

repository_dispatch

GitHub Actions で外部イベントをトリガーにワークフローを実行するには、repository_dispatch を使用します。GitHubリポジトリのエンドポイントに対して、POSTすることでワークフローを実行することができます。更にワークフロー側、POSTする側でevent_typeを指定することで、特定のワークフローのみ実行することが可能になります。

repository_dispatchの設定をワークフローに追記する

先ほど作成したワークフローを以下のように修正しました。
これにより、create_tagというevent_typeを含むリクエストがあったときのみ、ワークフローを実行できるようになりました。

.github/workflows/create_tag.yml
# 追加
name: Create Tag
on:
  repository_dispatch:
    types: [create_tag]

jobs:
  create_tag:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Bump version and push tag
        id: tag_version
        uses: mathieudutour/github-tag-action@v5
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          default_bump: "minor"
      - name: Publish release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ steps.tag_version.outputs.new_tag }}
          release_name: Release ${{ steps.tag_version.outputs.new_tag }}
          body: ${{ steps.tag_version.outputs.changelog }}

CircleCI側

次に CircleCI 側の設定です。

GitHub リポジトリのエンドポイントに対して、POSTできるようにする

POST する際、気にする必要があるのは、以下の3点です。
1. 事前準備で取得しておいた $GITHUB_TOKEN
2. 対象のリポジトリのURL
3. event_type

.circleci/config.ymlに追記

自分は下記のようにデプロイ周りの設定の下に追記しました。

.circleci/config.yml
# 既存のデプロイ周りの設定
...
- run:
    name: Create Tag
    command: |
      curl -X POST -H  "Authorization: token $GITHUB_TOKEN" -H "Accept: application/vnd.github.everest-preview+json" --data '{"event_type": "create_tag"}' <リポジトリのURL>/dispatches

以上で設定周りは終わりになります。

使い方

次に使い方について説明します。
詳しくは GitHub Tag のドキュメントを見てほしいのですが、ざっくり説明すると、コミットメッセージに特定のプレフィックスをつけておくと、良い感じにバージョンを振ってくれます。

下記は対応しているプレフィックスの一部です。
コミットメッセージに以下のプレフィックスを設定すると、タグのバージョンを良い感じに更新してくれます。(Xの部分がインクリメントされる)

  • BREAKING CHANGE: 〇〇 → X.0.0
  • feat: 〇〇 → 1.X.0
  • fix: 〇〇 → 1.0.X

また、上記のプレフィックスをつけることで、以下のような簡易的なリリースノートも作成してくれます。(下記はテスト用に作成してみたもの)
簡易版リリースノート

まとめ

今回は GitHub Actions のワークフローで、タグとリリースノートの作成を行いました。現状、コミットを元にリリースノートを作成する形になっていますが、コミット単位だと細かすぎるので、できればプルリク単位でリリースノートをまとめたいなーという気持ちがあります。もし、プルリク単位でまとめることができたら、別途記事を書こうと思います。もし、良い方法をご存知の方がいたら、コメントいただけると嬉しいです!

参考

4
3
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
4
3