Skip to content

Latest commit

Β 

History

History
Β 
Β 

config-nx-scopes

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Lint your nx project commits

@commitlint/config-nx-scopes

Shareable commitlint config enforcing nx project and workspace names as scopes. Use with @commitlint/cli and @commitlint/prompt-cli.

Getting started

npm install --save-dev @commitlint/config-nx-scopes @commitlint/cli
echo "module.exports = {extends: ['@commitlint/config-nx-scopes']};" > commitlint.config.js

Filtering projects

You can filter projects by providing a filter function as the second parameter to getProjects(). The function will be called with an object containing each projects' name, projectType, and tags. Simply return a boolean to indicate whether the project should be included or not.

As an example, the following code demonstrates how to select only applications that are not end-to-end tests.

In your .commitlintrc.js file:

const {
  utils: {getProjects},
} = require('@commitlint/config-nx-scopes');

module.exports = {
  rules: {
    'scope-enum': async (ctx) => [
      2,
      'always',
      [
        ...(await getProjects(
          ctx,
          ({name, projectType}) =>
            !name.includes('e2e') && projectType == 'application'
        )),
      ],
    ],
  },
  // . . .
};

Here is another example where projects tagged with 'stage:end-of-life' are not allowed to be used as the scope for a commit.

In your .commitlintrc.js file:

const {
  utils: {getProjects},
} = require('@commitlint/config-nx-scopes');

module.exports = {
  rules: {
    'scope-enum': async (ctx) => [
      2,
      'always',
      [
        ...(await getProjects(
          ctx,
          ({tags}) => !tags.includes('stage:end-of-life')
        )),
      ],
    ],
  },
  // . . .
};

Examples

❯ cat commitlint.config.js
{
  extends: ['@commitlint/config-nx-scopes']
}

❯ tree packages

packages
β”œβ”€β”€ api
β”œβ”€β”€ app
└── web

❯ echo "build(api): change something in api's build" | commitlint
β§—   input: build(api): change something in api's build
βœ”   found 0 problems, 0 warnings

❯ echo "test(foo): this won't pass" | commitlint
β§—   input: test(foo): this won't pass
βœ–   scope must be one of [api, app, web] [scope-enum]
βœ–   found 1 problems, 0 warnings

❯ echo "ci: do some general maintenance" | commitlint
β§—   input: ci: do some general maintenance
βœ”   found 0 problems, 0 warnings

Consult docs/rules for a list of available rules.