Skip to content

Commit b7d8a60

Browse files
gem-neo4jvga91
andauthored
Java 21 and 2024.12.0 bump (#4230)
* Java 21 and 2024.12.0 bump --------- Co-authored-by: vga91 <[email protected]>
1 parent 0444b75 commit b7d8a60

File tree

43 files changed

+663
-241
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+663
-241
lines changed
Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
name: "Setups JDK"
2-
description: "Setups JDK"
2+
3+
inputs:
4+
java-version:
5+
required: true
6+
default: '21'
37

48
runs:
59
using: "composite"
610
steps:
7-
- name: Set up JDK 17
8-
uses: actions/setup-java@v2
11+
- name: Set up JDK 21
12+
uses: actions/setup-java@v3
913
with:
10-
java-version: '17.0.8'
14+
java-version: ${{ inputs.java-version }}
1115
distribution: 'temurin'

.github/workflows/CI.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,10 @@ jobs:
108108
aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin $ECR_NEO4J_DOCKER_URL
109109
110110
- uses: actions/checkout@v2
111-
- name: Set up JDK 17
111+
- name: Set up JDK 21
112112
uses: actions/setup-java@v2
113113
with:
114-
java-version: '17.0.8'
114+
java-version: '21'
115115
distribution: 'temurin'
116116
- uses: actions/cache@v2
117117
with:

build.gradle

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
id 'maven-publish'
55
id 'antlr'
66
id "com.github.hierynomus.license-report" version"0.16.1"
7-
id "org.jetbrains.kotlin.jvm" version "1.8.0" apply false
7+
id "org.jetbrains.kotlin.jvm" version "1.9.20" apply false
88
}
99

1010
downloadLicenses {
@@ -15,7 +15,7 @@ downloadLicenses {
1515

1616
allprojects {
1717
group = 'org.neo4j.procedure'
18-
version = '5.26.0'
18+
version = '2024.12.0'
1919
archivesBaseName = 'apoc'
2020
description = """neo4j-apoc-procedures"""
2121
}
@@ -73,8 +73,8 @@ subprojects {
7373

7474

7575
java {
76-
sourceCompatibility = JavaVersion.VERSION_17
77-
targetCompatibility = JavaVersion.VERSION_17
76+
sourceCompatibility = JavaVersion.VERSION_21
77+
targetCompatibility = JavaVersion.VERSION_21
7878
}
7979

8080
task mySourcesJar(type: Jar) {
@@ -92,8 +92,8 @@ subprojects {
9292
// neo4jDockerImage system property is used in TestContainerUtil
9393
systemProperties 'user.language' : 'en' ,
9494
'user.country' : 'US',
95-
'neo4jDockerImage': project.hasProperty("neo4jDockerEeOverride") ? project.getProperty("neo4jDockerEeOverride") : 'neo4j:5.26.0-enterprise',
96-
'neo4jCommunityDockerImage': project.hasProperty("neo4jDockerCeOverride") ? project.getProperty("neo4jDockerCeOverride") : 'neo4j:5.26.0',
95+
'neo4jDockerImage': project.hasProperty("neo4jDockerEeOverride") ? project.getProperty("neo4jDockerEeOverride") : 'neo4j:2024.12.0-enterprise',
96+
'neo4jCommunityDockerImage': project.hasProperty("neo4jDockerCeOverride") ? project.getProperty("neo4jDockerCeOverride") : 'neo4j:2024.12.0',
9797
'coreDir': 'apoc-core/core',
9898
'testDockerBundle': false
9999

@@ -152,9 +152,9 @@ subprojects {
152152

153153
ext {
154154
// NB: due to version.json generation by parsing this file, the next line must not have any if/then/else logic
155-
neo4jVersion = "5.26.0"
155+
neo4jVersion = "2024.12.0"
156156
// instead we apply the override logic here
157-
neo4jVersionEffective = project.hasProperty("neo4jVersionOverride") ? project.getProperty("neo4jVersionOverride") : neo4jVersion + "-SNAPSHOT"
157+
neo4jVersionEffective = project.hasProperty("neo4jVersionOverride") ? project.getProperty("neo4jVersionOverride") : neo4jVersion
158158
testContainersVersion = '1.20.2'
159159
apacheArrowVersion = '15.0.0'
160160
}

docs/antora/publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ site:
66
content:
77
sources:
88
- url: https://github.com/neo4j-contrib/neo4j-apoc-procedures
9-
branches: ['5.20', '4.4', '4.3', '4.2', '4.1', '4.0']
9+
branches: ['5.26', '4.4', '4.3', '4.2', '4.1', '4.0']
1010
start_path: docs/asciidoc
1111
exclude:
1212
- '!**/_includes/*'

docs/gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip

extended-it/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ plugins {
33
id 'com.github.johnrengelman.shadow'
44
id 'maven-publish'
55
id 'antlr'
6-
id "org.jetbrains.kotlin.jvm" version "1.8.0"
6+
id "org.jetbrains.kotlin.jvm" version "1.9.20"
77
id "com.diffplug.spotless" version "6.7.2"
88
}
99

@@ -63,6 +63,6 @@ dependencies {
6363
}
6464

6565
java {
66-
sourceCompatibility = JavaVersion.VERSION_17
67-
targetCompatibility = JavaVersion.VERSION_17
66+
sourceCompatibility = JavaVersion.VERSION_21
67+
targetCompatibility = JavaVersion.VERSION_21
6868
}

extended-it/src/test/java/apoc/neo4j/docker/StartupExtendedTest.java

Lines changed: 68 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.io.File;
1313
import java.io.IOException;
1414
import java.nio.charset.StandardCharsets;
15+
import java.util.ArrayList;
1516
import java.util.Collections;
1617
import java.util.List;
1718
import java.util.Map;
@@ -31,13 +32,16 @@
3132
*/
3233
public class StartupExtendedTest {
3334
private static final String APOC_HELP_QUERY = "CALL apoc.help('') YIELD core, type, name WHERE core = $core and type = $type RETURN name";
34-
private static final List<String> EXPECTED_EXTENDED_NAMES;
35+
private static final List<String> EXPECTED_EXTENDED_NAMES_CYPHER_5;
36+
private static final List<String> EXPECTED_EXTENDED_NAMES_CYPHER_25;
3537

3638
static {
37-
// retrieve every extended procedure and function via the extended.txt file
38-
final File extendedFile = new File(TestContainerUtil.extendedDir, "src/main/resources/extended.txt");
39+
// retrieve every extended procedure and function via the extendedCypher5.txt file
40+
final File extendedFileCypher5 = new File(TestContainerUtil.extendedDir, "src/main/resources/extendedCypher5.txt");
41+
final File extendedFileCypher25 = new File(TestContainerUtil.extendedDir, "src/main/resources/extendedCypher25.txt");
3942
try {
40-
EXPECTED_EXTENDED_NAMES = FileUtils.readLines(extendedFile, StandardCharsets.UTF_8);
43+
EXPECTED_EXTENDED_NAMES_CYPHER_5 = FileUtils.readLines(extendedFileCypher5, StandardCharsets.UTF_8);
44+
EXPECTED_EXTENDED_NAMES_CYPHER_25 = FileUtils.readLines(extendedFileCypher25, StandardCharsets.UTF_8);
4145
} catch (IOException e) {
4246
throw new RuntimeException(e);
4347
}
@@ -48,32 +52,37 @@ public void checkCoreAndExtendedWithExtraDependenciesJars() {
4852
// we check that with apoc-extended, apoc-core jar and all extra-dependencies jars every procedure/function is detected
4953
startContainerSessionWithExtraDeps((version) -> createDB(version, List.of(CORE, EXTENDED), true),
5054
session -> {
51-
checkCoreProcsAndFuncsExistence(session);
5255

5356
// all full procedures and functions are present, also the ones which require extra-deps, e.g. the apoc.export.xls.*
54-
final List<String> actualExtNames = getNames(session, APOC_HELP_QUERY,
55-
Map.of("core", false, "type", "function") );
56-
final List<String> functionExtNames = getNames(session, APOC_HELP_QUERY,
57-
Map.of("core", false, "type", "procedure") );
58-
59-
actualExtNames.addAll(functionExtNames);
60-
61-
assertEquals(sorted(EXPECTED_EXTENDED_NAMES), sorted(actualExtNames));
57+
checkExtendedProcsAndFuncsExistence(session);
58+
checkCoreProcsAndFuncsExistence(session);
6259
});
6360
}
6461

6562
@Test
6663
public void checkExtendedWithExtraDependenciesJars() {
6764
// we check that with apoc-extended jar and all extra-dependencies jars every procedure/function is detected
65+
// all full procedures and functions are present, also the ones which require extra-deps, e.g. the apoc.export.xls.*
6866
startContainerSessionWithExtraDeps((version) -> createDB(version, List.of(EXTENDED), true),
6967
session -> {
7068
// all full procedures and functions are present, also the ones which require extra-deps, e.g. the apoc.export.xls.*
71-
final List<String> actualExtNames = getNames(session, "SHOW PROCEDURES YIELD name WHERE name STARTS WITH 'apoc.' RETURN name");
72-
final List<String> functionExtNames = getNames(session, "SHOW FUNCTIONS YIELD name WHERE name STARTS WITH 'apoc.' RETURN name");
73-
74-
actualExtNames.addAll(functionExtNames);
75-
76-
assertEquals(sorted(EXPECTED_EXTENDED_NAMES), sorted(actualExtNames));
69+
final List<String> actualExtNamesCypher5 = getNames(session, "CYPHER 5 SHOW PROCEDURES YIELD name WHERE name STARTS WITH 'apoc.' RETURN name");
70+
final List<String> functionExtNamesCypher5 = getNames(session, "CYPHER 5 SHOW FUNCTIONS YIELD name WHERE name STARTS WITH 'apoc.' RETURN name");
71+
72+
List<String> procsAndFuncsCypher5 = new ArrayList<>();
73+
procsAndFuncsCypher5.addAll(actualExtNamesCypher5);
74+
procsAndFuncsCypher5.addAll(functionExtNamesCypher5);
75+
76+
assertEquals(sorted(EXPECTED_EXTENDED_NAMES_CYPHER_5), sorted(procsAndFuncsCypher5));
77+
78+
final List<String> actualExtNamesCypher25 = getNames(session, "CYPHER 25 SHOW PROCEDURES YIELD name WHERE name STARTS WITH 'apoc.' RETURN name");
79+
final List<String> functionExtNamesCypher25 = getNames(session, "CYPHER 25 SHOW FUNCTIONS YIELD name WHERE name STARTS WITH 'apoc.' RETURN name");
80+
81+
List<String> procsAndFuncsCypher25 = new ArrayList<>();
82+
procsAndFuncsCypher25.addAll(actualExtNamesCypher25);
83+
procsAndFuncsCypher25.addAll(functionExtNamesCypher25);
84+
85+
assertEquals(sorted(EXPECTED_EXTENDED_NAMES_CYPHER_25), sorted(procsAndFuncsCypher25));
7786
});
7887
}
7988

@@ -88,7 +97,9 @@ private void startContainerSessionWithExtraDeps(Function<Neo4jVersion, Neo4jCont
8897
Consumer<Session> sessionConsumer) {
8998
for (var version: Neo4jVersion.values()) {
9099

91-
try (final Neo4jContainerExtension neo4jContainer = neo4jContainerCreation.apply(version)) {
100+
try (final Neo4jContainerExtension neo4jContainer = neo4jContainerCreation.apply(version)
101+
.withNeo4jConfig("internal.dbms.cypher.enable_experimental_versions", "true")
102+
) {
92103
// add extra-deps before starting it
93104
ExtendedTestContainerUtil.addExtraDependencies();
94105
neo4jContainer.start();
@@ -110,14 +121,47 @@ private void startContainerSessionWithExtraDeps(Function<Neo4jVersion, Neo4jCont
110121
}
111122

112123
private void checkCoreProcsAndFuncsExistence(Session session) {
113-
final List<String> functionNames = getNames(session, APOC_HELP_QUERY,
124+
final List<String> functionCypher5Names = getNames(session, "CYPHER 5 " + APOC_HELP_QUERY,
125+
Map.of("core", true, "type", "function") );
126+
127+
final List<String> procedureCypher5Names = getNames(session, "CYPHER 5 " + APOC_HELP_QUERY,
128+
Map.of("core", true, "type", "procedure") );
129+
130+
assertEquals(sorted(ApocSignatures.PROCEDURES_CYPHER_5), procedureCypher5Names);
131+
assertEquals(sorted(ApocSignatures.FUNCTIONS_CYPHER_5), functionCypher5Names);
132+
133+
final List<String> functionCypher25Names = getNames(session, "CYPHER 25 " + APOC_HELP_QUERY,
114134
Map.of("core", true, "type", "function") );
115135

116-
final List<String> procedureNames = getNames(session, APOC_HELP_QUERY,
136+
final List<String> procedureCypher25Names = getNames(session, "CYPHER 25 " + APOC_HELP_QUERY,
117137
Map.of("core", true, "type", "procedure") );
118138

119-
assertEquals(sorted(ApocSignatures.PROCEDURES), procedureNames);
120-
assertEquals(sorted(ApocSignatures.FUNCTIONS), functionNames);
139+
assertEquals(sorted(ApocSignatures.PROCEDURES_CYPHER_25), procedureCypher25Names);
140+
assertEquals(sorted(ApocSignatures.FUNCTIONS_CYPHER_25), functionCypher25Names);
141+
}
142+
143+
private void checkExtendedProcsAndFuncsExistence(Session session) {
144+
// all full procedures and functions are present, also the ones which require extra-deps, e.g. the apoc.export.xls.*
145+
final List<String> actualExtNamesCypher5 = getNames(session, "CYPHER 5 " + APOC_HELP_QUERY,
146+
Map.of("core", false, "type", "function") );
147+
final List<String> functionExtNamesCypher5 = getNames(session, "CYPHER 5 " + APOC_HELP_QUERY,
148+
Map.of("core", false, "type", "procedure") );
149+
150+
final List<String> actualExtNamesCypher25 = getNames(session, "CYPHER 25 " + APOC_HELP_QUERY,
151+
Map.of("core", false, "type", "function") );
152+
final List<String> functionExtNamesCypher25 = getNames(session, "CYPHER 25 " + APOC_HELP_QUERY,
153+
Map.of("core", false, "type", "procedure") );
154+
155+
List<String> procsAndFuncsCypher5 = new ArrayList<>();
156+
procsAndFuncsCypher5.addAll(actualExtNamesCypher5);
157+
procsAndFuncsCypher5.addAll(functionExtNamesCypher5);
158+
159+
List<String> procsAndFuncsCypher25 = new ArrayList<>();
160+
procsAndFuncsCypher25.addAll(actualExtNamesCypher25);
161+
procsAndFuncsCypher25.addAll(functionExtNamesCypher25);
162+
163+
assertEquals(sorted(EXPECTED_EXTENDED_NAMES_CYPHER_5), sorted(procsAndFuncsCypher5));
164+
assertEquals(sorted(EXPECTED_EXTENDED_NAMES_CYPHER_25), sorted(procsAndFuncsCypher25));
121165
}
122166

123167
private static List<String> getNames(Session session, String query, Map<String, Object> params) {

extended/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
id 'com.github.johnrengelman.shadow' version '7.1.0'
66
id 'maven-publish'
77
id 'antlr'
8-
id "org.jetbrains.kotlin.jvm" version "1.8.0"
8+
id "org.jetbrains.kotlin.jvm" version "1.9.20"
99
id "com.diffplug.spotless" version "6.22.0"
1010
}
1111

@@ -27,7 +27,7 @@ jar {
2727

2828
compileKotlin {
2929
dependsOn(generateGrammarSource)
30-
kotlinOptions.jvmTarget = "17"
30+
kotlinOptions.jvmTarget = "21"
3131
}
3232

3333
generateGrammarSource {
@@ -163,8 +163,8 @@ dependencies {
163163
}
164164

165165
java {
166-
sourceCompatibility = JavaVersion.VERSION_17
167-
targetCompatibility = JavaVersion.VERSION_17
166+
sourceCompatibility = JavaVersion.VERSION_21
167+
targetCompatibility = JavaVersion.VERSION_21
168168
}
169169

170170
task copyImportFiles {

extended/src/main/java/apoc/custom/CypherProceduresUtil.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ public static UserFunctionSignature getUserFunctionSignature(Node node) {
7171
new QualifiedName(prefix, name),
7272
inputs,
7373
typeof((String) node.getProperty(ExtendedSystemPropertyKeys.output.name())),
74+
false,
7475
null,
7576
description,
7677
"apoc.custom",

extended/src/main/java/apoc/custom/Signatures.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import apoc.util.JsonUtil;
44
import org.antlr.v4.runtime.*;
55
import org.neo4j.internal.kernel.api.procs.*;
6+
import org.neo4j.kernel.api.QueryLanguage;
67
import org.neo4j.procedure.Mode;
78

89
import java.util.ArrayList;
@@ -118,7 +119,18 @@ public UserFunctionSignature toFunctionSignature(SignatureParser.FunctionContext
118119
boolean isBuiltIn = false;
119120
boolean internal = false;
120121
boolean threadsafe = false;
121-
return new UserFunctionSignature(name, inputSignatures, type, deprecated, description, "apoc.custom", caseInsensitive, isBuiltIn, internal, threadsafe);
122+
return new UserFunctionSignature(
123+
name,
124+
inputSignatures,
125+
type,
126+
false,
127+
deprecated,
128+
description,
129+
"apoc.custom",
130+
caseInsensitive,
131+
isBuiltIn,
132+
internal,
133+
threadsafe);
122134
}
123135

124136
private DefaultParameterValue defaultValue(SignatureParser.DefaultValueContext defaultValue, Neo4jTypes.AnyType type) {
@@ -230,6 +242,7 @@ public static ProcedureSignature createProcedureSignature(QualifiedName name,
230242
outputSignature,
231243
mode,
232244
admin,
245+
false,
233246
deprecated,
234247
description,
235248
warning,
@@ -238,6 +251,7 @@ public static ProcedureSignature createProcedureSignature(QualifiedName name,
238251
systemProcedure,
239252
internal,
240253
allowExpiredCredentials,
241-
threadSafe);
254+
threadSafe,
255+
QueryLanguage.ALL);
242256
}
243257
}

0 commit comments

Comments
 (0)