xref: /rk3399_ARM-atf/.commitlintrc.js (revision 022f8fedd4d7589454043c4761fb3e67ef032101)
1fa3a1382SChris Kay/*
2*022f8fedSYann Gautier * Copyright (c) 2021-2025, Arm Limited and Contributors. All rights reserved.
3fa3a1382SChris Kay *
4fa3a1382SChris Kay * SPDX-License-Identifier: BSD-3-Clause
5fa3a1382SChris Kay */
6fa3a1382SChris Kay
7fa3a1382SChris Kay/* eslint-env es6 */
8fa3a1382SChris Kay
9fa3a1382SChris Kay"use strict";
10fa3a1382SChris Kay
11c7080f67SChris Kayimport fs from "fs";
12c7080f67SChris Kayimport rules from "@commitlint/rules";
13c7080f67SChris Kayimport yaml from "js-yaml";
14fa3a1382SChris Kay
15c4e8edabSChris Kay/*
16f64c5582SChris Kay * The types and scopes accepted by both Commitlint and Commitizen are defined by the changelog
17f64c5582SChris Kay * configuration file - `changelog.yaml` - as they decide which section of the changelog commits
18f64c5582SChris Kay * with a given type and scope are placed in.
19c4e8edabSChris Kay */
20c4e8edabSChris Kay
21f64c5582SChris Kaylet changelog;
22f64c5582SChris Kay
23f64c5582SChris Kaytry {
24f64c5582SChris Kay    const contents = fs.readFileSync("changelog.yaml", "utf8");
25f64c5582SChris Kay
26f64c5582SChris Kay    changelog = yaml.load(contents);
27f64c5582SChris Kay} catch (err) {
28f64c5582SChris Kay    console.log(err);
29f64c5582SChris Kay
30f64c5582SChris Kay    throw err;
31f64c5582SChris Kay}
32f64c5582SChris Kay
33f64c5582SChris Kayfunction getTypes(sections) {
34f64c5582SChris Kay    return sections.map(section => section.type)
35f64c5582SChris Kay}
36f64c5582SChris Kay
37f64c5582SChris Kayfunction getScopes(subsections) {
38f64c5582SChris Kay    return subsections.flatMap(subsection => {
39f64c5582SChris Kay        const scope = subsection.scope ? [subsection.scope] : [];
40f64c5582SChris Kay        const subscopes = getScopes(subsection.subsections || []);
41c4e8edabSChris Kay
42c4e8edabSChris Kay        return scope.concat(subscopes);
43c4e8edabSChris Kay    })
44c4e8edabSChris Kay};
45c4e8edabSChris Kay
46f64c5582SChris Kayconst types = getTypes(changelog.sections).sort(); /* Sort alphabetically */
47f64c5582SChris Kayconst scopes = getScopes(changelog.subsections).sort(); /* Sort alphabetically */
48c4e8edabSChris Kay
49c7080f67SChris Kayexport default {
50fa3a1382SChris Kay    extends: ["@commitlint/config-conventional"],
51fa3a1382SChris Kay    plugins: [
52fa3a1382SChris Kay        {
53fa3a1382SChris Kay            rules: {
54c7080f67SChris Kay                "signed-off-by-exists": rules["trailer-exists"],
55c7080f67SChris Kay                "change-id-exists": rules["trailer-exists"],
56fa3a1382SChris Kay            },
57fa3a1382SChris Kay        },
58fa3a1382SChris Kay    ],
59fa3a1382SChris Kay    rules: {
60f64c5582SChris Kay        "header-max-length": [1, "always", 50], /* Warning */
61f64c5582SChris Kay        "body-max-line-length": [1, "always", 72], /* Warning */
62fa3a1382SChris Kay
63fa3a1382SChris Kay        "change-id-exists": [1, "always", "Change-Id:"], /* Warning */
64fa3a1382SChris Kay        "signed-off-by-exists": [1, "always", "Signed-off-by:"], /* Warning */
65c4e8edabSChris Kay
66f64c5582SChris Kay        "type-case": [2, "always", "lower-case"], /* Error */
67f64c5582SChris Kay        "type-enum": [2, "always", types], /* Error */
68f64c5582SChris Kay
69804e52e9SYann Gautier        "scope-case": [2, "always", "lower-case"], /* Error */
70*022f8fedSYann Gautier        "scope-enum": [2, "always", scopes] /* Error */
71fa3a1382SChris Kay    },
72fa3a1382SChris Kay};
73