Действия Github: установка переменной среды для вывода форматированных команд

Aug 18 2020

Я пытаюсь обновить свой README с помощью текста справки программы командной строки с помощью Github Action. У меня есть сценарий 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 / workflows / 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

Была аналогичная проблема при попытке использовать содержимое файла в качестве тела выпуска, решенная с помощью трюка, предоставленного tobiasfaust на GitHub :

- 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 пригодной для использования в качестве параметра действия.