背景
GitHub Actions便利ですね。 着々とMSの資金力に囲われている気がしますが、便利なものには乗っかってしまった方がいいのが事実。
困っていたのはmatrixで複数バージョンのテストを走らせたときに、ひとつ失敗するとまだ終わってないジョブが強制的にキャンセルされてしまうこと。 (実際のActions)
この例だとバージョンの違いでCIが失敗することが分かりますが、その境界が分かりません。これは困る。
ドキュメントを良く見ると、この動作を変える方法が載ってたので紹介する次第です。
方法
ドキュメントの該当箇所は 「Workflow syntax for GitHub Actions - jobs.<job_id>.strategy.fail-fast」です。
strategy.fail-fast-
に false
を指定するだけです。全体はこんな感じ。(実際のActions)
name: Main workflow
on:
push: {branches: [master]}
pull_request: {branches: [master]}
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: purcell/setup-emacs@master
with:
version: '26.3'
- uses: conao3/setup-keg@master
- name: Run lint
run: 'make lint'
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
emacs_version:
- '24.1'
- '24.2'
- '24.3'
- '24.4'
- '24.5'
- '25.1'
- '25.2'
- '25.3'
- '26.1'
- '26.2'
- '26.3'
- 'snapshot'
include:
- emacs_version: 'snapshot'
allow_failure: true
steps:
- uses: actions/checkout@v1
- uses: purcell/setup-emacs@master
with:
version: ${{ matrix.emacs_version }}
- uses: conao3/setup-keg@master
- name: Run tests
if: matrix.allow_failure != true
run: 'make test'
- name: Run tests (allow failure)
if: matrix.allow_failure == true
run: 'make test || true'
この設定をすることで以下の結果を得ることができました。 境界はEmacs-24.3とEmacs-24.4の間でしたね。
まとめ
マシンを貸し出す側からしたらさっさとジョブを中止したいのだと思いますが、
ユーザーからすると strategy.fail-fast
を false
に設定するのは必須かもしれません。
パブリックレポジトリでのActionsは無料なのでどんどん使ってバグをmasterに入れないようにしましょう!