Files
cozystack/.github/CODEOWNERS
Andrei Kvapil bd7b76691e chore(codeowners): keep architects as owners in every non-governance rule
CODEOWNERS applies only the last matching pattern, so a scoped rule
replaces the * catch-all instead of extending it: @kvaps and @lllamnyp
were not code owners for most scoped paths, and several paths (/hack/,
/.github/, /Makefile, /.pre-commit-config.yaml, /docs/) were owned by
exactly two people, deadlocking PRs authored by either of them while
the other is away.

Append @kvaps and @lllamnyp to every rule that lists owners, except the
governance block which deliberately stays with @tym83 @kvaps, and spell
out the non-additive last-match semantics in the file header.

Assisted-By: Claude <noreply@anthropic.com>
Signed-off-by: Andrei Kvapil <andrei.kvapil@aenix.io>
2026-08-10 10:26:04 +02:00

160 lines
9.7 KiB
Plaintext

# This file encodes the area-scoped Reviewer role from the Contributor Ladder
# (CONTRIBUTOR_LADDER.md): the handles below have review authority over the
# matching paths. This is intentionally a different set from the governance
# roster in MAINTAINERS.md — a Reviewer owns a specific code area, while a
# Maintainer is responsible for the whole project. The two overlap but are not
# identical by design. Security reports are NOT routed through this file; see
# SECURITY.md (GitHub Private Vulnerability Reporting + MAINTAINERS.md).
#
# Ordering matters: CODEOWNERS applies the LAST matching pattern, so entries go
# from broad to specific. The API review gate block stays last so it cannot be
# overridden.
#
# Matching is NOT additive: the last matching rule fully REPLACES every broader
# one, including the * catch-all. There is no way to say "these people can
# review anything" other than repeating their handles in every rule — a scoped
# rule that omits them silently strips their ownership for that path, exactly
# like the write-access pitfall below, just with valid handles. Policy: @kvaps
# and @lllamnyp are listed in every rule, except the governance block which is
# deliberately owned by @tym83 @kvaps alone.
#
# "Require review from Code Owners" is already enabled on main, so these rules
# gate merges from the moment this file lands — they are not an intention to be
# tightened later. That makes an unhonoured owner worse than a wrong one: GitHub
# ignores a handle without write access, so scoping a path to someone who lacks
# it carves that path out from under the catch-all and leaves it gating on
# nobody, without reporting anything.
# --- Default: architects own anything not scoped below ---
* @kvaps @lllamnyp
# --- Dashboards, examples, tests (largest fall-throughs to the default) ---
/dashboards/ @myasnikovdaniil @IvanHunters @kvaps @lllamnyp
/examples/ @lllamnyp @myasnikovdaniil @kvaps
/examples/backups/ @androndo @lllamnyp @kvaps
/test/ @myasnikovdaniil @kvaps @lllamnyp
# --- All packages: general owners (overridden by the specific areas below) ---
/packages/ @lexfrei @IvanHunters @myasnikovdaniil @sircthulhu @kvaps @lllamnyp
# --- Go source: general owners (specific cmd/pkg areas overridden below) ---
/cmd/ @kvaps @lllamnyp @sircthulhu @lexfrei
/internal/ @kvaps @lllamnyp @sircthulhu @lexfrei
/pkg/ @kvaps @lllamnyp @sircthulhu @lexfrei
# --- Apps: default owners (specific apps overridden below) ---
/packages/apps/ @lexfrei @IvanHunters @myasnikovdaniil @scooby87 @kvaps @lllamnyp
/packages/apps/vm-instance/ @scooby87 @lllamnyp @kvaps @myasnikovdaniil
/packages/apps/vm-disk/ @scooby87 @lllamnyp @kvaps @myasnikovdaniil
/packages/apps/vpc/ @kvaps @lllamnyp
# --- Managed Kubernetes: app chart, node pools, resource definitions, control plane, CAPI ---
/packages/apps/kubernetes/ @IvanHunters @kvaps @myasnikovdaniil @lexfrei @lllamnyp
/packages/apps/kubernetes-nodes/ @IvanHunters @kvaps @myasnikovdaniil @lexfrei @lllamnyp
/packages/system/kubernetes-rd/ @IvanHunters @kvaps @myasnikovdaniil @lexfrei @lllamnyp
/packages/system/kubernetes-nodes-rd/ @IvanHunters @kvaps @myasnikovdaniil @lexfrei @lllamnyp
/packages/system/kamaji/ @IvanHunters @kvaps @myasnikovdaniil @lexfrei @lllamnyp
/packages/system/capi-operator/ @IvanHunters @kvaps @myasnikovdaniil @lexfrei @lllamnyp
/packages/system/capi-providers-core/ @IvanHunters @kvaps @myasnikovdaniil @lexfrei @lllamnyp
/packages/system/capi-providers-bootstrap/ @IvanHunters @kvaps @myasnikovdaniil @lexfrei @lllamnyp
/packages/system/capi-providers-cpprovider/ @IvanHunters @kvaps @myasnikovdaniil @lexfrei @lllamnyp
/packages/system/capi-providers-infraprovider/ @IvanHunters @kvaps @myasnikovdaniil @lexfrei @lllamnyp
# --- Extra apps ---
/packages/extra/ @kvaps @lllamnyp @IvanHunters @lexfrei @myasnikovdaniil
# --- Core (installer / platform / talos / flux-aio) ---
/packages/core/ @lllamnyp @kvaps @myasnikovdaniil @IvanHunters @lexfrei
# --- Virtualization (system side) ---
/packages/system/kubevirt/ @scooby87 @lllamnyp @kvaps @lexfrei
/packages/system/kubevirt-cdi/ @scooby87 @lllamnyp @kvaps
/packages/system/kubevirt-cdi-operator/ @scooby87 @lllamnyp @kvaps @myasnikovdaniil
/packages/system/kubevirt-operator/ @scooby87 @lllamnyp @kvaps @myasnikovdaniil @IvanHunters
/packages/system/kubevirt-instancetypes/ @scooby87 @lllamnyp @kvaps @myasnikovdaniil
/packages/system/kubevirt-csi-node/ @scooby87 @lllamnyp @kvaps @myasnikovdaniil
/packages/system/vm-default-images/ @scooby87 @lllamnyp @kvaps @myasnikovdaniil
# --- Backups ---
/packages/system/backup-controller/ @androndo @lllamnyp @lexfrei @kvaps
/packages/system/backupstrategy-controller/ @androndo @lllamnyp @kvaps
/packages/system/velero/ @androndo @lllamnyp @lexfrei @kvaps
/cmd/backup-controller/ @androndo @lllamnyp @kvaps
/cmd/backupstrategy-controller/ @androndo @lllamnyp @kvaps
# --- Flux ---
/packages/system/fluxcd/ @kingdonb @kvaps @lllamnyp @myasnikovdaniil
/packages/system/fluxcd-operator/ @kingdonb @kvaps @lllamnyp @myasnikovdaniil
# --- GPU ---
/packages/system/hami/ @lexfrei @kvaps @lllamnyp
/packages/system/gpu-operator/ @lexfrei @kvaps @lllamnyp
/dashboards/gpu/ @lexfrei @kvaps @lllamnyp
# --- SeaweedFS ---
/packages/system/seaweedfs/ @IvanHunters @lexfrei @myasnikovdaniil @kvaps @lllamnyp
/packages/extra/seaweedfs/ @sircthulhu @lexfrei @myasnikovdaniil @kvaps @lllamnyp
# --- cozystack-api / controller / lineage webhook ---
/packages/system/cozystack-api/ @IvanHunters @kvaps @lllamnyp @lexfrei
/packages/system/cozystack-controller/ @IvanHunters @kvaps @lllamnyp @lexfrei
/packages/system/lineage-controller-webhook/ @IvanHunters @kvaps @lllamnyp @lexfrei
/cmd/cozystack-api/ @IvanHunters @kvaps @lllamnyp @lexfrei
/cmd/cozystack-controller/ @IvanHunters @kvaps @lllamnyp @lexfrei
/cmd/lineage-controller-webhook/ @IvanHunters @kvaps @lllamnyp @lexfrei
# --- Keycloak ---
/packages/system/keycloak/ @sircthulhu @lexfrei @IvanHunters @myasnikovdaniil @kvaps @lllamnyp
/packages/system/keycloak-operator/ @sircthulhu @lexfrei @IvanHunters @myasnikovdaniil @kvaps @lllamnyp
/packages/system/keycloak-configure/ @sircthulhu @lexfrei @IvanHunters @myasnikovdaniil @kvaps @lllamnyp
# --- API surface (architects): API types, aggregated apiserver, registry ---
/api/ @kvaps @lllamnyp
/pkg/apis/ @kvaps @lllamnyp
/pkg/apiserver/ @kvaps @lllamnyp
/pkg/registry/ @kvaps @lllamnyp
/pkg/generated/ @kvaps @lllamnyp
# --- Per-app generated mirrors of values.schema.json: no owner ---
# These files are entirely produced by `make generate` (cozyvalues-gen and
# hack/update-crd.sh) from each app's own values.yaml, which is already
# reviewed under its /packages/apps/ or /packages/extra/ entry above.
# Correctness is enforced by the pre-commit `run-make-generate` /
# `run-make-generate-root` CI hooks (regenerate, then fail on any diff), not
# by human review, so no owner is listed here — that intentionally waives
# the /api/ codeowner requirement above for just these generated paths.
/api/apps/v1alpha1/*/types.go
/api/apps/v1alpha1/*/zz_generated.deepcopy.go
/packages/system/*/cozyrds/
# --- Docs ---
/docs/ @lexfrei @myasnikovdaniil @kvaps @lllamnyp
# --- CI / automation ---
/.github/ @myasnikovdaniil @lexfrei @kvaps @lllamnyp
/hack/ @myasnikovdaniil @lexfrei @kvaps @lllamnyp
/Makefile @myasnikovdaniil @lexfrei @kvaps @lllamnyp
/.pre-commit-config.yaml @myasnikovdaniil @lexfrei @kvaps @lllamnyp
# --- Governance, licensing, project docs ---
/LICENSE @tym83 @kvaps
/GOVERNANCE.md @tym83 @kvaps
/MAINTAINERS.md @tym83 @kvaps
/CONTRIBUTOR_LADDER.md @tym83 @kvaps
/CODE_OF_CONDUCT.md @tym83 @kvaps
/CONTRIBUTING.md @tym83 @kvaps
/SECURITY.md @tym83 @kvaps
/ADOPTERS.md @tym83 @kvaps
/README.md @tym83 @kvaps
/.github/CODEOWNERS @kvaps @lllamnyp
# The API review gate must not be editable without an API-owner review, or a
# PR could neuter the detector (it is compiled from the head checkout during
# bootstrap) and slip a sizeable API change through unreviewed. Scoping these
# paths to the API owners overrides the catch-all above (last match wins), so
# changes here require @kvaps or @lllamnyp specifically. This is in force today,
# not pending a branch-protection change.
/cmd/api-gate/ @kvaps @lllamnyp
/internal/apigate/ @kvaps @lllamnyp
/.github/workflows/api-review-gate.yaml @kvaps @lllamnyp