Действие Github: разделить длинную команду на несколько строк

У меня есть очень длинная команда действий Github:

name: build

on: [push]

jobs:
    build:
        runs-on: ubuntu-18.04
        steps:
            - uses: actions/checkout@v1
            - name: Install Prerequisites
              run: |
                sudo apt-get update
                sudo apt-get install -y --no-install-recommends "a very very long list of prerequisites"

Могу ли я узнать, можно ли разбить длинную команду на несколько строк для лучшей читаемости? Я пробовал использовать разделитель «\», но он не работает. Заранее спасибо.


person Bojian Zheng    schedule 28.01.2020    source источник


Ответы (5)


У меня есть многострочная команда, использующая обратную косую черту для разделения строк следующим образом:

- name: Configure functions
  run: |
    firebase functions:config:set \
      some.key1="${{ secrets.SOME_KEY_1 }}" \
      some.key2="${{ secrets.SOME_KEY_2 }}" \
    ...    

Обратите внимание на предшествующий символ "|" персонаж.

person Mike De Marco    schedule 27.05.2020
comment
Это правильный ответ, и он будет более приемлемым. Обратные косые черты работают так же, как многострочные команды в bash. (Я бы порекомендовал висящий отступ для удобства чтения.) - person tom; 19.07.2020
comment
Кто-нибудь знает, с каких пор это возможно? (Я думаю, что это было невозможно, когда я написал свой ответ, но я полностью согласен с тем, что этот ответ будет принят сейчас) - person dan1st; 29.07.2020
comment
@ dan1st Я тоже не думаю, что это возможно, когда я спросил об этом, но похоже, что люди Github добавили поддержку обратной косой черты. - person Bojian Zheng; 04.08.2020
comment
Я не знаю, как раньше это работало для кого-либо, но добавление обратной косой черты сейчас не работает с GitHub Actions. Это не должен быть общепринятым ответом. - person mcserep; 01.02.2021
comment
Сейчас тоже не работает - person 김선달; 18.03.2021
comment
Подтверждаю: на данный момент это не работает в GitHub Actions. Вам нужно использовать ›вместо I (см. Другие ответы) - person IvanD; 20.03.2021
comment
Кажется, что он работает, но не дает сбоев ни при каких ошибках, как и ›, так что это становится бессмысленным .. - person OZZIE; 05.05.2021

Вы можете использовать сложенный стиль YAML с >, который поддерживается GitHub Actions.

Например,

run: >
  xvfb-run
  ./mvnw -f my/pom.xml
  clean verify
  -DskipTests

новые строки будут заменены пробелами, поэтому приведенное выше эквивалентно

run: xvfb-run ./mvnw -f my/pom.xml clean verify -DskipTests
person lorenzo-bettini    schedule 20.01.2021
comment
Также см. yaml-multiline.info, чтобы поиграть с различными стилями скаляра / пережевывания. - person sschuberth; 14.03.2021
comment
Это работает, спасибо! Важное примечание: согласно спецификации yml здесь важны пробелы, поэтому любые дополнительные вкладки перед строками вызовут проблемы. - person Johnny Oshika; 24.04.2021
comment
Кажется, что он работает, но не дает сбоев ни при каких ошибках, то же самое с | также .. так что это становится бессмысленным .. - person OZZIE; 05.05.2021
comment
@JohnnyOshika Спасибо за этот комментарий! Это устранило для меня давнее недоразумение. - person ruohola; 08.05.2021

Раньше это было невозможно при использовании обратной косой черты. См. Принятый ответ о том, как это сделать сейчас.


Насколько мне известно, GitHub Actions этого не поддерживает.

Однако для этого вы можете использовать переменные среды.

Например, этот сценарий разбивает вашу команду на 3 строки кода и выполняет ее как одну строку.

steps:
  - name: Install Prerequisites
    run: |
      sudo apt-get update
      bash -c "$line1 $line2 $line3"
    env:
    - line1='sudo apt-get install -y --no-install-recommends '
    - line2='a very very long list'
    - line3='of prerequisites'

Он создает переменные среды line1, line2 и line3 и concats и выполняет их в сеансе bash.

person dan1st    schedule 28.01.2020

Я собираюсь поделиться этим, поскольку об этом не упоминалось.

Вы можете использовать:

  • | называется Literal Block Scalar, который сохраняет новые строки и конечные пробелы
  • > называется Folded Block Scalar, который преобразует новые строки в пробелы
  • простые старые строки, без кавычек, в одинарных или двойных кавычках

Я нашел сайт yaml-multiline.info полезным для понимания того, как интерпретируются строки yaml.

В моем случае я сделал следующее:

run: >-
  for i in $(find . -type f -name "*.log");
  do
   echo "File: ${i} \n";
   cat $i;
   printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' -;
  done
person Josue Alexander Ibarra    schedule 26.03.2021