Beeeat’s log

Beeeat’s log

プログラミングで出くわした知識やツール、日常生活、働き方その他色々なことをメモしていくブログ

octokit.rbを使ってリポジトリのリリースを作ってみる

最近、業務でGitHub APIを利用するためにoctokit.rbを使ったため、その時のメモを残しておきます。

octokit.rbとは?

GitHub APIに対応したRuby製のクライアントです。 Ruby以外だと.NET(octokit.net)やNode.js(octokit/rest.js)があります。 詳しくは以下を参照。

github.com developer.github.com

octokit.rbを使ってリポジトリのリリースを作ってみる

それでは実際にoctokit.rbを使っていきましょう!!
今回作るサンプルのコードはここに公開しているため実装を確認したい場合は適宜チェックしてみてください。 github.com

ディレクトリ構成は以下のようになります。

octokit-rb-create-release-sample
├── .env
├── .gitignore
├── Gemfile
├── Gemfile.lock
└── app.rb

作業用のディレクトリを作っておきます。

$ mkdir octokit-rb-create-release-sample
$ cd octokit-rb-create-release-sample

.envGitHubのパーソナルアクセストークンが入るため今回は.gitignoreを作成し、.envを除外しておきます。

# octokit-rb-create-release-sample/.gitignore
.env

1. Gemfileを作成

Gemfileにoctokitと環境変数を設定するdotenvを入れます。

# octokit-rb-create-release-sample/Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

gem "octokit", "~> 4.0"
gem 'dotenv'

2. app.rbを作成

app.rbを以下のように作成する。
やっていることは、対象のリポジトリの最新のプルリクエストを取得し、そのプルリクエストに対してのリリースを作成する内容です。
リリースの詳細にはプルリクエストのタイトルとプルリクエストの番号を入れておくことで確認しやすいようにしました。

# octokit-rb-create-release-sample/app.rb
require 'octokit'
require 'dotenv'
Dotenv.load

client = Octokit::Client.new(access_token: ENV['GITHUB_PERSONAL_ACCESS_TOKEN'])

# 最新のプルリクエストを取得
pr = client.pull_requests(ENV['GITHUB_REPOSITORY'], state: 'closed', per_page: 1)[0]

tag_name = Time.now.strftime("%Y%m%d-%H%M%S%z")
pr_title = pr[:title]
merge_comment = "pull request: ##{pr[:number]}"

# リリースを作る
client.create_release(ENV['GITHUB_REPOSITORY'], tag_name, name: pr_title, body: merge_comment)

3. .envを作成

パーソナルアクセストークンとリポジトリをセットします。
リポジトリはリリースを作成したいリポジトリ名で設定します。
パーソナルアクセストークンの作り方がわからない場合は以下を確認。
help.github.com

# octokit-rb-create-release-sample/.env
GITHUB_PERSONAL_ACCESS_TOKEN = パーソナルアクセストークン
GITHUB_REPOSITORY = ユーザ名/リポジトリ名

実行してみる

これで出来上がったので、実際に実行してみます octokit-rb-create-release-sampleディレクトリ直下で以下を実行

$ bundle install
$ ruby app.rb

すると、以下のように対象リポジトリのリリースページを見てみると、リリースが作成されていることがわかります。
プルリクエストの番号部分はリンクになっているため、クリックすればプルリクエストのページへ飛べるのは便利!!!
f:id:bake0937:20191006195055p:plain

こんな感じでoctokit.rbを使ってみました。
今回のはあくまでサンプル用で、実際にはCIでのデプロイが完了したらリリースを作成するなどの使い方にはなると思います。
今後はoctokit.rbとSlack APIを組み合わせてちょっとしたツールを何個か作っていこうと思います。
github.com