diff --git a/ci/images/ci-image-jdk18/Dockerfile b/ci/images/ci-image-jdk18/Dockerfile
new file mode 100644
index 0000000000..093caf8c68
--- /dev/null
+++ b/ci/images/ci-image-jdk18/Dockerfile
@@ -0,0 +1,12 @@
+FROM ubuntu:focal-20220113
+
+ADD setup.sh /setup.sh
+ADD get-jdk-url.sh /get-jdk-url.sh
+ADD get-docker-url.sh /get-docker-url.sh
+RUN ./setup.sh java8 java18
+
+ENV JAVA_HOME /opt/openjdk
+ENV PATH $JAVA_HOME/bin:$PATH
+ADD docker-lib.sh /docker-lib.sh
+
+ENTRYPOINT [ "switch", "shell=/bin/bash", "--", "codep", "/bin/docker daemon" ]
diff --git a/ci/images/get-jdk-url.sh b/ci/images/get-jdk-url.sh
index 99a521ad3e..8cb154a424 100755
--- a/ci/images/get-jdk-url.sh
+++ b/ci/images/get-jdk-url.sh
@@ -11,6 +11,9 @@ case "$1" in
java17)
echo "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_linux_hotspot_17.0.2_8.tar.gz"
;;
+ java18)
+ echo "https://github.com/adoptium/temurin18-binaries/releases/download/jdk18-2022-02-15-13-13-beta/OpenJDK18-jdk_x64_linux_hotspot_2022-02-15-13-13.tar.gz"
+ ;;
*)
echo $"Unknown java version"
exit 1
diff --git a/ci/pipeline.yml b/ci/pipeline.yml
index 42558839e9..640eb2ee23 100644
--- a/ci/pipeline.yml
+++ b/ci/pipeline.yml
@@ -183,6 +183,12 @@ resources:
source:
<<: *registry-image-resource-source
repository: ((docker-hub-organization))/spring-boot-ci-jdk17
+- name: ci-image-jdk18
+ type: registry-image
+ icon: docker
+ source:
+ <<: *registry-image-resource-source
+ repository: ((docker-hub-organization))/spring-boot-ci-jdk18
- name: paketo-builder-base-image
type: registry-image
icon: docker
@@ -221,6 +227,14 @@ resources:
access_token: ((github-ci-status-token))
branch: ((branch))
context: jdk17-build
+- name: repo-status-jdk18-build
+ type: github-status-resource
+ icon: eye-check-outline
+ source:
+ repository: ((github-repo-name))
+ access_token: ((github-ci-status-token))
+ branch: ((branch))
+ context: jdk18-build
- name: slack-alert
type: slack-notification
icon: slack
@@ -273,6 +287,14 @@ jobs:
vars:
ci-image-name: ci-image-jdk17
<<: *docker-hub-mirror-vars
+ - task: build-ci-image-jdk18
+ privileged: true
+ file: git-repo/ci/tasks/build-ci-image.yml
+ output_mapping:
+ image: ci-image-jdk18
+ vars:
+ ci-image-name: ci-image-jdk18
+ <<: *docker-hub-mirror-vars
- in_parallel:
- put: ci-image
params:
@@ -283,6 +305,9 @@ jobs:
- put: ci-image-jdk17
params:
image: ci-image-jdk17/image.tar
+ - put: ci-image-jdk18
+ params:
+ image: ci-image-jdk18/image.tar
- name: detect-jdk-updates
plan:
- get: git-repo
@@ -308,6 +333,12 @@ jobs:
params:
<<: *github-task-params
JDK_VERSION: java17
+ - task: detect-jdk18-update
+ image: ci-image
+ file: git-repo/ci/tasks/detect-jdk-updates.yml
+ params:
+ <<: *github-task-params
+ JDK_VERSION: java18
- name: detect-ubuntu-image-updates
plan:
- get: git-repo
@@ -452,6 +483,38 @@ jobs:
- put: slack-alert
params:
<<: *slack-success-params
+- name: jdk18-build
+ serial: true
+ public: true
+ plan:
+ - get: ci-image-jdk18
+ - get: git-repo
+ trigger: true
+ - put: repo-status-jdk18-build
+ params: { state: "pending", commit: "git-repo" }
+ - do:
+ - task: build-project
+ image: ci-image-jdk18
+ privileged: true
+ timeout: ((task-timeout))
+ file: git-repo/ci/tasks/build-project.yml
+ params:
+ BRANCH: ((branch))
+ TOOLCHAIN_JAVA_VERSION: 18
+ <<: *gradle-enterprise-task-params
+ <<: *docker-hub-task-params
+ on_failure:
+ do:
+ - put: repo-status-jdk18-build
+ params: { state: "failure", commit: "git-repo" }
+ - put: slack-alert
+ params:
+ <<: *slack-fail-params
+ - put: repo-status-jdk18-build
+ params: { state: "success", commit: "git-repo" }
+ - put: slack-alert
+ params:
+ <<: *slack-success-params
- name: windows-build
serial: true
plan:
@@ -776,13 +839,42 @@ jobs:
- put: slack-alert
params:
<<: *slack-success-params
+- name: jdk18-run-system-tests
+ serial: true
+ public: true
+ plan:
+ - get: ci-image-jdk18
+ - get: git-repo
+ - get: paketo-builder-base-image
+ trigger: true
+ - get: daily
+ trigger: true
+ - do:
+ - task: run-system-tests
+ image: ci-image-jdk18
+ privileged: true
+ timeout: ((task-timeout))
+ file: git-repo/ci/tasks/run-system-tests.yml
+ params:
+ BRANCH: ((branch))
+ TOOLCHAIN_JAVA_VERSION: 18
+ <<: *gradle-enterprise-task-params
+ <<: *docker-hub-task-params
+ on_failure:
+ do:
+ - put: slack-alert
+ params:
+ <<: *slack-fail-params
+ - put: slack-alert
+ params:
+ <<: *slack-success-params
groups:
- name: "builds"
- jobs: ["build", "jdk11-build", "jdk17-build", "windows-build"]
+ jobs: ["build", "jdk11-build", "jdk17-build", "jdk18-build", "windows-build"]
- name: "releases"
jobs: ["stage-milestone", "stage-rc", "stage-release", "promote-milestone", "promote-rc", "promote-release", "create-github-release", "publish-gradle-plugin", "publish-to-sdkman", "update-homebrew-tap"]
- name: "system-tests"
- jobs: ["run-system-tests", "jdk11-run-system-tests", "jdk17-run-system-tests"]
+ jobs: ["run-system-tests", "jdk11-run-system-tests", "jdk17-run-system-tests", "jdk18-run-system-tests"]
- name: "ci-images"
jobs: ["build-ci-images", "detect-docker-updates", "detect-jdk-updates", "detect-ubuntu-image-updates"]
- name: "pull-requests"
diff --git a/ci/scripts/detect-jdk-updates.sh b/ci/scripts/detect-jdk-updates.sh
index 00c55672a8..e7cc0968cd 100755
--- a/ci/scripts/detect-jdk-updates.sh
+++ b/ci/scripts/detect-jdk-updates.sh
@@ -20,6 +20,10 @@ case "$JDK_VERSION" in
BASE_URL="https://api.adoptium.net/v3/assets/feature_releases/17/ga"
ISSUE_TITLE="Upgrade Java 17 version in CI image"
;;
+ java18)
+ BASE_URL="https://api.adoptium.net/v3/assets/feature_releases/18/ea"
+ ISSUE_TITLE="Upgrade Java 18 version in CI image"
+ ;;
*)
echo $"Unknown java version"
exit 1;
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleProjectBuilder.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleProjectBuilder.java
index 4fee624902..42dc5b7f22 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleProjectBuilder.java
+++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleProjectBuilder.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2012-2021 the original author or authors.
+ * Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -30,7 +30,7 @@ import org.springframework.util.StringUtils;
/**
* Helper class to build Gradle {@link Project Projects} for test fixtures. Wraps
* functionality of Gradle's own {@link ProjectBuilder} in order to workaround an issue on
- * JDK 17.
+ * JDK 17 and 18.
*
* @author Christoph Dreis
* @see Gradle Support JDK 17
@@ -67,7 +67,7 @@ public final class GradleProjectBuilder {
if (StringUtils.hasText(this.name)) {
builder.withName(this.name);
}
- if (JavaVersion.current() == JavaVersion.VERSION_17) {
+ if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17)) {
NativeServices.initialize(userHome);
try {
ProjectBuilderImpl.getGlobalServices();
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleVersions.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleVersions.java
index 5bde6cf55e..a449e20401 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleVersions.java
+++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleVersions.java
@@ -33,6 +33,9 @@ public final class GradleVersions {
}
public static List allCompatible() {
+ if (isJava18()) {
+ return Arrays.asList("7.3.3", "7.4");
+ }
if (isJava17()) {
return Arrays.asList("7.2", "7.3.3", "7.4");
}
@@ -52,6 +55,10 @@ public final class GradleVersions {
return GradleVersion.current().getVersion();
}
+ private static boolean isJava18() {
+ return JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_HIGHER);
+ }
+
private static boolean isJava17() {
return JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17);
}