
GitHub Actions: lint y corrección de workflows YAML
YAML roto, `on` o `jobs` ausentes, steps vacíos: valida la estructura de tus workflows antes del push — y deja actionlint para la CI.
¿Por qué revisar un workflow antes de hacer merge en main?
Un archivo .github/workflows/*.yml que no parsea, o un job sin runs-on, suele verse solo después del push: check rojo, logs de GitHub, review bloqueada. FastMinify no incluye actionlint. El validador GitHub Actions hace controles estructurales en el navegador — on, jobs, steps con run o uses — y el formateador GitHub Actions reindenta el YAML (convención de 2 espacios). El cluster completo está en el hub de herramientas CI/CD. Para automatizar minify JS/CSS en el pipeline, consulta la guía de minificación CI/CD.
Anatomía de un workflow: qué verifica FastMinify (y qué no)
Un workflow es un documento YAML único. GitHub exige un disparador on y un map jobs. Cada job necesita un runner (runs-on), un workflow reutilizable (uses), o una lista steps. Cada step debe definir run o uses.
--- repetidos) se rechazanuses sin steps se acepta; el YAML anidado no se inspecciona en profundidadjobs vacío o una lista steps vacía produce un aviso, no necesariamente un error bloqueanteon tras un parse correctoFastMinify expone dos herramientas. Ninguna es actionlint. Confundir las tres lleva a workflows «válidos» que igual fallan en CI.
Antes
Después
js-yaml, indentación de 2 espacios (convención GitHub) — ver format-github-actionson / jobs / steps — ver validate-github-actions${{ }}, permissions, IDs, lookup de actions — para ejecutar en CI, no en FastMinifyactions/checkout@v4 exista ni que la expresión sea seguraInterpolar un contexto no fiable (github.event.issue.title, una etiqueta de PR) directamente en run: es un clásico de inyección de scripts. FastMinify no evalúa las expresiones y no señala este patrón.
env:, no interpolándolos en el scriptpermissions: al mínimo (contents, pull-requests)run o uses — aunque el script sea peligrosoValidar y luego formatear: un workflow concreto
Abre el validador GitHub Actions, pega un solo archivo de workflow (máx. 512 KiB) y espera el debounce (~300 ms). El panel muestra un veredicto, las incidencias con índice de línea en errores de parse, y contadores de jobs/steps/triggers. Un campo vacío permanece inactivo — no «inválido».
El formateador GitHub Actions hace pretty-print vía js-yaml. Pegar, subir o sample: formato automático; tras una edición manual, usa el botón Formatear (⌘↵). La indentación de la UI sigue la convención de 2 espacios. No es un reescritor semántico.
Un compañero añadió - name: empty step sin script. La CI falla tarde, con un mensaje de GitHub poco legible en el overlay de la PR.
Paso 1: pegar el workflow en validate-github-actions
Abre validate-github-actions. Un veredicto inválido del tipo «step needs run or uses» señala el step vacío.
Paso 2: añadir run o uses
Sustituye el step por uses: actions/checkout@v4 o un run: real. Vuelve a pegar hasta que el panel muestre una estructura válida.
Paso 3: formatear y abrir la PR
Pasa el YAML corregido por format-github-actions, copia y haz commit. Los reviewers leen jobs indentados, no un blob.
Un ejemplo copiado de la documentación de GitHub o de un gist llega con una mezcla de espacios. Ya no ves dónde termina un job.
Paso 1: formatear primero si el archivo es ilegible
Pega en format-github-actions. Este paso no demuestra que el workflow esté estructuralmente completo.
Paso 2: validar el documento indentado
Copia la salida en el validador. Comprueba on, jobs y que cada step tenga una action.
Paso 3: dejar actionlint para la CI
Una vez la forma es OK, la red de expresiones / IDs / marketplace sigue en el pipeline — FastMinify no lo sustituye.
Dejar actionlint (y minify) en la CI
El navegador sirve el bucle rápido antes de git push. Los equipos mantienen actionlint como gate de merge para las expresiones ${{ }} y las reglas que FastMinify no implementa. El ejemplo sigue el script oficial de descarga de actionlint: fija una versión en tu repo en lugar de un main flotante. Para minificar JS/CSS en el mismo pipeline, consulta la guía de minificación CI/CD.
Ejemplo básico
Si el repositorio está en GitLab, los equivalentes son format-gitlab-ci y validate-gitlab-ci — la misma idea (YAML + estructura, no un runner). Dockerfile y Compose siguen en el hub DevOps: hacer lint de un Dockerfile, validar Compose y .env.
Conclusión
Pega el workflow, corrige la estructura (on, jobs, steps), reformatea la indentación y luego haz push. FastMinify hace este bucle en local, sin enviar el YAML. No es actionlint: expresiones, permissions avanzadas y existencia de las actions siguen en CI y en review. Para YAML genérico, quédate en beautify-yaml; para GitLab, en el mismo hub CI/CD.
Artículos relacionados

Errores de sintaxis SDL, review de esquema y formateo antes del merge — complemento al beautify GraphQL existente.

Reduce la factura OpenAI/Anthropic/Gemini: estima input/output, activa batch y caching en tus cálculos — tarifas verificadas, 100 % local.

RAG, agentes multi-turno, system prompts: calcula el % de ventana usada y el margen restante antes de enviar a la API.