# typed: false # frozen_string_literal: true require "cli/parser" require "utils/github" 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") plc = GitHub.members_by_team("Homebrew", "plc") tsc = GitHub.members_by_team("Homebrew", "tsc") linux = GitHub.members_by_team("Homebrew", "linux") other = GitHub.members_by_team("Homebrew", "maintainers") other.except!(*[plc, tsc, linux].map(&:keys).flatten.uniq) sentences = [plc, tsc, linux, other].map do |h| h.slice!(*public_members) h.each { |k, v| h[k] = "[#{v}](https://github.com/#{k})" } h.values.sort.to_sentence end readme = HOMEBREW_REPOSITORY/"README.md" content = readme.read content.gsub!(/(Homebrew's \[Project Leadership Committee.*) is .*\./, "\\1 is #{sentences[0]}.") content.gsub!(/(Homebrew's \[Technical Steering Committee.*) is .*\./, "\\1 is #{sentences[1]}.") content.gsub!(%r{(Homebrew/brew's Linux maintainers are).*\.}, "\\1 #{sentences[2]}.") content.gsub!(/(Homebrew's other current maintainers are).*\./, "\\1 #{sentences[3]}.") 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 puts "List of maintainers updated in README." end end end