diff options
-rw-r--r-- | MAINTAINERS.md | 175 | ||||
-rw-r--r-- | MAINTAINERS.toml | 301 | ||||
-rw-r--r-- | Rakefile | 3 | ||||
-rw-r--r-- | appveyor.yml | 2 | ||||
-rw-r--r-- | tasks/maintainers.rb | 211 |
5 files changed, 1 insertions, 691 deletions
diff --git a/MAINTAINERS.md b/MAINTAINERS.md deleted file mode 100644 index bf6d0b6cde..0000000000 --- a/MAINTAINERS.md +++ /dev/null @@ -1,175 +0,0 @@ -<!-- This is a generated file. Please do not edit directly --> - -# Maintainers - -This file lists how the Chef project is maintained. When making changes to the system, this -file tells you who needs to review your patch - you need a simple majority of maintainers -for the relevant subsystems to provide a :+1: on your pull request. Additionally, you need -to not receive a veto from a Lieutenant or the Project Lead. - -Check out [How Chef is Maintained](https://github.com/chef/chef-rfc/blob/master/rfc030-maintenance-policy.md#how-the-project-is-maintained) for details on the process, how to become -a maintainer, lieutenant, or the project lead. - -# Project Lead - -* [Adam Jacob](https://github.com/adamhjk) - -## Components - -## Chef Core - -Maintainers for the Chef client, Ohai, mixlibs, ChefDK, ChefSpec, Foodcritic, chefstyle, and sundry others. - -To mention the team, use @chef/client-core - -### Lieutenant - -* [Thom May](https://github.com/thommay) - -### Maintainers - -* [Adam Leff](https://github.com/adamleff) -* [Bryan McLellan](https://github.com/btm) -* [Noah Kantrowitz](https://github.com/coderanger) -* [Seth Thomas](https://github.com/cheeseplus) -* [Daniel DeLeo](https://github.com/danielsdeleo) -* [AJ Christensen](https://github.com/fujin) -* [Phil Dibowitz](https://github.com/jaymzh) -* [Jay Mundrawala](https://github.com/jaym) -* [John Keiser](https://github.com/jkeiser) -* [Jon Cowie](https://github.com/jonlives) -* [Joshua Timberman](https://github.com/jtimberman) -* [Lamont Granquist](https://github.com/lamont-granquist) -* [Ranjib Dey](https://github.com/ranjib) -* [Steven Murawski](https://github.com/smurawski) -* [Steven Danna](https://github.com/stevendanna) -* [Stuart Preston](https://github.com/stuartpreston) -* [Tim Smith](https://github.com/tas50) -* [Tom Duffield](https://github.com/tduffield) -* [Tyler Ball](https://github.com/tyler-ball) -* [Josh Hudson](https://github.com/itmustbejj) - -## Platform Specific Components - -The specific components of Chef related to a given platform - including (but not limited to) resources, providers, and the core DSL. - -## Enterprise Linux - -To mention the team, use @chef/client-enterprise-linux - -### Lieutenant - -* [Jon Cowie](https://github.com/jonlives) - -### Maintainers - -* [Phil Dibowitz](https://github.com/jaymzh) -* [Lamont Granquist](https://github.com/lamont-granquist) - -## Ubuntu - -To mention the team, use @chef/client-ubuntu - -### Lieutenant - -* [Ranjib Dey](https://github.com/ranjib) - -### Maintainers - -* [Lamont Granquist](https://github.com/lamont-granquist) -* [Tim Smith](https://github.com/tas50) -* [Thom May](https://github.com/thommay) - -## Windows - -To mention the team, use @chef/client-windows - -### Lieutenant - -* [Bryan McLellan](https://github.com/btm) - -### Maintainers - -* [Jay Mundrawala](https://github.com/jaym) -* [Kartik Cating-Subramanian](https://github.com/ksubrama) -* [Steven Murawski](https://github.com/smurawski) -* [Stuart Preston](https://github.com/stuartpreston) -* [Salim Alam](https://github.com/chefsalim) -* [Matt Wrock](https://github.com/mwrock) -* [Tim Smith](https://github.com/tas50) - -## Solaris - -To mention the team, use @chef/client-solaris - -### Lieutenant - -* [Thom May](https://github.com/thommay) - -### Maintainers - -* [Lamont Granquist](https://github.com/lamont-granquist) - -## AIX - -To mention the team, use @chef/client-aix - -### Lieutenant - -* [Lamont Granquist](https://github.com/lamont-granquist) - -## macOS - -To mention the team, use @chef/client-macos - -### Lieutenant - -* [Joshua Timberman](https://github.com/jtimberman) - -### Maintainers - -* [Tyler Ball](https://github.com/tyler-ball) -* [mikedodge04](https://github.com/mikedodge04) -* [Tim Smith](https://github.com/tas50) - -## Debian - -To mention the team, use @chef/client-debian - -### Lieutenant - -* [Thom May](https://github.com/thommay) - -### Maintainers - -* [Lamont Granquist](https://github.com/lamont-granquist) -* [Tim Smith](https://github.com/tas50) - -## Fedora - -To mention the team, use @chef/client-fedora - -### Maintainers - -* [Lamont Granquist](https://github.com/lamont-granquist) - -## openSUSE and SUSE Linux Enterprise Server - -To mention the team, use @chef/client-suse - -### Lieutenant - -* [Tim Smith](https://github.com/tas50) - -### Maintainers - -* [Lamont Granquist](https://github.com/lamont-granquist) - -## FreeBSD - -To mention the team, use @chef/client-freebsd - -### Lieutenant - -* [Amy Aronsohn](https://github.com/OnlyHaveCans) - diff --git a/MAINTAINERS.toml b/MAINTAINERS.toml deleted file mode 100644 index 8df051152d..0000000000 --- a/MAINTAINERS.toml +++ /dev/null @@ -1,301 +0,0 @@ -# -# This file is structured to be consumed by both humans and computers. -# To update the generated Markdown, run `bundle exec rake maintainers:generate` -# To synchronize the maintainers with the github teams, run `bundle exec rake maintainers:synchronize` -# It is a TOML document containing Markdown -# -[Preamble] - title = "Maintainers" - text = """ -This file lists how the Chef project is maintained. When making changes to the system, this -file tells you who needs to review your patch - you need a simple majority of maintainers -for the relevant subsystems to provide a :+1: on your pull request. Additionally, you need -to not receive a veto from a Lieutenant or the Project Lead. - -Check out [How Chef is Maintained](https://github.com/chef/chef-rfc/blob/master/rfc030-maintenance-policy.md#how-the-project-is-maintained) for details on the process, how to become -a maintainer, lieutenant, or the project lead. -""" - -[Org] - [Org.Lead] - title = "Project Lead" - person = "adamhjk" - - [Org.Components] - title = "Components" - - [Org.Components.Core] - title = "Chef Core" - team = "client-core" - text = """ -Maintainers for the Chef client, Ohai, mixlibs, ChefDK, ChefSpec, Foodcritic, chefstyle, and sundry others. -""" - - lieutenant = "thommay" - - maintainers = [ - "adamleff", - "btm", - "coderanger", - "cheeseplus", - "danielsdeleo", - "fujin", - "jaymzh", - "jaym", - "jkeiser", - "jonlives", - "jtimberman", - "lamont-granquist", - "ranjib", - "smurawski", - "stevendanna", - "stuartpreston", - "tas50", - "tduffield", - "tyler-ball", - "itmustbejj" - ] - - [Org.Components.Subsystems] - title = "Platform Specific Components" - text = """ -The specific components of Chef related to a given platform - including (but not limited to) resources, providers, and the core DSL. -""" - - [Org.Components.Subsystems."Enterprise Linux"] - title = "Enterprise Linux" - team = "client-enterprise-linux" - - lieutenant = "jonlives" - - maintainers = [ - "jaymzh", - "lamont-granquist" - ] - - [Org.Components.Subsystems.Ubuntu] - title = "Ubuntu" - team = "client-ubuntu" - - lieutenant = "ranjib" - - maintainers = [ - "lamont-granquist", - "tas50", - "thommay" - ] - - [Org.Components.Subsystems.Windows] - title = "Windows" - team = "client-windows" - - lieutenant = "btm" - maintainers = [ - "jaym", - "ksubrama", - "smurawski", - "stuartpreston", - "chefsalim", - "mwrock", - "tas50" - ] - - [Org.Components.Subsystems.Solaris] - title = "Solaris" - team = "client-solaris" - - lieutenant = "thommay" - - maintainers = [ - "lamont-granquist" - ] - - [Org.Components.Subsystems.AIX] - title = "AIX" - team = "client-aix" - - lieutenant = "lamont-granquist" - - [Org.Components.Subsystems."macOS"] - title = "macOS" - team = "client-macos" - - lieutenant = "jtimberman" - - maintainers = [ - "tyler-ball", - "mikedodge04", - "tas50" - ] - - [Org.Components.Subsystems.Debian] - title = "Debian" - team = "client-debian" - - lieutenant = "thommay" - - maintainers = [ - "lamont-granquist", - "tas50" - ] - - [Org.Components.Subsystems.Fedora] - title = "Fedora" - team = "client-fedora" - - maintainers = [ - "lamont-granquist" - ] - - [Org.Components.Subsystems.SUSE] - title = "openSUSE and SUSE Linux Enterprise Server" - team = "client-suse" - - lieutenant = "tas50" - - maintainers = [ - "lamont-granquist" - ] - - [Org.Components.Subsystems.FreeBSD] - title = "FreeBSD" - team = "client-freebsd" - - lieutenant = "OnlyHaveCans" - -[people] - [people.adamhjk] - Name = "Adam Jacob" - GitHub = "adamhjk" - - [people.adamleff] - Name = "Adam Leff" - GitHub = "adamleff" - - [people.Aevin1387] - Name = "Cory Stephenson" - GitHub = "Aevin1387" - - [people.AgentMeerkat] - Name = "Bryant Lippert" - GitHub = "AgentMeerkat" - - [people.btm] - Name = "Bryan McLellan" - GitHub = "btm" - - [people.danielsdeleo] - Name = "Daniel DeLeo" - GitHub = "danielsdeleo" - - [people.fujin] - Name = "AJ Christensen" - GitHub = "fujin" - - [people.jaymzh] - Name = "Phil Dibowitz" - GitHub = "jaymzh" - - [people.jaym] - Name = "Jay Mundrawala" - GitHub = "jaym" - - [people.jonlives] - Name = "Jon Cowie" - GitHub = "jonlives" - - [people.jtimberman] - Name = "Joshua Timberman" - GitHub = "jtimberman" - - [people.lamont-granquist] - Name = "Lamont Granquist" - GitHub = "lamont-granquist" - - [people.ranjib] - Name = "Ranjib Dey" - GitHub = "ranjib" - - [people.smurawski] - Name = "Steven Murawski" - GitHub = "smurawski" - - [people.stevendanna] - Name = "Steven Danna" - GitHub = "stevendanna" - - [people.OnlyHaveCans] - Name = "Amy Aronsohn" - GitHub = "OnlyHaveCans" - IRC = "tBunnyMan" - Twitter = "OnlyHaveCans" - - [people.thommay] - Name = "Thom May" - GitHub = "thommay" - IRC = "thom" - Twitter = "thommay" - - [people.tyler-ball] - Name = "Tyler Ball" - GitHub = "tyler-ball" - - [people.ksubrama] - Name = "Kartik Cating-Subramanian" - GitHub = "ksubrama" - - [people.coderanger] - Name = "Noah Kantrowitz" - GitHub = "coderanger" - - [people.chefsalim] - Name = "Salim Alam" - GitHub = "chefsalim" - - [people.mwrock] - Name = "Matt Wrock" - GitHub = "mwrock" - - [people.tas50] - Name = "Tim Smith" - GitHub = "tas50" - Twitter = "tas50" - IRC = "tas50" - - [people.jkeiser] - Name = "John Keiser" - GitHub = "jkeiser" - - [people.stuartpreston] - Name = "Stuart Preston" - GitHub = "stuartpreston" - - [people.jjasghar] - Name = "JJ Asghar" - GitHub = "jjasghar" - Twitter = "jjasghar" - IRC = "j^2" - - [people.thehar] - Name = "Harley Alaniz" - GitHub = "thehar" - - [people.tduffield] - Name = "Tom Duffield" - GitHub = "tduffield" - - [people.mikedodge04] - Name = "mikedodge04" - GitHub = "mikedodge04" - Twitter = "mikedodge04" - IRC = "mikedodge04" - - [people.itmustbejj] - Name = "Josh Hudson" - GitHub = "itmustbejj" - Twitter = "itmustbejj" - IRC = "itmustbejj" - - [people.cheeseplus] - Name = "Seth Thomas" - GitHub = "cheeseplus" @@ -1,7 +1,7 @@ # # Author:: Adam Jacob (<adam@chef.io>) # Author:: Daniel DeLeo (<dan@chef.io>) -# Copyright:: Copyright 2008-2018, Chef Software Inc. +# Copyright:: Copyright 2008-2019, Chef Software Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,7 +18,6 @@ # require_relative "tasks/rspec" -require_relative "tasks/maintainers" require_relative "tasks/dependencies" require_relative "tasks/announce" diff --git a/appveyor.yml b/appveyor.yml index ec74a93871..78a644134b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -25,8 +25,6 @@ skip_commits: message: /Bump version to [0-9.]+ by Chef Expeditor/ # if ONLY the files listed below are changed in a commit, skip files: - - MAINTAINERS.md - - MAINTAINERS.toml - CHANGELOG.md - RELEASE_NOTES.md diff --git a/tasks/maintainers.rb b/tasks/maintainers.rb deleted file mode 100644 index 7465f7ba9e..0000000000 --- a/tasks/maintainers.rb +++ /dev/null @@ -1,211 +0,0 @@ -# -# Copyright:: Copyright 2015-2018, Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "rake" - -SOURCE = File.join(File.dirname(__FILE__), "..", "MAINTAINERS.toml") -TARGET = File.join(File.dirname(__FILE__), "..", "MAINTAINERS.md") - -# The list of repositories that teams should own -REPOSITORIES = ["chef/chef", "chef/chef-dk", "chef/chef-census", "chef/chef-repo", - "chef/client-docs", "chef/ffi-yajl", "chef/libyajl2-gem", - "chef/mixlib-authentication", "chef/mixlib-cli", - "chef/mixlib-config", "chef/mixlib-install", "chef/mixlib-log", - "chef/mixlib-shellout", "chef/ohai", "chef/omnibus-chef"].freeze - -begin - require "tomlrb" - require "octokit" - require "pp" - - namespace :maintainers do - task default: :generate - - desc "Generate MarkDown version of MAINTAINERS file" - task :generate do - out = "<!-- This is a generated file. Please do not edit directly -->\n\n" - out << "# " + source["Preamble"]["title"] + "\n\n" - out << source["Preamble"]["text"] + "\n" - - # The project lead is a special case - out << "# " + source["Org"]["Lead"]["title"] + "\n\n" - out << format_person(source["Org"]["Lead"]["person"]) + "\n\n" - - out << format_components(source["Org"]["Components"]) - File.open(TARGET, "w") do |fn| - fn.write out - end - end - - desc "Synchronize GitHub teams" - # there's a special @chef/client-maintainers team that's everyone - # and then there's a team per component - task :synchronize do - Octokit.auto_paginate = true - get_github_teams - prepare_teams(source["Org"]["Components"].dup) - sync_teams! - end - end - - def github - @github ||= Octokit::Client.new(netrc: true) - end - - def source - @source ||= Tomlrb.load_file SOURCE - end - - def teams - @teams ||= { "client-maintainers" => { "title" => "Client Maintainers" } } - end - - def add_members(team, name) - teams["client-maintainers"]["members"] ||= [] - teams["client-maintainers"]["members"] << name - teams[team] ||= {} - teams[team]["members"] ||= [] - teams[team]["members"] << name - end - - def set_team_title(team, title) - teams[team] ||= {} - teams[team]["title"] = title - end - - def gh_teams - @gh_teams ||= {} - end - - # we have to resolve team names to ids. While we're at it, we can get the privacy - # setting, so we know whether we need to update it - def get_github_teams - github.org_teams("chef").each do |team| - gh_teams[team[:slug]] = { "id" => team[:id], "privacy" => team[:privacy] } - end - end - - def get_github_team(team) - github.team_members(gh_teams[team]["id"]).map do |member| - member[:login] - end.sort.uniq.map(&:downcase) - rescue - [] - end - - def create_team(team) - puts "creating new github team: #{team} with title: #{teams[team]["title"]} " - t = github.create_team("chef", name: team, description: teams[team]["title"], - privacy: "closed", repo_names: REPOSITORIES, - accept: "application/vnd.github.ironman-preview+json") - gh_teams[team] = { "id" => t[:id], "privacy" => t[:privacy] } - end - - def compare_teams(current, desired) - # additions are the subtraction of the current state from the desired state - # deletions are the subtraction of the desired state from the current state - [desired - current, current - desired] - end - - def prepare_teams(cmp) - %w{text paths}.each { |k| cmp.delete(k) } - if cmp.key?("team") - team = cmp.delete("team") - add_members(team, cmp.delete("lieutenant")) if cmp.key?("lieutenant") - add_members(team, cmp.delete("maintainers")) if cmp.key?("maintainers") - set_team_title(team, cmp.delete("title")) - else - %w{maintainers lieutenant title}.each { |k| cmp.delete(k) } - end - cmp.each_value { |v| prepare_teams(v) } - end - - def update_team(team, additions, deletions) - create_team(team) unless gh_teams.key?(team) - update_team_privacy(team) - add_team_members(team, additions) - remove_team_members(team, deletions) - rescue => e - puts "failed for #{team}: #{e.message}" - end - - def update_team_privacy(team) - return if gh_teams[team]["privacy"] == "closed" - puts "Setting #{team} privacy to closed from #{gh_teams[team]["privacy"]}" - github.update_team(gh_teams[team]["id"], privacy: "closed", - accept: "application/vnd.github.ironman-preview+json") - end - - def add_team_members(team, additions) - additions.each do |member| - puts "Adding #{member} to #{team}" - github.add_team_membership(gh_teams[team]["id"], member, role: "member", - accept: "application/vnd.github.ironman-preview+json") - end - end - - def remove_team_members(team, deletions) - deletions.each do |member| - puts "Removing #{member} from #{team}" - github.remove_team_membership(gh_teams[team]["id"], member, - accept: "application/vnd.github.ironman-preview+json") - end - end - - def sync_teams! - teams.each do |name, details| - current = get_github_team(name) - desired = details["members"].flatten.sort.uniq.map(&:downcase) - additions, deletions = compare_teams(current, desired) - update_team(name, additions, deletions) - end - end - - def get_person(person) - source["people"][person] - end - - def format_components(cmp) - out = "## " + cmp.delete("title") + "\n\n" - out << cmp.delete("text") + "\n" if cmp.key?("text") - out << "To mention the team, use @chef/#{cmp.delete("team")}\n\n" if cmp.key?("team") - if cmp.key?("lieutenant") - out << "### Lieutenant\n\n" - out << format_person(cmp.delete("lieutenant")) + "\n\n" - end - out << format_maintainers(cmp.delete("maintainers")) + "\n" if cmp.key?("maintainers") - cmp.delete("paths") - cmp.each_value { |v| out << format_components(v) } - out - end - - def format_maintainers(people) - o = "### Maintainers\n\n" - people.each do |p| - o << format_person(p) + "\n" - end - o - end - - def format_person(person) - mnt = get_person(person) - "* [#{mnt["Name"]}](https://github.com/#{mnt["GitHub"]})" - end - -rescue LoadError - STDERR.puts "\n*** TomlRb not available.\n\n" -end |