Main Branch

Fundamentals first, always

Artículos

Limpiando la Logica de Workflows con la Nueva Funcion case de GitHub Actions

Como la nueva funcion case de GitHub Actions reemplazo condicionales anidados en un workflow real y devolvio la legibilidad.

Andrea Griffiths 4 min de lectura 🌐 Read in English
GitHub Actions Automatizacion YAML Developer Experience Workflows

Limpiando la Logica de Workflows con la Nueva Funcion case de GitHub Actions

El 29 de enero de 2026, GitHub lanzo tres grandes mejoras para Actions: una nueva funcion case para logica condicional, registros ampliados de expresiones para depuracion y mejor validacion del editor.

Use la funcion case para arreglar un workflow que me estaba sacando de quicio, y quiero mostrarte como se vio.

Administramos Open Source Friday, un livestream semanal con mantenedores de open source. Cuando las personas reservan un espacio via un issue de GitHub, un workflow genera su paquete de bienvenida: un mensaje personalizado (escrito con el Copilot SDK) y una miniatura promocional.

La logica para decidir que generar? Enterrada dentro de un script de Node que se ejecutaba siempre, incluso cuando no habia nada que generar. GitHub lanzo una nueva funcion case para Actions el 29 de enero de 2026, y la use para llevar esa decision al archivo del workflow donde realmente puedes verla.

Con lo que estaba lidiando

El paso de generacion de miniaturas se ejecutaba siempre. Dentro del script de Node.js, teniamos una verificacion:

if (!handle) {
  console.log('No GitHub handle available - skipping thumbnail generation');
  process.exit(0);
}

Funcionaba. Pero la logica de decision estaba escondida dentro del script. El paso aparecia como completado (check verde) incluso cuando no generaba nada.

Registro de GitHub Actions mostrando el paso Generate thumbnail completado con check verde, pero el log dice "No GitHub handle available - skipping thumbnail generation"

Mirabas el workflow y parecia que todo habia corrido, cuando en realidad varias etapas se salian temprano.

Moviendo la decision al YAML

Con la funcion case, esa decision sucede en el workflow. Funciona como una expresion SQL CASE. Evalua predicados de izquierda a derecha, devuelve el primer match. Logica booleana real, sin atajos de coercion de strings.

Este es el paso que agregue:

- name: Determine generation mode
  id: mode
  run: |
    echo "mode=${{ case( 
      steps.parse.outputs.handle != '' && steps.parse.outputs.project_repo != '', 'full-thumbnail',
      steps.parse.outputs.guest_name != '' && steps.parse.outputs.handle == '', 'name-only',
      'skip'
    ) }}" >> $GITHUB_OUTPUT

Asi se ve en el welcome.yml real:

La funcion case en welcome.yml, lineas 96-103, mostrando los tres predicados para full-thumbnail, name-only y skip

Tres condiciones. Tres resultados. Puedes leer todo en cinco segundos:

  • Handle y repo? full-thumbnail
  • Nombre pero sin handle? name-only
  • De lo contrario? skip

Luego, el paso de generacion de la miniatura usa esa salida:

- name: Generate thumbnail
  if: ${{ steps.mode.outputs.mode == 'full-thumbnail' }}

Como se ve en la practica

Una persona abre un issue pero deja vacio el campo del repo del proyecto. La funcion case evalua a name-only, asi que la miniatura se genera solo con su nombre y avatar en lugar de la version completa con el repo.

Registro de ejecucion de GitHub Actions mostrando el paso Generate thumbnail con el mensaje "No GitHub handle available - skipping thumbnail generation"

Cuando el formulario esta completo, evalua a full-thumbnail, trae la metadata del repo, genera la imagen completa y publica un comentario con el enlace de descarga.

Ejemplo de miniatura generada para invitado de Open Source Friday

Con el nuevo enrutamiento de case, el paso que no se necesita se omite por completo. Sin checks verdes fingiendo que se hizo trabajo.

La logica queda visible en el YAML, donde pertenece.

Las otras dos mejoras

La actualizacion del 29 de enero tambien incluyo:

Registros ampliados de expresiones. Cuando los jobs se omiten, ahora veras exactamente por que. La expresion original aparece junto a la version expandida con valores en tiempo de ejecucion. Esto se esta desplegando ahora.

Validacion del editor. VS Code y el editor web ahora detectan texto literal en condiciones if (que siempre se evalua como true) y accesos de contexto invalidos antes de hacer commit. Menos sesiones de depuracion del tipo “por que esto siempre se ejecuta?”.

Pruébalo

La funcion case ya esta disponible en todos los workflows de GitHub Actions. Si tienes logica de decision escondida dentro de scripts que el workflow podria manejar, vale la pena probarla.

Mira el changelog completo para detalles sobre los registros ampliados y las mejoras del editor.

Fundamentals first. Always.


Sobre la Autora: Andrea Griffiths es una Senior Developer Advocate en GitHub, donde ayuda a equipos de ingenieria a adoptar y escalar tecnologias de desarrolladores. Le apasiona hacer conceptos tecnicos accesibles, tanto para humanos como para agentes de IA. Conectate con ella en LinkedIn, GitHub, o Twitter/X.

Sobre la Autora: Andrea Griffiths es Senior Developer Advocate en GitHub, donde ayuda a equipos de ingeniería a adoptar y escalar tecnologías de desarrolladores. Le apasiona hacer conceptos técnicos accesibles—tanto para humanos como para agentes de IA. Conéctate con ella en LinkedIn, GitHub, o Twitter/X. · Leer en inglés