web-dev-qa-db-fra.com

Comment utiliser la commande multiligne dans 'script:' avec YAML?

J'ai un référentiel qui utilise Travis CI, et dans le .travis.yml là j'ai cette ligne:

script:
- vim -Nu <(cat <<-EOF
  set nocompatible |
  filetype off
  EOF
  ) -c 'Script' > /dev/null

Malheureusement, cela ne fonctionne pas, car cela est transformé en une seule ligne et est exécuté comme ceci:

vim -Nu <(cat <<-EOF set no compatible | filetype off | EOF ) -c 'Script' > /dev/null

Cela rend la balise EOF inopérante, car EOF doit être sur une seule ligne. Une alternative serait d'utiliser simplement des citations normales comme ceci:

script:
- vim -Nu <(cat 'set nocompatible |
  filetype off
  ) -c 'Script' > /dev/null

Ce qui fonctionne, et c'est bien, mais je pense qu'il doit y avoir un moyen d'insérer des sauts de ligne dans un .travis.yml. J'ai une alternative maintenant, mais je ne le ferai peut-être pas à l'avenir. Alors comment tu fais?

28
hgiesel

Dans YAML, vous pouvez spécifier des sauts de ligne dans un scalaire en utilisant "" citant et échappant aux sauts de ligne (\n), ou, et c'est plus naturel pour votre cas, en utilisant un bloc de style littéral scalaire :

script:
- |
  vim -Nu <(cat <<-EOF
  set nocompatible |
  filetype off
  EOF
  ) -c 'Script' > /dev/null

Il s'agit d'un scalaire commençant par une ligne avec un | (symbole de tuyau), suivi de plusieurs lignes pour lesquelles les sauts de ligne sont conservés.

  • Les lignes sont normalement en retrait (exception: un seul bloc de style littéral de niveau supérieur scalaire).
  • Après le | il peut y avoir des modificateurs: 1-9, utilisé lorsque votre première ligne commence par des espaces; +, - pour influencer la suppression des nouvelles lignes finales (normalement regroupées en une seule).
34
Anthon

J'utilise un tel format pour obtenir exactement l'effet souhaité

script:
    - >
      valgrind
      --read-var-info=yes
      --error-exitcode=1
      --fullpath-after=
      --track-origins=yes
      --leak-check=full
      --num-callers=20
      --suppressions=$(pwd)/tests/zephir_parser.3.7.0.sup
      $(phpenv which php)
          -d variables_order=EGPCS
          run-tests.php
              -p $(which php)
              -d extension=$(pwd)/modules/zephir_parser.so
              -d variables_order=EGPCS
              -g "FAIL,XFAIL,BORK,WARN,LEAK,SKIP"
              --offline
              --show-diff
              --set-timeout 120
16
serghei