GitHub ActionsのDocker container actionを作る

githubdocker

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がユニークである必要がある。