-
Notifications
You must be signed in to change notification settings - Fork 83
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
harbor governance model #1
Changes from 2 commits
89faa64
266bfcb
e0232f7
7b55e9f
56d2fd4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,220 @@ | ||
# Governance Constitution | ||
|
||
steven-zou marked this conversation as resolved.
Show resolved
Hide resolved
|
||
## Overview | ||
|
||
Harbor is committed to building an open, evolutionary, high-efficiency and self-governance OSS community to provide cloud-native registry relevant tools and services. The whole community is run and managed by this constitution including the following chapters: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What do you think about this? Harbor, a Cloud Native Computing Foundation (CNCF) project, is committed to building an open, inclusive, productive and self-governing open source community focused on building a high-quality cloud native registry. The community is governed by this document with the goal of defining how community should work together to achieve this goal. This document covers the following topics: |
||
|
||
* **Code Repositories:** List the code repositories governed by Harbor community. | ||
* **Community Roles:** Define roles of Harbor community affiliated parties. | ||
* **Technical Maintainer Board:** Define how to build and how does the technical maintainer board work, which is the top management institution of the whole community. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Projects like Kubernetes have many levels of both contributors and project authority positions, including a I propose, in lieu of a steering committee, that we approach this problem the way that the NATS folks did. This model presents two levels of maintainership: maintainers and core maintainers. I've defined the two levels in more detail below. It's worth noting that the ideas and definitions were very much inspired (ahem, copied and pasted 😄 ) from our friends in the NAT project. tl;dr – let's remove Technical Maintainer Board. Thoughts? |
||
* **Proposal Management:** How to manage the proposals and plan the new release. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. s/Management/Process/ |
||
* **Codebase Changes Management:** Define the process of handling codebase changes. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let's rephrase this as follows: Contribution Process: Brief discussion on how to contribute to Harbor. |
||
|
||
## Code Repositories | ||
|
||
So far, the following code repositories are governed by Harbor community and maintained under the `goharbor` namespace. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove "So far, " |
||
|
||
* **Harbor:** The code base of Harbor registry project. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. goharbor/harbor: Main Harbor codebase |
||
* **Harbor-helm:** The helm chart of the Harbor registry. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. goharbor/helm: Helm chart for easy deployment of Harbor |
||
* **community:** A repository to keep community related material like proposals, introduction slides, community governance documents and community meeting minutes etc. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. goharbor/community: Used to store community-related material–e.g., proposals, presentation slides, governance documents, community meeting minutes, etc. |
||
|
||
## Community Roles | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This section reads very much like an IETF draft proposal – e.g., IS, MUST, SHOULD, etc. I suppose this precedence was set in K8s, though (https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md), but I'd propose instead that we simplify as much as possible.
|
||
|
||
The participants of Harbor community may have different roles: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Propose we remove lines 23 - 37 |
||
|
||
* **User** | ||
* User IS a person or an organization adopting and using Harbor as cloud-native registry. | ||
* **Contributor** | ||
* Contributor is a GitHub user who HAS at least one commit merged to Harbor repositories. | ||
* **Active Contributor** | ||
* Active contributor MUST be a contributor first. | ||
* Active contributor SHOULD have continuous contributions in a reasonable period (e.g: a release period). | ||
* Active contributor SHOULD be top **30** in the GitHub contributor rank list of the governed repositories. | ||
* **Maintainer** | ||
* Strong willing to take more responsibilities of community management work | ||
* Maintainer MUST be a active contributor | ||
* Member of TMB | ||
* Generated by the nomination process. | ||
|
||
## Technical Maintainer Board (TMB) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Propose that we remove in lieu of two maintainer levels (see comment above). |
||
|
||
Technical maintainer board (TMB) is the top management institution of the whole Harbor community. TMB carries the mission of promoting and strengthening the community, leading the development direction of the community and maintaining the healthy growth of the community. | ||
|
||
### Responsibilities | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I propose we remove this section and replace it with definition of the two levels of maintainership: MaintainersThere are two roles that convey project leadership: maintainers and core maintainers. Core Maintainers: Responsible for the overall health and direction of the project; final reviewers of PRs and responsible for relases |
||
|
||
The Harbor community maintainers are responsible for: | ||
|
||
* Maintaining the mission, vision, values and roadmap of the project(s) | ||
* Refining the governance model/workflow of the community if needed | ||
* Defining and reviewing the release plan | ||
* Reviewing the tech proposals from community | ||
* Controlling the PRs | ||
* Handling code of conduct violations | ||
* Deciding what community projects can be referred by Harbor | ||
* Managing the memberships of TMB | ||
* Hosting the community calls | ||
* Any other community-related stuff needs decision making | ||
|
||
### Scale and Structure | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I propose we remove |
||
|
||
* TMB is formed by `M` maintainers, `M` is an odd number between **5** and **15**. | ||
* **One** of the maintainer will take the convener role to coordinate the TMB related activities. | ||
|
||
### Membership | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Propose that we simplify this section; how about the following? SupermajorityA supermajority is defined as two-thirds of members in the group (e.g., non-core maintainers or core maintainers) that require the majority. Total MaintainershipTotal maintainership is defined as the union of maintainers and core maintainers. MaintainersNew maintainers must be nominated by an existing maintainer or core maintainer and must be elected by a supermajority of total maintainership. Likewise, maintainers can be removed by a supermajority of the total maintainership or can resign by notifying the core maintainers. Core MaintainersNomination for core maintainership requires (a) a nomination by an existing core maintainer, and (b) election by a supermajority of the core maintainer group. Likewise, maintainers can be removed by a supermajority core maintainer vote or can resign by notifying the core maintainers. Decision MakingIdeally, all project decisions are resolved by consensus. If impossible, any maintainer may call a vote. Unless otherwise specified in this document, any vote will be decided by a supermajority of the total maintainership, with a requirement of at least one core maintainer voting. Votes by maintainers (either core or non-core) belonging to the same company will count as one vote; e.g., 4 maintainers employed by company |
||
|
||
The following principles are applied to manage the membership of the TMB: | ||
|
||
* New member | ||
* Nominated by an existing member as a `maintainer` candidate | ||
* Nomination should be reviewed and approved by TMB via **[voting](#work-process)** | ||
* Tenure | ||
* The membership has limited tenure | ||
* Full period is **2** years | ||
* Membership ending | ||
* Step down by notifying the board with mails | ||
* If the maintainer criteria is broken, a **[voting](#work-process)** should be raised to determine whether or not end the membership. | ||
* Renew | ||
* If membership of one maintainer is ended in advance, | ||
* Get a backfill by triggering the `New member` process. | ||
* If the full tenure is ended and the maintainer is still willing to be in, | ||
* The membership can be renewed after reviewing. | ||
* Document | ||
* Memberships of maintainers are stored in the [MAINTAINER.md][./MAINTAINER.md] document | ||
|
||
### Work Process | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I propose we remove |
||
|
||
* **Voting** is the primary way to make decision in TMB | ||
* Each `maintainer` of TMB has only **1** vote | ||
* Two different approval models are supported to cover the review requests with different weight | ||
* **[super-majority](https://en.wikipedia.org/wiki/Supermajority#Two-thirds_vote) vote**: A review request can be approved only and only more than **2/3** maintainers vote `YES`. The follow topics should follow this model: | ||
* Changes to mission, vision, values and roadmap of the project(s) | ||
* Changes to governance model/workflow of the community | ||
* Release plan | ||
* **[majority vote](https://en.wikipedia.org/wiki/Majority#Majority_vote) vote**: A review request can be approved only and only more than **1/2** maintainers vote `YES`: | ||
* All other topics excluding above ones can follow this model | ||
* Follow the below process to review community topics | ||
* Convener or a maintainer originates a review request with any of the following ways | ||
* TMB IM channel (private slack channel #harbor-maintainers under CNCF workspace) | ||
* TMB maillist ([email protected]) | ||
* TMB Regular calls | ||
* Discuss and comment the review request | ||
* Launch a vote activity and collect voting results by the request originator | ||
* Update the status of the request to represent the right voting result | ||
* Meet in TMB Regular calls and discuss general topics if necessary | ||
|
||
### Initial TMB members selection | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Propose we remove. List of maintainers should be defined in https://github.com/goharbor/harbor/blob/master/OWNERS.md |
||
|
||
The maintainers of initial TMB are from the following different sources: | ||
|
||
* **4** from VMware Harbor founder team | ||
* **3** from active contributors of different organizations | ||
* **1** from CaiCloud | ||
* **1** from HylandSoftware | ||
* **1** from Tencent | ||
|
||
This accounts for a total of **7** initial maintainers. | ||
|
||
## Proposal Management | ||
|
||
Proposal is the only way to request applying changes to the projects governed by the Harbor community. The project release plans should also be built based on the `accepted` proposals. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd suggest the following wording: One of the most important aspects in any open source community is the concept of proposals. Large changes to the codebase and / or new features should be preceded by a proposal in our community repo. This process allows for all members of the community to weigh in on the concept (including the technical details), share their comments and ideas, and even offer to help. It also ensures that members are not duplicating work or inadvertently stepping on toes by making large conflicting changes. The project roadmap is defined by accepted proposals. Proposals should cover the high-level objectives, use cases, and technical recommendations on how to implement. In general, the community member interested in implementing the proposal should be either deeply engaged in the proposal process or be the author of the proposal {him,her}self. See this PR as a good example of a proposal. |
||
|
||
### Scope | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I propose we remove |
||
|
||
A proposal can cover one of the following different kinds of change requests: | ||
|
||
* Changes/enhancements to the existing features | ||
* New features | ||
* System integrations | ||
* Other innovation ideas | ||
|
||
### Template | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I propose we remove |
||
|
||
Each proposal should include clear and concrete descriptions of the following topics: | ||
|
||
* Header | ||
* The authors of the proposal | ||
* GitHub ID | ||
* company name if have | ||
* The created time stamp | ||
* The last updated time stamp | ||
* The `epic` issue link with number if it is already under development | ||
* The motivations of or the related problem to the proposal | ||
* The technical background of the proposal | ||
* The main idea of the proposal solution | ||
* The architecture/design of the proposal solution | ||
* Additional contexts related with the proposal | ||
|
||
Here is a good [proposal example](https://github.com/goharbor/community/pull/4). | ||
|
||
### Format | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Propose we remove |
||
The proposal should be documented as a separated markdown file containing the relevant sections described in the above [Template](#template) chapter and pushed to the `proposals` folder in the [community](https://github.com/goHarbor/community) repository via PR. The name of the file should follow the name pattern `<short meaningful words joined by '-'>_proposal.md`, e.g: `clear-old-tags-with-policies_proposal.md`. | ||
|
||
### Work flow | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Propose we remove |
||
|
||
To raise a proposal, | ||
|
||
* Fork the [community](https://github.com/goHarbor/community) repository to your namespace if you have not do that yet | ||
* Sync the main branch of your forked repository with the upstream repository to confirm merging the latest updates | ||
* Create a new branch to track your work | ||
* Create a new markdown file with a proper name and complete the contents by following the above specs defined in [Template](#template) | ||
* Raise a new PR to the upstream `master` branch with proper comments | ||
|
||
The TMB will pick up the submitted PR at proper time and start the discussion and reviewing process. The related comments will be posted under the PR. The authors of the proposal should continuously apply changes to the PR if required by the TMB and the authors accept it. If authors have different opinions, they can discuss it with the TMD in the comment threads of the PR. | ||
|
||
The proposal PR can be marked with different status labels to represent the status of the proposal: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I propose we create a new section called Proposal Lifecycle to discuss the various steps in the proposal process. |
||
|
||
* **New**: Proposal is just created | ||
* **Reviewing**: Proposal is under reviewing and discussion | ||
* **Accepted**: Proposal is reviewed and voted to accept | ||
* **Rejected**: Proposal is reviewed but not enough votes got | ||
|
||
If the status is marked to `Accepted`, the PR will be merged into the upstream repository and the proposal document will be saved. | ||
|
||
If the status is marked to `Rejected`, the PR will be directly closed, the proposal will be discarded. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. s/discarded/archived/ |
||
|
||
If the `Accepted` proposal is pick up by community contributors to do the development work, an `epic` issue should be created to drill down and track the related development tasks. The issue info should be updated to the proposal document. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Propose we remove lines 177 through end of document |
||
|
||
If the proposal is successfully implemented and delivered, the related proposal document should be moved to the `delivered` sub folder under the `proposal` folder. Proposal being delivered means: | ||
|
||
* The implemented code is merged to the codebase of the governed repositories via PRs | ||
|
||
If the proposal is failed to deliver for some reasons, the related proposal document should be moved to the `failed` sub folder under the `proposal` folder. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If dev is stopped due to some reason, does it mean the proposal does not make sense? I imagine in some cases, it should be put back to "backlog" There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe not! There are many reasons like resource limitations or organization changes of the contributors can cause development failed. Moving them to the |
||
|
||
The proposals under the sub folder `new` can be treated as a proposal pool, community contributors can pick up from this pool if they want to do contributions to Harbor community when creating the release plan. | ||
|
||
Adhoc picking up should not be supported now. | ||
|
||
## Codebase Changes Management | ||
|
||
Any changes to the codebase of governed repositories MUST be done through the PRs. | ||
|
||
* The PRS should match the following criteria: | ||
* PR MUST have concrete and clear description of what work has been done in the PR | ||
* All the commits under the PR SHOULD target the same work declared in the above description | ||
* All the commits under the PR MUST have [meaningful commit messages](http://chris.beams.io/posts/git-commit/). | ||
* All the checks SHOULD passed | ||
* DCO check (required) | ||
* CI/CD pipelines (required) | ||
* Codacy quality review (optional) | ||
* The PRs can be reviewed and commented by any community contributors | ||
* The PRs can be only approved and merged with at least **2** approvals of maintainers | ||
|
||
### Community project onboarding PR | ||
|
||
A community project is an independent repository under an external namespace and maintained by the owners themselves. It will be run as an additional external tools to provide some extended capabilities on top of the governed projects. | ||
|
||
Once the development work of the community project is finished and ready to be published to the community for adopting, | ||
|
||
* Raise a PR to update the [Additional Tools](https://github.com/goHarbor/Harbor#additional-tools) section in the [Harbor](https://github.com/goHarbor/Harbor) repository by appending the contents with below pattern. | ||
|
||
``` | ||
* [name of the community project](link of repo url) | ||
* <The main feature this project provides> | ||
* Lead by <GitHub ID of the author> from <company name> | ||
``` | ||
|
||
* The TMB will review the PR and make decision via voting | ||
* If [voting](#work-process) passed, the updates will be merged. That means the project is onboared to Harbor community | ||
* If [voting](#work-process) failed, the onboarding request will be rejected. PR will be directly closed. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# Maintainers | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If we agree on the non-core / core maintainer model we'll have to break this section up as appropriate There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not fully understand |
||
|
||
* Haining Henry Zhang <[email protected]> from VMware | ||
* James Zabala <[email protected]> from VMware | ||
* Steven Zou <[email protected]> from VMware | ||
* Daniel Jiang <[email protected]> from VMware | ||
* Nathan Lowe <[email protected]> from HylandSoftware | ||
* De Chen <> from CaiCloud | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Need De Chen's email address There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
* xxx <> from Tencent | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove until we have an individual in mind |
||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Need a section on changing this document: Updating GovernanceAll changes in Governance require a supermajority total organizational (non-core + core maintainers) vote. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/Governance Constitution/Harbor Governance/