Deno製CLIツールをGitHub Actionsで使う
先日connpassで開催された、toranoana.deno #0で発表を行いました。
その際、Deno製のCLIツールをGitHub Actionsで使う方法を紹介しました。
こちらにも記事として残しておきます。
GitHub Actions内でDeno製CLIを実行する方法
DenoのCLIツールとは要するにdeno install
でインストールするDenoのスクリプトです。
GitHub Actionsでの実行には、以下の2種類が考えられます。
-
deno install
してから実行する - 直接
deno run
する
なお、どちらの場合も、事前にdenoland/setup-deno[1]を実行し、deno
コマンドを使えるようにしておく必要があります。
deno install
してから実行する
普通(?)に考えられる方法です。
環境内に目的のコマンドをインストールし、それを実行します。
velociraptorの例
たとえば、Deno製タスクランナーのVelociraptorではこの方法が取られています。
こちらがVelociraptorのGitHub Actions用リポジトリです。
以下のaction.yml
が設定されています。
name: Setup Velociraptor
description: Install Velociraptor scripts manager
author: JurassiScripts
branding:
icon: terminal
color: blue
inputs:
velociraptor-version:
description: Version to use
default: latest
required: false
velociraptor-alias:
description: Alias name
default: vr
required: false
runs:
using: composite
steps:
- run: |
case "${{ inputs.velociraptor-version }}" in
"latest") ;; "") ;;
*) VERSION=@${{ inputs.velociraptor-version }} ;;
esac
deno install --allow-all --name ${{ inputs.velociraptor-alias }} https://deno.land/x/velociraptor$VERSION/cli.ts
echo "/home/runner/.deno/bin" >> $GITHUB_PATH
shell: bash
内部でdeno install
が実行されています。これにより、このアクション実行以降、ワークフロー内でvr
を使えるようになります。
CIでの使用例はこちら。
eggsの例
また、Denoのモジュールレジストリである https://nest.land のCLIツールであるeggsでも、この方法が説明されています。
deno run
する
直接Denoのマニュアルでも示されている通り、オンラインで公開されてるファイルなら、ローカルに保存することなくdeno run
で直接実行できます。
つまり、GitHub Actions内でも、目的のコマンドをインストール不要で直接実行することが可能です。
例として、先日公開したDenoteというサービス用のワークフローを紹介しましょう[2]。
以下のようにdeno run --allow-read --allow-net --no-check https://deno.land/x/denote/cli/denote.ts
と記述することで、レジストリ上のファイルを直接実行しています。
それ以降のものはコマンドの引数です。
name: Denote profile
on:
push:
branches: [master]
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v2
- uses: denoland/setup-deno@v1
- run: >
deno run --allow-read --allow-net --no-check
https://deno.land/x/denote/cli/denote.ts register ./denote.yml
--name kawarimidoll --token '${{ secrets.DENOTE_TOKEN }}'
deno install --allow-read --allow-net --no-check https://deno.land/x/denote/cli/denote.ts
とdenote register ...
に分けても良いのですが、一気に実行することもできるというのがポイントです。
なお、コマンド上でsecrets.DENOTE_TOKEN
[3]を渡していますが、実行ログでは以下のようにマスクされるのでご安心を。
おわりに
GitHub Actions上でDeno製のCLIツールを実行する方法を2種類紹介しました。
個人的には、単純にCLIを実行するだけであれば、後者のdeno run
で直接実行する方式が好みです。
しかし、コマンドを複数回実行したい場合、都度パーミッションとURLを指定してdeno run
を記述するのは煩雑です。
そのような場合はdeno install
してしまったほうが良いでしょう。
これらの方法を使えば、意外と簡単にDenoスクリプトの実行を自動化できます。
興味のある方は是非お試しください。
Discussion