From 86a22c1358fdb2115aa5cc3fadc6330dd41d0b91 Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Sun, 5 Jan 2025 14:12:51 -0800 Subject: [PATCH 1/5] check custom field for github username Signed-off-by: Jess Frazelle --- app/lib/github_badges.rb | 16 +++++++++++++++- config/settings.yml | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/lib/github_badges.rb b/app/lib/github_badges.rb index cdbf846..5e45289 100644 --- a/app/lib/github_badges.rb +++ b/app/lib/github_badges.rb @@ -11,9 +11,12 @@ module GithubBadges COMMITTER_BADGE_NAME_GOLD ||= "Amazing Committer" class Granter - def initialize(emails) + def initialize(emails, custom_user_field) @emails = emails @badges = [] + # The custom user field that stores the user's GitHub username, if + # specified. + @custom_user_field = custom_user_field end def add_badge(badge, as_title:, threshold:) @@ -52,6 +55,17 @@ def grant! .map { |row| [row.user, row.info["nickname"]] } .to_h + # If we don't have any screen names, look in the custom user field, if + # specified. + if screen_names.empty? && @custom_user_field + screen_names = + UserCustomField + .where(name: @custom_user_field) + .where("value IN (?)", github_name_email.keys) + .includes(:user) + .map { |row| [row.user, row.value] } + .to_h + screen_names.each do |user, screen_name| user_emails[user] ||= [] user_emails[user] << github_name_email[screen_name] diff --git a/config/settings.yml b/config/settings.yml index fae65e7..914784e 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -29,3 +29,5 @@ discourse_github: github_gold_badge_min_commits: default: 250 min: 1 + github_user_custom_field: + default: "" From 72882c12ec3ab83a2651caf1d0061cc0345182e5 Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Sun, 5 Jan 2025 14:14:37 -0800 Subject: [PATCH 2/5] fixes Signed-off-by: Jess Frazelle --- app/lib/github_badges.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/lib/github_badges.rb b/app/lib/github_badges.rb index 5e45289..0d3a9fe 100644 --- a/app/lib/github_badges.rb +++ b/app/lib/github_badges.rb @@ -97,7 +97,7 @@ def self.grant_committer_badges! bronze, silver, gold = committer_badges - granter = GithubBadges::Granter.new(emails) + granter = GithubBadges::Granter.new(emails, SiteSetting.custom_user_field) granter.add_badge(bronze, as_title: false, threshold: 1) granter.add_badge(silver, as_title: true, threshold: 25) granter.add_badge(gold, as_title: true, threshold: 1000) @@ -113,7 +113,7 @@ def self.grant_contributor_badges! bronze, silver, gold = contributor_badges - granter = GithubBadges::Granter.new(emails) + granter = GithubBadges::Granter.new(emails, SiteSetting.custom_user_field) granter.add_badge(bronze, as_title: false, threshold: 1) granter.add_badge( silver, From c52e0fa51c0be94a11147c8faaaa6320f9c2d4de Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Sun, 5 Jan 2025 14:25:58 -0800 Subject: [PATCH 3/5] fixes Signed-off-by: Jess Frazelle --- app/lib/github_badges.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/lib/github_badges.rb b/app/lib/github_badges.rb index 0d3a9fe..9d74961 100644 --- a/app/lib/github_badges.rb +++ b/app/lib/github_badges.rb @@ -65,6 +65,7 @@ def grant! .includes(:user) .map { |row| [row.user, row.value] } .to_h + end screen_names.each do |user, screen_name| user_emails[user] ||= [] From ef70464ed199d39d3418d332d9d14dc99124f975 Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Sun, 5 Jan 2025 14:42:44 -0800 Subject: [PATCH 4/5] updates Signed-off-by: Jess Frazelle --- app/lib/github_badges.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/lib/github_badges.rb b/app/lib/github_badges.rb index 9d74961..28d0848 100644 --- a/app/lib/github_badges.rb +++ b/app/lib/github_badges.rb @@ -98,7 +98,7 @@ def self.grant_committer_badges! bronze, silver, gold = committer_badges - granter = GithubBadges::Granter.new(emails, SiteSetting.custom_user_field) + granter = GithubBadges::Granter.new(emails, SiteSetting.github_user_custom_field) granter.add_badge(bronze, as_title: false, threshold: 1) granter.add_badge(silver, as_title: true, threshold: 25) granter.add_badge(gold, as_title: true, threshold: 1000) @@ -114,7 +114,7 @@ def self.grant_contributor_badges! bronze, silver, gold = contributor_badges - granter = GithubBadges::Granter.new(emails, SiteSetting.custom_user_field) + granter = GithubBadges::Granter.new(emails, SiteSetting.github_user_custom_field) granter.add_badge(bronze, as_title: false, threshold: 1) granter.add_badge( silver, From 407a65e24b72075bd38be28ee52379087ff05fa1 Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Sun, 5 Jan 2025 14:43:33 -0800 Subject: [PATCH 5/5] update locales Signed-off-by: Jess Frazelle --- config/locales/server.en.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 0f77725..e7bbb68 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -11,6 +11,7 @@ en: github_badges_repos: "URLs of the GitHub repos to scan for contributions and commits" github_silver_badge_min_commits: "Minumum number of commits for silver badge" github_gold_badge_min_commits: "Minumum number of commits for gold badge" + github_user_custom_field: "Optional custom field that stores the GitHub username for verification" errors: invalid_badge_repo: "You must provide a GitHub URL or the repository name in the format github_user/repository_name"