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