GitHub Actionsで改行含むテキストをステップのアウトプットに指定する
はじめに
英文読める人はこちらをどうぞ。 以下の内容はこの記事の内容をまとめたものとなっている。
背景
GitHub Actionsでは以下のように設定することでstepsで実行した処理の出力を他から参照できる。
steps:
- run: |
description="description here"
echo "::set-output name=description::$description"
id: set_description
この例では他のstepから ${{ steps.set_description.outputs.description }}
のように値を参照する。
しかし、ここで1つ問題があり、descriptionに複数行が含まれると最初の行だけしかセットされない。
対処方法
以下のように改行文字をエスケープすることでoutputに複数行の文字列をセット可能。
description="${description//'%'/'%25'}"
description="${description//$'\n'/'%0A'}"
description="${description//$'\r'/'%0D'}"
前述の例だとこの様になる。
steps:
- run: |
description="description here"
description="${description//'%'/'%25'}"
description="${description//$'\n'/'%0A'}"
description="${description//$'\r'/'%0D'}"
echo "::set-output name=description::$description"
id: set_description
エスケープされたテキストのデコードは処理系で行われるため、ユーザーコードでこれを意識する必要はない。
参考
https://github.community/t5/GitHub-Actions/set-output-Truncates-Multiline-Strings/td-p/37870
2020-04-29