【リポジトリ管理を楽に!】shepherdを使ってみた

shepherdという複数のGithubリポジトリに対して一括で変更〜PR作成までができるツールを使ってみたので、使い方をまとめます!

インストール

$ npm install -g @nerdwallet/shepherd

$ shepherd version
1.16.0

準備

shepherdでは、github の操作のためにTokenが必要です。

Personal Access Tokenの場合は、github UIの右上アイコンのプルダウンから「Setting」 > 左側の「Developer settings」を選択します。

そうするとTokneを生成できるUIが表示されるので「Generate new token」を実行します。

以下の権限をつけておけば大丈夫です!

  • Pull Requests:Read and write

tokenを作成したら、環境変数に設定しておきます。

$ export GITHUB_TOKEN=<生成したトークン>

変更内容を定義

shepherdでは、各リポジトリへの変更内容を shepherd.ymlに記述します。

以下は、リポジトリ直下に「README.md」がなければ作成するという変更をすると仮定した記述例です。

# ブランチ名
id: create_readme
# PRタイトル
title: "create README.md"
adapter:
  # github固定
  type: github
  # repositories or code
  search_type: repositories
  # 検索クエリ
  search_query: "org:rhirabay"
hooks:
  # 変更対象かどうかの判定コマンド
  should_migrate:
    - test ! $(ls README.md)
  # 変更内容を記載
  apply:
    - touch README.md
  # PRメッセージを生成(echo等で標準出力)
  pr_message: |
    echo 'create README.md'

実行!

shepherdは以下の形式で実行します。

shepherd <コマンド> <shepherd.ymlの格納ディレクトリ>

リポジトリに変更を加えて、PRを作成するのであれば以下のコマンドを順に実行すればOK!

  1. checkout
  2. apply
  3. commit
  4. push
  5. pr

checkout

変更対象のリポジトリをcheckoutするコマンドです。

変更対象はsearch_queryshould_migrateによって判断されます。

$ shepherd checkout .

checkoutされたリポジトリの一覧は listコマンドで確認可能です。

$ shepherd list .

apply

checkoutしたリポジトリにそれぞれ変更を加えるコマンドです。

applyで定義した内容で変更が行われます。

$ shepherd apply .

commit / pull

それぞれgitコマンドと対応したコマンドという認識で大丈夫です。

applyで実行した変更をcommit, pushしてくれます!

$ shepherd commit .
$ shepherd push .

pr

PullRequestを作成してくれるコマンドです。

$ shepherd pr .

PullRequestのボディを事前に確認したい場合はpr-previewで確認できます!

$ shepherd pr-preview .

[rhirabay/my-projects] 1/1
$ echo 'create README.md'

Step "echo 'create README.md'
" exited with 0
✔ Generated PR message
=========
create README.md

---

*This change was executed automatically with [Shepherd](https://github.com/NerdWalletOSS/shepherd).* 💚🤖
=========

作成されたPRとそのステータスの一覧は pr-statusで確認できます!

$ shepherd pr-status .

[rhirabay/my-projects] 1/1
PR #2 [https://github.com/rhirabay/my-projects/pull/2]
PR is mergeable!

Tips

checkoutしたリポジトリはどこに?

~/.shepherd/<id>/repos/<org>/<repo>というディレクトリ配下にありました!

一部だけ実行する

--reposオプションをつけることで、各コマンドの対象リポジトリを絞ることができます!

# 形式: --repos <org>/<repo>,<org>/<repo>
$ shepherd checkout . --repos rhirabay/my-projects

一気にapplyしてしまうと怖い人でもこれで安心です!

applyスクリプトを共有する

publicなリポジトリにスクリプトを置いておくと、こんなふうに書ける!

hooks
  apply:
    - curl https://raw.githubusercontent.com/rhirabay/my-projects/main/shepherd/scripts/create_readme.sh | bash

ただ、このスクリプトを探す手間や難易度をどう下げるかは考えないと、同じようなスクリプト乱立しそう😅

調査に使う

脆弱性対応や社内のシステム改修の影響調査等にも使えそうです!

例えば社内のシステム構成の統一のために「xxx.yyyファイルが配置されていないリポジトリは対応してー」みたいなときに以下の定義で checkoutlistを実行すれば、対象があるのかないのかすぐに確認できます!

hooks:
  should_migrate:
    - test ! $(ls xxx.yyy)

まとめ

shepherdの使い方についてまとめました。

一括で複数のリポジトリに変更を加えられるので、保守作業が一気に効率化できそうです…!

何かもっと効率的な使い方が思いついたら追記します!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です