Skip to content
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
plugins {
id 'java-library'
id 'com.github.hierynomus.license' version '0.15.0' apply false
id 'com.github.johnrengelman.shadow' version '4.0.3' apply false
id 'com.github.hierynomus.license' version '0.16.2-37dde1f' apply false
id 'com.github.johnrengelman.shadow' version '7.1.2' apply false
id 'com.github.alisiikh.scalastyle' version '3.5.0' apply false
id 'me.champeau.gradle.jmh' version '0.4.8' apply false
id 'me.champeau.jmh' version '0.7.3' apply false
id "ch.kk7.spawn" version "1.0.20180924200750" apply false
}

Expand Down
190 changes: 83 additions & 107 deletions build.licenses.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// All licenses that we accept, and their aliases
def whitelist = [
def allowList = [
[name: 'BSD-2-Clause', url: 'http://opensource.org/licenses/BSD-2-Clause', aliases: [
[name: 'BSD-style', url:'http://www.opensource.org/licenses/bsd-license.php'],
]],
Expand Down Expand Up @@ -48,120 +48,96 @@ def whitelist = [
]]
]


subprojects {
apply plugin: 'base'
apply plugin: "com.github.hierynomus.license"

// License header checking and insertion
license {
header = rootProject.file("etc/licenses/headers/NOTICE-header.txt")
// what comment style to use
mapping {
scala = 'SLASHSTAR_STYLE'
// Adapted from https://github.com/neo4j/graph-data-science/blob/2.13/gradle/licensing.gradle
subprojects { proj ->
plugins.withType(JavaLibraryPlugin) {
proj.apply plugin: 'com.github.hierynomus.license'
// License header checking and insertion
license {
header = rootProject.file("etc/licenses/headers/NOTICE-header.txt")
// what comment style to use
mapping {
java = 'SLASHSTAR_STYLE'
}
// /issues/145
// exclude 'test/resources/**'
// exclude 'main/resources/**'
include '**/*.java'
include '**/*.scala'
}
// https://github.com/hierynomus/license-gradle-plugin/issues/145
// exclude 'test/resources/**'
// exclude 'main/resources/**'
include '**/*.scala'
include '**/*.java'
}

tasks.check.dependsOn tasks.license

// Dependency license reporting
downloadLicenses {

dependencyConfiguration = 'compile'

aliases = whitelist.collectEntries { lic ->
def actual = license(lic.name, lic.url)
def alternatives = lic.aliases.collect { it.url ? license(it.name, it.url) : it.name }
[(actual): alternatives]
tasks.check.dependsOn tasks.license

// Dependency license reporting
downloadLicenses {
dependencyConfiguration = 'runtimeClasspath'
aliases = allowList.collectEntries { lic ->
def actual = license(lic.name, lic.url)
def alternatives = lic.aliases.collect { it.url ? license(it.name, it.url) : it.name }
[(actual): alternatives]
}
}
}

tasks.downloadLicenses.outputs.upToDateWhen { false }

tasks.downloadLicenses.ext.licencesJson = { ->
def jsonDir = tasks.downloadLicenses.jsonDestination
def jsonFile = file("$jsonDir/license-dependency.json")
new groovy.json.JsonSlurper().parseText(jsonFile.text)
}

// Dependency license validation
task validateLicenses {
group 'license'
description 'Checks dependency licenses against a whitelist'
dependsOn tasks.downloadLicenses

doLast {
File errFile = file("$tasks.downloadLicenses.jsonDestination/license-errors.txt")
errFile.text = ""

tasks.downloadLicenses.licencesJson().licences
.findAll { lic -> !whitelist.any { lic.name == it.name } }
.sort { lic -> lic.name }
.each { lic -> logger.error("The license '$lic.name' is not in the license whitelist. Details: ${lic.toMapString()}") }
.each { lic -> errFile << '\n' << lic.toMapString() }
.each { lic -> throw new GradleException("The license '$lic.name' is not in the license whitelist") }
tasks.downloadLicenses.ext.licenseToDependencyJson = { ->
def jsonDir = tasks.downloadLicenses.jsonDestination
def jsonFile = file("$jsonDir/license-dependency.json")
new groovy.json.JsonSlurper().parseText(jsonFile.text)
}
}

tasks.check.dependsOn tasks.validateLicenses

// Compound dependency licenses files
task generateLicensesFiles {
description 'Generates dependency license report files'
dependsOn tasks.downloadLicenses

ext.licensesFile = file("$tasks.downloadLicenses.jsonDestination/LICENSES.txt")
ext.noticeFile = file("$tasks.downloadLicenses.jsonDestination/NOTICE.txt")

outputs.file(ext.licensesFile)
outputs.file(ext.noticeFile)

doLast {
licensesFile.createNewFile()
licensesFile.text = rootProject.file("etc/licenses/headers/LICENSES-header.txt").text
tasks.downloadLicenses.ext.dependencyToLicenseJson = { ->
def jsonDir = tasks.downloadLicenses.jsonDestination
def jsonFile = file("$jsonDir/dependency-license.json")
new groovy.json.JsonSlurper().parseText(jsonFile.text)
}

tasks.downloadLicenses.licencesJson().licences.sort { it.name }.each {
licensesFile << '\n\n'
licensesFile << "------------------------------------------------------------------------------\n"
licensesFile << "$it.name\n"
it.dependencies.sort { it }.each { licensesFile << " $it\n" }
licensesFile << "------------------------------------------------------------------------------\n"
licensesFile << '\n'
licensesFile << rootProject.file("etc/licenses/text/$it.name").text
// Dependency license validation
tasks.register("validateLicenses") {
group 'license'
description 'Checks dependency licenses against an allowlist'
dependsOn tasks.downloadLicenses
doLast {
def allowListedNames = allowList.collect { it.name }
tasks.downloadLicenses.dependencyToLicenseJson().dependencies
.findAll { dep -> allowListedNames.intersect(dep.licenses.collect { it.name }).isEmpty() }
.each { dep -> logger.error("In project ${proj.name}: Could not find an allowed license for dependency '$dep.name'. Details: ${dep.toMapString()}") }
.each { dep -> throw new GradleException("The dependency '$dep.name' has no allowed license") }
}

noticeFile.createNewFile()
noticeFile.text = rootProject.file("etc/licenses/headers/NOTICE-header.txt").text
noticeFile << '\n\n'
noticeFile << "Third-party licenses\n"
noticeFile << "--------------------\n"

tasks.downloadLicenses.licencesJson().licences.sort { it.name }.each {
noticeFile << '\n'
noticeFile << "$it.name\n"
it.dependencies.sort { it }.each { noticeFile << " $it\n" }
}
tasks.check.dependsOn tasks.validateLicenses

// Compound dependency licenses files
tasks.register("generateLicensesFiles") {
description 'Generates dependency license report files'
dependsOn tasks.downloadLicenses, tasks.validateLicenses
ext.licensesFile = file("$tasks.downloadLicenses.jsonDestination/LICENSES.txt")
ext.noticeFile = file("$tasks.downloadLicenses.jsonDestination/NOTICE.txt")
outputs.file(ext.licensesFile)
outputs.file(ext.noticeFile)
doLast {
licensesFile.createNewFile()
licensesFile.text = rootProject.file("etc/licenses/headers/LICENSES-header.txt").text
tasks.downloadLicenses.licenseToDependencyJson().licences
.findAll { lic -> allowList.any { lic.name == it.name } }
.sort { it.name }.each {
licensesFile << '\n\n'
licensesFile << "------------------------------------------------------------------------------\n"
licensesFile << "$it.name\n"
it.dependencies.sort { it }.each { licensesFile << " $it\n" }
licensesFile << "------------------------------------------------------------------------------\n"
licensesFile << '\n'
licensesFile << rootProject.file("etc/licenses/text/$it.name").text
}
noticeFile.createNewFile()
noticeFile.text = rootProject.file("etc/licenses/headers/NOTICE-header.txt").text
noticeFile << '\n\n'
noticeFile << "Third-party licenses\n"
noticeFile << "--------------------\n"
tasks.downloadLicenses.licenseToDependencyJson().licences.sort { it.name }.each {
noticeFile << '\n'
noticeFile << "$it.name\n"
it.dependencies.sort { it }.each { noticeFile << " $it\n" }
}
}
}
tasks.check.dependsOn tasks.generateLicensesFiles
}

tasks.check.dependsOn tasks.generateLicensesFiles
}

// Disable dependency license validation on test and documentation projects
['okapi-tck',
'okapi-testing',
'okapi-neo4j-io-testing',
'morpheus-examples',
'morpheus-tck',
'morpheus-testing',
'morpheus-jmh',
'documentation',
].each {
project(it).tasks.validateLicenses.enabled = false
project(it).tasks.generateLicensesFiles.enabled = false
}
4 changes: 4 additions & 0 deletions dependencies/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Local-hosted dependencies

This directory is a host for dependencies, local to the source code.
Stolen from https://github.com/neo4j/graph-data-science/tree/2.13/dependencies.
Copy link
Collaborator Author

@loveleif loveleif Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note, the files under dependencies are copied from https://github.com/neo4j/graph-data-science/tree/2.13/dependencies.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you can go without this one, probably better to take the latter one - https://github.com/neo4j/graph-data-science/tree/master/dependencies/plugins/repository/com/hierynomus/gradle/plugins/license-gradle-plugin/0.16.3-63da64d you'd need to find the related directories though

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't use that one (yet) because: Incompatible because this component declares an API of a component compatible with Java 21 and the consumer needed a runtime of a component compatible with Java 8.

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.hierynomus.license-base</groupId>
<artifactId>com.github.hierynomus.license-base.gradle.plugin</artifactId>
<version>0.16.2-37dde1f</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>com.hierynomus.gradle.plugins</groupId>
<artifactId>license-gradle-plugin</artifactId>
<version>0.16.2-37dde1f</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
d4ac4b5c7429ee2acc0155d0d2e29c81
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
11b5ef0db3fe1b3c4d22590242cab12654d3f2a8
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
a01495772d42cf6fcbaab47e313b360f892d306d1671274ddf060b8f825737aa
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
e42e00d23b3456d81c690e9dc509ec2bd937a3db91f07a53b24522ab066e07f50ab19eb0ac49886cccdb1a7005eb5fadd15941d221ab1b926a8754ef1b92af42
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>com.github.hierynomus.license-base</groupId>
<artifactId>com.github.hierynomus.license-base.gradle.plugin</artifactId>
<versioning>
<latest>0.16.2-37dde1f</latest>
<release>0.16.2-37dde1f</release>
<versions>
<version>0.16.2-37dde1f</version>
</versions>
<lastUpdated>20220128142712</lastUpdated>
</versioning>
</metadata>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c7429d6b094ad372861120ecfa76d88f
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ae3dbdb71c28183af1e5f5b08ee2afcc84de44ff
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1c9c8cd938f610ed937d132431378ea9a2bb7e19fc0be7749363b38e5b40830c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
4b1c4f998d14b7083f3d92facc587d41930ffbeb37b8654917608bbddce6b811748e8e565a065c50b584433f9f78b2b412c5c6fa9e067178c77f1e6f539b6332
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.hierynomus.license-report</groupId>
<artifactId>com.github.hierynomus.license-report.gradle.plugin</artifactId>
<version>0.16.2-37dde1f</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>com.hierynomus.gradle.plugins</groupId>
<artifactId>license-gradle-plugin</artifactId>
<version>0.16.2-37dde1f</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
18a03f6d6091dc246cecd535959959f9
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fe3ebb2a332b59610ad9dde509f2a9a518b6d54f
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0654cab4df4760d9e4689abcee28ace55bbdeaab53b51a59b333af0418ac1690
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1804c88a1a56b63c7965ba70cb88311a2dcb5b075b932f02f39dcec395d312f93935cf46c8269dae292fa6e9208d4f779be1caea6782d49e17c9cfcc7b72c901
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>com.github.hierynomus.license-report</groupId>
<artifactId>com.github.hierynomus.license-report.gradle.plugin</artifactId>
<versioning>
<latest>0.16.2-37dde1f</latest>
<release>0.16.2-37dde1f</release>
<versions>
<version>0.16.2-37dde1f</version>
</versions>
<lastUpdated>20220128142712</lastUpdated>
</versioning>
</metadata>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cbaf204fbe634ee42fc092a5df4260b2
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0b32d5b08a2c6d369203ce6741f4dab0e4bf13f9
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
970a82a89454a30e1069d6d5539431eb81a46d64112a22dc2f758917f8140655
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
e5e5b20b84c88ac1e69d70ab4cd7ef1c08e6e65594041da0b075d53da51fb800eaa562cfd0ba576f78373c53c23a0ceca0e1049a3b7815b4f0653da4d4a05362
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.hierynomus.license</groupId>
<artifactId>com.github.hierynomus.license.gradle.plugin</artifactId>
<version>0.16.2-37dde1f</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>com.hierynomus.gradle.plugins</groupId>
<artifactId>license-gradle-plugin</artifactId>
<version>0.16.2-37dde1f</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
163eb2ed1c04ba0e25cff07f543134b1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
9cc84eb9f35fbeafedf8af82e35d4602a9c90e3b
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
a104884dab58039072ee2ac528275ecbf0427fcb8f4504f219250c102341a6e2
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0181a0880cfb9f907c00e29b28e78cac039e01df32dd89e59755752c1e64e0c51fb7f8f7ecdec69314fa7beda35453b452ec8eb5410dd4d5ca8d30f8b676161c
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>com.github.hierynomus.license</groupId>
<artifactId>com.github.hierynomus.license.gradle.plugin</artifactId>
<versioning>
<latest>0.16.2-37dde1f</latest>
<release>0.16.2-37dde1f</release>
<versions>
<version>0.16.2-37dde1f</version>
</versions>
<lastUpdated>20220128142712</lastUpdated>
</versioning>
</metadata>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
85a46be8a189d0b4e2961d5ea429f8af
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3137f4ce53bb447243d5ade7baef08752ae1a82c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0bd64cc0e04281542a6474ddf1365dbbf5409f5e9c6353a657161ce7b6c4a542
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c1fda17baa6928734fbcb67182740f2e63cf80d241b5aa3f616ff7ec2242d4af4640ce5da437b1d00d66990cd67f9432000140d7c1fa6b94d48dce535c337a1d
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0f81155e01909a99ec2293c2825dce28
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
5a32f9538ba8af17ef4943f19780a39f3e7c4fd0
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
aefae367b26b8834a73fc16cc6ea486524cfe5a604b41c35d28b7b456f5835cb
Loading