in eng/tools/sdk-suppressions/src/updateSdkSuppressionsLabel.ts [100:178]
export function getSdkNamesWithChangedSuppressions(
headSuppressionFile: SdkSuppressionsYml,
baseSuppressionFile: SdkSuppressionsYml,
): SdkName[] {
let sdkNamesWithChangedSuppressions: SdkName[] = [];
const headSdkSuppressionsSection: SdkSuppressionsSection = headSuppressionFile.suppressions;
const baseSdkSuppressionsSection: SdkSuppressionsSection = baseSuppressionFile.suppressions;
const headSdksWithSuppressions: SdkName[] = getSdksWithSuppressionsDefined(
headSdkSuppressionsSection,
);
const baseSdksWithSuppressions: SdkName[] = getSdksWithSuppressionsDefined(
baseSdkSuppressionsSection,
);
if (headSdksWithSuppressions.length === 0) {
if (baseSdksWithSuppressions.length > 0) {
sdkNamesWithChangedSuppressions = [
...sdkNamesWithChangedSuppressions,
...baseSdksWithSuppressions,
];
}
}
// 1. If modify Sdk in SdkSuppressionsSection, add SdkName to sdkNamesWithChangedSuppressions
const differentSdkNamesWithChangedSuppressions = _.xorWith(
headSdksWithSuppressions,
baseSdksWithSuppressions,
_.isEqual,
);
if (differentSdkNamesWithChangedSuppressions.length > 0) {
sdkNamesWithChangedSuppressions = [
...sdkNamesWithChangedSuppressions,
...differentSdkNamesWithChangedSuppressions,
];
}
// 2. If modify SdkPackageSuppressionsEntry in SdkSuppressionsSection include package name and breaking changes
// add SdkName to sdkNamesWithChangedSuppressions
const similarSdkNamesWithChangedSuppressions = _.intersectionWith(
headSdksWithSuppressions,
baseSdksWithSuppressions,
);
similarSdkNamesWithChangedSuppressions.forEach((sdkName: SdkName) => {
const headSdkPackageSuppressionsEntry = headSdkSuppressionsSection[
sdkName
] as SdkPackageSuppressionsEntry[];
const baseSdkPackageSuppressionsEntry = baseSdkSuppressionsSection[
sdkName
] as SdkPackageSuppressionsEntry[];
// Determine whether packageName has changed
const differentPackageNamesWithChangedSuppressions = _.xorWith(
headSdkPackageSuppressionsEntry.map((entry) => entry.package),
baseSdkPackageSuppressionsEntry.map((entry) => entry.package),
_.isEqual,
);
if (differentPackageNamesWithChangedSuppressions.length > 0) {
sdkNamesWithChangedSuppressions = [...sdkNamesWithChangedSuppressions, sdkName];
return;
}
// Determine whether breaking-changes has changed
headSdkPackageSuppressionsEntry.forEach((headEntry) => {
const baseEntry = baseSdkPackageSuppressionsEntry.find(
(entry) => entry.package === headEntry.package,
);
if (!baseEntry) {
sdkNamesWithChangedSuppressions = [...sdkNamesWithChangedSuppressions, sdkName];
return;
}
if (!_.isEqual(headEntry["breaking-changes"].sort(), baseEntry["breaking-changes"].sort())) {
sdkNamesWithChangedSuppressions = [...sdkNamesWithChangedSuppressions, sdkName];
return;
}
});
});
return [...new Set(sdkNamesWithChangedSuppressions)];
}