From 69c90497723b470288c676a5a88f22be1fee01fa Mon Sep 17 00:00:00 2001 From: Gabriele Bartolini Date: Mon, 14 Sep 2026 13:23:00 +0200 Subject: [PATCH 1/3] chore: sync generated files with cnpg-infra policy These files are generated from cloudnative-pg/cnpg-infra and landed here by scripts/sync-ownership-files.sh, so propose a change there rather than editing them in this repository: - CODEOWNERS, from componentowners-policy.yaml. - COMPONENT_OWNERS.md, from repo-tiers.yaml's owners field, which is the same entry that populates this repo's -owners GitHub team. It is the public record of who owns this component, which a GitHub team cannot be, since team membership is only visible to other org members. - .gitvote.yml, so a vote held on an issue here actually has an electorate. Until now /vote-component-owner did nothing in this repo. Assisted-by: Claude Signed-off-by: Gabriele Bartolini --- .gitvote.yml | 63 +++++++++++++++++++++++++++++++++++++++++++++ COMPONENT_OWNERS.md | 34 ++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 .gitvote.yml create mode 100644 COMPONENT_OWNERS.md diff --git a/.gitvote.yml b/.gitvote.yml new file mode 100644 index 00000000..37f6518a --- /dev/null +++ b/.gitvote.yml @@ -0,0 +1,63 @@ +# GitVote configuration for cloudnative-pg/plugin-barman-cloud. +# +# 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 plugin-barman-cloud-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: + - plugin-barman-cloud-owners + users: [] + close_on_passing: true + close_on_passing_min_wait: "10 minutes" + + component-owner: + duration: 1w + pass_threshold: 66 + allowed_voters: + teams: + - plugin-barman-cloud-owners + users: [] + close_on_passing: true + close_on_passing_min_wait: "10 minutes" + + committee: + duration: 1w + pass_threshold: 50 + allowed_voters: + teams: + - extensibility-maintainers + users: [] + close_on_passing: true + close_on_passing_min_wait: "10 minutes" + + committee-component-owner: + duration: 1w + pass_threshold: 66 + allowed_voters: + teams: + - extensibility-maintainers + users: [] + close_on_passing: true + close_on_passing_min_wait: "10 minutes" diff --git a/COMPONENT_OWNERS.md b/COMPONENT_OWNERS.md new file mode 100644 index 00000000..9639cddd --- /dev/null +++ b/COMPONENT_OWNERS.md @@ -0,0 +1,34 @@ +# Component Owners + + + +`plugin-barman-cloud` is a component of the **Extensibility** subproject of +CloudNativePG (see `subprojects/extensibility.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 `plugin-barman-cloud-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) | | +| 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. From a42cf6095251e32032b6fc6e97816f576b8dd01f Mon Sep 17 00:00:00 2001 From: Gabriele Bartolini Date: Mon, 14 Sep 2026 16:50:18 +0200 Subject: [PATCH 2/3] ci: don't spellcheck the generated COMPONENT_OWNERS.md The file is rendered from cloudnative-pg/cnpg-infra and lists people by name, so pyspelling flags maintainer surnames along with `cloudnative` and `subproject`. Adding those to .wordlist.txt would work today and rot tomorrow, since the list would need an entry on every roster change. The sources line already excludes generated files for the same reason. Assisted-by: Claude Signed-off-by: Gabriele Bartolini --- .spellcheck.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.spellcheck.yaml b/.spellcheck.yaml index 576fa9fa..3fbbc2e2 100644 --- a/.spellcheck.yaml +++ b/.spellcheck.yaml @@ -2,7 +2,7 @@ matrix: - name: Markdown sources: # Ignore the CHANGELOG.md file, it is autogenerated - - ./*.md|!./CHANGELOG.md + - ./*.md|!./CHANGELOG.md|!./COMPONENT_OWNERS.md - ./web/docs/**/*.md dictionary: wordlists: From f91c71a6e20808646cccee74dad58a992eab153d Mon Sep 17 00:00:00 2001 From: Gabriele Bartolini Date: Tue, 15 Sep 2026 09:49:03 +0200 Subject: [PATCH 3/3] fix: require a strict majority to pass a gitvote vote Gitvote decides a vote with `in_favor_percentage >= pass_threshold`, so a flat 50 let an even-sized electorate pass its own tie: 2-2 on a four-owner repo cleared the bar. A simple majority is strictly more than half, and a percentage cannot express "half plus one vote", so the threshold moves to 50.01 -- above any exact tie, below the smallest real majority, which is 50 + 100/N percent for N voters and stays above 50.01 up to N = 10000. The two-thirds profiles move from 66 to 66.66 for the same reason: two thirds is 66.666..., so a flat 66 sat just under its own bar (33 of 50 is 66.0 and would have passed). Not 66.67 -- for an electorate divisible by three the exact two-thirds computes to 66.6666..., which falls under 66.67 and would break a legitimate 2-of-3. This file is rendered from cnpg-infra's gitvote-policy.yaml; the change is made there and regenerated here. Assisted-by: Claude Opus 5 Signed-off-by: Gabriele Bartolini --- .gitvote.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.gitvote.yml b/.gitvote.yml index 37f6518a..4771ce9a 100644 --- a/.gitvote.yml +++ b/.gitvote.yml @@ -15,6 +15,11 @@ # 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. +# +# The thresholds are 50.01 and 66.66, not 50 and 66, because gitvote +# passes a vote on >= rather than >: a flat 50 would let an even-sized +# electorate tie and still pass. See cnpg-infra's +# scripts/render-gitvote-config.sh for the full reasoning. automation: enabled: false rules: @@ -24,7 +29,7 @@ automation: profiles: default: duration: 1w - pass_threshold: 50 + pass_threshold: 50.01 allowed_voters: teams: - plugin-barman-cloud-owners @@ -34,7 +39,7 @@ profiles: component-owner: duration: 1w - pass_threshold: 66 + pass_threshold: 66.66 allowed_voters: teams: - plugin-barman-cloud-owners @@ -44,7 +49,7 @@ profiles: committee: duration: 1w - pass_threshold: 50 + pass_threshold: 50.01 allowed_voters: teams: - extensibility-maintainers @@ -54,7 +59,7 @@ profiles: committee-component-owner: duration: 1w - pass_threshold: 66 + pass_threshold: 66.66 allowed_voters: teams: - extensibility-maintainers