From d1722fae1958fbd42cf352b6a624762def640f1a Mon Sep 17 00:00:00 2001 From: Andre Correia Date: Thu, 12 Aug 2021 21:15:07 +0100 Subject: [PATCH 1/4] update score calculation algorithm * replace `watchers_count` by `subscribers_count` * fix slice number * simplify check * repo JSON access standardization --- patterns/2-structured/repository-activity-score.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/patterns/2-structured/repository-activity-score.md b/patterns/2-structured/repository-activity-score.md index 559667d0e..e666a6ebb 100644 --- a/patterns/2-structured/repository-activity-score.md +++ b/patterns/2-structured/repository-activity-score.md @@ -58,7 +58,7 @@ function calculateScore(repo) { // initial score is 50 to give active repos with low GitHub KPIs (forks, watchers, stars) a better starting point let iScore = 50; // weighting: forks and watches count most, then stars, add some little score for open issues, too - iScore += repo["forks_count"] * 5 + repo["watchers_count"] + repo["stargazers_count"] / 3 + repo["open_issues_count"] / 5; + iScore += repo.forks_count * 5 + (repo.subscribers_count ? repo.subscribers_count : 0) + repo.stargazers_count / 3 + repo.open_issues_count / 5; let iDaysSinceLastUpdate = (new Date().getTime() - new Date(repo.updated_at).getTime()) / 1000 / 86400; // updated in last 3 months: adds a bonus multiplier between 0..1 to overall score (1 = updated today, 0 = updated more than 100 days ago) iScore = iScore * (1 + (100 - Math.min(iDaysSinceLastUpdate, 100)) / 100); @@ -66,7 +66,7 @@ function calculateScore(repo) { repo._InnerSourceMetadata = repo._InnerSourceMetadata || {}; if (repo._InnerSourceMetadata.participation) { // average commits: adds a bonus multiplier between 0..1 to overall score (1 = >10 commits per week, 0 = less than 3 commits per week) - let iAverageCommitsPerWeek = repo._InnerSourceMetadata.participation.slice(repo._InnerSourceMetadata.participation - 13).reduce((a, b) => a + b) / 13; + 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); } // boost calculation: @@ -78,9 +78,9 @@ function calculateScore(repo) { // add boost to score iScore += iBoost; // give projects with a meaningful description a static boost of 50 - iScore += (repo["_InnerSourceMetadata"]["description"].length > 30 || repo["_InnerSourceMetadata"] && repo["_InnerSourceMetadata"]["motivation"].length > 30 ? 50 : 0); + iScore += (repo.description?.length > 30 || repo._InnerSourceMetadata.motivation?.length > 30 ? 50 : 0); // give projects with contribution guidelines (CONTRIBUTING.md) file a static boost of 100 - iScore += (repo["_InnerSourceMetadata"] && repo["_InnerSourceMetadata"]["guidelines"] ? 100 : 0); + iScore += (repo._InnerSourceMetadata.guidelines ? 100 : 0); // build in a logarithmic scale for very active projects (open ended but stabilizing around 5000) if (iScore > 3000) { iScore = 3000 + Math.log(iScore) * 100; From 27f83a0505da37d223d1d19d495a0f16962b4c14 Mon Sep 17 00:00:00 2001 From: Andre Correia Date: Mon, 16 Aug 2021 09:05:14 +0100 Subject: [PATCH 2/4] improve code reading Co-authored-by: Sebastian Spier --- patterns/2-structured/repository-activity-score.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/patterns/2-structured/repository-activity-score.md b/patterns/2-structured/repository-activity-score.md index e666a6ebb..dc5c2e1d6 100644 --- a/patterns/2-structured/repository-activity-score.md +++ b/patterns/2-structured/repository-activity-score.md @@ -58,7 +58,10 @@ function calculateScore(repo) { // initial score is 50 to give active repos with low GitHub KPIs (forks, watchers, stars) a better starting point let iScore = 50; // weighting: forks and watches count most, then stars, add some little score for open issues, too - iScore += repo.forks_count * 5 + (repo.subscribers_count ? repo.subscribers_count : 0) + repo.stargazers_count / 3 + repo.open_issues_count / 5; + iScore += repo.forks_count * 5; + iScore += (repo.subscribers_count ? repo.subscribers_count : 0); + iScore += repo.stargazers_count / 3; + iScore += repo.open_issues_count / 5; let iDaysSinceLastUpdate = (new Date().getTime() - new Date(repo.updated_at).getTime()) / 1000 / 86400; // updated in last 3 months: adds a bonus multiplier between 0..1 to overall score (1 = updated today, 0 = updated more than 100 days ago) iScore = iScore * (1 + (100 - Math.min(iDaysSinceLastUpdate, 100)) / 100); From 48ec7bf0d6521df1754ef20256699c915d0f23da Mon Sep 17 00:00:00 2001 From: Andre Correia Date: Mon, 30 Aug 2021 21:59:15 +0100 Subject: [PATCH 3/4] update algorithm --- patterns/2-structured/repository-activity-score.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/patterns/2-structured/repository-activity-score.md b/patterns/2-structured/repository-activity-score.md index dc5c2e1d6..d1785b676 100644 --- a/patterns/2-structured/repository-activity-score.md +++ b/patterns/2-structured/repository-activity-score.md @@ -62,16 +62,19 @@ function calculateScore(repo) { iScore += (repo.subscribers_count ? repo.subscribers_count : 0); iScore += repo.stargazers_count / 3; iScore += repo.open_issues_count / 5; - let iDaysSinceLastUpdate = (new Date().getTime() - new Date(repo.updated_at).getTime()) / 1000 / 86400; + // updated in last 3 months: adds a bonus multiplier between 0..1 to overall score (1 = updated today, 0 = updated more than 100 days ago) - iScore = iScore * (1 + (100 - Math.min(iDaysSinceLastUpdate, 100)) / 100); + let iDaysSinceLastUpdate = (new Date().getTime() - new Date(repo.updated_at).getTime()) / 1000 / 86400; + iScore = iScore * ((100 - Math.min(iDaysSinceLastUpdate, 100)) / 100); + // evaluate participation stats for the previous 3 months repo._InnerSourceMetadata = repo._InnerSourceMetadata || {}; if (repo._InnerSourceMetadata.participation) { // average commits: adds a bonus multiplier between 0..1 to overall score (1 = >10 commits per week, 0 = less than 3 commits per week) - 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); + let iAverageCommitsPerWeek = repo._InnerSourceMetadata.participation.slice(repo._InnerSourceMetadata.participation.length - 13).reduce((a, b) => a + b) / 13; + iScore = iScore * ((Math.min(Math.max(iAverageCommitsPerWeek - 3, 0), 7)) / 7); } + // boost calculation: // all repositories updated in the previous year will receive a boost of maximum 1000 declining by days since last update let iBoost = (1000 - Math.min(iDaysSinceLastUpdate, 365) * 2.74); @@ -92,6 +95,7 @@ function calculateScore(repo) { iScore = Math.round(iScore - 50); // add score to metadata on the fly repo._InnerSourceMetadata.score = iScore; + return iScore; } ``` From 48c382df567dfc651dfc735a6b429133f763067e Mon Sep 17 00:00:00 2001 From: Andre Correia Date: Tue, 28 Sep 2021 09:36:08 +0100 Subject: [PATCH 4/4] revert `1+` removed --- patterns/2-structured/repository-activity-score.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/patterns/2-structured/repository-activity-score.md b/patterns/2-structured/repository-activity-score.md index d1785b676..76a94eb0a 100644 --- a/patterns/2-structured/repository-activity-score.md +++ b/patterns/2-structured/repository-activity-score.md @@ -65,14 +65,14 @@ function calculateScore(repo) { // updated in last 3 months: adds a bonus multiplier between 0..1 to overall score (1 = updated today, 0 = updated more than 100 days ago) let iDaysSinceLastUpdate = (new Date().getTime() - new Date(repo.updated_at).getTime()) / 1000 / 86400; - iScore = iScore * ((100 - Math.min(iDaysSinceLastUpdate, 100)) / 100); + iScore = iScore * ((1 + (100 - Math.min(iDaysSinceLastUpdate, 100))) / 100); // evaluate participation stats for the previous 3 months repo._InnerSourceMetadata = repo._InnerSourceMetadata || {}; if (repo._InnerSourceMetadata.participation) { // average commits: adds a bonus multiplier between 0..1 to overall score (1 = >10 commits per week, 0 = less than 3 commits per week) let iAverageCommitsPerWeek = repo._InnerSourceMetadata.participation.slice(repo._InnerSourceMetadata.participation.length - 13).reduce((a, b) => a + b) / 13; - iScore = iScore * ((Math.min(Math.max(iAverageCommitsPerWeek - 3, 0), 7)) / 7); + iScore = iScore * ((1 + (Math.min(Math.max(iAverageCommitsPerWeek - 3, 0), 7))) / 7); } // boost calculation: