Ces derniers temps, j’ai beaucoup travaillé sur les pipelines d’intégration continue de gitlab. La configuration de ces derniers ce fait en yaml et il n’est pas rare d’avoir de très longues commandes. Pour des raisons de lisibilité évidentes, il peut être pratique de les afficher sur plusieurs lignes.

Seulement voilà, yaml a plusieurs approches pour splitter les lignes. Et vu que je ne me souviens jamais vraiment de qu’est-ce qui fait quoi et que j’en ai marre de farfouiner au fond des internets: un nouveau pense-bête!

Tout d’abord, il faut rendre à César ce qui est à César. La bible sur laquelle je retourne toujours se trouve sur StackOverflow et va bien plus dans les détails que moi. Je ne garde ici que ce qui me sert réellement dans mon quotidien de dévelopeur.

Supprimer les sauts de lignes

Il s’agit de la syntaxe dite folded dans la spécification yaml.

La syntaxe la plus simple quand on veut juste mettre une commande sur plusieurs lignes utilise le caractère >. Les deux blocs suivants sont parfaitement équivalents:

key: >
    value0
    value1
    value2
key: value0 value1 value2

À noter que dans les deux cas, la chaîne de caractères qui en résulte contient un saut de ligne final: `“value0 value1 value2\n”.

Conserver les sauts de lignes

Il s’agit de la syntaxe dite literal dans la spécification yaml.

Pour avoir plusieurs lignes en une seule entrée, pratique lorsque l’on veut garder une mise en forme, c’est | qu’il faut utiliser.

key: |
    value0
    value1
    value2

La valeur dans le bloc précédent, bien que associé à une seule clé, contient des sauts de lignes: value0\nvalue1\nvalue2\n. À noter que là encore, il y a un saut de ligne final.

Contrôler la fin des blocs

Il s’agit de la syntaxe dite chomping dans la spécification yaml.

Dans les deux parties précédentes, un saut de ligne \n final était systématiquement présent. Il est possible de le supprimer ou au contraire d’en rajouter.

Supprimer le saut de ligne final

Il faut pour cela ajouter un - au > ou |.

key: >-
    value0
    value1
    value2
key: |-
    value0
    value1
    value2

Les deux blocs précédents sont alors respectivement équivalents a "value0 value1 value2" et value0\nvalue1\nvalue2.

Ajouter des espaces en fin de bloc

L’usage d’un + à la place d’un - va au contraire préserver les sauts de lignes supplémentaires si présents. Je ne vois pas dans quel contexte cela peut être utile avec > mais je comprends tout à fait l’usage avec |.

key: |+
    value0
    value1
    value2



Le bloc précédent avec les trois lignes vides sera équivalent a value0\nvalue1\nvalue2\n\n\n.

Bonus

Dans les commentaires de ma source, quelqu’un a publié un moyen mnémotechnique pour se souvenir plus facilement de la différence entre > et |. Il voit ces deux caractères comme des filtres indiquant à gauche la taille du contenu d’entrée en nombre de ligne et à droite la taille de sortie. Autrement dit, il voit > comme un “compresseur” car plus large avant qu’après et |, à l’inverse comme un “neutre”, aussi étendu avant qu’après.