Azioni GitHub: impostazione della variabile di ambiente sull'output del comando formattato

Aug 18 2020

Sto cercando di aggiornare il mio README con il testo della guida di un programma a riga di comando con un'azione Github. Ho uno script, main.js che produce il seguente output:

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

Ora, cerco di impostare una variabile d'ambiente nella mia azione Github, ma perdo le nuove righe quando la stampo. Ecco il mio .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 }}

Il passaggio "Stampa HELP_TEXT" produce il seguente output (nota perdita di nuove righe):

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

Notare che l'ultimo passaggio del testlavoro è l'esecuzione del codice che aggiorna il contenuto del mio README; l'input che vede è lo stesso dell'output dal passaggio "Print HELP_TEXT".

C'è un modo per memorizzare una variabile d'ambiente in modo tale che la formattazione venga preservata?

Risposte

1 Samira Aug 18 2020 at 19:52

Ha avuto un problema simile durante il tentativo di utilizzare il contenuto del file come corpo di rilascio, risolto con il trucco fornito da tobiasfaust su 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

La magia Bash farà in modo che le nuove righe siano memorizzate correttamente, rendendo la variabile env utilizzabile come parametro di azione.