Posted at

Bitbucket Pipelines で Laravel IDE helper を実行して、差分があったら PR も作成する

More than 1 year has passed since last update.

barryvdh/laravel-ide-helper は、PhpStorm などの IDE における補完機能を活用するために欠かせないものになっている。

また、PhanPHPStan などの静的解析を行う際にスタブとして読み込ませる、という使い方もできる。

ただし、クラスの追加・削除等を行うたびに ide-helper のコマンドを実行し、差分をコミットするのはやや煩雑であり、チーム開発ではコンフリクトが発生したりもする。

そこで、CI(今回は Bitbucket Pipelines)でコマンド実行 + PR 作成を自動化した。


設定内容

下記設定では master ブランチの変更がトリガーになっているが、custom に書いて任意のタイミングで実行できるようにしても良い。


bitbucket-pipelines.yml

pipelines:

branchs:
master:
- step:
image: <利用するイメージ名>
caches:
- composer
script:
# `ide-helper-<直前のコミットハッシュ>` という名前でブランチを切る
- BRANCH_NAME=ide-helper-`git rev-parse --short=8 master`; FILE_CHANGED=''
- git config user.name "Laravel IDE Helper"
- git config user.email "test@example.com"
- git checkout -b $BRANCH_NAME
# 事前に .env.pipelines を作っておき、DB 接続情報などを記載しておく
- cp .env.pipelines .env
- composer install -n -o -a
# `ide-helper:generate` を実行し、差分があれば git commit
- php artisan ide-helper:generate
- 'test `git diff --name-only | wc -l` -ne 0 && git commit -am "ide-helper:generate の実行" && FILE_CHANGED=changed || echo no changes'
# `ide-helper:model` を実行し、差分があれば git commit
- php artisan ide-helper:model --write --reset
- 'test `git diff --name-only | wc -l` -ne 0 && git commit -am "ide-helper:model の実行" && FILE_CHANGED=changed || echo no changes'
# どちらか一方でも git commit していれば、git push して PR を作成する
- 'test $FILE_CHANGED && git push origin $BRANCH_NAME && curl -X POST --user $BITBUCKET_USERNAME:$BITBUCKET_PASSWORD -H "Content-Type: application/json" -d "{\"title\": \"<PR タイトル>\", \"source\": {\"branch\": {\"name\": \"$BRANCH_NAME\"}, \"repository\": {\"full_name\": \"<リポジトリ所有者ユーザ名>/<リポジトリ名>\"}}}" https://api.bitbucket.org/2.0/repositories/<リポジトリ所有者ユーザ名>/<リポジトリ名>/pullrequests || echo nothing to push'


注意点



  • git push を行うため、Bitbucket Pipelines 用の SSH 鍵の設定が必要

  • それとは別に、PR 作成の API を叩くために環境変数として Bitbucket の username と password を設定しておく必要がある


  • ide-helper:model は DB のテーブル定義の情報も参照するため、別途 DB の sevice を定義しておく必要がある


参考にしたページ