Skip to content

Commit 5b00c33

Browse files
authored
Merge pull request crossplane#6290 from jbw976/governance-community-extensions
governance: add policy for community extension projects
2 parents d7a1a06 + ac90a5b commit 5b00c33

File tree

1 file changed

+140
-7
lines changed

1 file changed

+140
-7
lines changed

GOVERNANCE.md

Lines changed: 140 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ the following GitHub organizations:
1414
## Steering Committee
1515

1616
The Crossplane Steering Committee oversees the overall health of the project. Its made
17-
up of members that demonstrate a strong commitment to the project with views in the
17+
up of members that demonstrate a strong commitment to the project with views in the
1818
interest of the broader Crossplane community. Their responsibilities include:
1919

2020
* Own the overall charter, vision, and direction of the Crossplane project
@@ -113,7 +113,7 @@ getters will be elected to the open seats.
113113
#### Maximum Representation
114114

115115
When the initial steering committee terms expire, the maximum number of
116-
steering committee members from any organization (or conglomerate, in the case of
116+
steering committee members from any organization (or conglomerate, in the case of
117117
companies owning each other), will be limited to 2 in order to encourage diversity.
118118

119119
If the results of an election result in greater than 2 members from a single
@@ -226,7 +226,7 @@ Beyond your contributions to the project, consider:
226226
substantial time (>25%) on Crossplane for the foreseeable future.
227227

228228
If you are meeting these requirements, express interest to the repository’s
229-
existing maintainers directly.
229+
existing maintainers directly.
230230

231231
* We may ask you to do some PRs from our backlog.
232232
* As you gain experience with the code base and our standards, we will ask you
@@ -241,10 +241,20 @@ existing maintainers directly.
241241
it is possible for new maintainers to be added in a shorter time period
242242
than this general guidance.
243243

244-
The existing maintainer team will then add the new maintainer to the repo’s
245-
[OWNERS.md](OWNERS.md) file, as well as the appropriate GitHub team that allows
246-
maintainer permissions to the repo, including merging pull requests into
247-
protected branches.
244+
To formalize the addition of the new maintainer, the existing maintainer team
245+
will then add them to the following locations:
246+
247+
* `OWNERS.md` file at the root of the repo
248+
* The appropriate GitHub team that allows maintainer permissions to the repo,
249+
including merging pull requests into protected branches.
250+
* CNCF maintainer lists
251+
* CNCF [project
252+
maintainers](https://github.com/cncf/foundation/blob/main/project-maintainers.csv)
253+
list
254+
* `[email protected]` mailing list
255+
* See CNCF [new maintainer
256+
guidance](https://github.com/cncf/foundation/blob/main/.github/pull_request_template.md)
257+
for further details
248258

249259
#### Maintainers for New Repositories
250260

@@ -260,6 +270,9 @@ listed above, they should volunteer to be moved to emeritus status. In extreme
260270
cases this can also occur by a vote of the maintainers per the voting process
261271
below.
262272

273+
The emeritus maintainer should be removed from all locations specified in the
274+
[becoming a maintainer](#becoming-a-maintainer) section.
275+
263276
## Organization Members
264277

265278
Beyond the roles of the steering committee, and maintainers, outlined
@@ -298,6 +311,126 @@ process](https://github.com/crossplane/org/blob/main/processes/new-member.md)
298311
outlined in the `crossplane/org` repository. New members should be asked to set
299312
the visibility of their Crossplane organization membership to public.
300313

314+
## Community Extension Projects
315+
316+
The [`crossplane-contrib`](https://github.com/crossplane-contrib) organization
317+
serves as a vendor neutral home for community collaboration on crossplane
318+
related projects and extensions. We commonly refer to the repositories in this
319+
organization as **"community extension projects"** which includes providers,
320+
functions and other crossplane extensions. As previously stated, this
321+
organization and all of its repositories, in addition to the `crossplane`
322+
organization, are under the governance and policies defined in this document.
323+
They are effectively sub-projects of Crossplane and must follow all the same
324+
rules and policies.
325+
326+
### Benefits of Becoming a Community Extension Project
327+
328+
It is entirely optional for a project in the greater Crossplane ecosystem to
329+
formally join the `crossplane-contrib` organization as a community extension
330+
project. The choice is up to the leadership team of each project. The benefits
331+
of becoming a community extension project are listed below:
332+
333+
* To have a neutral home for collaboration with strong open source governance
334+
and licensing
335+
* To attract more contributors and maintainers and increase the project’s long
336+
term sustainability
337+
* To make the project eligible for reference in the Crossplane documentation,
338+
website, and publishing to the community `xpkg.crossplane.io` registry
339+
* To contribute and participate more directly in the Crossplane community
340+
341+
### Policies for Community Extension Projects
342+
343+
All community extension projects are expected to adhere to the following set of
344+
policies throughout their lifecycle:
345+
346+
* **CNCF Policies:** Each community extension project is part of the Crossplane
347+
CNCF project and must abide by all [CNCF
348+
policies](https://www.cncf.io/policies/).
349+
* **Project Health**: Similarly, all extensions are expected to adhere to the
350+
[project health
351+
guidelines](https://contribute.cncf.io/maintainers/community/project-health/)
352+
published by the CNCF. As each extension will have varying needs, the health
353+
guidelines are not a completely prescriptive one size fits all approach, but
354+
all extensions must be operating with the spirit of these health guidelines in
355+
mind.
356+
* The steering committee is responsible for monitoring the state of these
357+
projects and taking action as defined in the [community extension project
358+
lifecycle](#community-extension-project-lifecycle) section below, including
359+
potential archival of the extension project.
360+
* Community members are welcome to bring any of their concerns or observations
361+
about a community extension project to the steering committee for review.
362+
* **Registry:** Build artifacts, e.g. Crossplane packages (opinionated OCI
363+
images), must be published to the `crossplane-contrib` org on GitHub Container
364+
Registry (`ghcr.io`), which will serve as a neutral community registry.
365+
`ghcr.io` is preferred because it is integrated into GitHub, where all of the
366+
source code lives, and will reduce long term maintenance.
367+
* Optionally, the maintainer team can publish to additional registries of
368+
their choosing.
369+
* `xpkg.crossplane.io` will be published as a consistent entry point for pulls
370+
from the `ghcr.io/crossplane-contrib` organization. `xpkg.crossplane.io` is
371+
a Scarf gateway to help the project learn about adoption patterns through
372+
anonymized usage metrics, as
373+
[supported](https://contribute.cncf.io/resources/project-services/hosted-tools/)
374+
by the CNCF.
375+
* **Maintainer list:** The current list of maintainers must be kept up to date
376+
in the following places:
377+
* `OWNERS.md` file at the root of the repo
378+
* CNCF [project
379+
maintainers](https://github.com/cncf/foundation/blob/main/project-maintainers.csv)
380+
list
381+
* `[email protected]` mailing list
382+
* **API group**: New extension projects starting out in `crossplane-contrib`
383+
should use the `*.crossplane.io` API group for their API resources. If the
384+
project was started in a different organization and contributed to
385+
`crossplane-contrib`, it can maintain a different API group to avoid breaking
386+
all uses of the extension.
387+
388+
### Community Extension Project Lifecycle
389+
390+
To create a new community extension project, an issue must first be opened in
391+
the [`crossplane/org`](https://github.com/crossplane/org) repository that
392+
defines the following criteria:
393+
394+
* Name of new extension
395+
* Purpose and intended scope of the extension
396+
* Initial maintainer team (GitHub usernames)
397+
* Description of the maintainer team's long term commitment to the extension
398+
399+
The steering committee will review the provided information and assess whether
400+
the proposed extension is a good fit for the project. The steering committee may
401+
provide feedback or ask for changes if they feel it is needed to improve the
402+
chance of long term success of the extension. If approved, a new repository will
403+
be created and the initial maintainers will be added.
404+
405+
Then, the day to day governance of the new extension repository follows the same
406+
policies defined in this document for [repository
407+
governance](#repository-governance) and [community extension project
408+
policies](#policies-for-community-extension-projects). The maintainers operate in a
409+
fairly autonomous fashion to maintain the repo and ensure its health and
410+
success, and they can add/remove maintainers as defined.
411+
412+
#### Archival Policy
413+
414+
If a community extension project does not meet the policies defined in this
415+
document, the steering committee should seek a resolution with the maintainer
416+
team. Ideally, the maintainer team would be able to address the issues and bring
417+
the extension back into good health and compliance. If the issues cannot be
418+
resolved, the steering committee may decide to archive the repository. When a
419+
repository is archived, this status change should be made very clear to the
420+
community to reduce any potential confusion. Any references to the project from
421+
the Crossplane documentation and/or website will be removed at this time.
422+
423+
### Public References to Community Extension Projects
424+
425+
Crossplane's public facing content, such as the [crossplane.io
426+
website](https://www.crossplane.io/) and Crossplane
427+
[documentation](https://docs.crossplane.io/), should only reference or promote
428+
community extension projects that are in good health and compliance with all
429+
[policies](#policies-for-community-extension-projects). For example, the docs
430+
site should not include guides for extensions that are private, owned by
431+
vendors, or archived. All public references by the project must be only for
432+
healthy and compliant community extension projects.
433+
301434
## Updating the Governance
302435

303436
This governance will likely be a living document and its policies will therefore

0 commit comments

Comments
 (0)