in tools/ci/paimon-ci-tools/src/main/java/org/apache/paimon/tools/ci/licensecheck/NoticeFileChecker.java [111:167]
static int run(
Map<String, Set<Dependency>> modulesWithBundledDependencies,
Set<String> deployedModules,
Map<String, Optional<NoticeContents>> noticeFiles)
throws IOException {
int severeIssueCount = 0;
final Set<String> modulesSkippingDeployment =
new HashSet<>(modulesWithBundledDependencies.keySet());
modulesSkippingDeployment.removeAll(deployedModules);
LOG.debug(
"The following {} modules are skipping deployment: {}",
modulesSkippingDeployment.size(),
modulesSkippingDeployment.stream()
.sorted()
.collect(Collectors.joining("\n\t", "\n\t", "")));
for (String moduleSkippingDeployment : modulesSkippingDeployment) {
// TODO: this doesn't work for modules requiring a NOTICE that are bundled indirectly
// TODO: via another non-deployed module
boolean bundledByDeployedModule =
modulesWithBundledDependencies.entrySet().stream()
.filter(
entry ->
entry.getValue().stream()
.map(Dependency::getArtifactId)
.anyMatch(
artifactId ->
artifactId.equals(
moduleSkippingDeployment)))
.anyMatch(entry -> !modulesSkippingDeployment.contains(entry.getKey()));
if (!bundledByDeployedModule) {
modulesWithBundledDependencies.remove(moduleSkippingDeployment);
} else {
LOG.debug(
"Including module {} in license checks, despite not being deployed, because it is bundled by another deployed module.",
moduleSkippingDeployment);
}
}
// check that all required NOTICE files exists
severeIssueCount +=
ensureRequiredNoticeFiles(modulesWithBundledDependencies, noticeFiles.keySet());
// check each NOTICE file
for (Map.Entry<String, Optional<NoticeContents>> noticeFile : noticeFiles.entrySet()) {
severeIssueCount +=
checkNoticeFileAndLogProblems(
modulesWithBundledDependencies,
noticeFile.getKey(),
noticeFile.getValue().orElse(null));
}
return severeIssueCount;
}