# typed: false # frozen_string_literal: true require "cli/parser" require "utils/github" require "dev-cmd/man" module Homebrew extend T::Sig module_function sig { returns(CLI::Parser) } def update_maintainers_args Homebrew::CLI::Parser.new do description <<~EOS Update the list of maintainers in the `Homebrew/brew` README. EOS named_args :none end end def update_maintainers update_maintainers_args.parse # We assume that only public members wish to be included in the README public_members = GitHub.public_member_usernames("Homebrew") members = { plc: GitHub.members_by_team("Homebrew", "plc"), tsc: GitHub.members_by_team("Homebrew", "tsc"), linux: GitHub.members_by_team("Homebrew", "linux"), } members[:other] = GitHub.members_by_team("Homebrew", "maintainers") .except(*members.values.map(&:keys).flatten.uniq) sentences = {} members.each do |group, hash| hash.slice!(*public_members) hash.each { |login, name| hash[login] = "[#{name}](https://github.com/#{login})" } sentences[group] = hash.values.sort.to_sentence end readme = HOMEBREW_REPOSITORY/"README.md" content = readme.read content.gsub!(/(Homebrew's \[Project Leadership Committee.*) is .*\./, "\\1 is #{sentences[:plc]}.") content.gsub!(/(Homebrew's \[Technical Steering Committee.*) is .*\./, "\\1 is #{sentences[:tsc]}.") content.gsub!(/(Homebrew's Linux maintainers are).*\./, "\\1 #{sentences[:linux]}.") content.gsub!(/(Homebrew's other current maintainers are).*\./, "\\1 #{sentences[:other]}.") File.open(readme, "w+") { |f| f.write(content) } diff = system_command "git", args: [ "-C", HOMEBREW_REPOSITORY, "diff", "--exit-code", "README.md" ] if diff.status.success? puts "No changes to list of maintainers." else Homebrew.regenerate_man_pages(preserve_date: true, quiet: true) puts "List of maintainers updated in the README and the generated man pages." end end end