Skip to content

build: filter out experimental changes from changelog #14598

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 20 additions & 11 deletions tools/release/changelog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export async function prependChangelogFromLatestTag(changelogPath: string, relea
/* context options */ {title: releaseName},
/* raw-commits options */ null,
/* commit parser options */ null,
/* writer options */ createDedupeWriterOptions(changelogPath));
/* writer options */ createChangelogWriterOptions(changelogPath));

// Stream for reading the existing changelog. This is necessary because we want to
// actually prepend the new changelog to the existing one.
Expand Down Expand Up @@ -57,15 +57,16 @@ export async function promptChangelogReleaseName(): Promise<string> {
}

/**
* Creates changelog writer options which ensure that commits are not showing up multiple times.
* Commits can show up multiple times if a changelog has been generated on a publish branch
* and has been cherry-picked into "master". In that case, the changelog will already contain
* commits from master which might be added to the changelog again. This is because usually
* patch and minor releases are tagged from the publish branches and therefore
* conventional-changelog tries to build the changelog from last major version to master's
* HEAD when a new major version is being published from the "master" branch.
* Creates changelog writer options which ensure that commits which are duplicated, or for
* experimental packages do not showing up multiple times. Commits can show up multiple times
* if a changelog has been generated on a publish branch and has been cherry-picked into "master".
* In that case, the changelog will already contain cherry-picked commits from master which might
* be added to future changelog's on "master" again. This is because usually patch and minor
* releases are tagged from the publish branches and therefore conventional-changelog tries to
* build the changelog from last major version to master's HEAD when a new major version is being
* published from the "master" branch.
*/
function createDedupeWriterOptions(changelogPath: string) {
function createChangelogWriterOptions(changelogPath: string) {
const existingChangelogContent = readFileSync(changelogPath, 'utf8');

return {
Expand All @@ -74,8 +75,16 @@ function createDedupeWriterOptions(changelogPath: string) {
finalizeContext: (context: any) => {
context.commitGroups = context.commitGroups.filter((group: any) => {
group.commits = group.commits.filter((commit: any) => {
// NOTE: We cannot compare the SHA's because the commits will have a different SHA
// if they are being cherry-picked into a different branch.

// Commits that change things for "cdk-experimental" or "material-experimental" will also
// show up in the changelog by default. We don't want to show these in the changelog.
if (commit.scope && commit.scope.includes('experimental')) {
console.log(yellow(` ↺ Skipping experimental: "${bold(commit.header)}"`));
return false;
}

// Filter out duplicate commits. Note that we cannot compare the SHA because the commits
// will have a different SHA if they are being cherry-picked into a different branch.
if (existingChangelogContent.includes(commit.subject)) {
console.log(yellow(` ↺ Skipping duplicate: "${bold(commit.header)}"`));
return false;
Expand Down