Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions .github/ISSUE_TEMPLATE/component-owner-proposal.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: "Propose a Component Owner"
description: "Nominate a Contributor to become Component Owner of a repository"
title: "[Component Owner Proposal]: <name>"
labels: ["component-owner-proposal"]
body:
- type: markdown
attributes:
value: |
## Component Owner proposal

This template is an org-wide default (defined in `cloudnative-pg/.github`),
but **the issue itself must be created in the repository the nominee is
being proposed for** -- if you opened "New issue" from that repository's
own page, you're already in the right place; don't move this to
`governance`, `.github`, or `cnpg-infra`. gitvote reads a repository's
own `.gitvote.yml`, so the vote this issue leads to only uses the right
voters (that repository's Component Owners) if the issue lives there.

Promotion process, thresholds, and who may propose: see
`CONTRIBUTOR_LADDER.md` in
[cloudnative-pg/governance](https://github.com/cloudnative-pg/governance).
That document arrives with the federated-model rewrite, which is
pending ratification; progress is tracked in
[cloudnative-pg/governance#67](https://github.com/cloudnative-pg/governance/issues/67).

- type: input
id: nominee
attributes:
label: Proposed Component Owner
description: GitHub handle of the person being nominated.
placeholder: "@handle"
validations:
required: true

- type: input
id: lfid
attributes:
label: Nominee's LFID profile
description: "Component Owner status requires a Linux Foundation ID (LFID) with the nominee's GitHub account linked to it -- this is what lets CNCF's own tooling map the GitHub handle above to an organization at all. Look it up, or register/link one, at https://openprofile.dev. Paste the profile URL."
placeholder: "e.g. https://openprofile.dev/profile/gabriele.bartolini"
validations:
required: true

- type: input
id: organization
attributes:
label: Nominee's organization (employer)
description: "Must match the LFID profile's own \"Current Organization\" field above, not just what you believe it to be. This is what org-balanced voting and the Steering seat cap actually count -- a profile with no employer set, or the wrong one, silently misstates an organization's real seat count. Use the literal word Independent (not blank, not N/A) if the nominee has no employer tied to their contribution."
placeholder: "e.g. EDB -- or literally: Independent"
validations:
required: true

- type: checkboxes
id: eligibility
attributes:
label: Proposer eligibility
description: "Per CONTRIBUTOR_LADDER.md, a nomination comes from a member of the body that decides it: this repository's Component Owners, or, where fewer than three of them are named, its subproject's maintainer committee. If that isn't you, ask one of them to open this issue instead of opening it on their behalf, so the record shows who actually nominated. Nobody here can verify the LFID/organization fields above by API -- this is a self-attestation, same as the two below."
options:
- label: I am a Component Owner of this repository, or a member of its subproject's maintainer committee.
required: true
- label: I opened this issue inside the target repository itself (see note above), not in governance, .github, or cnpg-infra.
required: true
- label: I opened the LFID profile above myself and confirmed the nominee's GitHub account is linked to it, and its "Current Organization" field matches the organization given above (or Independent).
required: true

- type: textarea
id: justification
attributes:
label: Track record / justification
description: Why does this contributor merit Component Owner status on this repository? Reference specific contributions -- PRs authored or reviewed, issue triage, sustained involvement, etc.
validations:
required: true

- type: textarea
id: links
attributes:
label: Relevant links
description: PRs, issues, or discussions that support this nomination.
validations:
required: false

- type: markdown
attributes:
value: |
## Next steps

1. Let this issue sit long enough for this repository's other Component
Owners to weigh in.
2. An existing Maintainer or Component Owner of this repository comments
`/vote-component-owner` to open voting: two-thirds majority of this
repository's Component Owners, one week, per this repository's own
`.gitvote.yml`. If this repository has fewer than three named
Component Owners (or none), the vote defaults to the subproject
maintainer committee instead -- see `CONTRIBUTOR_LADDER.md` in the
governance repository.
3. If the vote passes: open a PR against
[cloudnative-pg/cnpg-infra](https://github.com/cloudnative-pg/cnpg-infra)
adding the nominee to this repository's `owners:` list in
`repo-tiers.yaml`. Once merged, `scripts/sync-project-owner-teams.sh
<repository> --apply` (run by an admin, from their own machine --
see that repo's README) grants the actual GitHub access.
Automating this step from a passed vote is on the roadmap; for now
it's a manual follow-up.
4. The LFID and organization collected above have nowhere durable to
land yet: `.project`'s `maintainers.yaml` doesn't have fields for
either today (confirmed against the
[dot-project schema](https://github.com/cncf/automation/tree/main/utilities/dot-project)
-- it only lists GitHub handles). Until that's resolved, note the
organization in this issue and in the `cnpg-infra` PR from step 3,
so it's at least on the record somewhere.
63 changes: 63 additions & 0 deletions .gitvote.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# GitVote configuration for cloudnative-pg/postgres-extensions-containers.
#
# Rendered by cnpg-infra's scripts/render-gitvote-config.sh -- see
# cnpg-infra's gitvote-policy.yaml and scripts/check-gitvote-config.sh /
# fix-gitvote-config.sh for how this file is generated and enforced.
#
# Voters are this repository's own postgres-extensions-containers-owners GitHub team (repo-tiers.yaml's
# owners field is what populates it; see sync-project-owner-teams.sh).
# Component Owner-level decisions per CONTRIBUTOR_LADDER.md are scoped to
# the repository, not org-wide. The profiles below mirror
# CONTRIBUTOR_LADDER.md's two repository-level thresholds:
# - default: simple majority, Contributor promotion/removal
# - component-owner: two-thirds majority, Component Owner
# promotion/removal (/vote-component-owner)
# plus, where this repo belongs to a subproject, the same two scoped to
# that subproject's maintainer committee, for the case where this repo has
# too few named owners to decide for itself.
automation:
enabled: false
rules:
- patterns: []
profile: default

profiles:
default:
duration: 1w
pass_threshold: 50
allowed_voters:
teams:
- postgres-extensions-containers-owners
users: []
close_on_passing: true
close_on_passing_min_wait: "10 minutes"

component-owner:
duration: 1w
pass_threshold: 66
allowed_voters:
teams:
- postgres-extensions-containers-owners
users: []
close_on_passing: true
close_on_passing_min_wait: "10 minutes"

committee:
duration: 1w
pass_threshold: 50
allowed_voters:
teams:
- supply-chain-maintainers
users: []
close_on_passing: true
close_on_passing_min_wait: "10 minutes"

committee-component-owner:
duration: 1w
pass_threshold: 66
allowed_voters:
teams:
- supply-chain-maintainers
users: []
close_on_passing: true
close_on_passing_min_wait: "10 minutes"
35 changes: 35 additions & 0 deletions COMPONENT_OWNERS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Component Owners

<!--
Generated from repo-tiers.yaml and people.yaml in
cloudnative-pg/cnpg-infra -- do not hand-edit. Propose a change there
instead; an owner is added or removed there only to record a vote that
has already passed, never to make the decision itself.
-->

`postgres-extensions-containers` is a component of the **Supply Chain** subproject of
CloudNativePG (see `subprojects/supply-chain.md` in
[cloudnative-pg/governance](https://github.com/cloudnative-pg/governance)).

The people below are its **Component Owners**: they hold `Write` on this
repository through the `postgres-extensions-containers-owners` GitHub team, and are its default
[`CODEOWNERS`](CODEOWNERS) entry, so every pull request here is routed to
them for review.

| Name | GitHub Handle | Country |
| :--- | :--- | :--- |
| Gabriele Bartolini | [@gbartolini](https://github.com/gbartolini) | |
| Francesco Canovai | [@fcanovai](https://github.com/fcanovai) | |
| Leonardo Cecchi | [@leonardoce](https://github.com/leonardoce) | |
| Gabriele Fedi | [@GabriFedi97](https://github.com/GabriFedi97) | Italy |
| Niccolò Fei | [@NiccoloFei](https://github.com/NiccoloFei) | Italy |
| Marco Nenciarini | [@mnencia](https://github.com/mnencia) | |
| Armando Ruocco | [@armru](https://github.com/armru) | |

Component Owner is a rung of the CloudNativePG contributor ladder. A new
owner is added by a ⅔ vote of this repository's existing Component Owners,
held on an issue in this repository; the change is then recorded in
`cnpg-infra`, which grants the access and regenerates this file. See
`CONTRIBUTOR_LADDER.md` in [cloudnative-pg/governance](https://github.com/cloudnative-pg/governance)
for the full process, including what happens when a repository has too few
owners to reach that threshold.
Loading