LoginSignup
27
11

More than 3 years have passed since last update.

GitHub Actionsで湯婆婆を実装してみる

Last updated at Posted at 2020-11-11

2020/11/16追記: 続編を書きました。

Workflow

.github/workflows/yubaba.yml
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 }}.'

登録方法

  1. GitHub Actionsをリポジトリで有効化する
    • すでにアカウント単位で有効化していたので、説明は割愛
  2. /.github/workflows フォルダに、上記内容のファイル(*.yml)を作成し、デフォルトブランチにコミット
  3. 「Actions」タブを開き、「湯婆婆」がWorkflowsに登録されていることを確認する。

利用方法

  1. 「Actions」タブを開き、「湯婆婆」workflowをクリックする。
    湯婆婆 workflow
  2. 右上の「Run workflow」ボタンをクリックし、「契約書だよ。そこに名前を書きな。」に名前を入力する。
    契約書だよ。そこに名前を書きな。
  3. 緑色の「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
クラッシュ湯婆婆2

解説

手動実行トリガー(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を使って本当の名前を隠すとかやります。→書きました。

27
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
11