From 584b60f5916efb18107c859652f32783dee3f2e6 Mon Sep 17 00:00:00 2001 From: Nissan Pow Date: Fri, 20 Feb 2026 10:38:59 -0800 Subject: [PATCH 1/6] Add CODEOWNERS for automatic PR reviewer assignment Maps repository components to their primary maintainers based on git history and PR activity analysis, enabling GitHub to auto-assign reviewers on PRs. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/CODEOWNERS | 137 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000000..27bdcdf68d2 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,137 @@ +# Metaflow CODEOWNERS +# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners +# +# Last-match-wins: more specific paths override the default. +# Each owner must have write access to the repository. + +# Default - core maintainers review everything +* @savingoyal @saikonen @romain-intel + +# Core runtime & flow definition +metaflow/runtime.py @romain-intel @savingoyal @talsperre +metaflow/task.py @romain-intel @savingoyal @talsperre +metaflow/flowspec.py @romain-intel @talsperre +metaflow/decorators.py @romain-intel @saikonen @npow @talsperre +metaflow/graph.py @romain-intel +metaflow/parameters.py @romain-intel @savingoyal @saikonen +metaflow/metaflow_current.py @valayDave @romain-intel +metaflow/metaflow_environment.py @savingoyal @romain-intel @saikonen +metaflow/metaflow_config.py @npow @talsperre @savingoyal +metaflow/includefile.py @romain-intel @savingoyal @npow +metaflow/util.py @romain-intel @savingoyal @saikonen +metaflow/events.py @savingoyal @romain-intel +metaflow/integrations.py @savingoyal @romain-intel + +# Client API +metaflow/client/ @romain-intel @savingoyal @talsperre + +# Runner +metaflow/runner/ @madhur-ob @romain-intel @npow @talsperre + +# CLI +metaflow/cli.py @romain-intel @savingoyal @talsperre +metaflow/cli_components/ @romain-intel @savingoyal @talsperre + +# Datastore +metaflow/datastore/ @saikonen @savingoyal @talsperre + +# Metadata provider +metaflow/metadata_provider/ @savingoyal @saikonen + +# Metadata +metaflow/metadata/ @savingoyal @romain-intel + +# Extension support +metaflow/extension_support/ @romain-intel + +# Logging +metaflow/mflog/ @savingoyal @romain-intel + +# System (logger & monitor) +metaflow/system/ @savingoyal + +# Tracing +metaflow/tracing/ @saikonen @savingoyal + +# Sidecar +metaflow/sidecar/ @romain-intel @savingoyal + +# Packaging +metaflow/package/ @romain-intel @saikonen +metaflow/packaging_sys/ @romain-intel @saikonen + +# User configs +metaflow/user_configs/ @romain-intel @saikonen + +# User decorators / mutable flow +metaflow/user_decorators/ @talsperre @romain-intel + +# Commands +metaflow/cmd/ @savingoyal @romain-intel @madhur-ob @npow +metaflow/cmd/develop/ @talsperre @npow +metaflow/cmd/code/ @npow + +# Tutorials +metaflow/tutorials/ @savingoyal @romain-intel + +# Devtools +devtools/ @npow @savingoyal + +# --- Plugins --- + +# Cards +metaflow/plugins/cards/ @valayDave @romain-intel + +# Argo Workflows +metaflow/plugins/argo/ @saikonen @savingoyal + +# Airflow +metaflow/plugins/airflow/ @romain-intel @valayDave + +# Kubernetes +metaflow/plugins/kubernetes/ @savingoyal @saikonen @valayDave + +# AWS (Batch, Step Functions, Secrets Manager) +metaflow/plugins/aws/ @savingoyal @romain-intel @npow + +# Events decorator +metaflow/plugins/events_decorator.py @talsperre @savingoyal + +# S3 datatools +metaflow/plugins/datatools/ @npow @savingoyal @talsperre + +# Datastores (S3, Azure, GCS, local) +metaflow/plugins/datastores/ @saikonen @savingoyal @npow + +# Azure +metaflow/plugins/azure/ @romain-intel @madhur-ob + +# GCP +metaflow/plugins/gcp/ @madhur-ob + +# ML frameworks (PyTorch etc.) +metaflow/plugins/frameworks/ @savingoyal + +# Exit hook +metaflow/plugins/exit_hook/ @saikonen + +# Metadata providers (service, local, spin) +metaflow/plugins/metadata_providers/ @savingoyal +metaflow/plugins/metadata/ @romain-intel @savingoyal + +# PyPI / Conda packaging +metaflow/plugins/pypi/ @saikonen @savingoyal + +# UV packaging +metaflow/plugins/uv/ @saikonen + +# Secrets +metaflow/plugins/secrets/ @saikonen + +# Env escape +metaflow/plugins/env_escape/ @romain-intel + +# --- Infrastructure --- + +# CI / GitHub Actions +.github/ @savingoyal @saikonen @madhur-ob @npow From 96af80ec933b05cfb7b9d715bf0eee1a5ef04924 Mon Sep 17 00:00:00 2001 From: Nissan Pow Date: Sat, 21 Feb 2026 21:27:28 -0800 Subject: [PATCH 2/6] Distribute CODEOWNERS with codeowners-generator --- .codeowners-generatorrc | 6 + .github/CODEOWNERS | 220 +++++++----------- .github/workflows/codeowners.yml | 16 ++ CODEOWNERS | 5 + devtools/CODEOWNERS | 1 + metaflow/cli_components/CODEOWNERS | 1 + metaflow/client/CODEOWNERS | 1 + metaflow/cmd/CODEOWNERS | 3 + metaflow/datastore/CODEOWNERS | 1 + metaflow/extension_support/CODEOWNERS | 1 + metaflow/metadata_provider/CODEOWNERS | 1 + metaflow/mflog/CODEOWNERS | 1 + metaflow/package/CODEOWNERS | 1 + metaflow/packaging_sys/CODEOWNERS | 1 + metaflow/plugins/CODEOWNERS | 1 + metaflow/plugins/airflow/CODEOWNERS | 1 + metaflow/plugins/argo/CODEOWNERS | 1 + metaflow/plugins/aws/CODEOWNERS | 1 + metaflow/plugins/azure/CODEOWNERS | 1 + metaflow/plugins/cards/CODEOWNERS | 1 + metaflow/plugins/datastores/CODEOWNERS | 1 + metaflow/plugins/datatools/CODEOWNERS | 1 + metaflow/plugins/env_escape/CODEOWNERS | 1 + metaflow/plugins/exit_hook/CODEOWNERS | 1 + metaflow/plugins/frameworks/CODEOWNERS | 1 + metaflow/plugins/gcp/CODEOWNERS | 1 + metaflow/plugins/kubernetes/CODEOWNERS | 1 + .../plugins/metadata_providers/CODEOWNERS | 1 + metaflow/plugins/pypi/CODEOWNERS | 1 + metaflow/plugins/secrets/CODEOWNERS | 1 + metaflow/plugins/uv/CODEOWNERS | 1 + metaflow/runner/CODEOWNERS | 1 + metaflow/sidecar/CODEOWNERS | 1 + metaflow/system/CODEOWNERS | 1 + metaflow/tracing/CODEOWNERS | 1 + metaflow/tutorials/CODEOWNERS | 1 + metaflow/user_configs/CODEOWNERS | 1 + metaflow/user_decorators/CODEOWNERS | 1 + 38 files changed, 146 insertions(+), 137 deletions(-) create mode 100644 .codeowners-generatorrc create mode 100644 .github/workflows/codeowners.yml create mode 100644 CODEOWNERS create mode 100644 devtools/CODEOWNERS create mode 100644 metaflow/cli_components/CODEOWNERS create mode 100644 metaflow/client/CODEOWNERS create mode 100644 metaflow/cmd/CODEOWNERS create mode 100644 metaflow/datastore/CODEOWNERS create mode 100644 metaflow/extension_support/CODEOWNERS create mode 100644 metaflow/metadata_provider/CODEOWNERS create mode 100644 metaflow/mflog/CODEOWNERS create mode 100644 metaflow/package/CODEOWNERS create mode 100644 metaflow/packaging_sys/CODEOWNERS create mode 100644 metaflow/plugins/CODEOWNERS create mode 100644 metaflow/plugins/airflow/CODEOWNERS create mode 100644 metaflow/plugins/argo/CODEOWNERS create mode 100644 metaflow/plugins/aws/CODEOWNERS create mode 100644 metaflow/plugins/azure/CODEOWNERS create mode 100644 metaflow/plugins/cards/CODEOWNERS create mode 100644 metaflow/plugins/datastores/CODEOWNERS create mode 100644 metaflow/plugins/datatools/CODEOWNERS create mode 100644 metaflow/plugins/env_escape/CODEOWNERS create mode 100644 metaflow/plugins/exit_hook/CODEOWNERS create mode 100644 metaflow/plugins/frameworks/CODEOWNERS create mode 100644 metaflow/plugins/gcp/CODEOWNERS create mode 100644 metaflow/plugins/kubernetes/CODEOWNERS create mode 100644 metaflow/plugins/metadata_providers/CODEOWNERS create mode 100644 metaflow/plugins/pypi/CODEOWNERS create mode 100644 metaflow/plugins/secrets/CODEOWNERS create mode 100644 metaflow/plugins/uv/CODEOWNERS create mode 100644 metaflow/runner/CODEOWNERS create mode 100644 metaflow/sidecar/CODEOWNERS create mode 100644 metaflow/system/CODEOWNERS create mode 100644 metaflow/tracing/CODEOWNERS create mode 100644 metaflow/tutorials/CODEOWNERS create mode 100644 metaflow/user_configs/CODEOWNERS create mode 100644 metaflow/user_decorators/CODEOWNERS diff --git a/.codeowners-generatorrc b/.codeowners-generatorrc new file mode 100644 index 00000000000..b39cc3b509c --- /dev/null +++ b/.codeowners-generatorrc @@ -0,0 +1,6 @@ +{ + "output": ".github/CODEOWNERS", + "useMaintainers": false, + "includes": ["**/CODEOWNERS", "!.github/CODEOWNERS", "!node_modules"], + "groupSourceComments": true +} diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 27bdcdf68d2..4adec30469d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,137 +1,83 @@ -# Metaflow CODEOWNERS -# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners -# -# Last-match-wins: more specific paths override the default. -# Each owner must have write access to the repository. - -# Default - core maintainers review everything -* @savingoyal @saikonen @romain-intel - -# Core runtime & flow definition -metaflow/runtime.py @romain-intel @savingoyal @talsperre -metaflow/task.py @romain-intel @savingoyal @talsperre -metaflow/flowspec.py @romain-intel @talsperre -metaflow/decorators.py @romain-intel @saikonen @npow @talsperre -metaflow/graph.py @romain-intel -metaflow/parameters.py @romain-intel @savingoyal @saikonen -metaflow/metaflow_current.py @valayDave @romain-intel -metaflow/metaflow_environment.py @savingoyal @romain-intel @saikonen -metaflow/metaflow_config.py @npow @talsperre @savingoyal -metaflow/includefile.py @romain-intel @savingoyal @npow -metaflow/util.py @romain-intel @savingoyal @saikonen -metaflow/events.py @savingoyal @romain-intel -metaflow/integrations.py @savingoyal @romain-intel - -# Client API -metaflow/client/ @romain-intel @savingoyal @talsperre - -# Runner -metaflow/runner/ @madhur-ob @romain-intel @npow @talsperre - -# CLI -metaflow/cli.py @romain-intel @savingoyal @talsperre -metaflow/cli_components/ @romain-intel @savingoyal @talsperre - -# Datastore -metaflow/datastore/ @saikonen @savingoyal @talsperre - -# Metadata provider -metaflow/metadata_provider/ @savingoyal @saikonen - -# Metadata -metaflow/metadata/ @savingoyal @romain-intel - -# Extension support -metaflow/extension_support/ @romain-intel - -# Logging -metaflow/mflog/ @savingoyal @romain-intel - -# System (logger & monitor) -metaflow/system/ @savingoyal - -# Tracing -metaflow/tracing/ @saikonen @savingoyal - -# Sidecar -metaflow/sidecar/ @romain-intel @savingoyal - -# Packaging -metaflow/package/ @romain-intel @saikonen -metaflow/packaging_sys/ @romain-intel @saikonen - -# User configs -metaflow/user_configs/ @romain-intel @saikonen - -# User decorators / mutable flow -metaflow/user_decorators/ @talsperre @romain-intel - -# Commands -metaflow/cmd/ @savingoyal @romain-intel @madhur-ob @npow -metaflow/cmd/develop/ @talsperre @npow -metaflow/cmd/code/ @npow - -# Tutorials -metaflow/tutorials/ @savingoyal @romain-intel - -# Devtools -devtools/ @npow @savingoyal - -# --- Plugins --- - -# Cards -metaflow/plugins/cards/ @valayDave @romain-intel - -# Argo Workflows -metaflow/plugins/argo/ @saikonen @savingoyal - -# Airflow -metaflow/plugins/airflow/ @romain-intel @valayDave - -# Kubernetes -metaflow/plugins/kubernetes/ @savingoyal @saikonen @valayDave - -# AWS (Batch, Step Functions, Secrets Manager) -metaflow/plugins/aws/ @savingoyal @romain-intel @npow - -# Events decorator -metaflow/plugins/events_decorator.py @talsperre @savingoyal - -# S3 datatools -metaflow/plugins/datatools/ @npow @savingoyal @talsperre - -# Datastores (S3, Azure, GCS, local) -metaflow/plugins/datastores/ @saikonen @savingoyal @npow - -# Azure -metaflow/plugins/azure/ @romain-intel @madhur-ob - -# GCP -metaflow/plugins/gcp/ @madhur-ob - -# ML frameworks (PyTorch etc.) -metaflow/plugins/frameworks/ @savingoyal - -# Exit hook -metaflow/plugins/exit_hook/ @saikonen - -# Metadata providers (service, local, spin) -metaflow/plugins/metadata_providers/ @savingoyal -metaflow/plugins/metadata/ @romain-intel @savingoyal - -# PyPI / Conda packaging -metaflow/plugins/pypi/ @saikonen @savingoyal - -# UV packaging -metaflow/plugins/uv/ @saikonen - -# Secrets -metaflow/plugins/secrets/ @saikonen - -# Env escape -metaflow/plugins/env_escape/ @romain-intel - -# --- Infrastructure --- - -# CI / GitHub Actions -.github/ @savingoyal @saikonen @madhur-ob @npow +# This file is auto-generated by codeowners-generator. DO NOT EDIT MANUALLY. +# To regenerate: npx codeowners-generator generate +# To add/change ownership, edit the CODEOWNERS file in the relevant directory. + +#################################### Generated content - do not edit! #################################### +# This block has been generated with codeowners-generator (for more information https://github.com/gagoar/codeowners-generator) +# Don't worry, the content outside this block will be kept. + +# Rules extracted from CODEOWNERS +/**/* @savingoyal @saikonen @romain-intel +/**/.github/ @savingoyal @saikonen @madhur-ob @npow +# Rule extracted from devtools/CODEOWNERS +/devtools/**/* @npow @savingoyal +# Rule extracted from metaflow/cli_components/CODEOWNERS +/metaflow/cli_components/**/* @romain-intel @savingoyal @talsperre +# Rule extracted from metaflow/client/CODEOWNERS +/metaflow/client/**/* @romain-intel @savingoyal @talsperre +# Rules extracted from metaflow/cmd/CODEOWNERS +/metaflow/cmd/**/* @savingoyal @romain-intel @madhur-ob @npow +/metaflow/cmd/**/develop/ @talsperre @npow +/metaflow/cmd/**/code/ @npow +# Rule extracted from metaflow/datastore/CODEOWNERS +/metaflow/datastore/**/* @saikonen @savingoyal @talsperre +# Rule extracted from metaflow/extension_support/CODEOWNERS +/metaflow/extension_support/**/* @romain-intel +# Rule extracted from metaflow/metadata_provider/CODEOWNERS +/metaflow/metadata_provider/**/* @savingoyal @saikonen +# Rule extracted from metaflow/mflog/CODEOWNERS +/metaflow/mflog/**/* @savingoyal @romain-intel +# Rule extracted from metaflow/package/CODEOWNERS +/metaflow/package/**/* @romain-intel @saikonen +# Rule extracted from metaflow/packaging_sys/CODEOWNERS +/metaflow/packaging_sys/**/* @romain-intel @saikonen +# Rule extracted from metaflow/plugins/CODEOWNERS +/metaflow/plugins/**/events_decorator.py @talsperre @savingoyal +# Rule extracted from metaflow/runner/CODEOWNERS +/metaflow/runner/**/* @madhur-ob @romain-intel @npow @talsperre +# Rule extracted from metaflow/sidecar/CODEOWNERS +/metaflow/sidecar/**/* @romain-intel @savingoyal +# Rule extracted from metaflow/system/CODEOWNERS +/metaflow/system/**/* @savingoyal +# Rule extracted from metaflow/tracing/CODEOWNERS +/metaflow/tracing/**/* @saikonen @savingoyal +# Rule extracted from metaflow/tutorials/CODEOWNERS +/metaflow/tutorials/**/* @savingoyal @romain-intel +# Rule extracted from metaflow/user_configs/CODEOWNERS +/metaflow/user_configs/**/* @romain-intel @saikonen +# Rule extracted from metaflow/user_decorators/CODEOWNERS +/metaflow/user_decorators/**/* @talsperre @romain-intel +# Rule extracted from metaflow/plugins/airflow/CODEOWNERS +/metaflow/plugins/airflow/**/* @romain-intel @valayDave +# Rule extracted from metaflow/plugins/argo/CODEOWNERS +/metaflow/plugins/argo/**/* @saikonen @savingoyal +# Rule extracted from metaflow/plugins/aws/CODEOWNERS +/metaflow/plugins/aws/**/* @savingoyal @romain-intel @npow +# Rule extracted from metaflow/plugins/azure/CODEOWNERS +/metaflow/plugins/azure/**/* @romain-intel @madhur-ob +# Rule extracted from metaflow/plugins/cards/CODEOWNERS +/metaflow/plugins/cards/**/* @valayDave @romain-intel +# Rule extracted from metaflow/plugins/datastores/CODEOWNERS +/metaflow/plugins/datastores/**/* @saikonen @savingoyal @npow +# Rule extracted from metaflow/plugins/datatools/CODEOWNERS +/metaflow/plugins/datatools/**/* @npow @savingoyal @talsperre +# Rule extracted from metaflow/plugins/env_escape/CODEOWNERS +/metaflow/plugins/env_escape/**/* @romain-intel +# Rule extracted from metaflow/plugins/exit_hook/CODEOWNERS +/metaflow/plugins/exit_hook/**/* @saikonen +# Rule extracted from metaflow/plugins/frameworks/CODEOWNERS +/metaflow/plugins/frameworks/**/* @savingoyal +# Rule extracted from metaflow/plugins/gcp/CODEOWNERS +/metaflow/plugins/gcp/**/* @madhur-ob +# Rule extracted from metaflow/plugins/kubernetes/CODEOWNERS +/metaflow/plugins/kubernetes/**/* @savingoyal @saikonen @valayDave +# Rule extracted from metaflow/plugins/metadata_providers/CODEOWNERS +/metaflow/plugins/metadata_providers/**/* @savingoyal +# Rule extracted from metaflow/plugins/pypi/CODEOWNERS +/metaflow/plugins/pypi/**/* @saikonen @savingoyal +# Rule extracted from metaflow/plugins/secrets/CODEOWNERS +/metaflow/plugins/secrets/**/* @saikonen +# Rule extracted from metaflow/plugins/uv/CODEOWNERS +/metaflow/plugins/uv/**/* @saikonen + +#################################### Generated content - do not edit! #################################### \ No newline at end of file diff --git a/.github/workflows/codeowners.yml b/.github/workflows/codeowners.yml new file mode 100644 index 00000000000..4605b541c37 --- /dev/null +++ b/.github/workflows/codeowners.yml @@ -0,0 +1,16 @@ +name: CODEOWNERS check + +on: + pull_request: + paths: + - '**/CODEOWNERS' + - '.codeowners-generatorrc' + +jobs: + check-codeowners: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Verify generated CODEOWNERS is up to date + run: npx codeowners-generator generate --check diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 00000000000..f7c8e7182f0 --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1,5 @@ +# Default - core maintainers review everything +* @savingoyal @saikonen @romain-intel + +# CI / GitHub Actions +.github/ @savingoyal @saikonen @madhur-ob @npow diff --git a/devtools/CODEOWNERS b/devtools/CODEOWNERS new file mode 100644 index 00000000000..36d46d17f9d --- /dev/null +++ b/devtools/CODEOWNERS @@ -0,0 +1 @@ +* @npow @savingoyal diff --git a/metaflow/cli_components/CODEOWNERS b/metaflow/cli_components/CODEOWNERS new file mode 100644 index 00000000000..e5ffa0fee61 --- /dev/null +++ b/metaflow/cli_components/CODEOWNERS @@ -0,0 +1 @@ +* @romain-intel @savingoyal @talsperre diff --git a/metaflow/client/CODEOWNERS b/metaflow/client/CODEOWNERS new file mode 100644 index 00000000000..e5ffa0fee61 --- /dev/null +++ b/metaflow/client/CODEOWNERS @@ -0,0 +1 @@ +* @romain-intel @savingoyal @talsperre diff --git a/metaflow/cmd/CODEOWNERS b/metaflow/cmd/CODEOWNERS new file mode 100644 index 00000000000..a5952439aa2 --- /dev/null +++ b/metaflow/cmd/CODEOWNERS @@ -0,0 +1,3 @@ +* @savingoyal @romain-intel @madhur-ob @npow +develop/ @talsperre @npow +code/ @npow diff --git a/metaflow/datastore/CODEOWNERS b/metaflow/datastore/CODEOWNERS new file mode 100644 index 00000000000..e75e15a2f74 --- /dev/null +++ b/metaflow/datastore/CODEOWNERS @@ -0,0 +1 @@ +* @saikonen @savingoyal @talsperre diff --git a/metaflow/extension_support/CODEOWNERS b/metaflow/extension_support/CODEOWNERS new file mode 100644 index 00000000000..f8de920d3df --- /dev/null +++ b/metaflow/extension_support/CODEOWNERS @@ -0,0 +1 @@ +* @romain-intel diff --git a/metaflow/metadata_provider/CODEOWNERS b/metaflow/metadata_provider/CODEOWNERS new file mode 100644 index 00000000000..d2bc2a97eb3 --- /dev/null +++ b/metaflow/metadata_provider/CODEOWNERS @@ -0,0 +1 @@ +* @savingoyal @saikonen diff --git a/metaflow/mflog/CODEOWNERS b/metaflow/mflog/CODEOWNERS new file mode 100644 index 00000000000..3cf416fe3cd --- /dev/null +++ b/metaflow/mflog/CODEOWNERS @@ -0,0 +1 @@ +* @savingoyal @romain-intel diff --git a/metaflow/package/CODEOWNERS b/metaflow/package/CODEOWNERS new file mode 100644 index 00000000000..e6c79f47760 --- /dev/null +++ b/metaflow/package/CODEOWNERS @@ -0,0 +1 @@ +* @romain-intel @saikonen diff --git a/metaflow/packaging_sys/CODEOWNERS b/metaflow/packaging_sys/CODEOWNERS new file mode 100644 index 00000000000..e6c79f47760 --- /dev/null +++ b/metaflow/packaging_sys/CODEOWNERS @@ -0,0 +1 @@ +* @romain-intel @saikonen diff --git a/metaflow/plugins/CODEOWNERS b/metaflow/plugins/CODEOWNERS new file mode 100644 index 00000000000..78fa97b1be0 --- /dev/null +++ b/metaflow/plugins/CODEOWNERS @@ -0,0 +1 @@ +events_decorator.py @talsperre @savingoyal diff --git a/metaflow/plugins/airflow/CODEOWNERS b/metaflow/plugins/airflow/CODEOWNERS new file mode 100644 index 00000000000..e4e72db144a --- /dev/null +++ b/metaflow/plugins/airflow/CODEOWNERS @@ -0,0 +1 @@ +* @romain-intel @valayDave diff --git a/metaflow/plugins/argo/CODEOWNERS b/metaflow/plugins/argo/CODEOWNERS new file mode 100644 index 00000000000..8b6febb7826 --- /dev/null +++ b/metaflow/plugins/argo/CODEOWNERS @@ -0,0 +1 @@ +* @saikonen @savingoyal diff --git a/metaflow/plugins/aws/CODEOWNERS b/metaflow/plugins/aws/CODEOWNERS new file mode 100644 index 00000000000..b7e21fb62b0 --- /dev/null +++ b/metaflow/plugins/aws/CODEOWNERS @@ -0,0 +1 @@ +* @savingoyal @romain-intel @npow diff --git a/metaflow/plugins/azure/CODEOWNERS b/metaflow/plugins/azure/CODEOWNERS new file mode 100644 index 00000000000..aa4eb390e60 --- /dev/null +++ b/metaflow/plugins/azure/CODEOWNERS @@ -0,0 +1 @@ +* @romain-intel @madhur-ob diff --git a/metaflow/plugins/cards/CODEOWNERS b/metaflow/plugins/cards/CODEOWNERS new file mode 100644 index 00000000000..28bbe079272 --- /dev/null +++ b/metaflow/plugins/cards/CODEOWNERS @@ -0,0 +1 @@ +* @valayDave @romain-intel diff --git a/metaflow/plugins/datastores/CODEOWNERS b/metaflow/plugins/datastores/CODEOWNERS new file mode 100644 index 00000000000..152a2abceb7 --- /dev/null +++ b/metaflow/plugins/datastores/CODEOWNERS @@ -0,0 +1 @@ +* @saikonen @savingoyal @npow diff --git a/metaflow/plugins/datatools/CODEOWNERS b/metaflow/plugins/datatools/CODEOWNERS new file mode 100644 index 00000000000..b6cc82dd684 --- /dev/null +++ b/metaflow/plugins/datatools/CODEOWNERS @@ -0,0 +1 @@ +* @npow @savingoyal @talsperre diff --git a/metaflow/plugins/env_escape/CODEOWNERS b/metaflow/plugins/env_escape/CODEOWNERS new file mode 100644 index 00000000000..f8de920d3df --- /dev/null +++ b/metaflow/plugins/env_escape/CODEOWNERS @@ -0,0 +1 @@ +* @romain-intel diff --git a/metaflow/plugins/exit_hook/CODEOWNERS b/metaflow/plugins/exit_hook/CODEOWNERS new file mode 100644 index 00000000000..661b0893b65 --- /dev/null +++ b/metaflow/plugins/exit_hook/CODEOWNERS @@ -0,0 +1 @@ +* @saikonen diff --git a/metaflow/plugins/frameworks/CODEOWNERS b/metaflow/plugins/frameworks/CODEOWNERS new file mode 100644 index 00000000000..5b9720bc4a5 --- /dev/null +++ b/metaflow/plugins/frameworks/CODEOWNERS @@ -0,0 +1 @@ +* @savingoyal diff --git a/metaflow/plugins/gcp/CODEOWNERS b/metaflow/plugins/gcp/CODEOWNERS new file mode 100644 index 00000000000..e85d29b0cb9 --- /dev/null +++ b/metaflow/plugins/gcp/CODEOWNERS @@ -0,0 +1 @@ +* @madhur-ob diff --git a/metaflow/plugins/kubernetes/CODEOWNERS b/metaflow/plugins/kubernetes/CODEOWNERS new file mode 100644 index 00000000000..2236eb65970 --- /dev/null +++ b/metaflow/plugins/kubernetes/CODEOWNERS @@ -0,0 +1 @@ +* @savingoyal @saikonen @valayDave diff --git a/metaflow/plugins/metadata_providers/CODEOWNERS b/metaflow/plugins/metadata_providers/CODEOWNERS new file mode 100644 index 00000000000..5b9720bc4a5 --- /dev/null +++ b/metaflow/plugins/metadata_providers/CODEOWNERS @@ -0,0 +1 @@ +* @savingoyal diff --git a/metaflow/plugins/pypi/CODEOWNERS b/metaflow/plugins/pypi/CODEOWNERS new file mode 100644 index 00000000000..8b6febb7826 --- /dev/null +++ b/metaflow/plugins/pypi/CODEOWNERS @@ -0,0 +1 @@ +* @saikonen @savingoyal diff --git a/metaflow/plugins/secrets/CODEOWNERS b/metaflow/plugins/secrets/CODEOWNERS new file mode 100644 index 00000000000..661b0893b65 --- /dev/null +++ b/metaflow/plugins/secrets/CODEOWNERS @@ -0,0 +1 @@ +* @saikonen diff --git a/metaflow/plugins/uv/CODEOWNERS b/metaflow/plugins/uv/CODEOWNERS new file mode 100644 index 00000000000..661b0893b65 --- /dev/null +++ b/metaflow/plugins/uv/CODEOWNERS @@ -0,0 +1 @@ +* @saikonen diff --git a/metaflow/runner/CODEOWNERS b/metaflow/runner/CODEOWNERS new file mode 100644 index 00000000000..9d871e8beb8 --- /dev/null +++ b/metaflow/runner/CODEOWNERS @@ -0,0 +1 @@ +* @madhur-ob @romain-intel @npow @talsperre diff --git a/metaflow/sidecar/CODEOWNERS b/metaflow/sidecar/CODEOWNERS new file mode 100644 index 00000000000..53520e591c3 --- /dev/null +++ b/metaflow/sidecar/CODEOWNERS @@ -0,0 +1 @@ +* @romain-intel @savingoyal diff --git a/metaflow/system/CODEOWNERS b/metaflow/system/CODEOWNERS new file mode 100644 index 00000000000..5b9720bc4a5 --- /dev/null +++ b/metaflow/system/CODEOWNERS @@ -0,0 +1 @@ +* @savingoyal diff --git a/metaflow/tracing/CODEOWNERS b/metaflow/tracing/CODEOWNERS new file mode 100644 index 00000000000..8b6febb7826 --- /dev/null +++ b/metaflow/tracing/CODEOWNERS @@ -0,0 +1 @@ +* @saikonen @savingoyal diff --git a/metaflow/tutorials/CODEOWNERS b/metaflow/tutorials/CODEOWNERS new file mode 100644 index 00000000000..3cf416fe3cd --- /dev/null +++ b/metaflow/tutorials/CODEOWNERS @@ -0,0 +1 @@ +* @savingoyal @romain-intel diff --git a/metaflow/user_configs/CODEOWNERS b/metaflow/user_configs/CODEOWNERS new file mode 100644 index 00000000000..e6c79f47760 --- /dev/null +++ b/metaflow/user_configs/CODEOWNERS @@ -0,0 +1 @@ +* @romain-intel @saikonen diff --git a/metaflow/user_decorators/CODEOWNERS b/metaflow/user_decorators/CODEOWNERS new file mode 100644 index 00000000000..89bb02dfebd --- /dev/null +++ b/metaflow/user_decorators/CODEOWNERS @@ -0,0 +1 @@ +* @talsperre @romain-intel From b4d5e243db6a6a2f6ccc967ffab446a22e9b8f0d Mon Sep 17 00:00:00 2001 From: Nissan Pow Date: Sat, 21 Feb 2026 21:49:33 -0800 Subject: [PATCH 3/6] Update .github/workflows/codeowners.yml Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- .github/workflows/codeowners.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeowners.yml b/.github/workflows/codeowners.yml index 4605b541c37..e9e54aeb93a 100644 --- a/.github/workflows/codeowners.yml +++ b/.github/workflows/codeowners.yml @@ -13,4 +13,4 @@ jobs: - uses: actions/checkout@v4 - name: Verify generated CODEOWNERS is up to date - run: npx codeowners-generator generate --check + run: npx codeowners-generator@2.4.0 generate --check From 2b75d42f06cda37c5d70680dc33a2571a154447d Mon Sep 17 00:00:00 2001 From: Nissan Pow Date: Sat, 21 Feb 2026 22:03:56 -0800 Subject: [PATCH 4/6] Fix CODEOWNERS trailing newline and add workflow permissions Add missing trailing newline to .github/CODEOWNERS and set permissions: read-all on the codeowners workflow for least-privilege. --- .github/CODEOWNERS | 2 +- .github/workflows/codeowners.yml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4adec30469d..8aa86d9b532 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -80,4 +80,4 @@ # Rule extracted from metaflow/plugins/uv/CODEOWNERS /metaflow/plugins/uv/**/* @saikonen -#################################### Generated content - do not edit! #################################### \ No newline at end of file +#################################### Generated content - do not edit! #################################### diff --git a/.github/workflows/codeowners.yml b/.github/workflows/codeowners.yml index e9e54aeb93a..b2a65579c28 100644 --- a/.github/workflows/codeowners.yml +++ b/.github/workflows/codeowners.yml @@ -6,6 +6,8 @@ on: - '**/CODEOWNERS' - '.codeowners-generatorrc' +permissions: read-all + jobs: check-codeowners: runs-on: ubuntu-latest From bf3ea34401a78e5e4d93e75065fabad50868cb0e Mon Sep 17 00:00:00 2001 From: Nissan Pow Date: Sun, 22 Feb 2026 00:18:21 -0800 Subject: [PATCH 5/6] Regenerate CODEOWNERS to match codeowners-generator output The previous commit manually adjusted formatting that didn't match what codeowners-generator produces, causing --check to fail in CI. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/CODEOWNERS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8aa86d9b532..90fff9230df 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2,6 +2,7 @@ # To regenerate: npx codeowners-generator generate # To add/change ownership, edit the CODEOWNERS file in the relevant directory. + #################################### Generated content - do not edit! #################################### # This block has been generated with codeowners-generator (for more information https://github.com/gagoar/codeowners-generator) # Don't worry, the content outside this block will be kept. @@ -80,4 +81,4 @@ # Rule extracted from metaflow/plugins/uv/CODEOWNERS /metaflow/plugins/uv/**/* @saikonen -#################################### Generated content - do not edit! #################################### +#################################### Generated content - do not edit! #################################### \ No newline at end of file From cf17985c67cf720fdc249ecfe16bb60a3902f4e4 Mon Sep 17 00:00:00 2001 From: Nissan Pow Date: Sun, 22 Feb 2026 10:07:23 -0800 Subject: [PATCH 6/6] Apply suggestions from code review Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- .github/workflows/codeowners.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeowners.yml b/.github/workflows/codeowners.yml index b2a65579c28..6bd892ce19f 100644 --- a/.github/workflows/codeowners.yml +++ b/.github/workflows/codeowners.yml @@ -12,7 +12,7 @@ jobs: check-codeowners: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Verify generated CODEOWNERS is up to date run: npx codeowners-generator@2.4.0 generate --check