summaryrefslogtreecommitdiffstats
path: root/.versionrc.js
blob: f699a07957e878e32d0a6d0a949d96bc478bee4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*
 * Copyright (c) 2021, Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

/* eslint-env es6 */

"use strict";

const fs = require("fs");
const yaml = require("js-yaml");

/*
 * The types and scopes accepted by both Commitlint and Commitizen are defined by the changelog
 * configuration file - `changelog.yaml` - as they decide which section of the changelog commits
 * with a given type and scope are placed in.
 */

let changelog;

try {
    const contents = fs.readFileSync("changelog.yaml", "utf8");

    changelog = yaml.load(contents);
} catch (err) {
    console.log(err);

    throw err;
}

/*
 * The next couple of functions are just used to transform the changelog YAML configuration
 * structure into one accepted by the Conventional Changelog adapter (conventional-changelog-tf-a).
 */

function getTypes(sections) {
    return sections.map(section => {
        return {
            "type": section.type,
            "section": section.hidden ? undefined : section.title,
            "hidden": section.hidden || false,
        };
    })
}

function getSections(subsections) {
    return subsections.flatMap(subsection => {
        const scope = subsection.scope ? [ subsection.scope ] : [];

        return {
            "title": subsection.title,
            "sections": getSections(subsection.subsections || []),
            "scopes": scope.concat(subsection.deprecated || []),
        };
    })
};

const types = getTypes(changelog.sections);
const sections = getSections(changelog.subsections);

module.exports = {
    "header": "# Change Log & Release Notes\n\nThis document contains a summary of the new features, changes, fixes and known\nissues in each release of Trusted Firmware-A.\n",
    "preset": {
        "name": "tf-a",
        "commitUrlFormat": "https://review.trustedfirmware.org/plugins/gitiles/TF-A/trusted-firmware-a/+/{{hash}}",
        "compareUrlFormat": "https://review.trustedfirmware.org/plugins/gitiles/TF-A/trusted-firmware-a/+/refs/tags/{{previousTag}}..refs/tags/{{currentTag}}",
        "userUrlFormat": "https://github.com/{{user}}",

        "types": types,
        "sections": sections,
    },
    "infile": "docs/change-log.md",
    "skip": {
        "commit": true,
        "tag": true
    },
    "bumpFiles": [
        {
            "filename": "package.json",
            "type": "json"
        },
        {
            "filename": "package-lock.json",
            "type": "json"
        },
        {
            "filename": "tools/conventional-changelog-tf-a/package.json",
            "type": "json"
        },
        {
            "filename": "Makefile",
            "updater": {
                "readVersion": function (contents) {
                    const major = contents.match(/^VERSION_MAJOR\s*:=\s*(\d+?)$/m)[1];
                    const minor = contents.match(/^VERSION_MINOR\s*:=\s*(\d+?)$/m)[1];

                    return `${major}.${minor}.0`;
                },

                "writeVersion": function (contents, version) {
                    const major = version.split(".")[0];
                    const minor = version.split(".")[1];

                    contents = contents.replace(/^(VERSION_MAJOR\s*:=\s*)(\d+?)$/m, `$1${major}`);
                    contents = contents.replace(/^(VERSION_MINOR\s*:=\s*)(\d+?)$/m, `$1${minor}`);

                    return contents;
                }
            }
        }
    ]
};