トップ «前の日記(2019/08/10 (土) ) 最新 次の日記(2019/08/12 (月) 振替休日)» 編集 RSS feed

HsbtDiary


2019/08/11 (日) 山の日 [長年日記]

GitHub Actions がローンチされたのでマイグレートしてる

GitHub が GitHub Actions という built-in CI/CD をローンチしたので夏休み1日目はひたすら触って完全理解していた。

https://github.com/features/actions

これ、バックエンドは Azure Pipelines で public repository だと無料、並列数も 20 という内容なので他の CI サービスは CPU/RAM で殴り合いしても MS には勝てないので、Developer Experience(DX) で戦うしかなくなるんだけど、そこも GitHub がちゃんとハンドリングするだろうから、中期的にはとにかく厳しい戦いになると思う。てか、撤退じゃないかな...。

あと、以前にリリースした HCL バージョンの GitHub Actions と混同しやすくて、機能追加というよりは以前の HCL バージョンで作ったフックの口などをそのまま活用した Azure Pipelines インテグレーションです、というピボットという形だと思う。思ったより利用者いなかったのかなあ。

ただの利用者としてはソースコードリポジトリと密結合した CI は gitlab やAWS などではすでに提供されていたものなので便利だし、ライブラリのメンテナとしても Linux, Windows, macOS のマルチプラットフォームのサポートをするために Travis, AppVeyor, AzurePipelines... など複数の CI のアカウント管理や yaml の書式を学ぶのは本来必要のない学習なのでよかった。まだベータバージョンという状態だけど、ruby org では使えるようになったので、面倒見ているライブラリは GitHub Actions にせっせとマイグレートすることにした。

できたのはだいたいこの辺。ベーシックな形式としては以下のような内容です。rdoc のフォルダの yaml ファイルたちをコピーするだけでほとんどのライブラリで使えるんじゃないかな。

name: ubuntu

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        ruby: [ '2.6.x', '2.5.x', '2.4.x', '2.3.x' ]
    steps:
    - uses: actions/checkout@master
    - name: Set up Ruby
      uses: actions/setup-ruby@v1
      with:
        version: ${{ matrix.ruby }}
    - name: Install dependencies
      run: |
        gem install bundler --no-document
        bundle install
    - name: Run test
      run: rake

いくつか触っていて気が付いたポイントをつらつらと書く。

Travis と違って、RVM が integrate されているというものではなく、 https://github.com/actions/setup-ruby というリポジトリによって開発がなされている action という task の塊を使って ruby のインタプリタをインストールする形式になっている。なお、この setup-ruby が動くのは今の所 ubuntu, windows vm だけなので要注意。また、setup-ruby で提供されているバイナリは 2.4-2.6 なので ruby-head や jruby-* のテストを実行するために ubuntu vm に RVM をインストールしてバイナリをセットアップするということで Travis でやっていたことはほぼ移行できた。

ビルドマトリックスは Azure Pipelines で提供されていたように、自分で自由に変数を定義して step に渡すことで可能となる。とりあえず OS, Ruby のバージョンなどで組むのが良さそう。ただし、allow_failure に相当する機能は今の所見当たらないので、とりあえず走らせておくか、という物をどうするかはまだ探している最中。

通知機能についてはまだまだというレベルで Azure Pipelines もこの辺が微妙にしょぼくて @k0kubun くんと唸ってたというのはあまり変わってないぽい。GitHub Actions については GitHub から設定できる secrets や Slack action 、そして HCL バージョンで培ったイベントフックを多用して構築するということになりそう。こういうのやりたくないから pull-request の通知に紐づいて通知、されるだけではなく、cron などで定期的に回したものについても、失敗したら通知するなど、投げっぱなしものものについても GitHub でサポートしてほしい。

ひとまず ubuntu と macOS についてはほぼ完全に移行できる、Windows については extension のビルドに必要な環境を手探りで探しているという状況なので、pure ruby なライブラリやプロジェクト、Windows のサポートは不要というリポジトリについてはとにかく移行するのが良さそうです。

20並列、本当にすごくて、全部横に並べればすぐ終わるという状態で AppVeyor や Travis の pending はなんだったんだ...というくらい最高の DX なのは間違い無いです。(MS の)マネーはパワー。