Githubアクション:環境変数をフォーマットされたコマンド出力に設定する

Aug 18 2020

Githubアクションを使用してコマンドラインプログラムのヘルプテキストでREADMEを更新しようとしています。次の出力を生成するスクリプトmain.jsがあります。

>> node main.js -h
Generate README from template

Main options

  -i, --input-file-name string
  -o, --output-file-name string
  -k, --keys string[]
  -v, --values string[]
  -h, --help

ここで、Githubアクションで環境変数を設定しようとしましたが、印刷すると改行が失われます。これが私の.github /ワークフロー/main.ymlです:

name: Test Action

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v2
    - name: Setup Node
      uses: actions/setup-node@v1
      with:
        node-version: 12.x
    - name: Get Help Text
      run: |
        echo ::set-env name=HELP_TEXT::$(node main.js -h) - name: Print HELP_TEXT run: | echo "$HELP_TEXT"
    - name: Regenerate README.md
      uses: ./
      with:
        key: help
        value: ${{ env.HELP_TEXT }}

「HELP_TEXTの印刷」ステップでは、次の出力が生成されます(改行が失われることに注意してください)。

Generate README from template Main options -i, --input-file-name string -o, --output-file-name string -k, --keys string[] -v, --values string[] -h, --help

testジョブの最後のステップは、READMEの内容を更新するコードを実行していることに注意してください。表示される入力は、「HELP_TEXTの印刷」ステップからの出力と同じです。

フォーマットが保持されるように環境変数を保存する方法はありますか?

回答

1 Samira Aug 18 2020 at 19:52

ファイルコンテンツをリリース本文として使用しようとしたときに同様の問題が発生し、GitHubのtobiasfaustによって提供されたトリックで解決されました:

- run:   |
         body=$(cat NEWS.md) body="${body//'%'/'%25'}"
         body="${body//$'\n'/'%0A'}"
         body="${body//$'\r'/'%0D'}"
         echo "::set-env name=MOD_RELEASE_BODY::$body"
  shell: bash

Bash magickは、改行が適切に格納されていることを確認し、env変数をアクションパラメーターとして使用できるようにします。