lock_diff の紹介

2017/07/06 社内LT資料

lock_diffとは :confused: :grey_question:

https://rubygems.org/gems/lock_diff

こういうやつ :one:

image

こういうやつ :two:

image

こういうやつ :three:

image

こういうやつ :four:

<!-- diffの一部 -->
[v3.2016.0221...v3.2016.0521]
  (https://github.com/mime-types/mime-types-data/compare/v3.2016.0221...v3.2016.0521)
[v2.0.0...v2.2.0](https://github.com/flavorjones/mini_portile/compare/v2.0.0...v2.2.0)

<!-- change logの一部 -->
[change log](https://github.com/mime-types/mime-types-data/blob/master/History.md)
[change log](https://github.com/flavorjones/mini_portile/blob/master/CHANGELOG.md)

lock_diffとは :bulb:

PRのFiles changedにあるGemfile.lockの変更の差分を見て、

  • CHANGELOG系ファイルへのリンク
  • git tagによる差分表示のリンク

をPRにコメントするgem

CHANGELOG系ファイルへのリンクは、

  • CHANGELOG.mdとかHistory.txtとかnewsとかそれっぽいファイルが存在していればそのリンクを
  • github releasesが存在していればそのリンクを

と、よしやにやるようにしてある :sunglasses:

git tagによる差分表示のリンクも、
Gemfile.lockの変更差分にはrubygemのversionしかないので、それをもとに

  • "v#{version}"という名前のtag名があればそれを
  • "#{gem_name}-#{version}"があればそれを

と、よしやにやるようにしてある :sunglasses:

実行の仕方

$ extern GITHUB_ACCESS_TOKEN="xxxxxxx"
$ gem install lock_diff
$ lock_diff
Usage: lock_diff [options]
    -r, --repository=REPOSITORY      required. Like as "user/repository"
    -n, --number=PULL_REQUEST_NUMBER required
        --post-comment=true or false (default=false. Print result to stdout when false.)

$ lock_diff -r "vividmuimui/rails_tutorial" -n 26 --post-comment=true
  • githubのアクセストークン: GITHUB_ACCESS_TOKEN

を設定し、

  • リポジトリ名: “vividmuimui/rails_tutorial”
  • PR番号: “26”

を指定すれば動く。

  • --post-commentは実行結果をPRにコメントを投げるか、標準出力に出力するだけか、を選択できる

作成のきっかけ

作成のきっかけ :one:

bundle updateを定期的にしてくれるサービスのdeppbotのPRのdescriptionが良かった

image

privateリポジトリは有料 :cry:

作成のきっかけ :two:

似たようなことをしてくれるcompare_linkerというgemが既にあった

しかし、

  • CHANGELOGへのリンクがない
  • 最終更新が2年前

:bulb: :exclamation::exclamation:

compare_linkerの実装をベースに、 CHANGELOGへのリンクを出すようにするのが良いのでは!
という流れで作った

できていること・できてないこと・やりたいこと

  • updateの変更しか検知できてない。追加の変更にも対応したい
  • gemがどのgroup(development, production, test)に所属しているのか出せれば出したい
  • gemがどのgemに依存しているやつなのかをぱっと見えるようにしたい
  • versionが下がるような変更がある時に、上手く動かないはず
  • rubygemsにあがっていないgem(localやgithub指定)のときの挙動が怪しい
  • railsの変更を出せるようにしたい
    • 特別扱いして出したい
  • yarnとかにも対応できればいいなという気持ち

最後に