Open12
GitHub Actions

GitHub Actionsの知らなかったメモ
こちらを読んで。

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

イベント一覧

手動実行
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 }}"

定期実行
cronで指定できるが、時間ぴったりに起動することは保証されていない。
name: Schedule
on:
schedule:
- cron: '*/15 * * * *'
jobs:
run:
runs-on: ubuntu-latest
steps:
- run: date

コンテキスト
コンテキスト:実行時の情報やジョブの実行結果などを保持するオブジェクト
rkflows/choosing-what-your-workflow-does/accessing-contextual-information-about-workflow-runs

環境変数
自分でも定義できるし、GitHub Actions で定義されている環境変数もある。書き換え可能。

中間環境変数
コンテキストによって特殊文字を使う必要があり、それらがシェルコマンドの実行に意図しない影響を与えてしまう可能性がある。
回避策として中間環境変数を使用する。
name: Intermediate environment variables
on: push
jobs:
print:
runs-on: ubuntu-latest
env:
ACTOR: ${{ github.actor }}
steps:
- run: echo "${ACTOR}" # 参照時はダブルクォーテーションで囲む
- コンテキストはシェルコマンドへハードコードせず、環境変数を経由して渡す
- 環境変数はすべてダブルクォーテーションで囲む

Secretsの参照
シークレットを通常通りActions上で表示しようとしても、マスクされた状態で表示される。
Run echo "${SECRET}"
echo "${SECRET}"
shell: /usr/bin/bash -e {0}
env:
SECRET: ***
***

ワークフロー実行名を指定
コンテキストを利用して、ワークフロー名を指定できる。
name: Run name
run-name: Run by @${{ github.actor }} # ワークフロー実行名の指定
on: push
jobs:
print:
runs-on: ubuntu-latest
steps:
- run: echo "Hello"
こんな感じ

ユニットテストの性質
- 一単位の振る舞い ( a unit of befavior) を検証する
- 実行時間が短い
- 他のテストケースから隔離された状態で実行される
これらの性質を1つでも損なうと、インテグレーションテストになる。

たまに落ちるテストをリトライで誤魔化さない
フレーキーテスト (Flaky tests)
テストを成功させるこ自体は、テストの目的ではない。フレーキーテストは価値を生み出さない。無価値なら捨てる。