Define Code Ownership at the Project Level

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/powerpack-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.

Owners Plugin Requires Nx Powerpack

The @nx/powerpack-owners plugin requires an Nx Powerpack license to function. Activating Powerpack is a simple process.

Buy a Powerpack LicenseUnlock all the features of Nx

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

Nx Generates the CODEOWNERS file

nx.json
1{ 2 "owners": { 3 "format": "github", 4 "patterns": [ 5 { 6 "description": "Joe's Rust projects", 7 "projects": ["tag:rust"], 8 "owners": ["@joelovesrust"] 9 }, 10 { 11 "description": "Finance projects", 12 "projects": ["finance-*"], 13 "owners": ["@finance-team"] 14 }, 15 { 16 "description": "Alphabet soup", 17 "projects": ["admin", "books", "cart"], 18 "owners": ["@alice", "@bob", "@cecil"] 19 }, 20 { 21 "description": "CI Workflows", 22 "files": [".github/workflows/**/*"], 23 "owners": ["@devops"] 24 } 25 ] 26 } 27} 28
.github/CODEOWNERS
1# Joe's Rust projects 2/packages/rust-api @joelovesrust 3/packages/experimental-rust @joelovesrust 4 5# Finance projects 6/packages/finance-ui @finance-team 7/packages/finance-data @finance-team 8 9# Alphabet soup 10/packages/admin @alice @bob @cecil 11/packages/books @alice @bob @cecil 12/packages/cart @alice @bob @cecil 13 14# CI Workflows 15.github/workflows/**/* @devops 16 17/packages/my-project/ @ahmed @petra 18/packages/my-project/package.json @ahmed 19
packages/my-project/project.json
1{ 2 "owners": { 3 "**/*": ["@ahmed", "@petra"], 4 "package.json": ["@ahmed"] 5 }, 6}; 7