Skip to content
Closed
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
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ jobs:
- name: 'Set up JDK'
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: 8
distribution: temurin
java-version: 21

- name: 'Cache Gradle packages'
uses: actions/cache@v4
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ gradle-app.setting

# Demo data sets
yelp_json
yelp_graph
yelp_graph
33 changes: 21 additions & 12 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
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 'scala'
id 'com.github.hierynomus.license' version '0.16.3-63da64d' apply false
id 'com.gradleup.shadow' version '9.2.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
}

apply from: 'build.params.gradle'
apply plugin: 'base'

allprojects {
java {
sourceCompatibility = ver.jvm
targetCompatibility = ver.jvm
}

scala {
scalaVersion = ver.scala.full
}

group = 'org.opencypher'
version = ver.self
}
Expand Down Expand Up @@ -49,7 +59,6 @@ subprojects {
}

ext.scalacParameters = [
"-target:jvm-$ver.jvm".toString(),
'-unchecked',
'-deprecation',
'-feature',
Expand All @@ -69,18 +78,18 @@ subprojects {
}

task sourceJar(type: Jar) {
classifier = 'sources'
archiveClassifier = 'sources'
from(sourceSets.main.allSource)
}

task docJar(type: Jar) {
dependsOn tasks.scaladoc
classifier = 'javadoc'
archiveClassifier = 'javadoc'
from(tasks.scaladoc.destinationDir)
}

task testJar(type: Jar) {
classifier = 'tests'
archiveClassifier = 'tests'
from(sourceSets.test.output)
}

Expand All @@ -95,14 +104,14 @@ subprojects {
}

task dependencySearch(type: DependencyInsightReportTask) {
description 'Searches all projects for a dependency'
group 'help'
description = 'Searches all projects for a dependency'
group = 'help'
}

task runApp {
dependsOn tasks.classes
group 'run'
description 'Run a custom Scala app (use -PmainClass=com.my.package.App)'
group = 'run'
description = 'Run a custom Scala app (use -PmainClass=com.my.package.App)'
doLast {
javaexec {
classpath = sourceSets.main.runtimeClasspath
Expand All @@ -113,7 +122,7 @@ subprojects {

// copied from https://stackoverflow.com/a/38058671/568723
task depSize {
description 'Lists all dependencies sorted by their size'
description = 'Lists all dependencies sorted by their size'
doLast {
final formatStr = "%,10.2f"
final conf = configurations.default
Expand Down
197 changes: 90 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,103 @@ 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/0684425ee000d2d5a13049ff1bf097075825cbe3/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'
}
// 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 {
report {
json.enabled = true
json.destination = file(getLayout().getBuildDirectory().dir('reports/license'))
xml.enabled = false
xml.destination = file(getLayout().getBuildDirectory().dir('reports/license'))
html.enabled = false
html.destination = file(getLayout().getBuildDirectory().dir('reports/license'))
}
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
}
2 changes: 1 addition & 1 deletion build.params.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ ext {
ver = [
self : '0.4.3-SNAPSHOT',

jvm : '1.8',
jvm : '21',

scala : [major: '2.12',
full : '2.12.20'],
Expand Down
4 changes: 2 additions & 2 deletions build.publishing.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@ subprojects {
if (project.name != "okapi-shade") {
// Convenience for quick publish to maven local
task devPublish {
group 'publishing'
description ' Publishes main jars to the local Maven repository.'
group = 'publishing'
description = ' Publishes main jars to the local Maven repository.'
dependsOn tasks.publishDevPublicationToMavenLocal
}
}
Expand Down
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.
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
Loading
Loading