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
.env
にGitHubのパーソナルアクセストークンが入るため今回は.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
すると、以下のように対象リポジトリのリリースページを見てみると、リリースが作成されていることがわかります。
プルリクエストの番号部分はリンクになっているため、クリックすればプルリクエストのページへ飛べるのは便利!!!
こんな感じでoctokit.rbを使ってみました。
今回のはあくまでサンプル用で、実際にはCIでのデプロイが完了したらリリースを作成するなどの使い方にはなると思います。
今後はoctokit.rbとSlack APIを組み合わせてちょっとしたツールを何個か作っていこうと思います。
github.com