This document defines the governance structure for the Paketo project. Initial governance RFC can be found here
Paketo consists of two github organizations:
paketo-buildpacks
paketo-community
The paketo-buildpacks
github organization consists of actively supported buildpacks, libraries etc.
The paketo-community
github organization is designed as a staging ground for acceptance into the officially supported paketo-buildpacks
org. Promotion from paketo-community
into paketo-buildpacks
requires an official rfc
.
The paketo contribution model is divided into the following, Subteams & Roles.
-
A subteam is a group responsible for some set of repositories in the
paketo-buildpacks
org. This limits the repositories any individual is allowed to take action in. -
Roles are Contributor, Maintainer, And Steering Committee member. This limits what kinds of actions an individual may be allowed to take on a repository. The Contributor and Maintainer roles are scoped to a subteam, while a Steering Committee member is an organization wide role.
Subteams are responsible for maintaining some set of repositories under the paketo-buildpacks
org. A natural split is into "Language Teams" responsible for maintaining all buildpack & specification changes that pertain to a particular language ecosystem.
Subteams have ownership & voting power over relevant rfcs
.
Both maintainers, contributors & steering committee members can be members on any number of subteams.
Each team is additionally responsible for maintaining relevant documentation at paketo.io.
The following table lists the roles we use within the Paketo community. The table describes:
- General responsibilities expected by individuals in each role
- Requirements necessary to join or stay in a given role
- How the role manifests in terms of permissions and privileges.
Role | Responsibilities | Requirements | Privileges | Scope |
---|---|---|---|---|
Community participant | Follow the CFF Code of Conduct | None |
Can submit PRs and issues Can join CF Slack workspace Can take part in community discussions |
GitHub Organization |
Contributor | Inherits from Community participant Role | |||
Regular active contributor in the community Triage issues in their subteam |
Has made multiple contributions to the project |
Member of the GitHub paketo-buildpacks (and possibly the paketo-community) orgs Member of the Paketo Slack workspace May review, approve PRs (non-binding), and merge approved PRs. May create branches |
Paketo Subteam | |
Maintainer | Inherits from Contributor Role | |||
Review and approve (binding) PRs Ensure contributions align with project goals and meet the project's quality standards Provide direction and set goals for their subteam Mentor new contributors |
Must be an existing contributor Highly experienced and active reviewer and contributor to an area |
Can merge PRs May vote on RFCS that affect their subteams |
Paketo Subteam | |
Steering Committee | Inherits from Maintainer Role | |||
Set priorities and roadmap for the project Mentor new contributors and maintainers Vote on governace, role, RFCs, and other project-wide changes |
Must be an existing maintainer Highly active maintainer and participant in multiple functional areas |
Org-wide permissions |
Github Org |
You do not need to be a member of the Paketo team to help. Anyone can help by using and talking about Paketo Buildpacks, participating in discussions, answering questions on Slack/Stack Overflow, opening issues, submitting PRs, etc... All of these are fantastic and welcome contributions to the community.
Contributors are those who make regular contributions to the project (documentation, code reviews, responding to issues, participation in proposal discussions, contributing code, etc.).
New contributors may be self-nominated or nominated by existing contributors, and must be elected by a supermajority of that project’s maintainers. Contributors may review and approve PRs (non-binding), merge approved PRs, and create branches.
Maintainers are in charge of the day to day maintenance of the team's projects.
They review and approve (binding) PRs, merge PRs, and may vote on RFCS that affect their subteams, ensuring contributions align with project goals and meet the project's quality standards.
New maintainers must already be contributors, must be nominated by an existing maintainer, and must be elected by a supermajority of the current team's maintainers. Likewise, maintainers can be removed by a supermajority of the current team's maintainers or can resign by notifying one of the current team's maintainers.
In extenuating circumstances, i.e. long term absence of a maintainer, steering committee members may act as maintainers of any team in a voting capacity.
The Steering Committee Members are responsible for the direction of the project (roadmap), subteam leadership, the spec, and cross-cutting concerns such as:
- Voting on repo's being added to this org along with affected Maintainers
- Voting on role changes (eg adding new Steering Committee member)
- Voting on updating this document
- Voting on RFCs that impact any of the above responsibilities.
Supermajority: Greater than or equal to 66%.