
GitLab CI : formater et valider votre .gitlab-ci.yml en ligne
Stages, includes, règles `rules:` : validez la structure d'un .gitlab-ci.yml avant la pipeline — pas un runner GitLab, pas le CI Lint officiel.
Pourquoi contrôler un .gitlab-ci.yml avant que la pipeline ne tourne ?
Un .gitlab-ci.yml qui ne parse pas, un stages qui n'est pas un tableau, ou un job sans script ni trigger, se voit souvent trop tard : pastille rouge, Pipeline Editor, merge bloqué. FastMinify n'embarque pas le CI Lint officiel de GitLab et n'exécute aucun runner. Le validateur GitLab CI fait des contrôles structurels dans le navigateur — mapping racine, stages, jobs avec script ou trigger, include, jobs cachés . — et le formateur GitLab CI réindente le YAML (2 ou 4 espaces). Le cluster complet est sur le hub outils CI/CD. Pour minifier JS/CSS dans la même pipeline, voir le guide minification CI/CD.
GitLab vs GitHub Actions : deux YAML, trois couches
GitHub Actions vit sous .github/workflows/*.yml (plusieurs fichiers, déclencheur on, jobs avec steps). GitLab CI vit presque toujours dans un seul .gitlab-ci.yml à la racine : stages, jobs nommés, include. Les outils FastMinify suivent cette frontière — ne collez pas un workflow Actions dans le validateur GitLab.
jobs imbriquée + on obligatoire — voir le guide GitHub ActionsFastMinify expose deux outils. Ni l'un ni l'autre n'est GitLab CI Lint. Confondre les trois mène à un fichier « valide » ici qui échoue quand même dans Pipeline Editor.
js-yaml, indentation 2 ou 4 espaces (défaut 2) — voir format-gitlab-ciinclude, évaluation des rules: — UI Pipeline Editor, API, ou glab ci lintrules: sélectionne le jobLe validateur ne parle pas au runner GitLab, n'appelle pas l'API CI Lint, et n'étend pas les includes distants. Les rules: du calendrier éditorial sont un sujet GitLab réel — pas une feature du navigateur.
script, pas d'image Docker, pas de cache runnerinclude: remote / include: project — seul le YAML collé est lurules:, only/except, workflow:rulespages sont des jobs comme les autres : ils ont besoin de script ou triggerAnatomie d'un .gitlab-ci.yml : ce que FastMinify vérifie
La racine doit être un mapping YAML, pas un scalaire ni une liste. Un seul document : les --- répétés sont rejetés. Si stages est présent, ce doit être un tableau de noms non vides. Chaque clé qui n'est pas réservée et ne commence pas par . est un job : il lui faut script (chaîne ou liste non vide) ou trigger.
stages, variables, include, workflow, default, image, services, cache, before_script, after_script, spec.hidden : pas d'exigence scriptextends : avertissement — le parent doit fournir script ou triggerinclude de premier niveau : avertissement, pas forcément un blockerLe formateur pretty-print via js-yaml. Ce n'est pas un réécrivain sémantique : l'ordre des clés peut changer, les commentaires # disparaissent, l'indentation passe à 2 ou 4 espaces.
Avant
Après
Un include de premier niveau suffit à éviter l'avertissement « aucun job ». FastMinify ne télécharge pas les fichiers inclus. Au-delà de 512 Kio UTF-8, l'entrée est rejetée — comme les autres outils DevOps du site.
include : une entrée scalaire compte 1 ; un tableau compte sa longueurrules: dans le YAML collé ne sont pas interprétéesglab ci lint en localValider puis formater : un workflow concret
Ouvrez le validateur GitLab CI, collez un seul .gitlab-ci.yml (max 512 Kio) et attendez le debounce (~300 ms). Le panneau affiche un verdict, les issues (erreur de parse avec indice de ligne), et des compteurs jobs / stages / includes.
Le formateur GitLab CI pretty-print via js-yaml. Collage, upload ou sample : format automatique ; après une édition manuelle, utilisez le bouton Formater. Cette étape ne prouve pas que la structure est complète.
Un collègue a ajouté compile: avec seulement stage: build. GitLab refuse la pipeline, souvent avec un message peu lisible dans l'overlay de MR.
Étape 1 : coller le fichier dans validate-gitlab-ci
Ouvrez validate-gitlab-ci. Un verdict invalide du type « Job … needs script or trigger » pointe le job vide.
Étape 2 : ajouter script ou trigger
Ajoutez script: [npm run build] ou un trigger: réel. Recollez jusqu'à ce que le panneau affiche une structure valide (les warnings extends peuvent rester).
Étape 3 : formater et ouvrir la MR
Passez le YAML corrigé dans format-gitlab-ci, copiez, commitez. Les reviewers lisent des jobs indentés, pas un blob.
Un exemple copié depuis la doc GitLab ou un snippet arrive avec un mélange d'espaces. Vous ne voyez plus où finit un job.
Étape 1 : formater d'abord si le fichier est illisible
Collez dans format-gitlab-ci. Cette étape ne prouve pas que la config est structurellement complète.
Étape 2 : valider le document indenté
Copiez la sortie dans le validateur. Vérifiez stages, chaque job, et que les templates . ne masquent pas un job visible cassé.
Étape 3 : garder CI Lint pour includes et rules
Une fois la forme OK, le filet schéma / includes distants / rules: reste dans GitLab — FastMinify ne le remplace pas.
Garder GitLab CI Lint (et minify) dans la chaîne
Le navigateur sert la boucle rapide : YAML + structure. GitLab refuse déjà de créer une pipeline si le schéma officiel est invalide — c'est pourquoi on n'embarque généralement pas un job « lint CI » dans le même fichier. En local, glab ci lint (CLI officielle, authentifiée sur le projet) appelle CI Lint : includes fusionnés, simulation possible avec --dry-run. Pinnez votre version de glab ; FastMinify ne remplace pas cet appel. Pour minifier JS/CSS dans la pipeline, voir le guide minification CI/CD.
Exemple de base
Si le dépôt est sur GitHub, les pendants sont format-github-actions et validate-github-actions — même idée (YAML + structure, pas actionlint). Dockerfile et Compose restent sur le hub DevOps. Un bundle JS minifié produit par une job se lit avec unminify-js ou le guide unminify — ce n'est pas du YAML CI.
Conclusion
Collez le .gitlab-ci.yml, corrigez la structure (mapping, stages, jobs avec script/trigger), reformatez l'indentation, puis poussez. FastMinify fait cette boucle en local, sans envoyer le YAML. Ce n'est pas GitLab CI Lint : includes distants, rules: et le schéma officiel restent dans l'UI, l'API ou glab ci lint. Pour du YAML générique, restez sur beautify-yaml ; pour GitHub Actions, sur le même hub CI/CD.
Articles connexes

YAML cassé, `on` ou `jobs` manquants, steps vides : validez la structure de vos workflows avant le push — et laissez actionlint à la CI.

Erreurs de syntaxe SDL, review de schéma et formatage avant merge — complément au beautify GraphQL existant.

Réduisez la facture OpenAI/Anthropic/Gemini : estimez input/output, activez batch et caching dans vos calculs — tarifs vérifiés, 100 % local.