ディップ Advent Calendar 2022 10日目です。そろそろ折り返しですね。
業務でGithub Actionsを使っているのですが、共通になった処理を再利用したいケースがありました。
custom actions, composite action, reusable workflow を用いて実現可能ですが、今回は custom actions を用いて説明します。
詳細なドキュメント
構造
❯ exa -T -I .git -a
.
├── .github
│ ├── actions
│ │ └── hello_action
│ │ └── action.yml
│ └── workflows
│ ├── workflow-a.yml
│ └── workflow-b.yml
├── .gitignore
└── README.md
芸がありませんが、受け取った名前を使って hello, ○○!
みたいなものをログに出力してみます。
呼ばれる側
.github/actions/hello_action/action.yml
inputs:
action_user_name:
description: "action user name"
required: true
runs:
using: "composite"
steps:
- name: Hello!
run: echo "hello, ${{ inputs.action_user_name }}!"
shell: bash
custom actions では inputs
として変数値を渡すことができ、柔軟な動作変更が可能です。
(今回は紹介しませんが output
というものもあり、 custom actions で処理した結果を参照することもできます)
steps
では実際に echo
で受け取った変数値を出力するようにしています。
呼ぶ側
.github/workflows/workflow-a.yml
name: Hello World A
on:
push:
workflow_dispatch:
jobs:
say_hello:
runs-on: self-hosted
steps:
- uses: actions/checkout@v2
- name: workflow A
with:
action_user_name: 'Action User A san'
uses: ./.github/actions/hello_action
呼び出し側からは with
を用いて変数に渡します。
実行結果
実際プロジェクトではどう使っているのか
リリース作業で特定のブランチに対してPRを出すのですが、それを後続の開発ブランチに取り込みたい需要があり、自動的にPRを作成しています。
他のCIを使うよりもActionsのイベントからPRの情報が取れるGithub Actionsを活用しました。
運用をしていく中で、いくつかの操作で同じものが出てきてしまったため、処理をまとめたいという需要からcustom actionsを見つけて適用しています。
まとめ
プログラムを書く際に再利用性について意識するシーンがありますが、Github Actionsでも同様にできるのは良い発見でした。
入力値による操作が分岐などにより複雑になってしまうと利便性の問題も出てきそうですが、適切な範囲でactionを分割することにより、よりよい開発体験を実現できそうです!