2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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 を定義しておく必要がある

参考にしたページ

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?