Open12

GitHub Actions

komaki/こまきちkomaki/こまきち

終了ステータス

Unix系OSだと直前に実行したコマンドの終了ステータスを取得できる。
GitHub Actionsはこの終了ステータスを見て、正常終了か失敗か判定している。

# 成功
$ echo $?
0
# 失敗
$ abcde
$ echo $?
127
komaki/こまきちkomaki/こまきち

手動実行

inputを使用することで、実行時に値を渡すことができる

入力

name: Manual
on:
  workflow_dispatch:
    inputs:
      greeting:
        type: string
        default: hello
        required: true
        description: A cheerful word
jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - run: echo "${{ inputs.greeting }}"

選択型

name: Manual
on:
  workflow_dispatch:
    inputs:
      log-leve:
        description: 'Select the log level'
        type: choice
        options:
          - info
          - warn
          - error
jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - run: echo "${{ inputs.log-leve }}"
komaki/こまきちkomaki/こまきち

定期実行

cronで指定できるが、時間ぴったりに起動することは保証されていない。

name: Schedule
on:
  schedule:
    - cron: '*/15 * * * *'
jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - run: date

komaki/こまきちkomaki/こまきち

中間環境変数

コンテキストによって特殊文字を使う必要があり、それらがシェルコマンドの実行に意図しない影響を与えてしまう可能性がある。
回避策として中間環境変数を使用する。

name: Intermediate environment variables
on: push
jobs:
  print:
    runs-on: ubuntu-latest
    env:
      ACTOR: ${{ github.actor }}
    steps:
      - run: echo "${ACTOR}" # 参照時はダブルクォーテーションで囲む
  1. コンテキストはシェルコマンドへハードコードせず、環境変数を経由して渡す
  2. 環境変数はすべてダブルクォーテーションで囲む
komaki/こまきちkomaki/こまきち

Secretsの参照

シークレットを通常通りActions上で表示しようとしても、マスクされた状態で表示される。

Run echo "${SECRET}"
  echo "${SECRET}"
  shell: /usr/bin/bash -e {0}
  env:
    SECRET: ***
***
komaki/こまきちkomaki/こまきち

ワークフロー実行名を指定

コンテキストを利用して、ワークフロー名を指定できる。

name: Run name
run-name: Run by @${{ github.actor }} # ワークフロー実行名の指定
on: push
jobs:
  print:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Hello"

こんな感じ

komaki/こまきちkomaki/こまきち

ユニットテストの性質

  • 一単位の振る舞い ( a unit of befavior) を検証する
  • 実行時間が短い
  • 他のテストケースから隔離された状態で実行される

これらの性質を1つでも損なうと、インテグレーションテストになる。

komaki/こまきちkomaki/こまきち

たまに落ちるテストをリトライで誤魔化さない

フレーキーテスト (Flaky tests)

テストを成功させるこ自体は、テストの目的ではない。フレーキーテストは価値を生み出さない。無価値なら捨てる。