From 2195bff5ac357a35ca891cd9c3eb527d4d9ee80b Mon Sep 17 00:00:00 2001 From: Madalyn <3230904+madalynrose@users.noreply.github.com> Date: Tue, 23 Jul 2024 13:10:12 -0400 Subject: [PATCH] chore: Update changelog script to allow for .txt output (#7396) #### Details This PR enables the changelog script to output a .txt file with a list of commits to validate instead of a .csv. This can be triggered by adding a flag onto the end of the script for the desired kind of file: `node ./tools/get-change-log-for-release.js --from web@PREVIOUS_RELEASE --to web@NEW_RELEASE --kind txt` or `yarn run change-log --from web@PREVIOUS_RELEASE --to web@NEW_RELEASE -k txt` Example Output: This is the result for running `yarn run change-log -f web@2.43.0 -t web@2.44.0 -k txt` ``` [tester] dev: Chirag Sharma pr: https://github.com/microsoft/accessibility-insights-web/pull/7378 group: fix change: fix: adding code to format nextline character (\r\n) (#7378) [tester] dev: rohittarpara pr: https://github.com/microsoft/accessibility-insights-web/pull/7377 group: fix change: fix: is reported as heading. (#7377) [tester] dev: rohittarpara pr: https://github.com/microsoft/accessibility-insights-web/pull/7374 group: chore change: chore: update @fluentui/react from 8.96.1 to 8.118.1 (#7374) [tester] dev: rohittarpara pr: https://github.com/microsoft/accessibility-insights-web/pull/7369 group: feat(axe-core 4.9.1) change: feat(axe-core 4.9.1): Axe core version upgrade for Web (#7369) [tester] dev: Chirag Sharma pr: https://github.com/microsoft/accessibility-insights-web/pull/7370 group: chore change: chore : Update package version for accessibility insights report and accessibility insights ui (#7370) ``` The release driver would just need to paste this into OneNote, remove any commits that are non-user-facing, and format like a list to add bullets and the indents are already there! ##### Motivation Our changelog script generates a csv of the commits to main between two commits (usually the previous release and HEAD). During release validation, our team filters down that CSV in excel and then pastes the generated table into our validation template so we can check that those commits have successfully made it into the new release. To make our release validation process more accessible, we are moving away from using tables in our validation templates. ##### Context The text version of the changelog automatically excludes `dependabot` and `chore(deps-dev)` commits, as it is more cumbersome to filter the text list than the csv and these updates aren't included in validation anyhow. #### Pull request checklist - [n/a] Addresses an existing issue: #0000 - [x] Ran `yarn fastpass` - [n/a] Added/updated relevant unit test(s) (and ran `yarn test`) - [n/a] Verified code coverage for the changes made. Check coverage report at: `/test-results/unit/coverage` - [x] PR title *AND* final merge commit title both start with a semantic tag (`fix:`, `chore:`, `feat(feature-name):`, `refactor:`). See `CONTRIBUTING.md`. - [n/a] (UI changes only) Added screenshots/GIFs to description above - [n/a] (UI changes only) Verified usability with NVDA/JAWS --- tools/get-change-log-for-release.js | 56 ++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 8 deletions(-) diff --git a/tools/get-change-log-for-release.js b/tools/get-change-log-for-release.js index bf941b9395e..5462299e20e 100644 --- a/tools/get-change-log-for-release.js +++ b/tools/get-change-log-for-release.js @@ -11,9 +11,10 @@ const main = async () => { validateCommandLineArguments(params); const gitLogs = await getGitLogs(params.from, params.to); - - const outputContent = generateOutputContent(gitLogs, params.to); - + const outputContent = + params.kind === 'csv' + ? generateCSVContent(gitLogs, params.to) + : generateTextContent(gitLogs); ensureOutputFileExist(params.output); fs.writeFileSync(params.output, outputContent); @@ -62,14 +63,45 @@ const makePrLink = pr => { return pr; } - return `=HYPERLINK("https://github.com/microsoft/accessibility-insights-web/pull/${pr}", "#${pr}")`; + return `=HYPERLINK("${makePrURL(pr)}", "#${pr}")`; +}; + +const makePrURL = pr => { + return `https://github.com/microsoft/accessibility-insights-web/pull/${pr}`; }; const makeCommitLink = commit => { - return `=HYPERLINK("https://github.com/microsoft/accessibility-insights-web/commit/${commit}", "${commit}")`; + return `=HYPERLINK("${makeCommitURL(commit)}", "${commit}")`; +}; + +const makeCommitURL = commit => { + return `https://github.com/microsoft/accessibility-insights-web/commit/${commit}`; }; -const generateOutputContent = (gitLogs, version) => { +const generateTextContent = gitLogs => { + let outputText = ''; + gitLogs.all + .map(log => { + return { + dev: log.author_name, + pr: makePrURL(extractPrNumber(log.message)), + change: log.message, + group: getCommitType(log.message), + }; + }) + .filter(log => { + return ( + !['chore(deps-dev)'].includes(log.group) && !['dependabot[bot]'].includes(log.dev) + ); + }) + .sort((a, b) => a.group - b.group) + .forEach(log => { + outputText += `[tester]\n\tdev: ${log.dev}\n\tpr: ${log.pr}\n\tgroup: ${log.group}\n\tchange: ${log.change}\n`; + }); + return outputText; +}; + +const generateCSVContent = (gitLogs, version) => { const csvLogs = gitLogs.all .map(log => { return { @@ -107,6 +139,11 @@ const parseCommandLineArguments = () => { '-o, --output ', 'Path to the output file. Default: change-log.-.csv', ) + .option( + '-k, --kind ', + 'Type of desired output, csv or txt. Default: csv', + 'csv', + ) .parse(process.argv); return program.opts(); @@ -114,7 +151,6 @@ const parseCommandLineArguments = () => { const validateCommandLineArguments = program => { const errors = []; - if (!program.from) { errors.push('Missing param: from'); } @@ -123,8 +159,12 @@ const validateCommandLineArguments = program => { errors.push('Missing param: to'); } + if (!program.kind) { + program.kind = 'csv'; + } + if (!program.output) { - program.output = `change-log.${program.from}-${program.to}.csv`; + program.output = `change-log.${program.from}-${program.to}.${program.kind}`; } if (errors.length !== 0) {