自作CLIツールをGitHub Actions カスタムアクションで利用する
先日投稿した自作CLIツール chiritori をGitHub Actionsで利用するために、カスタムアクションを作りたくなりました。
https://docs.github.com/ja/actions/creating-actions/creating-a-docker-container-action によれば、Dockerコンテナを実行環境としたカスタムアクションを書くことができるようです。バイナリとして公開している自作CLIとの相性がよさそうなので、これを試してみます。
最終的にはカスタムアクションを利用し、リポジトリ内のソースコードに変更を加えるWorkflowを書くことを目指します。
Dockerfileを書く
先のドキュメントのとおり、自作CLIが動くイメージをビルドするDockerfileを書きます。
FROM alpine:3.14
RUN apk add --no-cache wget
# 今回はGitHubのReleasesからCLIのバイナリを取得した
RUN wget https://github.com/piyoppi/chiritori/releases/download/v0.2.0/x86_64-unknown-linux-musl.tar.gz && \
tar -zxvf x86_64-unknown-linux-musl.tar.gz && \
rm x86_64-unknown-linux-musl.tar.gz && \
cp target/x86_64-unknown-linux-musl/release/chiritori /usr/local/bin/chiritori && \
rm -rf target && \
apk del wget
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
今回は、CLIのバイナリをGitHubのReleasesから取得しています。 ちなみに、今回の自作CLI ではRustで実装しましたが、Alpine Linux上で動かす場合はビルドターゲットを以下のように設定し、ビルドしたものを利用します。
rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-musl
action.yml を書く
inputs
に記述した入力値を runs.args
に指定することで、 entrypoint.sh
に引数として与えられます。
詳細な書き方については公式ドキュメントを参照します。
name: 'actions-chiritori'
description: 'chiritori for GitHub Actions'
inputs:
filename:
description: 'Target file name'
required: true
runs:
using: 'docker'
image: 'Dockerfile'
args:
- ${{ inputs.filename }}
エントリポイントを書く
entrypoint.sh
に実行したいシェルスクリプトを記述します。
#!/bin/sh
# action.yml の runs.args の項に記述した値が引数として取得できる
FILENAME="$1"
# 自作CLIツールをここで使う (と filename に指定したファイルを加工する)
chiritori --filename=$FILENAME > $file.tmp
mv $file.tmp $file
ここまで来たら、このリポジトリをGitHub上にPushします。
カスタムアクションを使ってみる
実際にこのアクションをつかってみます。アクションを実行する対象のリポジトリには、ルートディレクトリに index.html
が存在するとします。
カスタムアクションの entrypoint.sh
はDockerfileに基づくコンテナ上で動作しますが、Actionsを実行するワーキングディレクトリ以下のファイルは設定不要でコンテナ内からアクセスできるように なっています。
(ref: https://docs.github.com/ja/actions/creating-actions/dockerfile-support-for-github-actions#workdir)
name: Testing custom-action
on: workflow_dispatch
jobs:
update-code:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3 # index.htmlが含まれるコードをclone
- uses: owner/custom-action@main # カスタムアクションが存在するリポジトリを指定
with:
filename: index.html
これでindex.htmlをカスタムアクションで加工できました。
まとめ
自作CLIツール(バイナリ)をGitHub Actionsで利用するためのもろもろを試しました。その成果物として、chiritoriをGitHub Actionsで利用できるようにactions-chiritoriを作っています。
ではではー
このカウンタは @piyoppi/counter-tools を使っています。
クリックすると匿名でいいねできます。