🌙

【LGTMoon】LGTM すると自動で LGTM 画像が投稿される GitHub Actions を作りました

2021/12/29に公開

LGTMoon 開発者の @yoshiki_utakata さんに許可をいただきコードの公開を行っております。

チームや人によりますが、エンジニア界隈には PR を Approve する際に LGTM(Looks Good To Me)を伝えるために画像を貼る文化があります。

同じ画像を使い回している方や毎回新しい画像を探して貼っている方もいると思います。

コードレビューと言いつつ、ほとんどの時間を LGTM 画像探しに使っている方もいるのではないでしょうか。

今回はそんな方々の業務を効率化するためにこちらの GitHub Actions を作りました。

デモ用の issuePR を作ったのでお気軽に LGTM してください。

LGTMoon とは

LGTM 画像を簡単に作成、見つけられるサービスです。

LGTMoon が落ちると業務が止まるほど私は依存してしまっています。

やったこと

GitHub の Issue・Pull request 上で LGTM したら、自動で LGTM 画像が投稿されるようにしました。

LGTMoon の API を使用して ランダムに LGTM 画像を取得しています。

仕組みやリリースするまでに行ったことは、以前作成した遊戯王カードをドローする GitHub Actions「draw-action」と全く同じため、気になる方はそちらの記事を参照してください。

以下では上記 GitHub Actions と異なる点のみ補足します。

イベントのトリガー

以下全て動作させるために複数のイベントをトリガーにしています。

  • issue へのコメント
  • PR のレビュー
  • PR のレビューコメント
on:
  issue_comment:
    types: [created]
  pull_request_review:
    types: [submitted]
  pull_request_review_comment:
    types: [created]

コメントの本文、またはレビューの本文に lgtm が含まれていると動作します。

if: >-
  contains(github.event.comment.body, 'lgtm')
  || contains(github.event.review.body, 'lgtm')

使用した GitHub API

issue(PR) にコメントする API と、PR のコメントに返信する API は異なるため、イベントによって叩く API を分けています。

        if (context.eventName === "issue_comment" || context.eventName === "pull_request_review") {
          octokit.request(
            "POST /repos/{owner}/{repo}/issues/{issue_number}/comments",
            {
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `![](${imageUrl})`,
            }
          );
        } else if (context.eventName === "pull_request_review_comment") {
          octokit.request(
            "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies",
            {
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `![](${imageUrl})`,
              pull_number: context.payload.pull_request.number,
              comment_id: context.payload.comment.id,
            }
          );

おわりに

LGTM しすぎて LGTMoon に負荷を掛け過ぎないように気をつけてください。

Discussion