2020/11/16追記: 続編を書きました。
- 元ネタ様: Javaで湯婆婆を実装してみる
- シェルスクリプト版の先駆者様: Shell scriptで湯婆婆を実装してみた
Workflow
name: 湯婆婆
on:
workflow_dispatch:
inputs:
name:
description: '契約書だよ。そこに名前を書きな。'
required: false
jobs:
keiyaku:
runs-on: ubuntu-latest
steps:
- name: フン。${{ github.event.inputs.name }}というのかい。贅沢な名だねぇ。
id: rnd
run: |
set -eu
name='${{ github.event.inputs.name }}'
random=$[RANDOM % ${#name}]
echo ::set-output name=new_name::${name:random:1}
- name: 今からお前の名前は${{ steps.rnd.outputs.new_name }}だ。いいかい、${{ steps.rnd.outputs.new_name }}だよ。分かったら返事をするんだ、${{ steps.rnd.outputs.new_name }}!!
run: echo '::debug::Convert ${{ github.event.inputs.name }} to ${{ steps.rnd.outputs.new_name }}.'
登録方法
- GitHub Actionsをリポジトリで有効化する
- すでにアカウント単位で有効化していたので、説明は割愛
-
/.github/workflows
フォルダに、上記内容のファイル(*.yml)を作成し、デフォルトブランチにコミット - 「Actions」タブを開き、「湯婆婆」がWorkflowsに登録されていることを確認する。
利用方法
- 「Actions」タブを開き、「湯婆婆」workflowをクリックする。
- 右上の「Run workflow」ボタンをクリックし、「契約書だよ。そこに名前を書きな。」に名前を入力する。
- 緑色の「Run workflow」ボタンを押す。
実行例
正常系
####「山田太郎」
https://github.com/nogic1008/gh-actions-advent-2020/runs/1383598101
実行ごとにランダムで変わります。リランしたときも変わります
https://github.com/nogic1008/gh-actions-advent-2020/runs/1383715888
「𠮷田」
𠮷田さんもちゃんと働けます。
https://github.com/nogic1008/gh-actions-advent-2020/runs/1383740768
「👪👪」
贅沢な絵文字もOK。
https://github.com/nogic1008/gh-actions-advent-2020/runs/1384113975
異常系
空白文字列
仕様通りです。
https://github.com/nogic1008/gh-actions-advent-2020/runs/1383609519
「'」
仕様外ですが、エスケープが面倒だし「'」はそんなに贅沢な名じゃないので大丈夫でしょう。
https://github.com/nogic1008/gh-actions-advent-2020/runs/1383811952
解説
手動実行トリガー(workflow_dispatch
)
「Actions」タブから手動実行できるワークフローを定義できます。
# 単純に「実行」ボタンが出るだけ
on: workflow_dispatch
# 入力ボックスのある「実行」ボタン(今回使ったもの)
on:
workflow_dispatch:
inputs:
# 後から値を参照するためのプロパティ名(任意)
# この場合は ${{ github.event.inputs.name }}に入力値が入ってくる
name:
# 入力ボックスの名前
description: '契約書だよ。そこに名前を書きな。'
# 必須入力かどうか(未指定時はfalse)
required: false
# デフォルトで入っている値(未指定時は空)
default: '山田太郎'
ジョブステップ間の値のやり取り
::
で始まる特殊なコマンドを標準出力に投げることで、ワークフローの動作を制御できます。
steps:
- name: Set Randomly
id: rnd # 後からこのステップを参照するために必要
# rndの出力パラメータにnew_name=山を指定
run: echo '::set-output name=new_name::山'
# 出力パラメータはsteps.(ステップのid).outputs.(出力パラメータ名)で参照可能
- run: echo '${{ steps.rnd.outputs.new_name }}'
おわり
ワークフローの手動実行、「自動テストはしたいけど、リリースは自分のタイミングでやりたい」みたいなシチュエーションにいかがでしょうか。
余力があれば::add-mask
を使って本当の名前を隠すとかやります。→書きました。