This plugin provides Nx Powerpack users the ability to configure and maintain code owners for projects in an Nx workspace. Powerpack is available for Nx version 19.8 and higher.
The atomic unit of code in an Nx workspace is a project. Tasks, module boundaries and the Nx graph all train us to conceptualize the workspace as a collection of projects. The CODEOWNERS file, however, requires you to switch from a project mental model to a more low-level definition based on the folder structure of your workspace. The @nx/owners
plugin enables you to stay in the mental model that your workspace is a collection of projects as you define the ownership rules for your workspace. Nx will take care of compiling the project ownership rules into file-based ownership rules that GitHub, Bitbucket or GitLab can understand in the CODEOWNERS file.
The @nx/owners
plugin requires an Nx Powerpack license to function. Activating Powerpack is a simple process.
Get a License and Activate PowerpackUnlock all the features of the Nx CLI
Then, add the Owners plugin to your workspace.
Project or File-based Configuration
Section titled “Project or File-based Configuration”The ownership configuration is defined in the nx.json
file or in individual project configuration files. Nx then uses a sync generator to automatically compile those settings into a valid CODEOWNERS file for GitHub, Bitbucket or GitLab. See the plugin documentation for more details.
Define Project Owners:
{ "owners": { "format": "github", "patterns": [ { "description": "Joe's Rust projects", "projects": ["tag:rust"], "owners": ["@joelovesrust"] }, { "description": "Finance projects", "projects": ["finance-*"], "owners": ["@finance-team"] }, { "description": "Alphabet soup", "projects": ["admin", "books", "cart"], "owners": ["@alice", "@bob", "@cecil"] }, { "description": "CI Workflows", "files": [".github/workflows/**/*"], "owners": ["@devops"] } ] }}
{ "owners": { "**/*": ["@ahmed", "@petra"], "package.json": ["@ahmed"] },};
Nx Generates the CODEOWNERS file
# Joe's Rust projects/packages/rust-api @joelovesrust/packages/experimental-rust @joelovesrust
# Finance projects/packages/finance-ui @finance-team/packages/finance-data @finance-team
# Alphabet soup/packages/admin @alice @bob @cecil/packages/books @alice @bob @cecil/packages/cart @alice @bob @cecil
# CI Workflows.github/workflows/**/* @devops
/packages/my-project/ @ahmed @petra/packages/my-project/package.json @ahmed