diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0c520f3..817fb1a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -29,6 +29,9 @@ jobs: - jdk21 - jdk21-alpine - jdk21-graal + - jdk22 + - jdk22-alpine + - jdk22-graal steps: - name: checkout uses: actions/checkout@v2 diff --git a/README.md b/README.md index c4c567e..54b6fdc 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,9 @@ * [jdk21, jdk21-jammy](https://github.com/keeganwitt/docker-gradle/blob/master/jdk21/Dockerfile) * [jdk21-alpine](https://github.com/keeganwitt/docker-gradle/blob/master/jdk21-alpine/Dockerfile) * [jdk21-graal](https://github.com/keeganwitt/docker-gradle/blob/master/jdk21-graal/Dockerfile) +* [jdk22, jdk22-jammy](https://github.com/keeganwitt/docker-gradle/blob/master/jdk21/Dockerfile) +* [jdk22-alpine](https://github.com/keeganwitt/docker-gradle/blob/master/jdk21-alpine/Dockerfile) +* [jdk22-graal](https://github.com/keeganwitt/docker-gradle/blob/master/jdk21-graal/Dockerfile) ## What is Gradle? diff --git a/jdk22-alpine/Dockerfile b/jdk22-alpine/Dockerfile new file mode 100644 index 0000000..097656a --- /dev/null +++ b/jdk22-alpine/Dockerfile @@ -0,0 +1,57 @@ +FROM eclipse-temurin:22-jdk-alpine + +CMD ["gradle"] + +ENV GRADLE_HOME /opt/gradle + +RUN set -o errexit -o nounset \ + && echo "Adding gradle user and group" \ + && addgroup --system --gid 1000 gradle \ + && adduser --system --ingroup gradle --uid 1000 --shell /bin/ash gradle \ + && mkdir /home/gradle/.gradle \ + && chown -R gradle:gradle /home/gradle \ + && chmod -R o+rwx /home/gradle \ + \ + && echo "Symlinking root Gradle cache to gradle Gradle cache" \ + && ln -s /home/gradle/.gradle /root/.gradle + +VOLUME /home/gradle/.gradle + +WORKDIR /home/gradle + +RUN set -o errexit -o nounset \ + && echo "Installing VCSes" \ + && apk add --no-cache \ + git \ + git-lfs \ + mercurial \ + subversion \ + \ + && echo "Testing VCSes" \ + && which git \ + && which git-lfs \ + && which hg \ + && which svn + +ENV GRADLE_VERSION 8.6 +ARG GRADLE_DOWNLOAD_SHA256=9631d53cf3e74bfa726893aee1f8994fee4e060c401335946dba2156f440f24c +RUN set -o errexit -o nounset \ + && echo "Downloading Gradle" \ + && wget --no-verbose --output-document=gradle.zip "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip" \ + \ + && echo "Checking Gradle download hash" \ + && echo "${GRADLE_DOWNLOAD_SHA256} *gradle.zip" | sha256sum -c - \ + \ + && echo "Installing Gradle" \ + && unzip gradle.zip \ + && rm gradle.zip \ + && mv "gradle-${GRADLE_VERSION}" "${GRADLE_HOME}/" \ + && ln -s "${GRADLE_HOME}/bin/gradle" /usr/bin/gradle + +USER gradle + +RUN set -o errexit -o nounset \ + && echo "Testing Gradle installation" \ + && gradle --version + +USER root diff --git a/jdk22-graal/Dockerfile b/jdk22-graal/Dockerfile new file mode 100644 index 0000000..f051a73 --- /dev/null +++ b/jdk22-graal/Dockerfile @@ -0,0 +1,111 @@ +FROM ubuntu:jammy + +CMD ["gradle"] + +ENV GRADLE_HOME /opt/gradle + +RUN set -o errexit -o nounset \ + && echo "Adding gradle user and group" \ + && groupadd --system --gid 1000 gradle \ + && useradd --system --gid gradle --uid 1000 --shell /bin/bash --create-home gradle \ + && mkdir /home/gradle/.gradle \ + && chown --recursive gradle:gradle /home/gradle \ + && chmod -R o+rwx /home/gradle \ + \ + && echo "Symlinking root Gradle cache to gradle Gradle cache" \ + && ln --symbolic /home/gradle/.gradle /root/.gradle + +VOLUME /home/gradle/.gradle + +WORKDIR /home/gradle + +RUN set -o errexit -o nounset \ + && export DEBIAN_FRONTEND=noninteractive \ + && apt-get update \ + && apt-get install --yes --no-install-recommends \ + binutils \ + ca-certificates \ + curl \ + fontconfig \ + locales \ + p11-kit \ + tzdata \ + unzip \ + wget \ + \ + gcc \ + libc-dev \ + libz-dev \ + zlib1g-dev \ + \ + bzr \ + git \ + git-lfs \ + mercurial \ + openssh-client \ + subversion \ + && rm --recursive --force /var/lib/apt/lists/* \ + \ + && echo "Testing VCSes" \ + && which bzr \ + && which git \ + && which git-lfs \ + && which hg \ + && which svn + +ENV JAVA_HOME=/opt/java/graalvm +ENV JAVA_VERSION=22.0.0 +RUN set -o errexit -o nounset \ + && mkdir /opt/java \ + \ + && echo "Downloading GraalVM" \ + && GRAALVM_AMD64_DOWNLOAD_SHA256=e5eeb486a23101753f18181d002c3ede9da13c463fb61d3ea448abe774db0657 \ + && GRAALVM_AARCH64_DOWNLOAD_SHA256=da9a0e11b110ebccff33ade502516d00f574ec3247868007e452cef4143e0904 \ + && ARCHITECTURE=$(dpkg --print-architecture) \ + && if [ "${ARCHITECTURE}" = "amd64" ]; then GRAALVM_ARCHITECTURE=linux-x64; fi \ + && if [ "${ARCHITECTURE}" = "arm64" ]; then GRAALVM_ARCHITECTURE=linux-aarch64; fi \ + && GRAALVM_PKG=https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${JAVA_VERSION}/graalvm-community-jdk-${JAVA_VERSION}_${GRAALVM_ARCHITECTURE}_bin.tar.gz \ + && wget --no-verbose --output-document=graalvm.tar.gz "${GRAALVM_PKG}" \ + \ + && echo "Checking GraalVM download hash" \ + && if [ "${ARCHITECTURE}" = "amd64" ]; then GRAALVM_DOWNLOAD_SHA256="${GRAALVM_AMD64_DOWNLOAD_SHA256}"; fi \ + && if [ "${ARCHITECTURE}" = "arm64" ]; then GRAALVM_DOWNLOAD_SHA256="${GRAALVM_AARCH64_DOWNLOAD_SHA256}"; fi \ + && echo "${GRAALVM_DOWNLOAD_SHA256} *graalvm.tar.gz" | sha256sum --check - \ + \ + && echo "Installing GraalVM" \ + && tar --extract --gunzip --file graalvm.tar.gz \ + && rm graalvm.tar.gz \ + && mv graalvm-* "${JAVA_HOME}" \ + && for bin in "$JAVA_HOME/bin/"*; do \ + base="$(basename "$bin")"; \ + [ ! -e "/usr/bin/$base" ]; \ + update-alternatives --install "/usr/bin/${base}" "${base}" "${bin}" 1; \ + done \ + \ + && echo "Testing GraalVM installation" \ + && java --version \ + && javac --version \ + && native-image --version + +ENV GRADLE_VERSION 8.7 +ARG GRADLE_DOWNLOAD_SHA256=544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d +RUN set -o errexit -o nounset \ + && echo "Downloading Gradle" \ + && wget --no-verbose --output-document=gradle.zip "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip" \ + \ + && echo "Checking Gradle download hash" \ + && echo "${GRADLE_DOWNLOAD_SHA256} *gradle.zip" | sha256sum --check - \ + \ + && echo "Installing Gradle" \ + && unzip gradle.zip \ + && rm gradle.zip \ + && mv "gradle-${GRADLE_VERSION}" "${GRADLE_HOME}/" \ + && ln --symbolic "${GRADLE_HOME}/bin/gradle" /usr/bin/gradle + +USER gradle + +RUN set -o errexit -o nounset \ + && echo "Testing Gradle installation" \ + && gradle --version + +USER root diff --git a/jdk22/Dockerfile b/jdk22/Dockerfile new file mode 100644 index 0000000..443d78d --- /dev/null +++ b/jdk22/Dockerfile @@ -0,0 +1,64 @@ +FROM eclipse-temurin:22-jdk-jammy + +CMD ["gradle"] + +ENV GRADLE_HOME /opt/gradle + +RUN set -o errexit -o nounset \ + && echo "Adding gradle user and group" \ + && groupadd --system --gid 1000 gradle \ + && useradd --system --gid gradle --uid 1000 --shell /bin/bash --create-home gradle \ + && mkdir /home/gradle/.gradle \ + && chown --recursive gradle:gradle /home/gradle \ + && chmod --recursive o+rwx /home/gradle \ + \ + && echo "Symlinking root Gradle cache to gradle Gradle cache" \ + && ln --symbolic /home/gradle/.gradle /root/.gradle + +VOLUME /home/gradle/.gradle + +WORKDIR /home/gradle + +RUN set -o errexit -o nounset \ + && apt-get update \ + && apt-get install --yes --no-install-recommends \ + unzip \ + wget \ + \ + bzr \ + git \ + git-lfs \ + mercurial \ + openssh-client \ + subversion \ + && rm --recursive --force /var/lib/apt/lists/* \ + \ + && echo "Testing VCSes" \ + && which bzr \ + && which git \ + && which git-lfs \ + && which hg \ + && which svn + +ENV GRADLE_VERSION 8.6 +ARG GRADLE_DOWNLOAD_SHA256=9631d53cf3e74bfa726893aee1f8994fee4e060c401335946dba2156f440f24c +RUN set -o errexit -o nounset \ + && echo "Downloading Gradle" \ + && wget --no-verbose --output-document=gradle.zip "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip" \ + \ + && echo "Checking Gradle download hash" \ + && echo "${GRADLE_DOWNLOAD_SHA256} *gradle.zip" | sha256sum --check - \ + \ + && echo "Installing Gradle" \ + && unzip gradle.zip \ + && rm gradle.zip \ + && mv "gradle-${GRADLE_VERSION}" "${GRADLE_HOME}/" \ + && ln --symbolic "${GRADLE_HOME}/bin/gradle" /usr/bin/gradle + +USER gradle + +RUN set -o errexit -o nounset \ + && echo "Testing Gradle installation" \ + && gradle --version + +USER root diff --git a/update.ps1 b/update.ps1 index e8d8862..92cfd45 100644 --- a/update.ps1 +++ b/update.ps1 @@ -2,22 +2,29 @@ $gradleVersion = $((Invoke-WebRequest "https://services.gradle.org/versions/curr $sha = $(Invoke-RestMethod -Uri "https://downloads.gradle.org/distributions/gradle-${gradleVersion}-bin.zip.sha256") $wc = [System.Net.WebClient]::new() -$graal17Version = $(((Invoke-WebRequest "https://api.github.com/repos/graalvm/graalvm-ce-builds/releases?per_page=6&page=1" | ConvertFrom-Json).tag_name | Select-String -Pattern "jdk-17" | Select-Object -First 1).ToString().Replace("jdk-", "")) +$graal17Version = $(((Invoke-WebRequest "https://api.github.com/repos/graalvm/graalvm-ce-builds/releases?per_page=12&page=1" | ConvertFrom-Json).tag_name | Select-String -Pattern "jdk-17" | Select-Object -First 1).ToString().Replace("jdk-", "")) $graal17amd64Hash = (Get-FileHash -Algorithm SHA256 -InputStream ($wc.OpenRead("https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graal17Version}/graalvm-community-jdk-${graal17Version}_linux-x64_bin.tar.gz"))).Hash.ToLower() $graal17aarch64Hash = (Get-FileHash -Algorithm SHA256 -InputStream ($wc.OpenRead("https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graal17Version}/graalvm-community-jdk-${graal17Version}_linux-aarch64_bin.tar.gz"))).Hash.ToLower() - -$graal21Version = $(((Invoke-WebRequest "https://api.github.com/repos/graalvm/graalvm-ce-builds/releases?per_page=6&page=1" | ConvertFrom-Json).tag_name | Select-String -Pattern "jdk-21" | Select-Object -First 1).ToString().Replace("jdk-", "")) +# +$graal21Version = $(((Invoke-WebRequest "https://api.github.com/repos/graalvm/graalvm-ce-builds/releases?per_page=12&page=1" | ConvertFrom-Json).tag_name | Select-String -Pattern "jdk-21" | Select-Object -First 1).ToString().Replace("jdk-", "")) $graal21amd64Hash = (Get-FileHash -Algorithm SHA256 -InputStream ($wc.OpenRead("https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graal21Version}/graalvm-community-jdk-${graal21Version}_linux-x64_bin.tar.gz"))).Hash.ToLower() $graal21aarch64Hash = (Get-FileHash -Algorithm SHA256 -InputStream ($wc.OpenRead("https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graal21Version}/graalvm-community-jdk-${graal21Version}_linux-aarch64_bin.tar.gz"))).Hash.ToLower() +$graal22Version = $(((Invoke-WebRequest "https://api.github.com/repos/graalvm/graalvm-ce-builds/releases?per_page=12&page=1" | ConvertFrom-Json).tag_name | Select-String -Pattern "jdk-22" | Select-Object -First 1).ToString().Replace("jdk-", "")) +$graal22amd64Hash = (Get-FileHash -Algorithm SHA256 -InputStream ($wc.OpenRead("https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graal22Version}/graalvm-community-jdk-${graal22Version}_linux-x64_bin.tar.gz"))).Hash.ToLower() +$graal22aarch64Hash = (Get-FileHash -Algorithm SHA256 -InputStream ($wc.OpenRead("https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graal22Version}/graalvm-community-jdk-${graal22Version}_linux-aarch64_bin.tar.gz"))).Hash.ToLower() + Write-Host "Latest Gradle version is $gradleVersion" Write-Host "Latest Graal 17 version is $graal17Version" Write-Host "Latest Graal 21 version is $graal21Version" +Write-Host "Latest Graal 22 version is $graal22Version" Write-Host "Graal 17 AMD64 hash is $graal17amd64Hash" Write-Host "Graal 17 AARCH64 hash is $graal17aarch64Hash" Write-Host "Graal 21 AMD64 hash is $graal21amd64Hash" Write-Host "Graal 21 AARCH64 hash is $graal21aarch64Hash" +Write-Host "Graal 22 AMD64 hash is $graal22amd64Hash" +Write-Host "Graal 22 AARCH64 hash is $graal22aarch64Hash" dir -Recurse -Filter Dockerfile | ForEach-Object { (Get-Content -Path $_.FullName) -replace "ENV GRADLE_VERSION .+$", "ENV GRADLE_VERSION ${gradleVersion}" | Set-Content $_.FullName @@ -34,6 +41,12 @@ dir -Recurse -Filter Dockerfile | ForEach-Object { (Get-Content -Path $_.FullName) -replace "GRAALVM_AMD64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AMD64_DOWNLOAD_SHA256=${graal21amd64Hash}" | Set-Content $_.FullName (Get-Content -Path $_.FullName) -replace "GRAALVM_AARCH64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AARCH64_DOWNLOAD_SHA256=${graal21aarch64Hash}" | Set-Content $_.FullName } + if ($((Get-Item $_.FullName).Directory.Name) -match "jdk22.+graal") + { + (Get-Content -Path $_.FullName) -replace "JAVA_VERSION=[^ ]+", "JAVA_VERSION=${graal22Version}" | Set-Content $_.FullName + (Get-Content -Path $_.FullName) -replace "GRAALVM_AMD64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AMD64_DOWNLOAD_SHA256=${graal22amd64Hash}" | Set-Content $_.FullName + (Get-Content -Path $_.FullName) -replace "GRAALVM_AARCH64_DOWNLOAD_SHA256=[^ ]+", "GRAALVM_AARCH64_DOWNLOAD_SHA256=${graal22aarch64Hash}" | Set-Content $_.FullName + } } (Get-Content -Path .github/workflows/ci.yaml) -replace "expectedGradleVersion: .+", "expectedGradleVersion: `"${gradleVersion}`"" | Set-Content .github/workflows/ci.yaml diff --git a/update.sh b/update.sh index 3c04c24..1f5c884 100755 --- a/update.sh +++ b/update.sh @@ -8,25 +8,35 @@ sed --regexp-extended --in-place "s/ENV GRADLE_VERSION .+$/ENV GRADLE_VERSION ${ sed --regexp-extended --in-place "s/GRADLE_DOWNLOAD_SHA256=.+$/GRADLE_DOWNLOAD_SHA256=${sha}/" ./*/Dockerfile sed --regexp-extended --in-place "s/expectedGradleVersion: .+$/expectedGradleVersion: \"${gradleVersion}\"/" .github/workflows/ci.yaml -graal17Version=$(curl --silent --location 'https://api.github.com/repos/graalvm/graalvm-ce-builds/releases?per_page=6&page=1' | jq -r 'map(select(.tag_name | contains("jdk-17"))) | .[0].tag_name | sub("jdk-"; "")') +graal17Version=$(curl --silent --location 'https://api.github.com/repos/graalvm/graalvm-ce-builds/releases?per_page=12&page=1' | jq -r 'map(select(.tag_name | contains("jdk-17"))) | .[0].tag_name | sub("jdk-"; "")') sed --regexp-extended --in-place "s/JAVA_VERSION=[^ ]+/JAVA_VERSION=${graal17Version}/" ./jdk17*graal/Dockerfile graal17amd64Sha=$(curl --fail --location --silent "https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graal17Version}/graalvm-community-jdk-${graal17Version}_linux-x64_bin.tar.gz" | sha256sum | cut -d' ' -f1) graal17aarch64Sha=$(curl --fail --location --silent "https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graal17Version}/graalvm-community-jdk-${graal17Version}_linux-aarch64_bin.tar.gz" | sha256sum | cut -d' ' -f1) sed --regexp-extended --in-place "s/GRAALVM_AMD64_DOWNLOAD_SHA256=[^ ]+/GRAALVM_AMD64_DOWNLOAD_SHA256=${graal17amd64Sha}/" ./jdk17*graal/Dockerfile sed --regexp-extended --in-place "s/GRAALVM_AARCH64_DOWNLOAD_SHA256=[^ ]+/GRAALVM_AARCH64_DOWNLOAD_SHA256=${graal17aarch64Sha}/" ./jdk17*graal/Dockerfile -graal21Version=$( curl --silent --location 'https://api.github.com/repos/graalvm/graalvm-ce-builds/releases?per_page=6&page=1' | jq -r 'map(select(.tag_name | contains("jdk-21"))) | .[0].tag_name | sub("jdk-"; "")') +graal21Version=$( curl --silent --location 'https://api.github.com/repos/graalvm/graalvm-ce-builds/releases?per_page=12&page=1' | jq -r 'map(select(.tag_name | contains("jdk-21"))) | .[0].tag_name | sub("jdk-"; "")') sed --regexp-extended --in-place "s/JAVA_VERSION=[^ ]+/JAVA_VERSION=${graal21Version}/" ./jdk21*graal/Dockerfile graal21amd64Sha=$(curl --fail --location --silent "https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graal21Version}/graalvm-community-jdk-${graal21Version}_linux-x64_bin.tar.gz" | sha256sum | cut -d' ' -f1) graal21aarch64Sha=$(curl --fail --location --silent "https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graal21Version}/graalvm-community-jdk-${graal21Version}_linux-aarch64_bin.tar.gz" | sha256sum | cut -d' ' -f1) sed --regexp-extended --in-place "s/GRAALVM_AMD64_DOWNLOAD_SHA256=[^ ]+/GRAALVM_AMD64_DOWNLOAD_SHA256=${graal21amd64Sha}/" ./jdk21*graal/Dockerfile sed --regexp-extended --in-place "s/GRAALVM_AARCH64_DOWNLOAD_SHA256=[^ ]+/GRAALVM_AARCH64_DOWNLOAD_SHA256=${graal21aarch64Sha}/" ./jdk21*graal/Dockerfile +graal22Version=$( curl --silent --location 'https://api.github.com/repos/graalvm/graalvm-ce-builds/releases?per_page=12&page=1' | jq -r 'map(select(.tag_name | contains("jdk-22"))) | .[0].tag_name | sub("jdk-"; "")') +sed --regexp-extended --in-place "s/JAVA_VERSION=[^ ]+/JAVA_VERSION=${graal22Version}/" ./jdk22*graal/Dockerfile +graal22amd64Sha=$(curl --fail --location --silent "https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graal22Version}/graalvm-community-jdk-${graal22Version}_linux-x64_bin.tar.gz" | sha256sum | cut -d' ' -f1) +graal22aarch64Sha=$(curl --fail --location --silent "https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graal22Version}/graalvm-community-jdk-${graal22Version}_linux-aarch64_bin.tar.gz" | sha256sum | cut -d' ' -f1) +sed --regexp-extended --in-place "s/GRAALVM_AMD64_DOWNLOAD_SHA256=[^ ]+/GRAALVM_AMD64_DOWNLOAD_SHA256=${graal22amd64Sha}/" ./jdk22*graal/Dockerfile +sed --regexp-extended --in-place "s/GRAALVM_AARCH64_DOWNLOAD_SHA256=[^ ]+/GRAALVM_AARCH64_DOWNLOAD_SHA256=${graal22aarch64Sha}/" ./jdk22*graal/Dockerfile + echo "Latest Gradle version is ${gradleVersion}" echo "Latest Graal 17 version is ${graal17Version}" echo "Latest Graal 21 version is ${graal21Version}" +echo "Latest Graal 22 version is ${graal22Version}" echo "Graal 17 AMD64 hash is ${graal17amd64Sha}" echo "Graal 17 AARCH64 hash is ${graal17aarch64Sha}" echo "Graal 21 AMD64 hash is ${graal21amd64Sha}" echo "Graal 21 AARCH64 hash is ${graal21aarch64Sha}" +echo "Graal 22 AMD64 hash is ${graal22amd64Sha}" +echo "Graal 22 AARCH64 hash is ${graal22aarch64Sha}"