GitHub Actions Advent Calendar 2020 4日目の記事です。
リリースから1年が経過したGitHub Actions、皆さんは活用なさっているでしょうか?
この1年間にも色々と機能が追加され、ついには湯婆婆を実装できる段階まで進化しております。
今回は、続々と進化を遂げているGitHub Actionsの機能について
失礼しました。熱盛と出てしまいました。
実行例
正常終了
実行ログ
並盛なので大丈夫です。
異常終了
実行ログ
失礼しました。ワークフローに熱盛と出てしまいました。(放送事故)
実行ログに警告/エラーメッセージを出す
::warning::メッセージ
または ::error::メッセージ
を標準出力することで、警告/エラーメッセージを残せます。
(メッセージを出すだけで、__実際にActionを失敗させているわけではない__点に注意!)
- name: 警告
run: echo "::warning::なんかおかしい"
- name: エラー
run: echo "::error::エラー!"
- name: その後の処理
run: echo "その後の処理" # ここも実行されるし、Actionの実行結果もsuccess
::error file=ファイル名,line=行,col=列::メッセージ
のように出力することで、「特定ファイルの特定箇所」に対する警告/エラーメッセージを表現できます。
- name: 熱盛
run: echo "::error file=.github/workflows/atsumori.yml,line=17,col=10::失礼しました。熱盛と出てしまいました。"
Actionを失敗させる
終了コードを0
以外にすればOKです。
- name: 私、絶対失敗するので
run: exit 1
ランダムに値を選択するaction
「CI/CDでランダムな値を取得したい」という需要がないのか、(作成当時)Marketplaceに似たようなものがなかったので自分で作りました。
Choose Random Action · Actions · GitHub Marketplace
使用例
steps:
- uses: ddradar/choose-random-action@v1
id: act # 選択された値を後から参照するために必要
with:
# 選択肢(必須) "|" の後に続けて1行ごとに記述する
contents: |
foo
bar
baz
# 確率(オプション,デフォルト時は全項目同じ確率) 整数値で割合を指定
weights: |
2
3
5
- name: Echo outputs
# foo: 20%, bar: 30%, baz: 50% の確率で選ばれる
run: echo ${{ steps.act.outputs.selected }}
完成形
name: 熱盛
on: workflow_dispatch
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: ddradar/choose-random-action@v1
id: act
with:
contents: |
並盛
中盛
大盛
特盛
熱盛
- name: ${{ steps.act.outputs.selected }}
if: steps.act.outputs.selected == '熱盛'
run: |
echo "::error file=.github/workflows/atsumori.yml,line=17,col=10::失礼しました。熱盛と出てしまいました。"
exit 1
おわりに
自作のAction、自動テストには向きませんが「ランダムに処理を振り分けたい」用途にご利用ください。
リポジトリでは自作のLGTMコメントに反応するActionとの利用例も紹介しています。