私が歌川です

@utgwkk が書いている

GitHub Actionsのworkflow commandでアノテーションするときのmessageで改行したい

GitHub Actionsのworkflow commandという機能を使って、workflowの中からリポジトリのファイルの特定の行に対してアノテーションを付けることができる。CIが落ちたときのスタックトレースやexpected, actualなど表示できて便利。

スタックトレースを出すときは当然複数行で表示したいと思う。こういうときに、

echo "::error file=test.txt,line=2::hoge\nfuga\npiyo\nuooo"

のように直接改行文字を入れても、messageには hoge しか入らない。

f:id:utgwkk:20200507185840p:plain

改行するには、改行文字をURLエンコードすればよい。たとえば \n%0A にすると改行できる。

echo "::error file=test.txt,line=2::hoge%0Afuga%0Apiyo%0Auooo"

f:id:utgwkk:20200507190004p:plain

GitHub Actionsのドキュメントを探してもうまく見つけられなかったけど、なんで分かったのかというと、@actions/coreにそういう変換をしてるコードがあったから。JS (TS) を使うworkflowからだと @actions/core を使えばよいと思うけど、JSじゃないときはこういう変換を自分でやっていく必要がある?


副産物として、workflow commandで改行できることをテストするリポジトリができた。

github.com

追記

このあたりでURLエスケープを解釈してそうだなというのが分かった。パーセントエンコーディングを完全にデコードしているわけではなくて、ほんとうに改行する用とかに使っていそう?

runner/ActionCommandManager.cs at a246b3b29d853e73db4f7be04cb25f85b3d98e27 · actions/runner · GitHub

runner/ActionCommand.cs at a246b3b29d853e73db4f7be04cb25f85b3d98e27 · actions/runner · GitHub

runner/ActionCommand.cs at a246b3b29d853e73db4f7be04cb25f85b3d98e27 · actions/runner · GitHub