# Docker maintainers file
#
# This file describes who runs the docker/cli project and how.
# This is a living document - if you see something out of date or missing, speak up!
#
# It is structured to be consumable by both humans and programs.
# To extract its contents programmatically, use any TOML-compliant
# parser.
#
# This file is compiled into the MAINTAINERS file in docker/opensource.
#
[Org]

	[Org."Core maintainers"]

	# The Core maintainers are the ghostbusters of the project: when there's a problem others
	# can't solve, they show up and fix it with bizarre devices and weaponry.
	# They have final say on technical implementation and coding style.
	# They are ultimately responsible for quality in all its forms: usability polish,
	# bugfixes, performance, stability, etc. When ownership  can cleanly be passed to
	# a subsystem, they are responsible for doing so and holding the
	# subsystem maintainers accountable. If ownership is unclear, they are the de facto owners.

		people = [
			"albers",
			"cpuguy83",
			"rumpl",
			"silvin-lubecki",
			"stevvooe",
			"thajeztah",
			"tibor",
			"tonistiigi",
			"vdemeester",
			"vieux",
		]

	[Org.Curators]

	# The curators help ensure that incoming issues and pull requests are properly triaged and
	# that our various contribution and reviewing processes are respected. With their knowledge of
	# the repository activity, they can also guide contributors to relevant material or
	# discussions.
	#
	# They are neither code nor docs reviewers, so they are never expected to merge. They can
	# however:
	# - close an issue or pull request when it's an exact duplicate
	# - close an issue or pull request when it's inappropriate or off-topic

		people = [
			"bsousaa",
			"neersighted",
			"programmerq",
			"sam-thibault",
			"vvoland"
		]

	[Org.Alumni]

	# This list contains maintainers that are no longer active on the project.
	# It is thanks to these people that the project has become what it is today.
	# Thank you!

		people = [
			# Before becoming a maintainer, Daniel Nephin was a core contributor
 			# to "Fig" (now known as Docker Compose). As a maintainer for both the
 			# Engine and Docker CLI, Daniel contributed many features, among which
 			# the `docker stack` commands, allowing users to deploy their Docker
 			# Compose projects as a Swarm service.
 			"dnephin",
		]

[people]

# A reference list of all people associated with the project.
# All other sections should refer to people by their canonical key
# in the people section.

	# ADD YOURSELF HERE IN ALPHABETICAL ORDER

	[people.albers]
	Name = "Harald Albers"
	Email = "github@albersweb.de"
	GitHub = "albers"

	[people.bsousaa]
	Name = "Bruno de Sousa"
	Email = "bruno.sousa@docker.com"
	GitHub = "bsousaa"

	[people.cpuguy83]
	Name = "Brian Goff"
	Email = "cpuguy83@gmail.com"
	GitHub = "cpuguy83"

	[people.dnephin]
	Name = "Daniel Nephin"
	Email = "dnephin@gmail.com"
	GitHub = "dnephin"

	[people.neersighted]
	Name = "Bjorn Neergaard"
	Email = "bneergaard@mirantis.com"
	GitHub = "neersighted"

	[people.programmerq]
	Name = "Jeff Anderson"
	Email = "jeff@docker.com"
	GitHub = "programmerq"

	[people.rumpl]
	Name = "Djordje Lukic"
	Email = "djordje.lukic@docker.com"
	GitHub = "rumpl"

	[people.sam-thibault]
	Name = "Sam Thibault"
	Email = "sam.thibault@docker.com"
	GitHub = "sam-thibault"

	[people.silvin-lubecki]
	Name = "Silvin Lubecki"
	Email = "silvin.lubecki@docker.com"
	GitHub = "silvin-lubecki"

	[people.stevvooe]
	Name = "Stephen Day"
	Email = "stevvooe@gmail.com"
	GitHub = "stevvooe"

	[people.thajeztah]
	Name = "Sebastiaan van Stijn"
	Email = "github@gone.nl"
	GitHub = "thaJeztah"

	[people.tibor]
	Name = "Tibor Vass"
	Email = "tibor@docker.com"
	GitHub = "tiborvass"

	[people.tonistiigi]
	Name = "Tõnis Tiigi"
	Email = "tonis@docker.com"
	GitHub = "tonistiigi"

	[people.vdemeester]
	Name = "Vincent Demeester"
	Email = "vincent@sbr.pm"
	GitHub = "vdemeester"

	[people.vieux]
	Name = "Victor Vieux"
	Email = "vieux@docker.com"
	GitHub = "vieux"

	[people.vvoland]
	Name = "Paweł Gronowski"
	Email = "pawel.gronowski@docker.com"
	GitHub = "vvoland"

