xref: /aosp_15_r20/external/arm-trusted-firmware/.commitlintrc.js (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park/*
2*54fd6939SJiyong Park * Copyright (c) 2021, Arm Limited. All rights reserved.
3*54fd6939SJiyong Park *
4*54fd6939SJiyong Park * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park */
6*54fd6939SJiyong Park
7*54fd6939SJiyong Park/* eslint-env es6 */
8*54fd6939SJiyong Park
9*54fd6939SJiyong Park"use strict";
10*54fd6939SJiyong Park
11*54fd6939SJiyong Parkconst cz = require("./.cz.json");
12*54fd6939SJiyong Parkconst { "trailer-exists": trailerExists } = require("@commitlint/rules").default;
13*54fd6939SJiyong Park
14*54fd6939SJiyong Park/*
15*54fd6939SJiyong Park * Recursively fetch the project's supported scopes from the Commitizen configuration file. We use
16*54fd6939SJiyong Park * permit only the blessed scope for each section to encourage developers to use a consistent scope
17*54fd6939SJiyong Park * scheme.
18*54fd6939SJiyong Park */
19*54fd6939SJiyong Parkfunction getScopes(sections) {
20*54fd6939SJiyong Park    return sections.flatMap(section => {
21*54fd6939SJiyong Park        const scopes = section.scopes;
22*54fd6939SJiyong Park        const subscopes = getScopes(section.sections || []);
23*54fd6939SJiyong Park
24*54fd6939SJiyong Park        const scope = scopes ? [ scopes[0] ] : []; /* Only use the blessed scope */
25*54fd6939SJiyong Park
26*54fd6939SJiyong Park        return scope.concat(subscopes);
27*54fd6939SJiyong Park    })
28*54fd6939SJiyong Park};
29*54fd6939SJiyong Park
30*54fd6939SJiyong Parkconst scopes = getScopes(cz.sections); /* Contains every blessed scope */
31*54fd6939SJiyong Park
32*54fd6939SJiyong Parkmodule.exports = {
33*54fd6939SJiyong Park    extends: ["@commitlint/config-conventional"],
34*54fd6939SJiyong Park    plugins: [
35*54fd6939SJiyong Park        {
36*54fd6939SJiyong Park            rules: {
37*54fd6939SJiyong Park                "signed-off-by-exists": trailerExists,
38*54fd6939SJiyong Park                "change-id-exists": trailerExists,
39*54fd6939SJiyong Park            },
40*54fd6939SJiyong Park        },
41*54fd6939SJiyong Park    ],
42*54fd6939SJiyong Park    rules: {
43*54fd6939SJiyong Park        "body-max-line-length": [1, "always", cz.maxLineWidth], /* Warning */
44*54fd6939SJiyong Park        "header-max-length": [1, "always", cz.maxHeaderWidth], /* Warning */
45*54fd6939SJiyong Park
46*54fd6939SJiyong Park        "change-id-exists": [1, "always", "Change-Id:"], /* Warning */
47*54fd6939SJiyong Park        "signed-off-by-exists": [1, "always", "Signed-off-by:"], /* Warning */
48*54fd6939SJiyong Park
49*54fd6939SJiyong Park        "scope-case": [2, "always", "kebab-case"], /* Error */
50*54fd6939SJiyong Park        "scope-enum": [1, "always", scopes] /* Warning */
51*54fd6939SJiyong Park    },
52*54fd6939SJiyong Park};
53