GitHub ActionsのActionにはランナーで直接実行されるJavaScript actionと、Docker container action、複数のステップをまとめたComposite run steps actionがある。 Docker container actionは環境を固定できるが、イメージを取得する分JavaScript actionと比べて時間がかかり、DockerがインストールされているLinuxでしか使えない。 今回はこのDocker container actionを作って動かしてみる。
Dockerfileとメタデータのaction.ymlを用意する。
using: 'docker'
にするとDocker container actionになる。
::set-output name={name}::{value}
の文字列をstdoutに出力するとoutputsのパラメータに値がセットされる。
$ cat Dockerfile
FROM alpine:20200917
ENTRYPOINT ["echo", "::set-output name=return-json::"]
$ cat action.yml
name: 'sambaiz-test-docker-github-action'
description: 'Echo your word'
inputs:
i-say:
description: 'What do you say?'
required: true
default: '{}'
outputs:
return-word:
description: 'return word you said'
runs:
using: 'docker'
image: 'Dockerfile'
args:
- ${{ inputs.i-say }}
uses
にはリポジトリではなくパスを渡すこともできるので、次のようなワークフローで試しに実行できる。
$ cat .github/workflows/main.yml
on: [push]
jobs:
echo-job:
runs-on: ubuntu-latest
name: run-local-action
steps:
- name: Checkout
uses: actions/checkout@v2
- name: run
uses: ./
id: echo-action
with:
i-say: '{"a": 1234}'
- name: Show return-word
run: echo "Returned ${{ steps.echo-action.outputs.return-json }}"
Releasesの作成時に Publish this Action to the GitHub Marketplace
にチェックを入れるとMarketplaceに出る。READMEが必須で、nameがユニークである必要がある。