はじめに
GitHub Actions で composite action なるものが 1 年ほど前にリリースされていたが使えてなかったので使ってみた。
Creating a composite action - GitHub Docs
In this guide, you'll learn how to build a composite action.
docs.github.com
npm エコシステムでは npm install
や npm run xxx
みたいなコマンドを実行するようなアクションを毎回定義しては似たような YAML ファイルが増えていた。今回は composite action を利用してリファクタリングしてみる。
composite action を作る
.github/actions/npm/action.yaml
を作成し、共通箇所を抜き出した。
inputs:
node-version-file:
required: false
default: ".tool-versions"
cache:
required: false
default: "npm"
cache-dependency-path:
required: false
default: "./package-lock.json"
runs:
using: "composite"
steps:
- name: Setup node
uses: actions/setup-node@v3
with:
node-version-file: ${{ inputs.node-version-file }}
cache: ${{ inputs.cache }}
cache-dependency-path: ${{ inputs.cache-dependency-path }}
- name: Install dependencies
shell: bash
run: npm ci
ポイントとしては以下になる。
using
句ではcompose
を指定する。inputs
句で composite action 側にパラメータを渡すことができる。- 詳細としては他にも
require
,default
,description
が指定できる。 - Metadata syntax for GitHub Actions - GitHub Docs
- 詳細としては他にも
run
句ではshell
の設定が必須となっている。
composite action を使う
ここでは、例として .github/workflows/ci.yaml
という CI 用に定義しておいた action ファイルを上記で作成した composite action を使用するように修正した。
name: "build"
on:
pull_request:
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 3
steps:
- name: Checkout source
uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}
+ - name: Initialize node & npm
+ uses: ./.github/actions/npm
- - name: Setup node
- uses: actions/setup-node@v3
- with:
- node-version-file: ${{ inputs.node-version-file }}
- cache: ${{ inputs.cache }}
- cache-dependency-path: ${{ inputs.cache-dependency-path }}
-
- - name: Install dependencies
- run: npm ci
- name: Execute prettier
run: npm run prettier
- name: Execute eslint
run: npm run eslint
- name: Build
run: npm run build
uses
句で作成した composite action のファイルパスを指定する。
注意点としてはリポジトリにチェックアウトする最初の処理も共通化したいところだが、composite action 自体がこのリポジトリに含まれるのでこれを共通化することはできない。
まとめ
これだけで composite action を利用でき、毎回書いていた共通処理をまとめることができた!
参考
Creating a composite action - GitHub Docs
In this guide, you'll learn how to build a composite action.
docs.github.com
ワークフローの再利用 - GitHub Docs
既存のワークフローを再利用してワークフローを作成するときに重複を回避する方法について説明します。
docs.github.com
GitHub Actionsの共通したアクションを切り出してシンプルに保つ
zenn.dev
【GitHub Actions】Composite ActionのTipsと注意点 - すぎしーのXRと3DCG
概要 動作環境 用語 使用するプロジェクト Composite Actions の実装 Composite Actions を組み込むワークフロー Composite Actions 対応 Composite Actionのファイル構成 Composite Actionの組込方針 .Netのビルドの一連の流れを集約 (複数のステップを1つに集約) upload-artifactの有効日数3日をデフォルト化 (入力のデフォルト値を独自に定義) Composite Action を使用 Composite Actionの細かな仕様 Actionの補足 通常のActionとComposite Act…
tsgcpp.hateblo.jp