diff --git a/ci/images/get-jdk-url.sh b/ci/images/get-jdk-url.sh new file mode 100755 index 00000000000..3d96ea44b84 --- /dev/null +++ b/ci/images/get-jdk-url.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -e + +case "$1" in + java8) + echo "https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u192-b12/OpenJDK8U-jdk_x64_linux_hotspot_8u192b12.tar.gz" + ;; + java11) + echo "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.1%2B13/OpenJDK11U-jdk_x64_linux_hotspot_11.0.1_13.tar.gz" + ;; + *) + echo $"Unknown java version" + exit 1 +esac \ No newline at end of file diff --git a/ci/images/setup.sh b/ci/images/setup.sh index c7ef5d0f417..db43070cf5a 100755 --- a/ci/images/setup.sh +++ b/ci/images/setup.sh @@ -15,14 +15,12 @@ curl https://raw.githubusercontent.com/spring-io/concourse-java-scripts/v0.0.2/c ########################################################### # JAVA ########################################################### - +JDK_URL=$( ./get-jdk-url.sh $1 ) case "$1" in java8) - JDK_URL=https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u192-b12/OpenJDK8U-jdk_x64_linux_hotspot_8u192b12.tar.gz COMPONENTS=2 ;; java11) - JDK_URL=https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.1%2B13/OpenJDK11U-jdk_x64_linux_hotspot_11.0.1_13.tar.gz COMPONENTS=1 ;; *) diff --git a/ci/images/spring-boot-ci-image/Dockerfile b/ci/images/spring-boot-ci-image/Dockerfile index 8367030419d..a914c5a5b3a 100644 --- a/ci/images/spring-boot-ci-image/Dockerfile +++ b/ci/images/spring-boot-ci-image/Dockerfile @@ -1,6 +1,7 @@ FROM ubuntu:bionic-20181018 ADD setup.sh /setup.sh +ADD get-jdk-url.sh /get-jdk-url.sh RUN ./setup.sh java8 ENV JAVA_HOME /opt/openjdk diff --git a/ci/images/spring-boot-jdk11-ci-image/Dockerfile b/ci/images/spring-boot-jdk11-ci-image/Dockerfile index 9d0174941e8..7aad8b6072a 100644 --- a/ci/images/spring-boot-jdk11-ci-image/Dockerfile +++ b/ci/images/spring-boot-jdk11-ci-image/Dockerfile @@ -1,6 +1,7 @@ FROM ubuntu:bionic-20181018 ADD setup.sh /setup.sh +ADD get-jdk-url.sh /get-jdk-url.sh RUN ./setup.sh java11 ENV JAVA_HOME /opt/openjdk diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 5161b90b610..a0c517a287c 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -93,6 +93,10 @@ resources: type: slack-notification source: url: ((slack-webhook-url)) +- name: every-wednesday + type: time + source: + days: [Wednesday] jobs: - name: build-spring-boot-ci-images plan: @@ -106,6 +110,30 @@ jobs: params: build: ci-images-git-repo/ci/images dockerfile: ci-images-git-repo/ci/images/spring-boot-jdk11-ci-image/Dockerfile +- name: detect-jdk-updates + plan: + - get: git-repo + - get: every-wednesday + trigger: true + - aggregate: + - task: detect-jdk8-update + file: git-repo/ci/tasks/detect-jdk-updates.yml + params: + GITHUB_REPO: spring-boot + GITHUB_ORGANIZATION: spring-projects + GITHUB_PASSWORD: ((github-password)) + GITHUB_USERNAME: ((github-username)) + JDK_VERSION: java8 + image: spring-boot-ci-image + - task: detect-jdk11-update + file: git-repo/ci/tasks/detect-jdk-updates.yml + params: + GITHUB_REPO: spring-boot + GITHUB_ORGANIZATION: spring-projects + GITHUB_PASSWORD: ((github-password)) + GITHUB_USERNAME: ((github-username)) + JDK_VERSION: java11 + image: spring-boot-ci-image - name: build serial: true public: true @@ -428,6 +456,6 @@ groups: - name: "Release" jobs: ["stage-milestone", "stage-rc", "stage-release", "promote-milestone", "promote-rc", "promote-release", "sync-to-maven-central"] - name: "CI Images" - jobs: ["build-spring-boot-ci-images"] + jobs: ["build-spring-boot-ci-images", "detect-jdk-updates"] - name: "Build Pull Requests" jobs: ["build-pull-requests"] diff --git a/ci/scripts/detect-jdk-updates.sh b/ci/scripts/detect-jdk-updates.sh new file mode 100755 index 00000000000..b7c4dfe8ddd --- /dev/null +++ b/ci/scripts/detect-jdk-updates.sh @@ -0,0 +1,39 @@ +#!/bin/bash +set -e + +case "$JDK_VERSION" in + java8) + BASE_URL="https://api.adoptopenjdk.net/v2/info/releases/openjdk8" + ;; + java11) + BASE_URL="https://api.adoptopenjdk.net/v2/info/releases/openjdk11" + ;; + *) + echo $"Unknown java version" + exit 1; +esac + +response=$( curl -s ${BASE_URL}\?openjdk_impl\=hotspot\&os\=linux\&arch\=x64\&release\=latest\&type\=jdk ) +latest=$( jq -r '.binaries[0].binary_link' <<< "$response" ) + +current=$( git-repo/ci/images/get-jdk-url.sh ${JDK_VERSION} ) + +if [[ $current = $latest ]]; then + echo "Already up-to-date" + exit 0; +fi + +existing_issues=$( curl -s https://api.github.com/repos/${GITHUB_ORGANIZATION}/${GITHUB_REPO}/issues\?labels\=${JDK_VERSION}-image-upgrade\&state\=open ) +parsed_issues=$(jq -r '.' <<< "$existing_issues" ) +if [[ ${parsed_issues} = [] ]]; then + curl \ + -s \ + -u ${GITHUB_USERNAME}:${GITHUB_PASSWORD} \ + -H "Content-type:application/json" \ + -d "{\"title\":\"Upgrade ${JDK_VERSION} version in CI image\",\"body\": \"${latest}\",\"labels\":[\"${JDK_VERSION}-image-upgrade\"]}" \ + -f \ + -X \ + POST "https://api.github.com/repos/${GITHUB_ORGANIZATION}/${GITHUB_REPO}/issues" > /dev/null || { echo "Failed to create issue" >&2; exit 1; } +else + echo "Issue already exists." +fi \ No newline at end of file diff --git a/ci/tasks/detect-jdk-updates.yml b/ci/tasks/detect-jdk-updates.yml new file mode 100644 index 00000000000..3b0615d7e6a --- /dev/null +++ b/ci/tasks/detect-jdk-updates.yml @@ -0,0 +1,12 @@ +--- +platform: linux +inputs: +- name: git-repo +params: + GITHUB_REPO: + GITHUB_ORGANIZATION: + GITHUB_PASSWORD: + GITHUB_USERNAME: + JDK_VERSION: +run: + path: git-repo/ci/scripts/detect-jdk-updates.sh