Skip to content
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

chore: fix notes stack updates #41600

Merged
merged 5 commits into from Apr 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
21 changes: 20 additions & 1 deletion script/release/notes/notes.js
Expand Up @@ -485,6 +485,24 @@ const getNotes = async (fromRef, toRef, newVersion) => {
return notes;
};

const compareVersions = (v1, v2) => {
const [split1, split2] = [v1.split('.'), v2.split('.')];

if (split1.length !== split2.length) {
throw new Error(`Expected version strings to have same number of sections: ${split1} and ${split2}`);
}
for (let i = 0; i < split1.length; i++) {
const p1 = parseInt(split1[i], 10);
const p2 = parseInt(split2[i], 10);

if (p1 > p2) return 1;
else if (p1 < p2) return -1;
// Continue checking the value if this portion is equal
}

return 0;
};

const removeSupercededStackUpdates = (commits) => {
const updateRegex = /^Updated ([a-zA-Z.]+) to v?([\d.]+)/;
const notupdates = [];
Expand All @@ -496,8 +514,9 @@ const removeSupercededStackUpdates = (commits) => {
notupdates.push(commit);
continue;
}

const [, dep, version] = match;
if (!newest[dep] || newest[dep].version < version) {
if (!newest[dep] || compareVersions(version, newest[dep].version) > 0) {
newest[dep] = { commit, version };
}
}
Expand Down
47 changes: 47 additions & 0 deletions spec/release-notes-spec.ts
Expand Up @@ -211,4 +211,51 @@ describe('release notes', () => {
expect(results.breaking[0].hash).to.equal(testCommit.sha1);
});
});
// test that when you have multiple stack updates only the
// latest will be kept
describe('superseding stack updates', () => {
const oldBranch = '27-x-y';
const newBranch = '28-x-y';

const version = 'v28.0.0';

it('with different major versions', async function () {
const mostRecentCommit = new Commit('9d0e6d09f0be0abbeae46dd3d66afd96d2daacaa', 'chore: bump chromium to 119.0.6043.0');

const sharedChromiumHistory = [
new Commit('029127a8b6f7c511fca4612748ad5b50e43aadaa', 'chore: bump chromium to 118.0.5993.0') // merge-base
];
const chromiumPatchUpdates = [
new Commit('d9ba26273ad3e7a34c905eccbd5dabda4eb7b402', 'chore: bump chromium to 118.0.5991.0'),
mostRecentCommit,
new Commit('d6c8ff2e7050f30dffd784915bcbd2a9f993cdb2', 'chore: bump chromium to 119.0.6029.0')
];

gitFake.setBranch(oldBranch, sharedChromiumHistory);
gitFake.setBranch(newBranch, [...sharedChromiumHistory, ...chromiumPatchUpdates]);

const results: any = await notes.get(oldBranch, newBranch, version);
expect(results.other).to.have.lengthOf(1);
expect(results.other[0].hash).to.equal(mostRecentCommit.sha1);
});
it('with different build versions', async function () {
const mostRecentCommit = new Commit('8f7a48879ef8633a76279803637cdee7f7c6cd4f', 'chore: bump chromium to 119.0.6045.0');

const sharedChromiumHistory = [
new Commit('029127a8b6f7c511fca4612748ad5b50e43aadaa', 'chore: bump chromium to 118.0.5993.0') // merge-base
];
const chromiumPatchUpdates = [
mostRecentCommit,
new Commit('9d0e6d09f0be0abbeae46dd3d66afd96d2daacaa', 'chore: bump chromium to 119.0.6043.0'),
new Commit('d6c8ff2e7050f30dffd784915bcbd2a9f993cdb2', 'chore: bump chromium to 119.0.6029.0')
];

gitFake.setBranch(oldBranch, sharedChromiumHistory);
gitFake.setBranch(newBranch, [...sharedChromiumHistory, ...chromiumPatchUpdates]);

const results: any = await notes.get(oldBranch, newBranch, version);
expect(results.other).to.have.lengthOf(1);
expect(results.other[0].hash).to.equal(mostRecentCommit.sha1);
});
});
});