¿Cómo rastrear hitos compartidos entre varios repositorios?

Vi https://youtu.be/nI5VdsVl0FM?t=226 sobre cómo gestionar problemas con etiquetas, hitos y proyectos, pero eso parece específico para cada repositorio de Github.

Supongamos que tenemos un impulso de funciones que requiere el seguimiento de problemas desde un repositorio "frontend" y "backend" en una sola organización por simplicidad. ¿Cómo recopila, prioriza y realiza un seguimiento del progreso con problemas de Github que abarcan varios repositorios?

En este momento, una posible solución requiere que sincronice manualmente las etiquetas en los repositorios, lo que parece bastante tedioso y carece de orden.

¿Alguna sugerencia aquí, por favor? Eché un vistazo rápido a Zenhub, pero parece estar nuevamente vinculado al repositorio y no parece volver a escribir etiquetas si realmente se molestó en ordenar los problemas o tareas en trabajos pendientes/en progreso, etc.

No estoy de acuerdo con la votación cerrada. Preguntar "¿Cómo IX?" (posiblemente sobre el tema) no es lo mismo que "¿Qué herramienta debo usar para hacer X?" (fuera de contexto).

Respuestas (4)

Opciones nativas limitadas; API flexibles

La gestión de proyectos completa, multiproyecto y multirepositorio no es realmente lo que GitHub hace mejor. Es posible que desee explorar soluciones de terceros para el seguimiento de errores y la gestión de hitos si las opciones nativas no son suficientes para usted.

GitHub ha adquirido recientemente la noción de proyectos que abarcan varios repositorios . Sin embargo, esto es algo limitado y es posible que no admita la funcionalidad completa que está buscando.

Incluso si no puede crear etiquetas e hitos de forma nativa en todos sus diversos repositorios, sin duda puede aprovechar la API para hacerlo mediante programación. Por ejemplo, usando las siguientes llamadas:

puede iterar sobre cada repositorio para agregar las etiquetas y los hitos que desee. Una búsqueda rápida incluso arrojó un código NodeJS que podría funcionar para usted.

Básicamente, parece que sus opciones son optar por una solución de terceros con integración de GitHub o implementar la suya propia a través de la API. ¡Buena suerte!

Pablo de ZenHub aquí (respondiendo a la pregunta ya que se mencionó específicamente a ZenHub).

La mayoría de las funciones de ZenHub son multi-repositorio; puede agregar repositorios a un tablero existente para que tanto los problemas de back-end como de front-end estén en el mismo lugar.

Desde el tablero, puede crear un hito de varios repositorios , que crea hitos coincidentes en todos los repositorios de un tablero determinado y luego agruparlos para los informes de velocidad y avance, así como para filtrar en el tablero.

Para crear etiquetas en varios repositorios, puede seleccionar problemas de varios repositorios en el tablero y luego agregar una etiqueta existente; si la etiqueta no existe en uno de los repositorios, ZenHub la creará por usted.

¡Espero que eso ayude!

Probé Zenhub, pero las etiquetas no parecían propagarse a Github. twitter.com/kaihendry/status/991508464517066753

Solución poco elegante: declarar un repositorio (quizás uno nuevo) como aquel en el que se gestionarán los tickets. Conéctese a ellos desde compromisos/PR en los otros repositorios a través de enlaces explícitos en lugar de confiar en la sintaxis mágica.

La API de Github se puede usar para crear hitos/sprints en varios repositorios.

// script.js
import { Octokit } from "https://cdn.skypack.dev/@octokit/core";

const token = "YOUR_GITHUB_PERSONAL_ACCESS_TOKEN"
const octokit = new Octokit({ auth: token});
const repos = await octokit.request('GET /user/repos');
const milestones = [{
    "title": "Sprint 1",
    "description": "June 1 to June 7"
    "due_on": "2021-06-01T00:00:00Z"
}, {
    "title": "Sprint 2",
    "description": "June 7 to June 14"
    "due_on": "2021-06-07T00:00:00Z"
}];

for (let r=0; r < repos.length; r++) {
    let repo = repos[r];
    for (let m=0; m < milestones.length; m++) {
        let milestone = milestones[m];
        let payload = {
            owner: repo.owner.login,
            repo: repo.name,
            title: milestone.title,
            description: milestone.description,
            due_on: milestone.due_on
        };
        await octokit.request(`POST /repos/{owner}/{repo}/milestones`, payload);
    }
}

He creado una pequeña aplicación web para lograr esto a través de la interfaz de usuario. Siéntase libre de usarlo y modificarlo según sus necesidades.

Enlace: hardiksondagar.github.io/cross-repository-milestones