Qué se rompe cuando ubuntu-latest pasa a Ubuntu 26.04 en GitHub Actions
Tabla de Contenidos
GitHub está moviendo la etiqueta ubuntu-latest de Ubuntu 24.04 a Ubuntu 26.04: el despliegue empezó el 19 de octubre de 2026 y GitHub dice que terminará el 19 de noviembre. Si tu workflow dice runs-on: ubuntu-latest, durante estas semanas algunos jobs ya corren en 26.04 y otros todavía en 24.04, así que un fallo que aparece y desaparece sin que hayas tocado nada tiene un sospechoso obvio. Lo que cambia por debajo es mucho: kernel 7.0, Node 24 por defecto, PHP 8.5, Python 3.14, Docker 29, Java 25 y once herramientas que dejaron de venir preinstaladas.
El arreglo de emergencia cabe en una línea (runs-on: ubuntu-24.04) y está en el propio aviso de GitHub. Lo que sigue es para que sepas qué se rompe antes de decidir si fijas la versión o migras. Todo sale de los avisos y del README de la imagen en actions/runner-images, consultados el 13 de noviembre de 2026; donde algo es un reporte abierto de un usuario y no una decisión de GitHub, lo digo.
El calendario
| Fecha | Qué pasó o pasa | Fuente |
|---|---|---|
| 11-jun-2026 | Ubuntu 26.04 y 26.04 Arm, en vista previa pública | #14226 |
| 17-sep-2026 | Disponibilidad general: etiquetas ubuntu-26.04 y ubuntu-26.04-arm | #14747 |
| 17-sep-2026 | Aviso de que ubuntu-latest pasará a 26.04 | #14748 |
| 19-oct-2026 | Empieza el despliegue gradual de ubuntu-latest | #14748 |
| 19-nov-2026 | Fecha prevista para terminar la migración | #14748 |
| 17-abr-2027 | Se retira ubuntu-22.04 | #14254 |
El aviso habla de la etiqueta ubuntu-latest x64; las etiquetas fijas (ubuntu-24.04, ubuntu-26.04) no cambian de significado. Es la misma mecánica de lo que se rompió con GitHub Actions este otoño: el aviso lo dan con semanas de margen y casi nadie lo lee hasta que un job falla.
Qué cambia en la imagen
La tabla compara el README de Ubuntu 24.04 (imagen 20261111) con el de Ubuntu 26.04 (imagen 20261101). Las versiones exactas cambian con cada imagen semanal; lo que importa es el salto de línea mayor.
| Componente | Ubuntu 24.04 | Ubuntu 26.04 |
|---|---|---|
| Sistema | 24.04.5 LTS | 26.04.1 LTS |
| Kernel | 6.17 | 7.0 |
| systemd | 255 | 259 |
| Node.js por defecto | 22.23.4 | 24.22.2 |
| PHP | 8.3.6 | 8.5.4 |
| Python | 3.12.3 | 3.14.4 |
| Ruby | 3.2.3 | 3.3.8 |
| Perl | 5.38.2 | 5.40.1 |
| Docker (cliente y servidor) | 28.0.4 | 29.4.2 |
| Docker Compose | 2.38.2 | 5.1.3 |
| GCC | 13.2 | 15.2 |
| Java por defecto | 17 | 25 |
p7zip-full | 16.02 | reemplazado por 7zip 26.00 |
Los números de kernel y systemd son los que da GitHub en el aviso #14748; el resto, los del README de cada imagen.
Lo que se rompe, por impacto
1. Java por defecto pasa de 17 a 25, y Java 8 desaparece
El aviso lo dice sin rodeos: «Default version updated to Java 25». Un build de Maven o Gradle que no declara versión (sin actions/setup-java) ya no compila con 17. Además, la lista de JDK de 26.04 es 11, 17, 21 y 25: no hay JAVA_HOME_8_X64, y en 24.04 sí había un Java 8. La solución es la de siempre y sirve en cualquier imagen: declarar la versión.
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'
2. Docker 29 y Compose 5: la primera vez que cambia el cliente en mucho tiempo
Docker sube de 28.0.4 a 29.4.2 y Compose de 2.38.2 a 5.1.3. No probé tus pipelines, pero hay dos reportes abiertos que conviene conocer:
- Contenedores i386 sin red. En #14790 un usuario reporta que Docker 29.4.2 trae un perfil seccomp que bloquea
socketcall(2); las imágenes i386 con glibc no resuelven nombres. Según el reporte, Docker 29.4.3 o posterior ya lo revierte. Las imágenes basadas en musl (i386/alpine) no se ven afectadas. Es un reporte de usuario, no una nota de GitHub; el README de hoy sigue listando 29.4.2. - Disco. En #15233 alguien reporta que un
docker buildcon una capa grande se quedó sin espacio enubuntu-latestdurante el despliegue y que fijandoubuntu-24.04terminó. Es un solo caso, abierto, sin causa confirmada: no lo des por hecho, pero si tus builds de imágenes grandes empiezan a fallar con «no space left on device», es el primer sitio donde mirar.
3. Node, PHP y Python por defecto suben de línea mayor
Si tu job usa el node, php o python3 del sistema en vez de setup-node, setup-php o setup-python, hoy ejecuta Node 24, PHP 8.5 y Python 3.14. Un proyecto que sigue en Laravel 12 corre bien en PHP 8.5 (Laravel 12 soporta 8.2 a 8.5, según las notas de versión), pero uno con dependencias que no declaran 8.5 puede fallar en composer install. La solución es dejar de depender del valor por defecto: shivammathur/setup-php con php-version: '8.3' y actions/setup-node con node-version: 22 o 26 (qué cambia en Node 26).
4. Herramientas que ya no vienen preinstaladas
Comparando los dos README, estas once desaparecen de 26.04: Fastlane, Haveged, Julia, Lerna, MediaInfo, Mercurial, Miniconda, Newman, Parcel, Pulumi y Sphinx Open Source Search Server. No encontré un aviso de GitHub que las enumere; es el resultado de comparar las listas de herramientas de los dos README el 13 de noviembre, así que si falta alguna en mi lista es porque no la detecté. Un lerna run o un pulumi up que antes «simplemente funcionaba» ahora da command not found; instálalo en el job (npm i -g lerna, pulumi/actions, etc.).
Y un detalle de paquetes de sistema: p7zip-full y p7zip-rar quedaron como 7zip y 7zip-rar. Si tu workflow hace apt-get install p7zip-full, comprueba que el paquete siga existiendo en 26.04 o cámbialo por 7zip.
5. Cosas más finas del sistema
/etc/sysctl.confno se aplica al arrancar. #15108 (abierto): la imagen escribefs.inotify.max_user_instances=1280ymax_user_watches=655360, pero en 26.04 el kernel conserva 128 y 64097 porque systemd ya no lee ese archivo. Si un watcher de archivos (Vite, Jest en modo watch, webpack) falla conENOSPCo «too many open files», es esto. Tu job puede subirlos consudo sysctl -w.setfaclfalla. #15004 (abierto) lo reporta rompiendoopenai/codex-action.- Podman rootless tiene reportes de AppArmor (#15184, #15182). Si usas Podman en lugar de Docker, mira esos dos.
- Azure DevOps: el usuario del agente pasó de
vstsarunner(#15028); afecta rutas con/home/.... No toca a GitHub Actions estándar.
Cómo saber si te toca
# Workflows que usan ubuntu-latest (los afectados)
grep -rn "ubuntu-latest" .github/workflows/
# En una organización, con la CLI de GitHub
gh search code "ubuntu-latest" --owner TU_ORG --filename "*.yml" --limit 100
Y para ver en qué sistema corrió realmente un job, añade un paso al principio del workflow: cat /etc/os-release | grep VERSION=. Durante el despliegue, el mismo workflow puede dar 24.04 hoy y 26.04 mañana.
Qué hacer
- Probar ya en 26.04 sin tocar el workflow principal: una copia con
runs-on: ubuntu-26.04(GitHub lo recomienda en el aviso para probar explícitamente la imagen nueva). - Si falla y no tienes tiempo: fija
runs-on: ubuntu-24.04. Es la vía de escape que ofrece el propio aviso. No es una solución permanente: una etiqueta fija deja de recibir imágenes nuevas algún día, y no encontré en los avisos de hoy una fecha de retiro de 24.04, así que revisa actions/runner-images cada tanto. - Declarar versiones explícitas de Java, Node, PHP y Python con las acciones
setup-*. Es lo que evita que el próximo cambio deubuntu-latestte sorprenda. - Abandonar la dependencia de herramientas preinstaladas que no son de uso común: instálalas en el job.
El CI de este sitio corre en ubuntu-latest (con un respaldo configurable) y declara Node 24 con actions/setup-node, así que no depende del Node del sistema: es la regla que aplico, nada que importe se hereda de la imagen.
Preguntas frecuentes
¿Cuándo pasa ubuntu-latest a Ubuntu 26.04?
GitHub empezó el despliegue gradual el 19 de octubre de 2026 y prevé terminarlo el 19 de noviembre de 2026, según el aviso 14748 de actions/runner-images. Mientras dura, el mismo workflow puede correr en 24.04 o en 26.04.
¿Cómo me quedo en Ubuntu 24.04?
Cambia runs-on: ubuntu-latest por runs-on: ubuntu-24.04. Es la mitigación que propone el aviso de GitHub. Para probar la imagen nueva sin migrar todo, usa runs-on: ubuntu-26.04 en una copia del workflow.
¿Qué versiones de Node, PHP y Python trae Ubuntu 26.04 en GitHub Actions?
Según el README de la imagen del 1 de noviembre de 2026: Node.js 24.22.2, PHP 8.5.4 y Python 3.14.4 (Ubuntu 24.04 trae Node 22.23.4, PHP 8.3.6 y Python 3.12.3). Para no depender del valor por defecto, usa setup-node, setup-php y setup-python.
¿Qué herramientas quitaron de la imagen de Ubuntu 26.04?
Comparando el README de 24.04 con el de 26.04 el 13 de noviembre de 2026, ya no aparecen Fastlane, Haveged, Julia, Lerna, MediaInfo, Mercurial, Miniconda, Newman, Parcel, Pulumi ni Sphinx Open Source Search Server. GitHub no publicó esa lista en un aviso; es el resultado de la comparación.
¿Cambia ubuntu-latest también en los runners ARM?
El aviso 14748 habla de la etiqueta x64 ubuntu-latest. Las etiquetas ubuntu-26.04 y ubuntu-26.04-arm existen desde el 17 de septiembre de 2026 y se pueden usar explícitamente en cualquier momento.
¿Te sirvió? Recibe la próxima por correo
Una vez por semana: qué se rompe al actualizar, IA para desarrolladores y lo que estoy construyendo, con fuentes. Sin spam.
Al suscribirte aceptas nuestro aviso de privacidad.