1/* 2 * Copyright (c) 2021-2024, Arm Limited. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7/* eslint-env es6 */ 8 9"use strict"; 10 11const fs = require("fs"); 12const yaml = require("js-yaml"); 13 14/* 15 * The types and scopes accepted by both Commitlint and Commitizen are defined by the changelog 16 * configuration file - `changelog.yaml` - as they decide which section of the changelog commits 17 * with a given type and scope are placed in. 18 */ 19 20let changelog; 21 22try { 23 const contents = fs.readFileSync("changelog.yaml", "utf8"); 24 25 changelog = yaml.load(contents); 26} catch (err) { 27 console.log(err); 28 29 throw err; 30} 31 32/* 33 * The next couple of functions are just used to transform the changelog YAML configuration 34 * structure into one accepted by the Conventional Changelog adapter (conventional-changelog-tf-a). 35 */ 36 37function getTypes(sections) { 38 return sections.map(section => { 39 return { 40 "type": section.type, 41 "section": section.hidden ? undefined : section.title, 42 "hidden": section.hidden || false, 43 }; 44 }) 45} 46 47function getSections(subsections) { 48 return subsections.flatMap(subsection => { 49 const scope = subsection.scope ? [ subsection.scope ] : []; 50 51 return { 52 "title": subsection.title, 53 "sections": getSections(subsection.subsections || []), 54 "scopes": scope.concat(subsection.deprecated || []), 55 }; 56 }) 57}; 58 59const types = getTypes(changelog.sections); 60const sections = getSections(changelog.subsections); 61 62module.exports = { 63 "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", 64 "preset": { 65 "name": "tf-a", 66 "commitUrlFormat": "https://review.trustedfirmware.org/plugins/gitiles/TF-A/trusted-firmware-a/+/{{hash}}", 67 "compareUrlFormat": "https://review.trustedfirmware.org/plugins/gitiles/TF-A/trusted-firmware-a/+/refs/tags/{{previousTag}}..refs/tags/{{currentTag}}", 68 "userUrlFormat": "https://github.com/{{user}}", 69 70 "types": types, 71 "sections": sections, 72 }, 73 "infile": "docs/change-log.md", 74 "skip": { 75 "commit": true, 76 "tag": true 77 }, 78 "bumpFiles": [ 79 { 80 "filename": "package.json", 81 "type": "json" 82 }, 83 { 84 "filename": "pyproject.toml", 85 "updater": { 86 "readVersion": function (contents) { 87 const _ver = contents.match(/version\s=.*"(\d+?)\.(\d+?)\.(\d+?)/); 88 89 return `${_ver[1]}.${_ver[2]}.${_ver[3]}`; 90 }, 91 92 "writeVersion": function (contents, version) { 93 const _ver = 'version = "' + version + '"' 94 95 return contents.replace(/^(version\s=\s")((\d).?)*$/m, _ver) 96 } 97 }, 98 }, 99 { 100 "filename": "package-lock.json", 101 "type": "json" 102 }, 103 { 104 "filename": "docs/conf.py", 105 "updater": { 106 "readVersion": function (contents) { 107 const _ver = contents.match(/version\s=.*"(\d+?)\.(\d+?)\.(\d+?)/); 108 109 return `${_ver[1]}.${_ver[2]}.${_ver[3]}`; 110 }, 111 112 "writeVersion": function (contents, version) { 113 const _ver = 'version = "' + version + '"' 114 const _rel = 'release = "' + version + '"' 115 116 contents = contents.replace(/^(version\s=\s")((\d).?)*$/m, _ver) 117 contents = contents.replace(/^(release\s=\s")((\d).?)*$/m, _rel) 118 return contents 119 } 120 }, 121 }, 122 { 123 "filename": "tools/conventional-changelog-tf-a/package.json", 124 "type": "json" 125 }, 126 { 127 "filename": "Makefile", 128 "updater": { 129 "readVersion": function (contents) { 130 const major = contents.match(/^VERSION_MAJOR\s*:=\s*(\d+?)$/m)[1]; 131 const minor = contents.match(/^VERSION_MINOR\s*:=\s*(\d+?)$/m)[1]; 132 const patch = contents.match(/^VERSION_PATCH\s*:=\s*(\d+?)$/m)[1]; 133 134 return `${major}.${minor}.${patch}`; 135 }, 136 137 "writeVersion": function (contents, version) { 138 const major = version.split(".")[0]; 139 const minor = version.split(".")[1]; 140 const patch = version.split(".")[2]; 141 142 contents = contents.replace(/^(VERSION_MAJOR\s*:=\s*)(\d+?)$/m, `$1${major}`); 143 contents = contents.replace(/^(VERSION_MINOR\s*:=\s*)(\d+?)$/m, `$1${minor}`); 144 contents = contents.replace(/^(VERSION_PATCH\s*:=\s*)(\d+?)$/m, `$1${patch}`); 145 146 return contents; 147 } 148 } 149 } 150 ] 151}; 152