GitHub Actionsで使うカスタムアクションを作る
きっかけ
UnityのTest Runner実行/結果表示をGameCIを利用して自動化しようとしていたところ、Apple Silliconのmac(Self-hosted runner)では実行できなくて困ってしまった。
ないのなら、作るしかない。
作りたいもの(随時更新)
要件は以下
共通
- テスト実行のAction(Test Action)と結果表示のAction(Result Action)は分ける
Test Action
- inputにPlayMode/EditMode、もしくは両方を取る
- inputに結果ファイル(.xml)の出力パス、名前を取る
Result Action
- inputにTest Runnerで出力するxmlのパスを取る
- Test Runnerの通過数、エラー数、無視数を表示する
- エラーとなった場合、ログをGitHub上で表示できる
ChatGPTに作り方を聞いてみよう
作り方が色々あるせいで中々求めている情報を得にくく、ChatGPTに聞いてみることにした。
質問
GitHub ActionsのカスタムアクションをTypeScriptを使って作成したいです。作成までの流れを教えてください。
回答
GitHub Actionsでカスタムアクションを作成するためにTypeScriptを使用する手順を以下に示します。TypeScriptでのカスタムアクションは、公式のテンプレートリポジトリを基にして進めるとスムーズです。
1. リポジトリのセットアップ
1.1. 新しいリポジトリの作成
GitHubで新しいリポジトリを作成します。
1.2. クローン
新しく作成したリポジトリをローカルにクローンします。
git clone https://github.com/YOUR_USERNAME/YOUR_REPOSITORY.git
cd YOUR_REPOSITORY
2. テンプレートのセットアップ
2.1. TypeScriptテンプレートを使用
GitHubのTypeScriptテンプレートを利用するのが便利です。以下のコマンドでテンプレートをクローンします。
git clone https://github.com/actions/typescript-action.git .
2.2. 必要なパッケージのインストール
npm install
3. アクションの作成
src
ディレクトリの編集
3.1. src/main.ts
にアクションのロジックを実装します。例えば、以下のような簡単な例を作成します。
import * as core from '@actions/core';
import * as github from '@actions/github';
async function run() {
try {
const myInput = core.getInput('myInput');
core.debug(`Hello ${myInput}!`);
const payload = JSON.stringify(github.context.payload, undefined, 2)
core.debug(`The event payload: ${payload}`);
} catch (error) {
core.setFailed(error.message);
}
}
run();
action.yml
の編集
3.2. action.yml
ファイルを作成し、アクションのメタデータを記述します。
name: 'My Custom Action'
description: 'A custom action using TypeScript'
inputs:
myInput:
description: 'An input for the action'
required: true
outputs:
myOutput:
description: 'An output from the action'
runs:
using: 'node12'
main: 'lib/main.js'
4. ビルドとデプロイ
4.1. TypeScriptのコンパイル
TypeScriptをJavaScriptにコンパイルします。
npm run build
dist
フォルダの作成
4.2. コンパイルされたファイルを含むdist
フォルダが生成されます。
5. リポジトリへのプッシュ
5.1. コミットとプッシュ
変更をコミットし、リポジトリにプッシュします。
git add .
git commit -m "Create custom GitHub Action with TypeScript"
git push origin main
6. アクションの使用
6.1. ワークフローでの利用
リポジトリ内のワークフローファイル(例えば.github/workflows/main.yml
)にアクションを追加します。
name: My Workflow
on: [push]
jobs:
my_job:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Run custom action
uses: YOUR_USERNAME/YOUR_REPOSITORY@main
with:
myInput: 'World'
これで、GitHub ActionsでTypeScriptを使用したカスタムアクションの作成が完了です。必要に応じて、さらに詳細な機能やエラーハンドリングを追加してください。