GitHub Actions: cómo escapar del límite de 2.000 minutos

En pocas palabras: El truco es montar un self-hosted runner en una VPS de USD 5 al mes: GitHub no cobra minutos cuando corrés los workflows en tu propia máquina. Así saltás el tope de 2.000 minutos gratis y el costo de USD 0,008 por minuto en Linux.

GitHub Actions te da 2.000 minutos gratis por mes en repositorios privados. Cuando los agotás, te empieza a cobrar por minuto (USD 0,008 en Linux) o podés montar un self-hosted runner en una VPS de USD 5 y correr tus pipelines sin tope. Ese es el atajo que casi nadie configura hasta que llega la factura.

Si alguna vez configuraste un pipeline de CI/CD, sabés la sensación: todo verde, el deploy solo, magia. Después el equipo crece, entran veinte commits por día y aparece el mail que arruina la fiesta: “You have used 100% of your included Action minutes”. La luna de miel con la automatización se terminó. Vamos a ver por qué pasa y cómo salir sin poner un peso.

GitHub Actions es la plataforma de integración y despliegue continuo (CI/CD) integrada en GitHub, propiedad de Microsoft. Ejecuta tus workflows (compilar, testear, deployar) en máquinas virtuales que proporciona GitHub. En repositorios privados de plan gratuito tenés una cuota de 2.000 minutos mensuales; superado ese número, cada minuto extra se factura en dólares.

En 30 segundos

  • 2.000 minutos/mes gratis en repos privados (plan Free); en repos públicos es gratis e ilimitado.
  • Un pipeline full-stack quema ~5 min por ejecución (2 de Angular + 3 de .NET); con 20 commits diarios, la cuota se agota en 20 días hábiles.
  • Minuto extra en Linux: USD 0,008; Windows cuesta el doble (USD 0,016) y macOS diez veces más (USD 0,08).
  • Cacheando dependencias y paralelizando jobs recortás minutos sin tocar la billetera.
  • Con uso intensivo, un self-hosted runner en una VPS de USD 5-20 sale más barato que pagarle a GitHub.

¿Cuál es el límite de minutos de GitHub Actions y qué pasa si lo superás?

En el plan Free tenés 2.000 minutos por mes para repos privados. Al llegar al 100%, GitHub frena los workflows o empieza a cobrar por minuto excedente, según cómo tengas configurado el spending limit. En repositorios públicos no hay tope: corren gratis e ilimitado. Ese es el primer dato clave sobre el límite de minutos de GitHub Actions. Para más detalles técnicos, mirá ventajas principales de GitHub.

Los números finos, según la documentación oficial de GitHub: cada job tiene un timeout de 6 horas, el almacenamiento gratis de artefactos es de 500 MB, y el consumo se cuenta en minutos redondeados hacia arriba. Ojo con esto: los minutos de Windows valen el doble y los de macOS diez veces más, así que un pipeline en macOS te vacía la cuota mucho antes de lo que pensás.

¿Por qué GitHub pone un límite? Porque cada minuto que corrés es una máquina virtual real de Microsoft trabajando para vos. La cuota gratis subsidia el open source y a los equipos chicos. El resto paga.

¿Cuántos minutos gasta de verdad un proyecto mediano?

Un pipeline full-stack típico consume unos 5 minutos por ejecución. El ejemplo de la serie de Erick G. en dev.to lo desglosa así: el build de Angular tarda 2 minutos, el build y los tests de .NET otros 3. Total: 5 minutos cada vez que alguien pushea.

Hacé la cuenta. Veinte commits por día en un equipo mediano son 100 minutos diarios. En 20 días hábiles ya te comiste los 2.000. Y eso contando solo build y test: si además deployás, corrés linters o generás reportes, el número trepa.

Acá viene lo interesante: el gasto no se reparte parejo. El build suele ser lo más caro (bajar dependencias, compilar), los tests van segundos, y el deploy depende de a dónde subas. Por eso el primer lugar donde atacar siempre es el build.

Tipo de proyectoMin. por ejecuciónCommits/díaMin./mes (20 días)
Frontend Angular~220800
Backend .NET~3201.200
Full-stack (ambos)~5202.000
github actions límite minutos diagrama explicativo

¿Cómo optimizar workflows sin pagar un minuto extra?

Antes de sacar la tarjeta, hay cuatro palancas gratis que combinadas te bajan hasta la mitad del consumo. Ninguna requiere infraestructura nueva. Tema relacionado: la seguridad de GitHub.

  • Cacheá dependencias con actions/cache. Bajar node_modules o restaurar paquetes NuGet en cada run te roba 5 a 10 minutos. Cacheado, se resuelve en segundos.
  • Paralelizá jobs con needs. Correr build y test en secuencia suma tiempos; en paralelo, el pipeline dura lo que tarda el job más lento, no la suma de todos.
  • Filtrá por rutas con paths y paths-ignore. ¿Para qué correr todo el pipeline cuando alguien solo tocó el README? Con path-filters, un cambio de docs no te gasta un solo minuto.
  • Usá concurrency para cancelar runs viejos. Si pusheás tres veces seguidas, no tiene sentido que corran las tres builds. Cancelás las anteriores y corrés solo la última.

Con estos cuatro cambios, un proyecto que gastaba 2.000 minutos puede bajar a 1.000 sin resignar cobertura. La verdad es que la mayoría de los equipos ni siquiera cachea, y ahí se les va la mitad de la cuota.

¿Qué son los self-hosted runners y cuándo conviene usarlos?

Un self-hosted runner es tu propia máquina ejecutando los workflows en lugar de las VMs de GitHub. En vez de runs-on: ubuntu-latest (que alquila un servidor de Microsoft), ponés runs-on: [self-hosted] y el pipeline corre en tu hardware. Resultado: cero minutos facturados, sin importar cuánto lo uses.

Ventajas

  • Sin límite de minutos. Corré 10.000 builds al mes si querés; no pagás por ejecución.
  • Más rápido en red local. Cachés, artefactos y dependencias viajan por tu red, no por internet.
  • Control total. Elegís CPU, RAM y disco. Un .NET pesado vuela en una máquina decente.

Desventajas

  • Mantenimiento tuyo. Actualizaciones, seguridad y uptime dependen de vos, no de GitHub.
  • Riesgo de seguridad en repos públicos. GitHub recomienda usar self-hosted runners solo en repos privados: un PR malicioso podría ejecutar código en tu servidor.

Lo podés montar en una VPS barata. Una máquina de USD 5 alcanza para arrancar, y si tenés hosting o servidores en donweb.com ya tenés dónde correrlo sin sumar otro proveedor. El break-even es claro: si pasás las 100 horas mensuales de acciones, un servidor dedicado de USD 12-20 sale más barato que el excedente.

¿Conviene pagarle a GitHub o montar un runner propio?

Depende del volumen. Para un equipo de 3 devs que aún no revienta la cuota, optimizar y quedarse en el Free es lo lógico. Para 20 devs con pipelines intensivos, el self-hosted (o GitLab CI auto-gestionado) gana por goleada. Acá la comparativa cruda.

OpciónCosto mensualMinutosMantenimientoIdeal para
Free + optimizaciónUSD 02.000NingunoStartup de 1-3 devs
GitHub Team~USD 4/usuario3.000 incluidosNingunoEquipos que quieren soporte
Self-hosted (VPS)USD 5-20IlimitadoTuyoPipelines intensivos
GitLab CI (auto-gestionado)USD 0 + servidorSegún runnerTuyoEquipos grandes

La cuenta rápida: 5.000 minutos extra de Linux por mes son USD 40. Una VPS que te da minutos ilimitados sale la mitad. Si tu equipo crece, el self-hosted deja de ser opcional y pasa a ser la decisión obvia. Esto se conecta con lo que analizamos en servidores confiables y robustos.

¿GitHub Actions es la mejor opción o hay alternativas?

GitHub Actions es el estándar de facto para open source y proyectos que ya viven en GitHub, por integración y facilidad. Pero no es la única opción, y para equipos grandes hay alternativas que salen más baratas a gran escala.

GitLab CI brilla cuando querés self-hosting: montar tus propios runners es su terreno natural y no dependés de una cuota de minutos. Jenkins te da control absoluto, aunque a costa de mantener un servidor entero y su overhead de configuración. La regla práctica: quedate en GitHub Actions si tu proyecto es open source o el equipo es chico; mirá GitLab o self-hosted si tenés pipelines pesados y muchos desarrolladores empujando código todo el día.

Errores comunes que agotan tus minutos

  • No cachear dependencias. Es el error número uno. Bajar todo de cero en cada run suma 5-10 minutos que no aportan nada. Solución: actions/cache con la clave del lockfile.
  • Correr todo en secuencia. Jobs que podrían ir en paralelo esperando uno al otro inflan el tiempo hasta 30%. Usá needs solo donde haya dependencia real.
  • No filtrar por path. Disparar el pipeline completo porque cambiaste un .md es tirar minutos a la basura. Configurá paths-ignore.
  • Filtrar secrets en los logs. Un secret impreso por error no solo es un agujero de seguridad: te obliga a rotar credenciales y re-correr todo. Usá siempre secrets.*, nunca echo de variables sensibles.
  • Acumular artefactos viejos. Los 500 MB gratis se llenan rápido si nunca borrás. Poné retention-days bajo y limpiá lo que no uses.

Preguntas Frecuentes

¿Cuál es el límite de minutos de GitHub Actions en repos privados?

2.000 minutos por mes en el plan Free. El plan Team incluye 3.000. En repositorios públicos no hay límite: GitHub Actions es gratis e ilimitado, sin importar cuántos workflows corras.

¿Cuánto cuesta cada minuto extra en GitHub Actions?

USD 0,008 por minuto en runners Linux, según la facturación oficial de GitHub. Windows cuesta el doble (USD 0,016) y macOS diez veces más (USD 0,08). Por eso conviene mantener los pipelines en Linux siempre que se pueda. Ya lo cubrimos antes en otras herramientas CI/CD disponibles.

¿Cómo reduzco los minutos que usa mi workflow?

Cacheando dependencias con actions/cache, paralelizando jobs con needs, filtrando por rutas con paths-ignore y cancelando runs duplicados con concurrency. Combinadas, estas cuatro técnicas bajan el consumo sin costo.

¿Vale la pena un self-hosted runner en lugar de pagarle a GitHub?

Sí, cuando el volumen es alto. Una VPS de USD 5-20 te da minutos ilimitados, mientras que ese mismo volumen pagado a GitHub cuesta más. Para equipos chicos que no revientan la cuota, no vale la pena el mantenimiento.

¿Es seguro usar un self-hosted runner?

En repos privados, sí. GitHub desaconseja usarlos en repos públicos porque un pull request malicioso podría ejecutar código en tu servidor. Si lo montás, mantené el sistema actualizado y nunca lo expongas a repositorios abiertos.

Conclusión

El límite de 2.000 minutos no es un muro: es una señal de que tu pipeline creció. La secuencia sensata tiene dos pasos. Primero optimizá (cacheo, paralelismo, path-filters) porque es gratis y suele resolver el problema del equipo chico. Segundo, si aún así te quedás corto, montá un self-hosted runner en una VPS y olvidate del contador.

La factura llega solo cuando dejás todo en piloto automático. Con media hora de tuning o cinco dólares de VPS, esa cuota deja de ser un problema. Hacé la cuenta de cuántos minutos gasta tu equipo hoy y decidí con datos, no cuando aparezca el mail del 100%.

Fuentes

Te puede interesar...