Ações do Github: definindo a variável de ambiente para a saída de comando formatada

Aug 18 2020

Estou tentando atualizar meu README com um texto de ajuda do programa de linha de comando com uma ação do Github. Eu tenho um script, main.js, que produz a seguinte saída:

>> 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

Agora, tento definir uma variável de ambiente em minha ação no Github, mas perco as novas linhas ao imprimi-la. Aqui está meu .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 }}

A etapa "Imprimir HELP_TEXT" produz a seguinte saída (observe a perda de novas linhas):

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

Observe que a última etapa do testtrabalho é executar o código que atualiza o conteúdo do meu README; a entrada que ele vê é a mesma que a saída da etapa "Imprimir HELP_TEXT".

Existe alguma maneira de armazenar uma variável de ambiente de forma que a formatação seja preservada?

Respostas

1 Samira Aug 18 2020 at 19:52

Tive um problema semelhante ao tentar usar o conteúdo do arquivo como corpo de lançamento, resolvido com o truque fornecido por tobiasfaust no 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 irá garantir que as novas linhas sejam armazenadas corretamente, tornando a variável env utilizável como parâmetro de ação.