221 votes

Action Github : Diviser une longue commande en plusieurs lignes

J'ai une commande d'action Github qui est très longue :

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"

Puis-je savoir s'il est possible de diviser la longue commande en plusieurs lignes pour une meilleure lisibilité ? J'ai essayé le séparateur '\' mais cela ne fonctionne pas. Merci d'avance.

274voto

Mike De Marco Points 997

J'ai une commande multi-lignes utilisant des backslashs pour séparer les lignes comme suit :

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

Notez le caractère "|" qui précède.

177voto

lorenzo-bettini Points 801

Vous pouvez utiliser le fichier YAML style plié con > qui est pris en charge par GitHub Actions.

Par exemple,

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

les retours à la ligne seront remplacés par des espaces, de sorte que la phrase ci-dessus est équivalente à

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

121voto

Josue Ibarra Points 854

Je vais partager cette information puisqu'elle n'a pas été mentionnée.

Vous pouvez utiliser :

  • | appelé un Literal Block Scalar qui préserve les nouvelles lignes et les espaces de fin de ligne
  • > appelé un Folded Block Scalar qui convertit les nouvelles lignes en espaces
  • de simples chaînes de caractères, sans guillemets, à guillemets simples ou à guillemets doubles.

J'ai trouvé le site yaml-multiline.info utile pour comprendre comment les chaînes yaml sont interprétées.

Pour mon cas d'utilisation, j'ai fini par faire ce qui suit :

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

13voto

dan1st Points 6488

Cela n'était pas possible en utilisant des backslashes, auparavant. Voir la réponse acceptée sur la façon de le faire maintenant.


Pour autant que je sache, GitHub Actions ne le prend pas en charge.

Cependant, vous pouvez utiliser des variables d'environnement pour cela.

Par exemple, ce script scinde votre commande en 3 lignes de code et l'exécute en une seule ligne.

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'

Il crée les variables d'environnement line1 , line2 y line3 et les concatène et les exécute dans une session bash.

4voto

Jon Peck Points 66

Notez également le rejoindre y format des fonctions pour les expressions :

HELLO_WORLD = ${{ join('Hello', 'world!') }}
HELLO_WORLD = ${{ format('{{Hello {0}}}', 'World') }}

On peut supposer qu'elles pourraient être combinées avec des variables d'environnement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X