くりにっき

フルスタックキュアエンジニアです

GitHub ActionsでTravis CIのallow_failures的なやつをやりたい

いわゆるジョブが失敗しても成功扱いしたい的なやつ

tl;dr;

jobs:
  test:
    runs-on: ubuntu-latest

    container: ${{ matrix.ruby }}

    strategy:
      fail-fast: false

      matrix:
        ruby:
          - ruby:2.2
          - ruby:2.3
          - ruby:2.4
          - ruby:2.5
          - ruby:2.6
          - ruby:2.7
          - rubylang/ruby:master-nightly-bionic
        include:
          - ruby: rubylang/ruby:master-nightly-bionic
            allow_failures: "true"

    steps:
      - uses: actions/checkout@v2

      - name: Cache vendor/bundle
        uses: actions/cache@v1
        id: cache_gem
        with:
          path: vendor/bundle
          key: v1-gem-${{ runner.os }}-${{ matrix.ruby }}-${{ github.sha }}
          restore-keys: |
            v1-gem-${{ runner.os }}-${{ matrix.ruby }}-
        continue-on-error: ${{ matrix.allow_failures == 'true' }}

https://github.com/sue445/rubicure/blob/c32525010361837a1afe05e1d1217a0f9e4321e0/.github/workflows/test.yml#L12-L45

解説

  • include で任意のmatrixに変数を突っ込むことができる
    • 上の例だと ruby:ubylang/ruby:master-nightly-bionic の時だけ matrix.allow_failures"true" で設定される *1
    • ちゃんと調べていないけど include で明示的に変数セットされてない場合はエラーにならない(空文字で評価されてる?)
  • continue-on-error: true にしてると中で失敗(赤色)しても成功扱い(緑色)にしてくれる
  • fail-fast: false はなくてもいいです
    • 僕はデフォルトの fail-fast: true (どれか1つでもジョブが失敗したら他のジョブを全部キャンセルする)が嫌いなので無効にしてます

*1:trueはyaml特殊文字なのでダブルクォーテーションで囲まないと多分ダメ