Code Ownership
Ownership is measured by how many commits each author made to each file in the current tree. It highlights bus-factor risk (files only one person has ever touched) and where knowledge is concentrated. The bus factor is the smallest number of people who are, between them, primary owner of more than half of the files.
- Files Tracked
- 31,647
- in the current tree
- Bus Factor
- 14
- 14 authors are primary owner of 15,965 of 31,647 files
- Single-Owner Files
- 12,701
- 40.1% of tracked files
- Contributors
- 3,839
- authors who changed files
Bus factor risk — single-owner files
Files only one author has ever changed. The more a file has changed, the more knowledge is at risk if that person leaves.
| File | Sole owner | Commits |
|---|---|---|
| staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/model.go | Marek Siarkowicz | 27 |
| test/integration/apiserver/storage/traffic.go | Marek Siarkowicz | 27 |
| staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/correctness.go | Marek Siarkowicz | 26 |
| CHANGELOG/CHANGELOG-1.34.md | Kubernetes Release Robot | 21 |
| CHANGELOG/CHANGELOG-1.35.md | Kubernetes Release Robot | 17 |
| staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/types.go | Marek Siarkowicz | 13 |
| staging/src/k8s.io/apiserver/pkg/admission/testing/celtest/parse.go | Jaydip Gabani | 13 |
| staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation/ratcheting.go | Alexander Zielenski | 13 |
| staging/src/k8s.io/component-base/logs/api/v1/options_test.go | Patrick Ohly | 11 |
| staging/src/k8s.io/apiserver/pkg/authorization/authorizer/conditions.go | Lucas Käldström | 11 |
Table: the 100 most-changed of 12,701 single-owner files
| File | Sole owner | Commits |
|---|---|---|
| staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/model.go | Marek Siarkowicz | 27 |
| test/integration/apiserver/storage/traffic.go | Marek Siarkowicz | 27 |
| staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/correctness.go | Marek Siarkowicz | 26 |
| CHANGELOG/CHANGELOG-1.34.md | Kubernetes Release Robot | 21 |
| CHANGELOG/CHANGELOG-1.35.md | Kubernetes Release Robot | 17 |
| staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/types.go | Marek Siarkowicz | 13 |
| staging/src/k8s.io/apiserver/pkg/admission/testing/celtest/parse.go | Jaydip Gabani | 13 |
| staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation/ratcheting.go | Alexander Zielenski | 13 |
| staging/src/k8s.io/component-base/logs/api/v1/options_test.go | Patrick Ohly | 11 |
| staging/src/k8s.io/apiserver/pkg/authorization/authorizer/conditions.go | Lucas Käldström | 11 |
| staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/watch.go | Marek Siarkowicz | 10 |
| staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/model_test.go | Marek Siarkowicz | 10 |
| staging/src/k8s.io/apiserver/pkg/admission/testing/celtest/evaluator_test.go | Jaydip Gabani | 10 |
| staging/src/k8s.io/apiserver/pkg/admission/testing/celtest/helpers.go | Jaydip Gabani | 10 |
| staging/src/k8s.io/apiserver/pkg/cel/common/equality.go | Alexander Zielenski | 10 |
| staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/replay.go | Marek Siarkowicz | 9 |
| CHANGELOG/CHANGELOG-1.37.md | Kubernetes Release Robot | 9 |
| staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/watch_test.go | Marek Siarkowicz | 8 |
| vendor/k8s.io/klog/v2/test/output.go | Patrick Ohly | 8 |
| staging/src/k8s.io/apiserver/pkg/admission/testing/celtest/helpers_test.go | Jaydip Gabani | 8 |
| staging/src/k8s.io/apiserver/pkg/admission/testing/celtest/parse_test.go | Jaydip Gabani | 8 |
| staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/storage_test.go | Marek Siarkowicz | 7 |
| test/e2e_dra/resourceclaimstatus_test.go | Patrick Ohly | 7 |
| vendor/k8s.io/klog/v2/internal/serialize/keyvalues.go | Patrick Ohly | 7 |
| vendor/k8s.io/klog/v2/ktesting/testinglogger.go | Patrick Ohly | 7 |
| vendor/k8s.io/klog/v2/test/zapr.go | Patrick Ohly | 7 |
| staging/src/k8s.io/component-base/logs/api/v1/registry.go | Patrick Ohly | 7 |
| test/integration/logs/benchmark/common_test.go | Patrick Ohly | 7 |
| staging/src/k8s.io/apimachinery/pkg/util/validation/ip_test.go | Dan Winship | 7 |
| pkg/controlplane/reconcilers/instancecount_test.go | Dan Winship | 7 |
| cmd/kubeadm/app/apis/kubeadm/timeoututils.go | Lubomir I. Ivanov | 7 |
| staging/src/k8s.io/apiserver/pkg/util/peerproxy/gv_exclusion_manager.go | Richa Banker | 7 |
| staging/src/k8s.io/apiserver/pkg/util/peerproxy/peerproxy.go | Richa Banker | 7 |
| staging/src/k8s.io/apiserver/pkg/admission/testing/celtest/admission_test.go | Jaydip Gabani | 7 |
| staging/src/k8s.io/cloud-provider/controllers/route/metrics.go | lukasmetzner | 7 |
| test/e2e_node/pods_api_test.go | Brian Sonnenberg | 7 |
| staging/src/k8s.io/apimachinery/pkg/runtime/serializer/cbor/internal/modes/encode_test.go | Ben Luddy | 7 |
| staging/src/k8s.io/apimachinery/pkg/runtime/serializer/cbor/internal/modes/roundtrip_test.go | Ben Luddy | 7 |
| staging/src/k8s.io/apimachinery/pkg/runtime/serializer/cbor/internal/modes/appendixa_test.go | Ben Luddy | 7 |
| test/e2e/dra/test-driver/deploy/example/resourceclaim.yaml | Patrick Ohly | 6 |
| pkg/scheduler/framework/plugins/nodevolumelimits/csi_manager.go | Hemant Kumar | 6 |
| test/e2e_node/remote/gce/gce_runner_test.go | thc1006 | 6 |
| staging/src/k8s.io/apiserver/pkg/util/peerproxy/gv_exclusion_manager_test.go | Richa Banker | 6 |
| staging/src/k8s.io/apiserver/pkg/admission/testing/celtest/auditannotations_test.go | Jaydip Gabani | 6 |
| staging/src/k8s.io/apiserver/pkg/admission/testing/celtest/integration_test.go | Jaydip Gabani | 6 |
| staging/src/k8s.io/apimachinery/pkg/runtime/serializer/cbor/collections.go | chenk008 | 6 |
| staging/src/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/integrator.go | Mike Spreitzer | 6 |
| plugin/pkg/admission/podtopologylabels/admission.go | James Munnelly | 6 |
| test/integration/apiserver/storage/faults.go | Marek Siarkowicz | 5 |
| test/integration/apiserver/storage/README.md | Marek Siarkowicz | 5 |
| staging/src/k8s.io/apiserver/pkg/storage/cacher/store/btree.go | Marek Siarkowicz | 5 |
| vendor/k8s.io/klog/v2/klogr.go | Patrick Ohly | 5 |
| test/e2e/framework/internal/junit/junit.go | Patrick Ohly | 5 |
| test/e2e/framework/skipper/skipper_test.go | Patrick Ohly | 5 |
| staging/src/k8s.io/apiserver/pkg/authorization/authorizer/evaluate.go | Lucas Käldström | 5 |
| pkg/kubelet/cm/topologymanager/policy_merge_preferred_test.go | philhuan | 5 |
| pkg/api/servicecidr/servicecidr.go | Antonio Ojea | 5 |
| pkg/api/servicecidr/servicecidr_test.go | Antonio Ojea | 5 |
| pkg/proxy/nodemanager/nodemanager.go | Dan Winship | 5 |
| cmd/kubeadm/app/util/apiclient/wait_test.go | Lubomir I. Ivanov | 5 |
| staging/src/k8s.io/apiserver/pkg/util/peerproxy/peer_discovery_test.go | Richa Banker | 5 |
| staging/src/k8s.io/apiserver/pkg/admission/testing/celtest/matchconditions_test.go | Jaydip Gabani | 5 |
| test/e2e/storage/volumeattributesclass.go | carlory | 5 |
| staging/src/k8s.io/apimachinery/pkg/runtime/serializer/cbor/collections_test.go | chenk008 | 5 |
| staging/src/k8s.io/dynamic-resource-allocation/deviceattribute/numa_linux.go | John Hull | 5 |
| pkg/kubelet/cm/container_manager_test.go | Rohit Chaudhari | 5 |
| staging/src/k8s.io/apiserver/pkg/util/flowcontrol/fairqueuing/integrator_test.go | Mike Spreitzer | 5 |
| staging/src/k8s.io/component-base/metrics/prometheus/feature/metrics_test.go | Han Kang | 5 |
| staging/src/k8s.io/component-base/metrics/prometheus/feature/metrics.go | Han Kang | 5 |
| staging/src/k8s.io/apiserver/pkg/storage/cacher/testing/mock.go | Marek Siarkowicz | 4 |
| staging/src/k8s.io/apiserver/pkg/storage/testing/correctness/storage.go | Marek Siarkowicz | 4 |
| vendor/github.com/opencontainers/cgroups/fs/fs.go | Davanum Srinivas | 4 |
| vendor/github.com/opencontainers/cgroups/fs2/fs2.go | Davanum Srinivas | 4 |
| vendor/go.opentelemetry.io/otel/sdk/internal/x/x.go | Davanum Srinivas | 4 |
| vendor/golang.org/x/net/dns/dnsmessage/svcb.go | Davanum Srinivas | 4 |
| vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go | Davanum Srinivas | 4 |
| cmd/kubelet/app/options/globalflags_linux_test.go | Davanum Srinivas | 4 |
| staging/src/k8s.io/kubelet/pkg/apis/deviceplugin/OWNERS | Davanum Srinivas | 4 |
| api/discovery/apis__coordination.k8s.io__v1alpha2.json | Jefftree | 4 |
| staging/src/k8s.io/apiserver/pkg/util/flowcontrol/watch_tracker_test.go | Wojciech Tyczyński | 4 |
| staging/src/k8s.io/dynamic-resource-allocation/api/doc.go | Patrick Ohly | 4 |
| test/e2e/invariants/logcheck/logcheck_test.go | Patrick Ohly | 4 |
| test/integration/dra/binding_conditions.go | Patrick Ohly | 4 |
| staging/src/k8s.io/client-go/testing/internal/listandwatch_test.go | Patrick Ohly | 4 |
| vendor/k8s.io/klog/v2/textlogger/options.go | Patrick Ohly | 4 |
| test/e2e_dra/README.md | Patrick Ohly | 4 |
| vendor/github.com/onsi/ginkgo/v2/internal/progress_report.go | Patrick Ohly | 4 |
| vendor/github.com/onsi/ginkgo/v2/internal/spec_context.go | Patrick Ohly | 4 |
| vendor/github.com/onsi/gomega/gcustom/make_matcher.go | Patrick Ohly | 4 |
| pkg/apis/resource/install/install_test.go | Patrick Ohly | 4 |
| staging/src/k8s.io/kubelet/pkg/apis/dra/v1beta1/types.go | Patrick Ohly | 4 |
| vendor/github.com/go-logr/zapr/zapr.go | Patrick Ohly | 4 |
| vendor/k8s.io/klog/v2/ktesting/options.go | Patrick Ohly | 4 |
| vendor/k8s.io/klog/v2/k8s_references.go | Patrick Ohly | 4 |
| vendor/k8s.io/klog/v2/contextual.go | Patrick Ohly | 4 |
| pkg/kubelet/volumemanager/volumehealth/manager.go | Hemant Kumar | 4 |
| staging/src/k8s.io/client-go/applyconfigurations/core/v1/volumehealthcondition.go | Hemant Kumar | 4 |
| test/e2e/storage/csimock/csi_volume_limit_scaling.go | Hemant Kumar | 4 |
| staging/src/k8s.io/cli-runtime/pkg/resource/fallback_query_param_verifier.go | Sean Sullivan | 4 |
| staging/src/k8s.io/apiserver/pkg/util/proxy/metrics/metrics.go | Sean Sullivan | 4 |
Ownership by author
Primary owner = the author with the most commits to a file. Solely owned = files only that author has touched.
| Author | Files owned | Solely owned | Files touched |
|---|---|---|---|
| Patrick Ohly | 2,113 | 474 | 4,779 |
| Davanum Srinivas | 2,110 | 805 | 6,410 |
| Jordan Liggitt | 2,059 | 657 | 7,497 |
| Ben Luddy | 1,550 | 1,522 | 1,864 |
| Mengjiao Liu | 1,391 | 1 | 3,273 |
| Benjamin Elder | 1,291 | 1,240 | 1,877 |
| Tim Hockin | 1,173 | 336 | 2,820 |
| Jefftree | 852 | 679 | 1,795 |
| Samuel Roth | 708 | 1 | 739 |
| Joe Betz | 657 | 235 | 3,237 |
| Peter Hunt | 574 | 408 | 714 |
| Keisuke Ishigami | 537 | 537 | 564 |
| Paco Xu | 475 | 398 | 1,488 |
| Alvaro Aleman | 475 | 3 | 1,085 |
| David Eads | 450 | 75 | 2,225 |
| Sean Sullivan | 449 | 293 | 789 |
| Stephen Kitt | 436 | 95 | 2,293 |
| Yongrui Lin | 421 | 246 | 1,186 |
| Graham Heffern | 296 | 296 | 303 |
| Mike Danese | 289 | 30 | 1,449 |
| Cici Huang | 285 | 239 | 885 |
| Surya Seetharaman | 274 | 272 | 293 |
| ravisantoshgudimetla | 273 | 3 | 540 |
| David Ashpole | 260 | 49 | 1,182 |
| Cyclinder Kuo | 240 | 240 | 384 |
Most shared files
Files touched by the most people — shared code where changes are most likely to need coordination.
| File | Contributors | Primary owner | Owner share |
|---|---|---|---|
| api/openapi-spec/swagger.json | 422 | Jordan Liggitt | 4.5% |
| pkg/kubelet/kubelet.go | 402 | Yu-Ju Hong | 6.2% |
| pkg/features/kube_features.go | 364 | carlory | 3.2% |
| pkg/generated/openapi/zz_generated.openapi.go | 332 | Patrick Ohly | 5.1% |
| vendor/modules.txt | 312 | Davanum Srinivas | 17.9% |
| cmd/kubelet/app/server.go | 262 | Michael Taufen | 5.2% |
| pkg/kubelet/kubelet_test.go | 251 | Yu-Ju Hong | 6.2% |
| staging/src/k8s.io/api/core/v1/types.go | 250 | Tim Hockin | 4.8% |
| go.mod | 248 | Davanum Srinivas | 22.6% |
| go.sum | 227 | Davanum Srinivas | 24.3% |
| staging/src/k8s.io/api/core/v1/generated.proto | 226 | Tim Hockin | 5.2% |
| pkg/apis/core/validation/validation.go | 206 | Tim Hockin | 4.6% |
| staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go | 200 | Tim Hockin | 3.8% |
| test/e2e/framework/util.go | 198 | Wojciech Tyczyński | 4.9% |
| pkg/apis/core/types.go | 191 | Hemant Kumar | 4.0% |
| cluster/gce/util.sh | 188 | Brendan Burns | 4.4% |
| cluster/gce/gci/configure-helper.sh | 187 | Mike Danese | 6.2% |
| hack/local-up-cluster.sh | 187 | Davanum Srinivas | 11.3% |
| pkg/apis/core/validation/validation_test.go | 186 | Tim Hockin | 4.3% |
| cluster/gce/config-test.sh | 174 | Zach Loafman | 4.6% |
How Kubernetes compares with other CNCF graduated projects →
How Kubernetes ranks among CNCF graduated projects by AI-assisted commits →
Generate this report for your own repository with gitstats-action · All Gallery reports
The smallest workflow
Publishes the report to GitHub Pages on every push to main: turn on Pages for the gh-pages branch.
# .github/workflows/gitstats.yml
name: GitStats Report
on:
push:
branches: [main]
permissions:
contents: write
jobs:
gitstats:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- uses: shenxianpeng/gitstats-action@v1
with:
deploy-to-pages: true