GitHub Actionsシリーズ第二弾です。GitHub ActionsっていうかYAMLエスケープ豆知識みたいな感じだけど...。
前回はこちら。
[シングルクオート]
GitHub Actionsのジョブのステップの中で、echo: Hi, I'm Jack
またはecho: 'Hi, I'm Jack'
のように、シングルクオートを含むメッセージを出力しようとすると、yamlの構文エラーとなる。
以下のように「unexpected EOF while looking for matching `''」という実行時エラーが出力される。
GitHubのドキュメントにあるように、こういう場合は外側をダブルクオートにして、以下のようにコードを修正すると、意図した結果を得られる。
jobs:
say_hello:
runs-on: ubuntu-latest
steps:
- name: say hello
run: echo "Hi, I'm Jack."
ドキュメントだとシングルクオートを二重にしてエスケープするのが推奨とも書かれているが、これだとシングルクオートが消えてしまい、意図した通りには動かなかった。
[コロン+スペース]
GitHub Actionsのジョブのステップの中で、echo 'Log level is: ${{ inputs.logLevel }}'
のようにコロンとスペースを連続して含めたいケースがある。
しかし、run:
に続けてこのechoコマンドを記載すると、incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line
というエラーが表示される。
なんとかならないか...と思って検索するとこちらのissueに辿り着いた。
以下のように|
記号を利用してリテラルをそのままブロックとして記述できるようにするのが一つの解法となる。
- name: print log level
run: |
echo 'Log level is: ${{ inputs.logLevel }}'
あるいは、以下のようにrunで実行されるコマンド全体をシングルクオートで囲んでもよい。
- name: print log level again
run: 'echo "Again, log level is: ${{ inputs.logLevel }}"'
と思ったら、約2年前に同じことで困っていた。まるで成長してない...。
[特殊文字]
これは試せていないがドキュメントを読んでいる中で見つけたもの。
GitHub Actionsをトリガーするブランチ名などを指定する際に、リテラルとして*
や+
、!
などの特殊文字を利用したい場合は\
を利用して特殊記号をエスケープする必要があるとのこと。シングルクオートとかコロンもこれで同じように解決してほしい...。