Skip to main content

常にいまいち

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