March 8, 2020

自動でcomposer updateしてPull Requestを作るGitHub Actionsを作った

composer使ってるプロジェクトなら何でも使えるはず。
https://github.com/kawax/composer-update-action
https://github.com/marketplace/actions/composer-update-action

PHP7.4が下限なので7.4ではインストールもできないプロジェクトではcomposer.jsonでconfig.platformの設定が必要かも。

プライベートリポジトリでも使える。プランごとに月に何分までの制限があるけど。

使い方

.github/workflows/update.ymlを作るだけ。

UTCの0時は日本時間で9時。好きなように変更する。

name: composer update

on:
  schedule:
    - cron: '0 0 * * *' #UTC

jobs:
  composer_update_job:
    runs-on: ubuntu-latest
    name: composer update
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: composer update action
        uses: kawax/composer-update-action@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

GITHUB_TOKENは自動的に使える

ymlにこれさえ書けばいい。

        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

パーソナルアクセストークンの作成は不要。Secretsは使わなくていい。

composer.jsonがルートにない場合

COMPOSER_PATHでcomposer.jsonがあるサブディレクトリを指定。

        env:
          COMPOSER_PATH: /subdir

composer.jsonが2つある場合

2回に分けて実行。


env:
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  GIT_NAME: cu
  GIT_EMAIL: cu@composer-update

jobs:
  composer_1st_job:
    runs-on: ubuntu-latest
    name: composer update 1
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: composer update
        uses: kawax/composer-update-action@v1
  composer_2nd_job:
    runs-on: ubuntu-latest
    name: composer update 2
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: composer update
        uses: kawax/composer-update-action@v1
        env:
          COMPOSER_PATH: /subdir

コミットユーザー

        env:
          GIT_NAME: cu
          GIT_EMAIL: cu@composer-update

Secretsを使ってもいい。

        env:
          GIT_NAME: cu
          GIT_EMAIL: ${{ secrets.GIT_EMAIL }}

GitHub Actionsのバージョン

@v1で指定してる例が多いからcomposerの^1.0と同じかと思ったけど違った。v1というタグをわざわざ付け替えてる。そんな面倒なことしたくないのでv1はブランチで使用することにした。@v1ならv1ブランチから使う。タグは普通にv1.0.0

steps:    
  - uses: actions/setup-node@74bc508 # Reference a specific commit
  - uses: actions/setup-node@v1.0    # Reference the major version of a release   
  - uses: actions/setup-node@master  # Reference a branch

https://help.github.com/ja/actions/building-actions/about-actions#versioning-your-action

終わり

自動composer update自体は1年以上前から毎日動かしてたけど結構負荷が高いので自分のサーバーで動かすと色々辛い。
GitHub Actionsに移したのでかなり楽になった。

© kawax