Skip to main content
Miguel Ordóñez

Auto-bloquear issues inactivas en GitHub Projects

En cualquier proyecto, las issues en "In Progress" se estancan. No por mala fe — simplemente pasan los días y nadie las toca. El board deja de reflejar la realidad y pierde su utilidad.

Busqué una GitHub Action que detectara esta inactividad y moviera issues automáticamente en GitHub Projects. No encontré ninguna. Existe actions/stale@v9, que es excelente y uso siempre que puedo, pero hace otra cosa: marca issues como stale basándose en la actividad de la propia issue. Mi necesidad era distinta — detectar inactividad real considerando PRs vinculadas y commits, y actuar sobre el estado del Project board.

Así que con Claude Code y un rato libre, me hice una.

Dejo aquí el gist completo para que puedas darle un ojo y ver si puedes aprovecharlo.


Cómo funciona

Es una Action programada cada noche que revisa las issues en la columna "In Progress" de un GitHub Project. Para cada una, comprueba tres fuentes de actividad: el updatedAt de la issue como filtro rápido, los timeline events (commits, referencias, cross-references), y las PRs abiertas que mencionan la issue. Si no hay actividad real en N días — no basta un cambio de label o un movimiento en el board — la mueve a "Blocked" vía la API GraphQL de Projects, asigna qué equipo tiene la pelota con un campo personalizado de projects (no quién falló, para evitar fricción en equipos mixtos), comenta mencionando al asignado y genera un reporte con la tabla de issues afectadas.

El workflow usa workflow_dispatch con dry_run para poder probar sin modificar nada — nunca sale a la primera. El GITHUB_TOKEN estándar no cubre Projects V2, así que necesitas un PAT con permisos project:read y project:write.


actions/stale vs inactive-issues-blocker

actions/stale@v9 inactive-issues-blocker
Actúa sobre La issue/PR (labels, cierre) El estado en el Project board
Detecta actividad en Comentarios y eventos de la issue Issue + timeline + PRs vinculadas
Caso de uso Issues abandonadas → cerrar Issues "en progreso" → hacer visible que están paradas

Uso ambos. stale para cerrar issues que nadie retoma. Este script para hacer visible que algo en "In Progress" no se está moviendo.


Lo que he visto después de usarlo

El mayor efecto no es el bloqueo en sí, sino que la gente actualiza sus issues antes de que salte. Saber que la Action va a detectarlo cambia el comportamiento.

No todo lo inactivo está bloqueado de verdad. A veces el trabajo es offline (reuniones, análisis). Por eso 7 días es un threshold razonable y el comentario invita a actualizar, no acusa.


El código completo está en este gist. Si conoces una forma mejor de resolver esto, cuéntamelo en los comentarios del propio gist.