🐚
GitHub Actionsでinputsに配列を渡すワークアラウンド
GitHub Actionsのinputsに配列を渡したくなることはよくあるが、
2020年9月17日現在inputsにはstringしかサポートされていない。
- Metadata syntax for GitHub Actions - GitHub Docs https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#inputs
この問題を何とかするワークアラウンドを紹介する。
1. bashで配列として解釈可能な文字列を受け取る
bashではデフォルトの配列区切りが空白なので、空白で各アイテムが区切られる文字列を入力してもらえばよい。
あるいはカンマ区切りでアイテムを入力してもらって、その文字列を分割すれば良い。
カンマ区切りの配列を受け付ける例
inputs:
images:
description: 'Comma separated list of images. The format of item is `name:tag`. e.g. "golang:1.14,quay.io/prometheus/prometheus:v2.20.1"'
required: true
runs:
using: composite
steps:
- run: |
IMAGES=${{ inputs.images }}
for image in ${IMAGES//,/ }; do
NAME=$(echo $image | cut -d: -f1)
TAG=$(echo $image | cut -d: -f2)
kustomize edit set image ${NAME}=${NAME}:${TAG}
done
shell: bash
2. JSON文字列を入力として受け取る
JSON文字列を受けつけることにすると配列が処理しやすい。
jqなど使えばbashでも処理できる。ただしJSONは配列以上のものを表現できてしまうので、配列しか許したくない場合はJSONではないほうが親切と言えるかも。
- Bash for Loop Over JSON Array Using JQ | Stark & Wayne https://starkandwayne.com/blog/bash-for-loop-over-json-array-using-jq/
Discussion