diff --git a/CHANGELOG.md b/CHANGELOG.md index b858ceaea56..d4db63a9f96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1137,6 +1137,10 @@ should use 4.0.1-alpha.0 for testing. ## [Unreleased] +### Added + +#### web3-core + - Added rpc exception codes following eip-1474 as an experimental feature (if `useRpcCallSpecification` at `enableExperimentalFeatures` is `true`) (#5525) #### web3 diff --git a/fixtures/contracts/Basic.sol b/fixtures/contracts/Basic.sol index b0713759b14..cdb10b5ef1d 100644 --- a/fixtures/contracts/Basic.sol +++ b/fixtures/contracts/Basic.sol @@ -28,23 +28,11 @@ contract Basic { return boolValue; } - function getValues() - public - view - returns ( - uint256, - string memory, - bool - ) - { + function getValues() public view returns (uint256, string memory, bool) { return (intValue, stringValue, boolValue); } - function setValues( - uint256 _value, - string memory _stringValue, - bool _boolValue - ) public { + function setValues(uint256 _value, string memory _stringValue, bool _boolValue) public { intValue = _value; stringValue = _stringValue; boolValue = _boolValue; @@ -62,19 +50,11 @@ contract Basic { revert('REVERTED WITH REVERT'); } - function firesMultiValueEvent( - string memory str, - uint256 val, - bool flag - ) public { + function firesMultiValueEvent(string memory str, uint256 val, bool flag) public { emit MultiValueEvent(str, val, flag); } - function firesMultiValueIndexedEvent( - string memory str, - uint256 val, - bool flag - ) public { + function firesMultiValueIndexedEvent(string memory str, uint256 val, bool flag) public { emit MultiValueIndexedEvent(str, val, flag); } diff --git a/fixtures/contracts/Greeter.sol b/fixtures/contracts/Greeter.sol index 8fda2977aef..387ebe99fcd 100644 --- a/fixtures/contracts/Greeter.sol +++ b/fixtures/contracts/Greeter.sol @@ -3,29 +3,29 @@ pragma solidity ^0.8.13; contract Greeter { - uint256 counter; - string private greeting; + uint256 counter; + string private greeting; - event GREETING_CHANGING(string from, string to); - event GREETING_CHANGED(string greeting); + event GREETING_CHANGING(string from, string to); + event GREETING_CHANGED(string greeting); - constructor(string memory _greeting) { - greeting = _greeting; - counter = 0; - } + constructor(string memory _greeting) { + greeting = _greeting; + counter = 0; + } - function greet() public view returns (string memory) { - return greeting; - } + function greet() public view returns (string memory) { + return greeting; + } - function setGreeting(string memory _greeting) public returns (bool, string memory) { - emit GREETING_CHANGING(greeting, _greeting); - greeting = _greeting; - emit GREETING_CHANGED(greeting); - return (true, greeting); - } + function setGreeting(string memory _greeting) public returns (bool, string memory) { + emit GREETING_CHANGING(greeting, _greeting); + greeting = _greeting; + emit GREETING_CHANGED(greeting); + return (true, greeting); + } - function increment() public { - counter = counter + 1; - } + function increment() public { + counter = counter + 1; + } } diff --git a/package.json b/package.json index d5ea7346c18..8e417f741fa 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "build:web": "lerna run build:web --stream", "build:web:analyze": "lerna run build:web:analyze --stream", "build:docs": "cd docs && yarn install && yarn build", + "changelog": "ts-node scripts/changelog/src/index.ts", "clean": "lerna run clean --stream --parallel", "ganache:start": "WEB3_SYSTEM_TEST_BACKEND=ganache && ./scripts/ganache.sh start", "ganache:start:background": "WEB3_SYSTEM_TEST_BACKEND=ganache && ./scripts/ganache.sh start 1", @@ -50,9 +51,9 @@ "geth-binary:stop": "WEB3_SYSTEM_TEST_BACKEND=geth && ./scripts/geth_binary.sh stop", "lint": "lerna run lint --stream --parallel", "lint:fix": "lerna run lint:fix --stream --parallel", - "format": "lerna run format --stream --parallel", + "format": "lerna run format --stream --parallel && prettier --write ./scripts/**/*.ts", "test": "lerna run test --stream --parallel", - "test:unit": "lerna run test:unit --stream --parallel", + "test:unit": "lerna run test:unit --stream --parallel && jest --config=./scripts/jest.config.js", "test:integration": "lerna run test:integration --stream", "test:e2e:ganache:http": "./scripts/test-runner.sh ganache http", "test:e2e:ganache:ws": "./scripts/test-runner.sh ganache ws", diff --git a/packages/web3-core/src/web3_subscription_manager.ts b/packages/web3-core/src/web3_subscription_manager.ts index 78056ccfed3..5ca7842e663 100644 --- a/packages/web3-core/src/web3_subscription_manager.ts +++ b/packages/web3-core/src/web3_subscription_manager.ts @@ -23,7 +23,8 @@ import { Web3RequestManager, Web3RequestManagerEvent } from './web3_request_mana import { Web3SubscriptionConstructor } from './web3_subscriptions'; type ShouldUnsubscribeCondition = ({ - id: sub, + id, + sub, }: { id: string; sub: unknown; diff --git a/packages/web3-errors/src/index.ts b/packages/web3-errors/src/index.ts index 732074b9402..6d8b8fa13f5 100644 --- a/packages/web3-errors/src/index.ts +++ b/packages/web3-errors/src/index.ts @@ -28,4 +28,4 @@ export * from './errors/transaction_errors'; export * from './errors/utils_errors'; export * from './errors/response_errors'; export * from './errors/core_errors'; -export * from './errors/rpc_errors'; \ No newline at end of file +export * from './errors/rpc_errors'; diff --git a/packages/web3-eth-contract/test/fixtures/contracts/SampleStorageContract.sol b/packages/web3-eth-contract/test/fixtures/contracts/SampleStorageContract.sol index 2c0c640135d..617c3732fdb 100644 --- a/packages/web3-eth-contract/test/fixtures/contracts/SampleStorageContract.sol +++ b/packages/web3-eth-contract/test/fixtures/contracts/SampleStorageContract.sol @@ -18,17 +18,16 @@ along with web3.js. If not, see . pragma solidity ^0.8.7; contract SampleStorageContract { + uint256 uintNum; - uint256 uintNum; + event NEWNUM(uint256 param); - event NEWNUM(uint256 param); + function storeNum(uint256 param) public { + uintNum = param; + emit NEWNUM(param); + } - function storeNum(uint256 param) public { - uintNum = param; - emit NEWNUM(param); - } - - function retrieveNum() public view returns (uint256){ - return uintNum; - } -} \ No newline at end of file + function retrieveNum() public view returns (uint256) { + return uintNum; + } +} diff --git a/packages/web3-validator/src/utils.ts b/packages/web3-validator/src/utils.ts index 9178838500d..37b24c6ac45 100644 --- a/packages/web3-validator/src/utils.ts +++ b/packages/web3-validator/src/utils.ts @@ -28,7 +28,7 @@ import { isAbiParameterSchema } from './validation/abi'; import { isHexStrict } from './validation/string'; // import { abiToJsonSchemaCases } from '../test/fixtures/abi_to_json_schema'; -export const parseBaseType = ( +export const parseBaseType = ( type: string, ): { baseType?: T; diff --git a/scripts/changelog/src/add_changelog_entry.ts b/scripts/changelog/src/add_changelog_entry.ts new file mode 100644 index 00000000000..4c5b32a4369 --- /dev/null +++ b/scripts/changelog/src/add_changelog_entry.ts @@ -0,0 +1,69 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { readFileSync, writeFileSync } from 'fs'; + +// eslint-disable-next-line import/no-cycle +import { ChangelogConfig, DEFAULT_CHANGELOG_CONFIG } from './types'; +import { getPackageGroupedUnreleasedEntries, getUnreleasedSection } from './sync'; + +export const addChangelogEntry = (commandName: string, args: string[]) => { + let CHANGELOG_CONFIG: ChangelogConfig; + if (args?.[0] !== undefined && args[0].endsWith('.json')) { + CHANGELOG_CONFIG = JSON.parse(readFileSync(args[0], 'utf8')) as ChangelogConfig; + args.shift(); + } else { + CHANGELOG_CONFIG = DEFAULT_CHANGELOG_CONFIG; + } + + const [packageName, changelogEntry] = args; + const parsedChangelog = readFileSync( + `${CHANGELOG_CONFIG.packagesDirectoryPath}/${packageName}/${CHANGELOG_CONFIG.packagesChangelogPath}`, + 'utf8', + ).split(/\n/); + const groupedUnreleasedEntries = getPackageGroupedUnreleasedEntries( + getUnreleasedSection(parsedChangelog), + ); + const formattedCommandName = `### ${ + commandName.charAt(0).toUpperCase() + commandName.slice(1) + }`; + const formattedChangelogEntry = `- ${changelogEntry}`; + + if (groupedUnreleasedEntries[formattedCommandName] !== undefined) { + groupedUnreleasedEntries[formattedCommandName].push(formattedChangelogEntry); + } else { + groupedUnreleasedEntries[formattedCommandName] = [formattedChangelogEntry]; + } + + const flattenedModifiedUnreleasedEntries: string[] = []; + for (const entryHeader of Object.keys(groupedUnreleasedEntries)) { + const entries = groupedUnreleasedEntries[entryHeader]; + flattenedModifiedUnreleasedEntries.push(entryHeader); + flattenedModifiedUnreleasedEntries.push(''); + for (const [index, entry] of entries.entries()) { + flattenedModifiedUnreleasedEntries.push(entry); + if (index + 1 === entries.length) flattenedModifiedUnreleasedEntries.push(''); + } + } + + // +2 is so the header, ## [Unreleased], and the newline after it don't get removed + parsedChangelog.splice(parsedChangelog.findIndex(item => item === '## [Unreleased]') + 2); + parsedChangelog.push(...flattenedModifiedUnreleasedEntries); + writeFileSync( + `${CHANGELOG_CONFIG.packagesDirectoryPath}/${packageName}/${CHANGELOG_CONFIG.packagesChangelogPath}`, + parsedChangelog.join('\n'), + ); +}; diff --git a/scripts/changelog/src/helpers.ts b/scripts/changelog/src/helpers.ts new file mode 100644 index 00000000000..b0ce1af0acf --- /dev/null +++ b/scripts/changelog/src/helpers.ts @@ -0,0 +1,40 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { readdirSync } from 'fs'; + +// eslint-disable-next-line import/no-cycle +import { Command, getCommands } from './types'; + +export const parseArgs = (commands: Command[] = getCommands()): unknown => { + const commandArg = process.argv[2]; + for (const command of commands) { + if (command.name === commandArg) { + return command.commandFunction(command.name, process.argv.slice(3)); + } + } + + // eslint-disable-next-line no-console + console.log('Invalid command, please refer to below table for expected commands:'); + // eslint-disable-next-line no-console + console.table(commands); + return undefined; +}; + +export const getListOfPackageNames = (packagesDirectory: string) => + readdirSync(packagesDirectory, { withFileTypes: true }) + .filter(dirent => dirent.isDirectory()) + .map(dirent => dirent.name); diff --git a/scripts/changelog/src/index.ts b/scripts/changelog/src/index.ts new file mode 100644 index 00000000000..b4e1caccb8a --- /dev/null +++ b/scripts/changelog/src/index.ts @@ -0,0 +1,20 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// eslint-disable-next-line import/no-cycle +import { parseArgs } from './helpers'; + +parseArgs(); diff --git a/scripts/changelog/src/sync.ts b/scripts/changelog/src/sync.ts new file mode 100644 index 00000000000..0344fba6595 --- /dev/null +++ b/scripts/changelog/src/sync.ts @@ -0,0 +1,166 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { readFileSync, writeFileSync } from 'fs'; + +// eslint-disable-next-line import/no-cycle +import { + ChangelogConfig, + DEFAULT_CHANGELOG_CONFIG, + ENTRY_SECTION_HEADERS, + GroupedUnreleasedEntries, +} from './types'; +import { getListOfPackageNames } from './helpers'; + +export const getUnreleasedSection = (parsedChangelog: string[]) => { + const unreleasedSectionHeaderIndex = parsedChangelog.findIndex( + item => item === '## [Unreleased]', + ); + const unreleasedSection = parsedChangelog.slice(unreleasedSectionHeaderIndex); + return unreleasedSection; +}; + +export const getRootGroupedUnreleasedEntries = (unreleasedSection: string[]) => { + const groupedUnreleasedEntries: GroupedUnreleasedEntries = {}; + + let lastPackageHeaderIndex = 0; + let lastEntryHeaderIndex = 0; + for (const [index, item] of unreleasedSection.entries()) { + // substring(4) removes "### " from entry headers (e.g. "### Changed" -> "Changed") + if (ENTRY_SECTION_HEADERS.includes(item.substring(4))) { + groupedUnreleasedEntries[unreleasedSection[index]] = {}; + lastEntryHeaderIndex = index; + } else if (item.startsWith('#### ')) { + groupedUnreleasedEntries[unreleasedSection[lastEntryHeaderIndex]][item] = []; + lastPackageHeaderIndex = index; + } else if (item.startsWith('-')) { + const entryHeader = unreleasedSection[lastEntryHeaderIndex]; + const packageHeader = unreleasedSection[lastPackageHeaderIndex]; + groupedUnreleasedEntries[entryHeader][packageHeader].push(item); + } + } + + return groupedUnreleasedEntries; +}; + +export const getPackageGroupedUnreleasedEntries = (unreleasedSection: string[]) => { + const groupedUnreleasedEntries: Record = {}; + + let lastEntryHeaderIndex = 0; + for (const [index, item] of unreleasedSection.entries()) { + // substring(4) removes "### " from entry headers (e.g. "### Changed" -> "Changed") + if (ENTRY_SECTION_HEADERS.includes(item.substring(4))) { + groupedUnreleasedEntries[item] = []; + lastEntryHeaderIndex = index; + } else if (item.startsWith('- ')) { + const entryHeader = unreleasedSection[lastEntryHeaderIndex]; + groupedUnreleasedEntries[entryHeader].push(item); + } + } + + return groupedUnreleasedEntries; +}; + +export const getSyncedGroupedUnreleasedEntries = ( + listOfPackageNames: string[], + changelogConfig: ChangelogConfig, + rootGroupedUnreleasedEntries: GroupedUnreleasedEntries, +) => { + const _rootGroupedUnreleasedEntries: GroupedUnreleasedEntries = rootGroupedUnreleasedEntries; + for (const packageName of listOfPackageNames) { + const parsedChangelog = readFileSync( + `${changelogConfig.packagesDirectoryPath}/${packageName}/${changelogConfig.packagesChangelogPath}`, + 'utf8', + ).split(/\n/); + const packageGroupedUnreleasedEntries = getPackageGroupedUnreleasedEntries( + getUnreleasedSection(parsedChangelog), + ); + + for (const entrySectionHeader of ENTRY_SECTION_HEADERS) { + const formattedEntrySectionHeader = `### ${entrySectionHeader}`; + const formattedPackageEntryHeader = `#### ${packageName}`; + + const packageEntrySection = + packageGroupedUnreleasedEntries[formattedEntrySectionHeader]; + if (packageEntrySection !== undefined) { + // PackageName has a formattedEntrySectionHeader listed in packageName/CHANGELOG.md + + if (_rootGroupedUnreleasedEntries[formattedEntrySectionHeader] === undefined) { + // Root CHANGELOG.md is missing formattedEntrySectionHeader + _rootGroupedUnreleasedEntries[formattedEntrySectionHeader] = {}; + } + + _rootGroupedUnreleasedEntries[formattedEntrySectionHeader][ + formattedPackageEntryHeader + ] = packageGroupedUnreleasedEntries[formattedEntrySectionHeader]; + } + } + } + + return _rootGroupedUnreleasedEntries; +}; + +export const flattenSyncedUnreleasedEntries = ( + syncedGroupedUnreleasedEntries: GroupedUnreleasedEntries, + listOfPackageNames: string[], +) => { + const flattenedSyncedUnreleasedEntries: string[] = []; + for (const key of Object.keys(syncedGroupedUnreleasedEntries)) { + const element = syncedGroupedUnreleasedEntries[key]; + flattenedSyncedUnreleasedEntries.push(key); + flattenedSyncedUnreleasedEntries.push(''); + for (const packageName of listOfPackageNames) { + const formattedPackageEntryHeader = `#### ${packageName}`; + const element2 = element[formattedPackageEntryHeader]; + if (element[formattedPackageEntryHeader] !== undefined) { + flattenedSyncedUnreleasedEntries.push(formattedPackageEntryHeader); + flattenedSyncedUnreleasedEntries.push(''); + flattenedSyncedUnreleasedEntries.push(...element2); + flattenedSyncedUnreleasedEntries.push(''); + } + } + } + + return flattenedSyncedUnreleasedEntries; +}; + +// @ts-expect-error 'commandName' is declared but its value is never read +export const syncChangelogs = (commandName: string, args?: string[]) => { + const CHANGELOG_CONFIG: ChangelogConfig = + args?.[0] !== undefined && args[0].endsWith('.json') + ? (JSON.parse(readFileSync(args[0], 'utf8')) as ChangelogConfig) + : DEFAULT_CHANGELOG_CONFIG; + const parsedRootChangelog = readFileSync(CHANGELOG_CONFIG.rootChangelogPath, 'utf8').split( + /\n/, + ); + const listOfPackageNames = getListOfPackageNames(CHANGELOG_CONFIG.packagesDirectoryPath); + const syncedGroupedUnreleasedEntries = getSyncedGroupedUnreleasedEntries( + listOfPackageNames, + CHANGELOG_CONFIG, + getRootGroupedUnreleasedEntries(getUnreleasedSection(parsedRootChangelog)), + ); + const flattenedSyncedUnreleasedEntries = flattenSyncedUnreleasedEntries( + syncedGroupedUnreleasedEntries, + listOfPackageNames, + ); + + // +2 is so the header, ## [Unreleased], and the newline after it don't get removed + parsedRootChangelog.splice( + parsedRootChangelog.findIndex(item => item === '## [Unreleased]') + 2, + ); + parsedRootChangelog.push(...flattenedSyncedUnreleasedEntries); + writeFileSync(CHANGELOG_CONFIG.rootChangelogPath, parsedRootChangelog.join('\n')); +}; diff --git a/scripts/changelog/src/types.ts b/scripts/changelog/src/types.ts new file mode 100644 index 00000000000..57c3f172876 --- /dev/null +++ b/scripts/changelog/src/types.ts @@ -0,0 +1,76 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +// eslint-disable-next-line import/no-cycle +import { addChangelogEntry } from './add_changelog_entry'; +// eslint-disable-next-line import/no-cycle +import { syncChangelogs } from './sync'; + +export interface ChangelogConfig { + packagesDirectoryPath: string; + packagesChangelogPath: string; + rootChangelogPath: string; +} + +export interface Command { + name: string; + description: string; + arguments: string[]; + example: string; + commandFunction: (commandName: string, args: string[]) => unknown; +} + +export type GroupedUnreleasedEntries = Record>; + +export const DEFAULT_CHANGELOG_CONFIG = { + packagesDirectoryPath: './packages', + packagesChangelogPath: 'CHANGELOG.md', + rootChangelogPath: './CHANGELOG.md', +}; + +export const ENTRY_SECTION_HEADERS = [ + 'Added', + 'Changed', + 'Deprecated', + 'Removed', + 'Fixed', + 'Security', +]; + +export const getCommands = () => { + const commands: Command[] = []; + + commands.push({ + name: 'sync', + description: + 'Checks CHANGELOG.md for each package in ./packages/ for entries not included in root CHANGELOG.md', + arguments: [], + example: 'sync', + commandFunction: syncChangelogs, + }); + + for (const entrySectionHeader of ENTRY_SECTION_HEADERS) { + commands.push({ + name: entrySectionHeader.toLowerCase(), + description: `Adds changelogEntry to packageName's CHANGELOG.md under ${entrySectionHeader} header`, + arguments: ['packageName', 'changelogEntry'], + example: `yarn changelog ${entrySectionHeader.toLowerCase()} [packageName] [changelogEntry]`, + commandFunction: addChangelogEntry, + }); + } + + return commands; +}; diff --git a/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/CHANGELOG.md b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/CHANGELOG.md new file mode 100644 index 00000000000..40e0e4d3846 --- /dev/null +++ b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/CHANGELOG.md @@ -0,0 +1,192 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [0.1.0-alpha.0] + +### Added + +- I've added feature XY (#1000) + +### Changed + +- I've cleaned up XY (#1000) + +### Deprecated + +- I've deprecated XY (#1000) + +### Removed + +- I've removed XY (#1000) + +### Fixed + +- I've fixed XY (#1000) + +### Security + +- I've improved the security in XY (#1000) + +## [0.1.0-alpha.1] + +### Added + +- I've added feature XY (#1001) + +### Changed + +- I've cleaned up XY (#1001) + +### Deprecated + +- I've deprecated XY (#1001) + +### Removed + +- I've removed XY (#1001) + +### Fixed + +- I've fixed XY (#1001) + +### Security + +- I've improved the security in XY (#1001) + +## [0.1.0] + +### Added + +- I've added feature XY (#1002) + +### Changed + +- I've cleaned up XY (#1002) + +### Deprecated + +- I've deprecated XY (#1002) + +### Removed + +- I've removed XY (#1002) + +### Fixed + +- I've fixed XY (#1002) + +### Security + +- I've improved the security in XY (#1002) + +## [0.1.1] + +### Added + +- I've added feature XY (#1003) + +### Changed + +- I've cleaned up XY (#1003) + +### Deprecated + +- I've deprecated XY (#1003) + +### Removed + +- I've removed XY (#1003) + +### Fixed + +- I've fixed XY (#1003) + +### Security + +- I've improved the security in XY (#1003) + +## [1.0.0] + +### Added + +- I've added feature XY (#1004) + +### Changed + +- I've cleaned up XY (#1004) + +### Deprecated + +- I've deprecated XY (#1004) + +### Removed + +- I've removed XY (#1004) + +### Fixed + +- I've fixed XY (#1004) + +### Security + +- I've improved the security in XY (#1004) + +## [Unreleased] + +### Added + +- I've added feature XY (#1005) + +### Changed + +- I've cleaned up XY (#1005) + +### Deprecated + +- I've deprecated XY (#1005) + +### Removed + +- I've removed XY (#1005) + +### Fixed + +- I've fixed XY (#1005) + +### Security + +- I've improved the security in XY (#1005) diff --git a/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG.json b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG.json new file mode 100644 index 00000000000..b6f9ba8a2d9 --- /dev/null +++ b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG.json @@ -0,0 +1,196 @@ +[ + "# Changelog", + "", + "All notable changes to this project will be documented in this file.", + "", + "The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),", + "and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).", + "", + "", + "", + "## [0.1.0-alpha.0]", + "", + "### Added", + "", + "- I've added feature XY (#1000)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1000)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1000)", + "", + "### Removed", + "", + "- I've removed XY (#1000)", + "", + "### Fixed", + "", + "- I've fixed XY (#1000)", + "", + "### Security", + "", + "- I've improved the security in XY (#1000)", + "", + "## [0.1.0-alpha.1]", + "", + "### Added", + "", + "- I've added feature XY (#1001)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1001)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1001)", + "", + "### Removed", + "", + "- I've removed XY (#1001)", + "", + "### Fixed", + "", + "- I've fixed XY (#1001)", + "", + "### Security", + "", + "- I've improved the security in XY (#1001)", + "", + "## [0.1.0]", + "", + "### Added", + "", + "- I've added feature XY (#1002)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1002)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1002)", + "", + "### Removed", + "", + "- I've removed XY (#1002)", + "", + "### Fixed", + "", + "- I've fixed XY (#1002)", + "", + "### Security", + "", + "- I've improved the security in XY (#1002)", + "", + "## [0.1.1]", + "", + "### Added", + "", + "- I've added feature XY (#1003)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1003)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1003)", + "", + "### Removed", + "", + "- I've removed XY (#1003)", + "", + "### Fixed", + "", + "- I've fixed XY (#1003)", + "", + "### Security", + "", + "- I've improved the security in XY (#1003)", + "", + "## [1.0.0]", + "", + "### Added", + "", + "- I've added feature XY (#1004)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1004)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1004)", + "", + "### Removed", + "", + "- I've removed XY (#1004)", + "", + "### Fixed", + "", + "- I've fixed XY (#1004)", + "", + "### Security", + "", + "- I've improved the security in XY (#1004)", + "", + "## [Unreleased]", + "", + "### Added", + "", + "- I've added feature XY (#1005)", + "- Some new change (#42)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1005)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1005)", + "", + "### Removed", + "", + "- I've removed XY (#1005)", + "", + "### Fixed", + "", + "- I've fixed XY (#1005)", + "", + "### Security", + "", + "- I've improved the security in XY (#1005)", + "" +] diff --git a/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG_2.json b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG_2.json new file mode 100644 index 00000000000..540f24ac25e --- /dev/null +++ b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG_2.json @@ -0,0 +1,199 @@ +[ + "# Changelog", + "", + "All notable changes to this project will be documented in this file.", + "", + "The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),", + "and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).", + "", + "", + "", + "## [0.1.0-alpha.0]", + "", + "### Added", + "", + "- I've added feature XY (#1000)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1000)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1000)", + "", + "### Removed", + "", + "- I've removed XY (#1000)", + "", + "### Fixed", + "", + "- I've fixed XY (#1000)", + "", + "### Security", + "", + "- I've improved the security in XY (#1000)", + "", + "## [0.1.0-alpha.1]", + "", + "### Added", + "", + "- I've added feature XY (#1001)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1001)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1001)", + "", + "### Removed", + "", + "- I've removed XY (#1001)", + "", + "### Fixed", + "", + "- I've fixed XY (#1001)", + "", + "### Security", + "", + "- I've improved the security in XY (#1001)", + "", + "## [0.1.0]", + "", + "### Added", + "", + "- I've added feature XY (#1002)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1002)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1002)", + "", + "### Removed", + "", + "- I've removed XY (#1002)", + "", + "### Fixed", + "", + "- I've fixed XY (#1002)", + "", + "### Security", + "", + "- I've improved the security in XY (#1002)", + "", + "## [0.1.1]", + "", + "### Added", + "", + "- I've added feature XY (#1003)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1003)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1003)", + "", + "### Removed", + "", + "- I've removed XY (#1003)", + "", + "### Fixed", + "", + "- I've fixed XY (#1003)", + "", + "### Security", + "", + "- I've improved the security in XY (#1003)", + "", + "## [1.0.0]", + "", + "### Added", + "", + "- I've added feature XY (#1004)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1004)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1004)", + "", + "### Removed", + "", + "- I've removed XY (#1004)", + "", + "### Fixed", + "", + "- I've fixed XY (#1004)", + "", + "### Security", + "", + "- I've improved the security in XY (#1004)", + "", + "## [Unreleased]", + "", + "### Added", + "", + "- I've added feature XY (#1005)", + "", + "### Changed", + "", + "- I've cleaned up XY (#1005)", + "", + "### Deprecated", + "", + "- I've deprecated XY (#1005)", + "", + "### Removed", + "", + "- I've removed XY (#1005)", + "", + "### Fixed", + "", + "- I've fixed XY (#1005)", + "", + "### Security", + "", + "- I've improved the security in XY (#1005)", + "", + "### Newheader", + "", + "- Some new change (#42)", + "" +] diff --git a/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-2/CHANGELOG.md b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-2/CHANGELOG.md new file mode 100644 index 00000000000..af08bb229bd --- /dev/null +++ b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-2/CHANGELOG.md @@ -0,0 +1,166 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [0.1.0-alpha.1] + +### Added + +- I've added feature XY #2 (#1001) + +### Changed + +- I've cleaned up XY #2 (#1001) + +### Deprecated + +- I've deprecated XY #2 (#1001) + +### Removed + +- I've removed XY #2 (#1001) + +### Fixed + +- I've fixed XY #2 (#1001) + +### Security + +- I've improved the security in XY #2 (#1001) + +## [0.1.0] + +### Added + +- I've added feature XY #2 (#1002) + +### Changed + +- I've cleaned up XY #2 (#1002) + +### Deprecated + +- I've deprecated XY #2 (#1002) + +### Removed + +- I've removed XY #2 (#1002) + +### Fixed + +- I've fixed XY #2 (#1002) + +### Security + +- I've improved the security in XY #2 (#1002) + +## [0.1.1] + +### Added + +- I've added feature XY #2 (#1003) + +### Changed + +- I've cleaned up XY #2 (#1003) + +### Deprecated + +- I've deprecated XY #2 (#1003) + +### Removed + +- I've removed XY #2 (#1003) + +### Fixed + +- I've fixed XY #2 (#1003) + +### Security + +- I've improved the security in XY #2 (#1003) + +## [1.0.0] + +### Added + +- I've added feature XY #2 (#1004) + +### Changed + +- I've cleaned up XY #2 (#1004) + +### Deprecated + +- I've deprecated XY #2 (#1004) + +### Removed + +- I've removed XY #2 (#1004) + +### Fixed + +- I've fixed XY #2 (#1004) + +### Security + +- I've improved the security in XY #2 (#1004) + +## [Unreleased] + +### Added + +- I've added feature XY #2 (#1005) + +### Changed + +- I've cleaned up XY #2 (#1005) + +### Deprecated + +- I've deprecated XY #2 (#1005) + +### Removed + +- I've removed XY #2 (#1005) + +### Fixed + +- I've fixed XY #2 (#1005) + +### Security + +- I've improved the security in XY #2 (#1005) diff --git a/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-3/CHANGELOG.md b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-3/CHANGELOG.md new file mode 100644 index 00000000000..f6ef8c19809 --- /dev/null +++ b/scripts/changelog/test/fixtures/mock_packages_directory/mock-package-3/CHANGELOG.md @@ -0,0 +1,170 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [0.1.0] + +### Added + +- I've added feature XY #3 (#1002) + +### Changed + +- I've cleaned up XY #3 (#1002) + +### Deprecated + +- I've deprecated XY #3 (#1002) + +### Removed + +- I've removed XY #3 (#1002) + +### Fixed + +- I've fixed XY #3 (#1002) + +### Security + +- I've improved the security in XY #3 (#1002) + +## [0.1.1] + +### Added + +- I've added feature XY #3 (#1003) +- I've added feature XY #4 (#1003) + +### Changed + +- I've cleaned up XY #3 (#1003) +- I've cleaned up XY #4 (#1003) + +### Deprecated + +- I've deprecated XY #3 (#1003) +- I've deprecated XY #4 (#1003) + +### Removed + +- I've removed XY #3 (#1003) +- I've removed XY #4 (#1003) + +### Fixed + +- I've fixed XY #3 (#1003) +- I've fixed XY #4 (#1003) + +### Security + +- I've improved the security in XY #3 (#1003) +- I've improved the security in XY #4 (#1003) + +## [1.0.0] + +### Added + +- I've added feature XY #3 (#1004) +- I've added feature XY #4 (#1004) +- I've added feature XY #5 (#1004) + +### Changed + +- I've cleaned up XY #3 (#1004) +- I've cleaned up XY #4 (#1004) +- I've cleaned up XY #5 (#1004) + +### Deprecated + +- I've deprecated XY #3 (#1004) +- I've deprecated XY #4 (#1004) +- I've deprecated XY #5 (#1004) + +### Removed + +- I've removed XY #3 (#1004) +- I've removed XY #4 (#1004) +- I've removed XY #5 (#1004) + +### Fixed + +- I've fixed XY #3 (#1004) +- I've fixed XY #4 (#1004) +- I've fixed XY #5 (#1004) + +### Security + +- I've improved the security in XY #3 (#1004) +- I've improved the security in XY #4 (#1004) +- I've improved the security in XY #5 (#1004) + +## [Unreleased] + +### Added + +- I've added feature XY #3 (#1005) +- I've added feature XY #4 (#1005) +- I've added feature XY #5 (#1005) + +### Changed + +- I've cleaned up XY #3 (#1005) +- I've cleaned up XY #4 (#1005) +- I've cleaned up XY #5 (#1005) + +### Deprecated + +- I've deprecated XY #3 (#1005) +- I've deprecated XY #4 (#1005) +- I've deprecated XY #5 (#1005) + +### Removed + +- I've removed XY #3 (#1005) +- I've removed XY #4 (#1005) +- I've removed XY #5 (#1005) + +### Fixed + +- I've fixed XY #3 (#1005) +- I've fixed XY #4 (#1005) +- I've fixed XY #5 (#1005) + +### Security + +- I've improved the security in XY #3 (#1005) +- I've improved the security in XY #4 (#1005) +- I've improved the security in XY #5 (#1005) diff --git a/scripts/changelog/test/fixtures/package_parsed_changelog.ts b/scripts/changelog/test/fixtures/package_parsed_changelog.ts new file mode 100644 index 00000000000..a812d3e1d09 --- /dev/null +++ b/scripts/changelog/test/fixtures/package_parsed_changelog.ts @@ -0,0 +1,114 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const packageUnreleasedSection = [ + '## [Unreleased]', + '', + '### Added', + '', + '- random text (#425)', + '', + '### Removed', + '', + '- `build` entry from `package.json` (#420)', + '- `bar` (#424)', + '', + '### Changed', + '', + '- `tsc` compiled files moved to `lib/` directory from `dist/` (#421)', + '- `foo` (#423)', + '', +]; + +export const parsedPackageChangelog = [ + '# Changelog', + '', + 'All notable changes to this project will be documented in this file.', + '', + 'The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),', + 'and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).', + '', + '', + '', + '## [4.0.0-alpha.1]', + '', + '### Breaking Changes', + '', + '#### Connection close is not supported', + '', + 'In `1.x` user had access to raw connection object and can interact with it. e.g.', + '', + '```ts', + 'web3.currentProvider.connection.close();', + '```', + '', + 'But this internal behavior is not exposed any further. Though you can achieve same with this approach.', + '', + '```ts', + 'web3.currentProvider.disconnect();', + '```', + '', + '## [4.0.1-alpha.2]', + '', + '### Changed', + '', + '- `tsc` compiled files moved to `lib/` directory from `dist/` (#5739)', + '', + '## [4.0.1-alpha.5]', + '', + '### Removed', + '', + '- `build` entry from `package.json` (#5755)', + '', + ...packageUnreleasedSection, +]; + +export const packageGroupedUnreleasedEntries = { + '### Added': ['- random text (#425)'], + '### Removed': ['- `build` entry from `package.json` (#420)', '- `bar` (#424)'], + '### Changed': [ + '- `tsc` compiled files moved to `lib/` directory from `dist/` (#421)', + '- `foo` (#423)', + ], +}; diff --git a/scripts/changelog/test/fixtures/root_parsed_changelog.ts b/scripts/changelog/test/fixtures/root_parsed_changelog.ts new file mode 100644 index 00000000000..1081a15aeff --- /dev/null +++ b/scripts/changelog/test/fixtures/root_parsed_changelog.ts @@ -0,0 +1,1160 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +export const rootUnreleasedSection = [ + '## [Unreleased]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1005)", + "- I've added feature XY #4 (#1005)", + "- I've added feature XY #5 (#1005)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1005)", + "- I've cleaned up XY #4 (#1005)", + "- I've cleaned up XY #5 (#1005)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1005)", + "- I've deprecated XY #4 (#1005)", + "- I've deprecated XY #5 (#1005)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1005)", + '', + '#### mock-package-3', + "- I've removed XY #3 (#1005)", + "- I've removed XY #4 (#1005)", + "- I've removed XY #5 (#1005)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1005)", + "- I've fixed XY #4 (#1005)", + "- I've fixed XY #5 (#1005)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1005)", + '', + '#### mock-package-3', + "- I've improved the security in XY #3 (#1005)", + "- I've improved the security in XY #4 (#1005)", + "- I've improved the security in XY #5 (#1005)", + '', +]; + +export const parsedRootChangelog = [ + '# Changelog', + '', + 'All notable changes to this project will be documented in this file.', + '', + 'The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),', + 'and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).', + '', + '', + '## [0.1.0-alpha.0]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1000)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1000)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1000)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1000)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1000)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1000)", + '', + '## [0.1.0-alpha.1]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1001)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1001)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1001)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1001)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1001)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1001)", + '', + '## [0.1.0]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1002)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1002)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1002)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've removed XY #3 (#1002)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1002)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've improved the security in XY #3 (#1002)", + '', + '## [0.1.1]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1003)", + "- I've added feature XY #4 (#1003)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1003)", + "- I've cleaned up XY #4 (#1003)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1003)", + "- I've deprecated XY #4 (#1003)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've removed XY #3 (#1003)", + "- I've removed XY #4 (#1003)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1003)", + "- I've fixed XY #4 (#1003)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've improved the security in XY #3 (#1003)", + "- I've improved the security in XY #4 (#1003)", + '', + '## [1.0.0]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1004)", + "- I've added feature XY #4 (#1004)", + "- I've added feature XY #5 (#1004)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1004)", + "- I've cleaned up XY #4 (#1004)", + "- I've cleaned up XY #5 (#1004)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1004)", + "- I've deprecated XY #4 (#1004)", + "- I've deprecated XY #5 (#1004)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1004)", + '', + '#### mock-package-3', + "- I've removed XY #3 (#1004)", + "- I've removed XY #4 (#1004)", + "- I've removed XY #5 (#1004)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1004)", + "- I've fixed XY #4 (#1004)", + "- I've fixed XY #5 (#1004)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1004)", + '', + '#### mock-package-3', + "- I've improved the security in XY #3 (#1004)", + "- I've improved the security in XY #4 (#1004)", + "- I've improved the security in XY #5 (#1004)", + '', + ...rootUnreleasedSection, +]; + +export const rootGroupedUnreleasedEntries = { + '### Added': { + '#### mock-package-1': ["- I've added feature XY (#1005)"], + '#### mock-package-2': ["- I've added feature XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've added feature XY #3 (#1005)", + "- I've added feature XY #4 (#1005)", + "- I've added feature XY #5 (#1005)", + ], + }, + '### Changed': { + '#### mock-package-1': ["- I've cleaned up XY (#1005)"], + '#### mock-package-2': ["- I've cleaned up XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've cleaned up XY #3 (#1005)", + "- I've cleaned up XY #4 (#1005)", + "- I've cleaned up XY #5 (#1005)", + ], + }, + '### Deprecated': { + '#### mock-package-1': ["- I've deprecated XY (#1005)"], + '#### mock-package-2': ["- I've deprecated XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've deprecated XY #3 (#1005)", + "- I've deprecated XY #4 (#1005)", + "- I've deprecated XY #5 (#1005)", + ], + }, + '### Removed': { + '#### mock-package-1': ["- I've removed XY (#1005)"], + '#### mock-package-2': ["- I've removed XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've removed XY #3 (#1005)", + "- I've removed XY #4 (#1005)", + "- I've removed XY #5 (#1005)", + ], + }, + '### Fixed': { + '#### mock-package-1': ["- I've fixed XY (#1005)"], + '#### mock-package-2': ["- I've fixed XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've fixed XY #3 (#1005)", + "- I've fixed XY #4 (#1005)", + "- I've fixed XY #5 (#1005)", + ], + }, + '### Security': { + '#### mock-package-1': ["- I've improved the security in XY (#1005)"], + '#### mock-package-2': ["- I've improved the security in XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've improved the security in XY #3 (#1005)", + "- I've improved the security in XY #4 (#1005)", + "- I've improved the security in XY #5 (#1005)", + ], + }, +}; + +export const rootSyncedGroupedUnreleasedEntries = { + '### Added': { + '#### mock-package-1': ["- I've added feature XY (#1005)"], + '#### mock-package-2': ["- I've added feature XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've added feature XY #3 (#1005)", + "- I've added feature XY #4 (#1005)", + "- I've added feature XY #5 (#1005)", + ], + }, + '### Changed': { + '#### mock-package-1': ["- I've cleaned up XY (#1005)"], + '#### mock-package-2': ["- I've cleaned up XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've cleaned up XY #3 (#1005)", + "- I've cleaned up XY #4 (#1005)", + "- I've cleaned up XY #5 (#1005)", + ], + }, + '### Deprecated': { + '#### mock-package-1': ["- I've deprecated XY (#1005)"], + '#### mock-package-2': ["- I've deprecated XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've deprecated XY #3 (#1005)", + "- I've deprecated XY #4 (#1005)", + "- I've deprecated XY #5 (#1005)", + ], + }, + '### Removed': { + '#### mock-package-1': ["- I've removed XY (#1005)"], + '#### mock-package-2': ["- I've removed XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've removed XY #3 (#1005)", + "- I've removed XY #4 (#1005)", + "- I've removed XY #5 (#1005)", + ], + }, + '### Fixed': { + '#### mock-package-1': ["- I've fixed XY (#1005)"], + '#### mock-package-2': ["- I've fixed XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've fixed XY #3 (#1005)", + "- I've fixed XY #4 (#1005)", + "- I've fixed XY #5 (#1005)", + ], + }, + '### Security': { + '#### mock-package-1': ["- I've improved the security in XY (#1005)"], + '#### mock-package-2': ["- I've improved the security in XY #2 (#1005)"], + '#### mock-package-3': [ + "- I've improved the security in XY #3 (#1005)", + "- I've improved the security in XY #4 (#1005)", + "- I've improved the security in XY #5 (#1005)", + ], + }, +}; + +export const rootFlattenedSyncedUnreleasedEntries = [ + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1005)", + "- I've added feature XY #4 (#1005)", + "- I've added feature XY #5 (#1005)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1005)", + "- I've cleaned up XY #4 (#1005)", + "- I've cleaned up XY #5 (#1005)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1005)", + "- I've deprecated XY #4 (#1005)", + "- I've deprecated XY #5 (#1005)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've removed XY #3 (#1005)", + "- I've removed XY #4 (#1005)", + "- I've removed XY #5 (#1005)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1005)", + "- I've fixed XY #4 (#1005)", + "- I've fixed XY #5 (#1005)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1005)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1005)", + '', + '#### mock-package-3', + '', + "- I've improved the security in XY #3 (#1005)", + "- I've improved the security in XY #4 (#1005)", + "- I've improved the security in XY #5 (#1005)", + '', +]; + +export const rootSyncedChangelog = [ + '# Changelog', + '', + 'All notable changes to this project will be documented in this file.', + '', + 'The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),', + 'and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).', + '', + '', + '', + '## [0.1.0-alpha.0]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1000)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1000)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1000)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1000)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1000)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1000)", + '', + '## [0.1.0-alpha.1]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1001)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1001)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1001)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1001)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1001)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1001)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1001)", + '', + '## [0.1.0]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1002)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1002)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1002)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've removed XY #3 (#1002)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1002)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1002)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1002)", + '', + '#### mock-package-3', + '', + "- I've improved the security in XY #3 (#1002)", + '', + '## [0.1.1]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1003)", + "- I've added feature XY #4 (#1003)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1003)", + "- I've cleaned up XY #4 (#1003)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1003)", + "- I've deprecated XY #4 (#1003)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've removed XY #3 (#1003)", + "- I've removed XY #4 (#1003)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1003)", + "- I've fixed XY #4 (#1003)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1003)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1003)", + '', + '#### mock-package-3', + '', + "- I've improved the security in XY #3 (#1003)", + "- I've improved the security in XY #4 (#1003)", + '', + '## [1.0.0]', + '', + '### Added', + '', + '#### mock-package-1', + '', + "- I've added feature XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've added feature XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've added feature XY #3 (#1004)", + "- I've added feature XY #4 (#1004)", + "- I've added feature XY #5 (#1004)", + '', + '### Changed', + '', + '#### mock-package-1', + '', + "- I've cleaned up XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've cleaned up XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've cleaned up XY #3 (#1004)", + "- I've cleaned up XY #4 (#1004)", + "- I've cleaned up XY #5 (#1004)", + '', + '### Deprecated', + '', + '#### mock-package-1', + '', + "- I've deprecated XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've deprecated XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've deprecated XY #3 (#1004)", + "- I've deprecated XY #4 (#1004)", + "- I've deprecated XY #5 (#1004)", + '', + '### Removed', + '', + '#### mock-package-1', + '', + "- I've removed XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've removed XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've removed XY #3 (#1004)", + "- I've removed XY #4 (#1004)", + "- I've removed XY #5 (#1004)", + '', + '### Fixed', + '', + '#### mock-package-1', + '', + "- I've fixed XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've fixed XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've fixed XY #3 (#1004)", + "- I've fixed XY #4 (#1004)", + "- I've fixed XY #5 (#1004)", + '', + '### Security', + '', + '#### mock-package-1', + '', + "- I've improved the security in XY (#1004)", + '', + '#### mock-package-2', + '', + "- I've improved the security in XY #2 (#1004)", + '', + '#### mock-package-3', + '', + "- I've improved the security in XY #3 (#1004)", + "- I've improved the security in XY #4 (#1004)", + "- I've improved the security in XY #5 (#1004)", + '', + '## [Unreleased]', + '', + ...rootFlattenedSyncedUnreleasedEntries, +]; diff --git a/scripts/changelog/test/fixtures/root_unsynced_CHANGELOG.tmpl b/scripts/changelog/test/fixtures/root_unsynced_CHANGELOG.tmpl new file mode 100644 index 00000000000..cad5393ff66 --- /dev/null +++ b/scripts/changelog/test/fixtures/root_unsynced_CHANGELOG.tmpl @@ -0,0 +1,474 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [0.1.0-alpha.0] + +### Added + +#### mock-package-1 + +- I've added feature XY (#1000) + +### Changed + +#### mock-package-1 + +- I've cleaned up XY (#1000) + +### Deprecated + +#### mock-package-1 + +- I've deprecated XY (#1000) + +### Removed + +#### mock-package-1 + +- I've removed XY (#1000) + +### Fixed + +#### mock-package-1 + +- I've fixed XY (#1000) + +### Security + +#### mock-package-1 + +- I've improved the security in XY (#1000) + +## [0.1.0-alpha.1] + +### Added + +#### mock-package-1 + +- I've added feature XY (#1001) + +#### mock-package-2 + +- I've added feature XY #2 (#1001) + +### Changed + +#### mock-package-1 + +- I've cleaned up XY (#1001) + +#### mock-package-2 + +- I've cleaned up XY #2 (#1001) + +### Deprecated + +#### mock-package-1 + +- I've deprecated XY (#1001) + +#### mock-package-2 + +- I've deprecated XY #2 (#1001) + +### Removed + +#### mock-package-1 + +- I've removed XY (#1001) + +#### mock-package-2 + +- I've removed XY #2 (#1001) + +### Fixed + +#### mock-package-1 + +- I've fixed XY (#1001) + +#### mock-package-2 + +- I've fixed XY #2 (#1001) + +### Security + +#### mock-package-1 + +- I've improved the security in XY (#1001) + +#### mock-package-2 + +- I've improved the security in XY #2 (#1001) + +## [0.1.0] + +### Added + +#### mock-package-1 + +- I've added feature XY (#1002) + +#### mock-package-2 + +- I've added feature XY #2 (#1002) + +#### mock-package-3 + +- I've added feature XY #3 (#1002) + +### Changed + +#### mock-package-1 + +- I've cleaned up XY (#1002) + +#### mock-package-2 + +- I've cleaned up XY #2 (#1002) + +#### mock-package-3 + +- I've cleaned up XY #3 (#1002) + +### Deprecated + +#### mock-package-1 + +- I've deprecated XY (#1002) + +#### mock-package-2 + +- I've deprecated XY #2 (#1002) + +#### mock-package-3 + +- I've deprecated XY #3 (#1002) + +### Removed + +#### mock-package-1 + +- I've removed XY (#1002) + +#### mock-package-2 + +- I've removed XY #2 (#1002) + +#### mock-package-3 + +- I've removed XY #3 (#1002) + +### Fixed + +#### mock-package-1 + +- I've fixed XY (#1002) + +#### mock-package-2 + +- I've fixed XY #2 (#1002) + +#### mock-package-3 + +- I've fixed XY #3 (#1002) + +### Security + +#### mock-package-1 + +- I've improved the security in XY (#1002) + +#### mock-package-2 + +- I've improved the security in XY #2 (#1002) + +#### mock-package-3 + +- I've improved the security in XY #3 (#1002) + +## [0.1.1] + +### Added + +#### mock-package-1 + +- I've added feature XY (#1003) + +#### mock-package-2 + +- I've added feature XY #2 (#1003) + +#### mock-package-3 + +- I've added feature XY #3 (#1003) +- I've added feature XY #4 (#1003) + +### Changed + +#### mock-package-1 + +- I've cleaned up XY (#1003) + +#### mock-package-2 + +- I've cleaned up XY #2 (#1003) + +#### mock-package-3 + +- I've cleaned up XY #3 (#1003) +- I've cleaned up XY #4 (#1003) + +### Deprecated + +#### mock-package-1 + +- I've deprecated XY (#1003) + +#### mock-package-2 + +- I've deprecated XY #2 (#1003) + +#### mock-package-3 + +- I've deprecated XY #3 (#1003) +- I've deprecated XY #4 (#1003) + +### Removed + +#### mock-package-1 + +- I've removed XY (#1003) + +#### mock-package-2 + +- I've removed XY #2 (#1003) + +#### mock-package-3 + +- I've removed XY #3 (#1003) +- I've removed XY #4 (#1003) + +### Fixed + +#### mock-package-1 + +- I've fixed XY (#1003) + +#### mock-package-2 + +- I've fixed XY #2 (#1003) + +#### mock-package-3 + +- I've fixed XY #3 (#1003) +- I've fixed XY #4 (#1003) + +### Security + +#### mock-package-1 + +- I've improved the security in XY (#1003) + +#### mock-package-2 + +- I've improved the security in XY #2 (#1003) + +#### mock-package-3 + +- I've improved the security in XY #3 (#1003) +- I've improved the security in XY #4 (#1003) + +## [1.0.0] + +### Added + +#### mock-package-1 + +- I've added feature XY (#1004) + +#### mock-package-2 + +- I've added feature XY #2 (#1004) + +#### mock-package-3 + +- I've added feature XY #3 (#1004) +- I've added feature XY #4 (#1004) +- I've added feature XY #5 (#1004) + +### Changed + +#### mock-package-1 + +- I've cleaned up XY (#1004) + +#### mock-package-2 + +- I've cleaned up XY #2 (#1004) + +#### mock-package-3 + +- I've cleaned up XY #3 (#1004) +- I've cleaned up XY #4 (#1004) +- I've cleaned up XY #5 (#1004) + +### Deprecated + +#### mock-package-1 + +- I've deprecated XY (#1004) + +#### mock-package-2 + +- I've deprecated XY #2 (#1004) + +#### mock-package-3 + +- I've deprecated XY #3 (#1004) +- I've deprecated XY #4 (#1004) +- I've deprecated XY #5 (#1004) + +### Removed + +#### mock-package-1 + +- I've removed XY (#1004) + +#### mock-package-2 + +- I've removed XY #2 (#1004) + +#### mock-package-3 + +- I've removed XY #3 (#1004) +- I've removed XY #4 (#1004) +- I've removed XY #5 (#1004) + +### Fixed + +#### mock-package-1 + +- I've fixed XY (#1004) + +#### mock-package-2 + +- I've fixed XY #2 (#1004) + +#### mock-package-3 + +- I've fixed XY #3 (#1004) +- I've fixed XY #4 (#1004) +- I've fixed XY #5 (#1004) + +### Security + +#### mock-package-1 + +- I've improved the security in XY (#1004) + +#### mock-package-2 + +- I've improved the security in XY #2 (#1004) + +#### mock-package-3 + +- I've improved the security in XY #3 (#1004) +- I've improved the security in XY #4 (#1004) +- I've improved the security in XY #5 (#1004) + +## [Unreleased] + +### Added + +#### mock-package-1 + +- I've added feature XY (#1005) + +#### mock-package-3 + +- I've added feature XY #3 (#1005) +- I've added feature XY #5 (#1005) + +### Changed + +#### mock-package-1 + +- I've cleaned up XY (#1005) + +#### mock-package-3 + +- I've cleaned up XY #5 (#1005) + +### Deprecated + +#### mock-package-1 + +- I've deprecated XY (#1005) + +### Removed + +#### mock-package-1 + +- I've removed XY (#1005) + +#### mock-package-3 + +- I've removed XY #3 (#1005) +- I've removed XY #4 (#1005) + +### Fixed + +#### mock-package-1 + +- I've fixed XY (#1005) + +#### mock-package-3 + +- I've fixed XY #4 (#1005) + +### Security + +#### mock-package-1 + +- I've improved the security in XY (#1005) + +#### mock-package-3 + +- I've improved the security in XY #3 (#1005) +- I've improved the security in XY #4 (#1005) +- I've improved the security in XY #5 (#1005) diff --git a/scripts/changelog/test/unit/add_changelog_entry.test.ts b/scripts/changelog/test/unit/add_changelog_entry.test.ts new file mode 100644 index 00000000000..3043d2b162a --- /dev/null +++ b/scripts/changelog/test/unit/add_changelog_entry.test.ts @@ -0,0 +1,76 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { copyFileSync, readFileSync, unlinkSync } from 'fs'; + +import { addChangelogEntry } from '../../src/add_changelog_entry'; +import { getListOfPackageNames } from '../../src/helpers'; +import TestChangelogConfig from './test_changelog_config.json'; +import ModifiedTestChangelogConfig from './test_changelog_config_for_add_changelog_entry_tests.json'; +import ExpectedModifiedChangelog from '../fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG.json'; +import ExpectedModifiedChangelog2 from '../fixtures/mock_packages_directory/mock-package-1/expected_modified_CHANGELOG_2.json'; + +describe('Add Changelog Entry tests', () => { + it('should add an entry under the Added header`', () => { + const listOfPackageNames = getListOfPackageNames(TestChangelogConfig.packagesDirectoryPath); + + copyFileSync( + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${TestChangelogConfig.packagesChangelogPath}`, + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${ModifiedTestChangelogConfig.packagesChangelogPath}`, + ); + + addChangelogEntry('added', [ + './scripts/changelog/test/unit/test_changelog_config_for_add_changelog_entry_tests.json', + listOfPackageNames[0], + 'Some new change (#42)', + ]); + + const parsedModifiedChangelog = readFileSync( + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${ModifiedTestChangelogConfig.packagesChangelogPath}`, + 'utf8', + ).split(/\n/); + expect(parsedModifiedChangelog).toEqual(ExpectedModifiedChangelog); + + unlinkSync( + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${ModifiedTestChangelogConfig.packagesChangelogPath}`, + ); + }); + + it('should add the header Newheader and add an entry under it`', () => { + const listOfPackageNames = getListOfPackageNames(TestChangelogConfig.packagesDirectoryPath); + + copyFileSync( + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${TestChangelogConfig.packagesChangelogPath}`, + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${ModifiedTestChangelogConfig.packagesChangelogPath}`, + ); + + addChangelogEntry('newheader', [ + './scripts/changelog/test/unit/test_changelog_config_for_add_changelog_entry_tests.json', + listOfPackageNames[0], + 'Some new change (#42)', + ]); + + const parsedModifiedChangelog = readFileSync( + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${ModifiedTestChangelogConfig.packagesChangelogPath}`, + 'utf8', + ).split(/\n/); + expect(parsedModifiedChangelog).toEqual(ExpectedModifiedChangelog2); + + unlinkSync( + `${TestChangelogConfig.packagesDirectoryPath}/${listOfPackageNames[0]}/${ModifiedTestChangelogConfig.packagesChangelogPath}`, + ); + }); +}); diff --git a/scripts/changelog/test/unit/helpers.test.ts b/scripts/changelog/test/unit/helpers.test.ts new file mode 100644 index 00000000000..10c35467247 --- /dev/null +++ b/scripts/changelog/test/unit/helpers.test.ts @@ -0,0 +1,80 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { getListOfPackageNames, parseArgs } from '../../src/helpers'; +import { Command } from '../../src/types'; + +describe('Changelog Helpers tests', () => { + const mockCommandFunction = jest.fn(); + const mockCommandFunction2 = jest.fn(); + const commands: Command[] = [ + { + name: 'mockCommand', + description: 'mockCommand', + arguments: [], + example: 'mockCommand', + commandFunction: mockCommandFunction, + }, + { + name: 'mockCommand2', + description: 'mockCommand2', + arguments: ['argument1', 'argument2'], + example: 'mockCommand2', + commandFunction: mockCommandFunction2, + }, + ]; + + it('should parse args and execute mockCommandFunction with no arguments', () => { + process.argv = ['', '', 'mockCommand']; + parseArgs(commands); + + expect(commands[0].commandFunction).toHaveBeenCalledWith('mockCommand', []); + }); + + it('should parse args and execute mockCommandFunction2 with two arguments', () => { + const expectedArguments = ['arg1', 'arg2']; + process.argv = ['', '', 'mockCommand2', ...expectedArguments]; + parseArgs(commands); + + expect(commands[1].commandFunction).toHaveBeenCalledWith('mockCommand2', expectedArguments); + }); + + it('should parse args, not execute either commandFunctions, and call console.log and console.table', () => { + // eslint-disable-next-line no-console + console.log = jest.fn(); + // eslint-disable-next-line no-console + console.table = jest.fn(); + process.argv = ['', '']; + + parseArgs(commands); + + expect(commands[0].commandFunction).not.toHaveBeenCalledWith(); + expect(commands[1].commandFunction).not.toHaveBeenCalledWith(); + // eslint-disable-next-line no-console + expect(console.log).toHaveBeenLastCalledWith( + 'Invalid command, please refer to below table for expected commands:', + ); + // eslint-disable-next-line no-console + expect(console.table).toHaveBeenCalledWith(commands); + }); + + it('should get list of directory names in ../fixtures/mock_packages_directory', () => { + const result = getListOfPackageNames( + './scripts/changelog/test/fixtures/mock_packages_directory', + ); + expect(result).toEqual(['mock-package-1', 'mock-package-2', 'mock-package-3']); + }); +}); diff --git a/scripts/changelog/test/unit/sync.test.ts b/scripts/changelog/test/unit/sync.test.ts new file mode 100644 index 00000000000..b9ef50f64f2 --- /dev/null +++ b/scripts/changelog/test/unit/sync.test.ts @@ -0,0 +1,104 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { copyFileSync, readFileSync, unlinkSync } from 'fs'; + +import { + flattenSyncedUnreleasedEntries, + getPackageGroupedUnreleasedEntries, + getRootGroupedUnreleasedEntries, + getSyncedGroupedUnreleasedEntries, + getUnreleasedSection, + syncChangelogs, +} from '../../src/sync'; +import { getListOfPackageNames } from '../../src/helpers'; +import { + parsedPackageChangelog, + packageUnreleasedSection, + packageGroupedUnreleasedEntries, +} from '../fixtures/package_parsed_changelog'; +import { + rootFlattenedSyncedUnreleasedEntries, + rootGroupedUnreleasedEntries, + rootSyncedChangelog, + rootSyncedGroupedUnreleasedEntries, + rootUnreleasedSection, +} from '../fixtures/root_parsed_changelog'; +import TestChangelogConfig from './test_changelog_config.json'; + +describe('Changelog Sync tests', () => { + let listOfPackageNames: string[]; + + beforeAll(() => { + listOfPackageNames = getListOfPackageNames( + './scripts/changelog/test/fixtures/mock_packages_directory', + ); + }); + + it('should get package unreleased section', () => { + const result = getUnreleasedSection(parsedPackageChangelog); + expect(result).toEqual(packageUnreleasedSection); + }); + + it('should get root grouped unreleased entries', () => { + const result = getRootGroupedUnreleasedEntries(rootUnreleasedSection); + expect(result).toEqual(rootGroupedUnreleasedEntries); + }); + + it('should get package grouped unreleased entries', () => { + const result = getPackageGroupedUnreleasedEntries(packageUnreleasedSection); + expect(result).toEqual(packageGroupedUnreleasedEntries); + }); + + it('should get synced grouped unreleased entries', () => { + const result = getSyncedGroupedUnreleasedEntries( + listOfPackageNames, + TestChangelogConfig, + rootGroupedUnreleasedEntries, + ); + expect(result).toEqual(rootSyncedGroupedUnreleasedEntries); + }); + + it('should flatten synced unreleased entries', () => { + const syncedGroupedUnreleasedEntries = getSyncedGroupedUnreleasedEntries( + listOfPackageNames, + TestChangelogConfig, + rootGroupedUnreleasedEntries, + ); + const result = flattenSyncedUnreleasedEntries( + syncedGroupedUnreleasedEntries, + listOfPackageNames, + ); + expect(result).toEqual(rootFlattenedSyncedUnreleasedEntries); + }); + + it('should sync all package CHANGELOGs with root CHANGELOG.md', () => { + copyFileSync( + './scripts/changelog/test/fixtures/root_unsynced_CHANGELOG.tmpl', + TestChangelogConfig.rootChangelogPath, + ); + + syncChangelogs('sync', ['./scripts/changelog/test/unit/test_changelog_config.json']); + + const parsedRootChangelog = readFileSync( + TestChangelogConfig.rootChangelogPath, + 'utf8', + ).split(/\n/); + expect(parsedRootChangelog).toEqual(rootSyncedChangelog); + + unlinkSync(TestChangelogConfig.rootChangelogPath); + }); +}); diff --git a/scripts/changelog/test/unit/test_changelog_config.json b/scripts/changelog/test/unit/test_changelog_config.json new file mode 100644 index 00000000000..95555719f3a --- /dev/null +++ b/scripts/changelog/test/unit/test_changelog_config.json @@ -0,0 +1,5 @@ +{ + "packagesDirectoryPath": "./scripts/changelog/test/fixtures/mock_packages_directory", + "packagesChangelogPath": "CHANGELOG.md", + "rootChangelogPath": "./scripts/changelog/test/fixtures/mock_packages_directory/CHANGELOG.md" +} diff --git a/scripts/changelog/test/unit/test_changelog_config_for_add_changelog_entry_tests.json b/scripts/changelog/test/unit/test_changelog_config_for_add_changelog_entry_tests.json new file mode 100644 index 00000000000..40bcfb7045c --- /dev/null +++ b/scripts/changelog/test/unit/test_changelog_config_for_add_changelog_entry_tests.json @@ -0,0 +1,5 @@ +{ + "packagesDirectoryPath": "./scripts/changelog/test/fixtures/mock_packages_directory", + "packagesChangelogPath": "MODIFIED_CHANGELOG.md", + "rootChangelogPath": "./scripts/changelog/test/fixtures/mock_packages_directory/CHANGELOG.md" +} diff --git a/scripts/jest.config.js b/scripts/jest.config.js new file mode 100644 index 00000000000..2bdf6529d4c --- /dev/null +++ b/scripts/jest.config.js @@ -0,0 +1,20 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', +}; diff --git a/templates/.prettierignore.tmpl b/templates/.prettierignore.tmpl index a555afa7e28..76075e77df3 100644 --- a/templates/.prettierignore.tmpl +++ b/templates/.prettierignore.tmpl @@ -37,6 +37,9 @@ tmp/ browsertest.build/ .coverage .coverage-unit +cypress/.cert +*.lock + # Eth2 specs *.yaml *.yml diff --git a/yarn.lock b/yarn.lock index 589abaf2e2e..146d17c863e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11913,4 +11913,4 @@ yn@3.1.1: yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== \ No newline at end of file