LogoLogo
Contribute to InnerSource PatternsJoin the community
🇪🇸 Español
🇪🇸 Español
  • Introducción
  • Tabla de Contenidos
  • Explorar Patrones
  • Contribuir a este libro
  • Patrones
    • Casos de uso del Gestor de Tareas (Issue Tracker)
    • Colaborador Contratado
    • Comenzar como Experimento
    • Comité de Revisión
    • Documenta tus Principios Rectores
    • Documentación Base Estándar
    • Equipo Central (Core Team)
    • Extensiones para un Crecimiento Sostenible
    • Garantía de 30 Días
    • Grupo de Soporte
    • Herramientas de Comunicación
    • Licencia InnerSource
    • Líder de Comunidad Dedicado
    • Mercado de Gigs
    • Modelo de Madurez
    • Portal InnerSource
    • Proceso Estándar de Publicación
    • Puntuación de Actividad del Repositorio
    • Reconocimiento a los Participantes
    • Requerimientos Comunes
    • Servicio vs Librería
    • Toma de Decisiones Transparente Entre Equipos usando RFCs
    • Trusted Committer
    • Valoración de Proyectos Transversales
  • Apéndice
    • Plantilla de Patrones
    • Glosario
    • Extras
      • Plantilla de README
      • Plantilla de CONTRIBUTING
      • Plantilla de COMMUNICATION
      • Plantilla de RFC
  • Recursos
    • Este libro en GitHub
    • InnerSource Commons
Con tecnología de GitBook
En esta página
  • Title
  • Patlet
  • Problema
  • Historia
  • Contexto
  • Resistencias
  • Esquema
  • Soluciones
  • Contexto Resultante
  • Razonamiento
  • Instancias Conocidas
  • Estado
  • Autor(es)
  • Agradecimientos
  • Histórico de Traducciones

¿Te fue útil?

Editar en GitHub
Exportar como PDF
  1. Patrones

Puntuación de Actividad del Repositorio

AnteriorProceso Estándar de PublicaciónSiguienteReconocimiento a los Participantes

Última actualización hace 1 mes

¿Te fue útil?

Title

Puntuación de Actividad del Repositorio

Patlet

Los contribuidores potenciales quieren encontrar proyectos InnerSource activos que necesiten su ayuda. Al calcular una puntuación de actividad del repositorio para cada proyecto, se puede crear una lista clasificada de proyectos (por ejemplo, en el ), para que los contribuidores potenciales puedan determinar más fácilmente a qué proyecto quieren contribuir.

Problema

¿En qué orden se deben presentar los proyectos InnerSource? Los KPIs típicos de clasificación como GitHub Stars, Número de Forks, Número de Commits, Líneas de Código, Última Actualización no son suficientes para indicar de manera concisa la actividad de un proyecto.

Los proyectos activos con mucha tracción, pero también los proyectos nuevos y entusiastas que necesitan nuevos contribuidores, deben clasificarse más alto que los proyectos maduros con poca actividad o en modo de mantenimiento.

Se necesita una nueva métrica derivada de varios KPIs para definir una puntuación confiable y versátil del nivel de actividad de un proyecto. Puede usarse para ordenar los proyectos según su nivel de actividad.

Historia

Cuando InnerSource se practica durante mucho tiempo o se escala más allá de un cierto número de proyectos (digamos 50 para dar un umbral significativo), es difícil encontrar los proyectos InnerSource más populares y activos en ese momento. Los proyectos que existen desde hace mucho tiempo son bien conocidos, pero pueden no ser muy activos. Por otro lado, los proyectos nuevos no tienen una reputación o una comunidad activa todavía.

Una lista de proyectos InnerSource no debe considerarse un recurso estático, sino un lugar emocionante para descubrir y explorar nuevos proyectos activos, al igual que una página de noticias que enumera los temas más interesantes del día primero. Por lo tanto, es beneficioso cuando el orden de los proyectos se actualiza regularmente y cambia según la popularidad y actividad del proyecto.

Estas consideraciones llevaron a un primer prototipo para calcular una puntuación de actividad del repositorio, que funcionó sorprendentemente bien y determina un orden siempre cambiante de proyectos según su actividad.

Contexto

Descubrir proyectos InnerSource puede facilitarse con el y el patrón , o promoviendo proyectos en otros canales de comunicación y plataformas. La puntuación de actividad define un orden predeterminado en el que se presentan los proyectos a la comunidad.

Resistencias

Los KPIs automatizados que se pueden obtener consultando la API de GitHub son solo una parte de la verdad. ¿Qué pasa con la calidad del código, la disponibilidad de buena documentación o una comunidad activa y servicial que hace que el proyecto sea un lugar divertido para contribuir?

Tales KPIs "suaves" tendrían que agregarse manual o semiautomáticamente al cálculo y la puntuación resultante. Si existen herramientas que proporcionan más contexto para el repositorio, como un informe de cobertura de código, se pueden integrar fácilmente.

Esquema

Soluciones

La puntuación de actividad del repositorio es un valor numérico que representa la actividad (GitHub) de un proyecto InnerSource. Se deriva automáticamente de estadísticas del repositorio como estrellas de GitHub, observadores y forks, y puede enriquecerse con KPIs de otras herramientas o evaluaciones manuales.

Además, considera parámetros de actividad como la última actualización y la fecha de creación del repositorio para dar un impulso a los proyectos jóvenes con mucha tracción. Los proyectos con directrices de contribución, estadísticas de participación activa y problemas (backlog público) también reciben una clasificación más alta.

El código a continuación asume que la variable repo contiene una entidad obtenida de la API de búsqueda de GitHub y el objeto participation contiene una entidad de la API de stats/participation de GitHub.

// calcular una puntuación virtual de InnerSource a partir de estrellas, observadores, commits y problemas
function calculateScore(repo) {
    // la puntuación inicial es 50 para dar a los repositorios activos con bajos KPIs de GitHub (forks, observadores, estrellas) un mejor punto de partida
    let iScore = 50;
    // ponderación: los forks y observadores cuentan más, luego las estrellas, agregar una pequeña puntuación para problemas abiertos también
    iScore += repo.forks_count * 5;
    iScore += (repo.subscribers_count ? repo.subscribers_count : 0);
    iScore += repo.stargazers_count / 3;
    iScore += repo.open_issues_count / 5;

    // actualizado en los últimos 3 meses: agrega un multiplicador de bonificación entre 0..1 a la puntuación general (1 = actualizado hoy, 0 = actualizado hace más de 100 días)
    let iDaysSinceLastUpdate = (new Date().getTime() - new Date(repo.updated_at).getTime()) / 1000 / 86400;
    iScore = iScore * ((1 + (100 - Math.min(iDaysSinceLastUpdate, 100))) / 100);

    // evaluar estadísticas de participación para los últimos 3 meses
    repo._InnerSourceMetadata = repo._InnerSourceMetadata || {};
    if (repo._InnerSourceMetadata.participation) {
        // commits promedio: agrega un multiplicador de bonificación entre 0..1 a la puntuación general (1 = >10 commits por semana, 0 = menos de 3 commits por semana)
        let iAverageCommitsPerWeek = repo._InnerSourceMetadata.participation.slice(-13).reduce((a, b) => a + b) / 13;
        iScore = iScore * ((1 + (Math.min(Math.max(iAverageCommitsPerWeek - 3, 0), 7))) / 7);
    }

    // cálculo de impulso:
    // todos los repositorios actualizados en el último año recibirán un impulso máximo de 1000 que disminuye según los días desde la última actualización
    let iBoost = (1000 - Math.min(iDaysSinceLastUpdate, 365) * 2.74);
    // reducir gradualmente el impulso según la fecha de creación del repositorio para mezclar con estadísticas de "compromiso real"
    let iDaysSinceCreation = (new Date().getTime() - new Date(repo.created_at).getTime()) / 1000 / 86400;
    iBoost *= (365 - Math.min(iDaysSinceCreation, 365)) / 365;
    // agregar impulso a la puntuación
    iScore += iBoost;
    // dar a los proyectos con una descripción significativa un impulso estático de 50
    iScore += (repo.description?.length > 30 || repo._InnerSourceMetadata.motivation?.length > 30 ? 50 : 0);
    // dar a los proyectos con directrices de contribución (archivo CONTRIBUTING.md) un impulso estático de 100
    iScore += (repo._InnerSourceMetadata.guidelines ? 100 : 0);
    // construir una escala logarítmica para proyectos muy activos (sin límite pero estabilizándose alrededor de 5000)
    if (iScore > 3000) {
        iScore = 3000 + Math.log(iScore) * 100;
    }
    // la puntuación final es un valor redondeado que comienza desde 0 (restar el valor inicial)
    iScore = Math.round(iScore - 50);
    // agregar puntuación a los metadatos sobre la marcha
    repo._InnerSourceMetadata.score = iScore;

    return iScore;
}

Contexto Resultante

Los contribuidores son libres de dedicar parte de su tiempo a proyectos InnerSource. Pueden elegir contribuir a un proyecto del que dependen para el trabajo en su equipo regular de todos modos. Sin embargo, también pueden optar por contribuir a algo completamente diferente, basado en sus intereses y objetivos de desarrollo personal.

Los proyectos pueden ordenarse y presentarse por puntuación de actividad del repositorio para establecer un orden relevante en un portal que presenta proyectos a nuevos contribuidores potenciales. La puntuación se puede calcular sobre la marcha o en un trabajo en segundo plano que evalúa todos los proyectos regularmente y almacena una lista de resultados.

Razonamiento

La puntuación de actividad del repositorio es un cálculo simple basado en la API de GitHub. Puede ser completamente automatizado y fácilmente adaptado a nuevos requisitos.

Instancias Conocidas

Estado

  • Estructurado

Autor(es)

Agradecimientos

¡Gracias a la Comunidad de InnerSource Commons por sus consejos rápidos y una gran cantidad de aportes útiles para alimentar este patrón! Especialmente:

  • Johannes Tigges

  • Sebastian Spier

  • Maximilian Capraro

  • Tim Yao

Histórico de Traducciones

Un enfoque centralizado para calcular y aplicar la puntuación de actividad del repositorio. Para más detalles, ver

Todo esto se puede obtener y calcular automáticamente utilizando el conjunto de resultados de la y la . Otros sistemas de control de versiones de código como Bitbucket, GitLab, Gerrit también se pueden integrar si hay una API similar disponible.

Se pueden hacer ajustes manuales según los KPIs cualitativos (ver ) si es necesario.

Un rastreador que busca regularmente todos los repositorios InnerSource (por ejemplo, etiquetados con un cierto en GitHub) también puede ser una adición útil. Proporciona una lista clasificada de proyectos que se puede usar como entrada para herramientas como el , un motor de búsqueda o un chatbot interactivo.

Utilizado en el portal de proyectos InnerSource de SAP para definir el orden predeterminado de los proyectos InnerSource. Fue creado por primera vez en julio de 2020 y se ajusta y actualiza con frecuencia desde entonces. Cuando se propuso a InnerSource Commons en julio de 2020, surgió este patrón. También ver .

Airbus se inspiró mucho en este patrón para crear una "puntuación InnerSource" que combina la puntuación de actividad junto con verificaciones de la y la .

2025-04-03 - Traducción

2025-04-03 - Traducción

Portal InnerSource
Portal InnerSource
Gig Marketplace
API de búsqueda de GitHub
API de estadísticas de GitHub
tema
Portal InnerSource
Michael Graf & Harish B (SAP) en ISC.S11 - El Camino Inesperado de Aplicar Patrones InnerSource
Documentación Base Estándar
Licencia InnerSource
Michael Graf (SAP)
Oscar Lobaton S.
Roman Martin Gil
Contexto Resultante
Resistencias
Ecosistema para la Puntuación de Actividad del Repositorio