diff --git a/README.md b/README.md index 429d817..7e4ca6b 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ This repository contains example images for use with [Coder](https://coder.com/d utilities for a Coder workspace to bootstrap successfully. - `example-golang`: Contains Go development tools. - `example-java`: Contains Java development tools. +- `example-java-sdkman`: Contains Java development tools, managed by SDKMAN!. - `example-node`: Contains Node.js development tools. - `example-desktop`: Contains a desktop environment accessible via web browser. diff --git a/dprint.json b/dprint.json index 4ef57b3..08bf177 100644 --- a/dprint.json +++ b/dprint.json @@ -7,7 +7,7 @@ "deprecated/*" ], "plugins": [ - "https://plugins.dprint.dev/markdown-0.17.0.wasm", - "https://plugins.dprint.dev/dockerfile-0.3.0.wasm" + "https://plugins.dprint.dev/markdown-0.19.0.wasm", + "https://plugins.dprint.dev/dockerfile-0.3.3.wasm" ] } diff --git a/images/java-sdkman/README.md b/images/java-sdkman/README.md new file mode 100644 index 0000000..f66d9af --- /dev/null +++ b/images/java-sdkman/README.md @@ -0,0 +1,20 @@ +# Java + +[![Docker Pulls](https://img.shields.io/docker/pulls/codercom/enterprise-java-sdkman?label=codercom%2Fenterprise-java-sdkman)](https://hub.docker.com/r/codercom/enterprise-java-sdkman) + +## Description + +Wraps [enterprise-base](../base/README.md) with the basics for Java development. + +> **Note:** This image does not contain IntelliJ. For an example of how to +> install IntelliJ, see [enterprise-intellij](../../deprecated/intellij/README.md) + +Uses [SDKMAN!](https://sdkman.io/) for management of SDKs and JDKs. + +Java, Maven, and Gradle are installed by default, versions can be changed or new packages added as needed. + +See [SDKMAN! Docs](https://sdkman.io/usage) for instructions on usage. + +## How To Use + +This image is ready for direct use within Coder Enterprise. diff --git a/images/java-sdkman/ubuntu.Dockerfile b/images/java-sdkman/ubuntu.Dockerfile new file mode 100644 index 0000000..c63cece --- /dev/null +++ b/images/java-sdkman/ubuntu.Dockerfile @@ -0,0 +1,32 @@ +FROM codercom/enterprise-base:ubuntu + +ARG DEBIAN_FRONTEND="noninteractive" +ARG SDKMAN_SHA512="a8fc6a336d31f2e4980cfe39ee9f11a0f2ee70bc721094b7ea63b953fd1675474765a4e273d6575ea207aa59c15f4fe867e963c0c47580f2131edc2ae8d4fd34" + +ENV SDKMAN_DIR="/home/coder/.sdkman" \ + JAVA_VERSION="21.0.8-tem" \ + GRADLE_VERSION="8.14.3" \ + MAVEN_VERSION="3.9.11" \ + MAVEN_CONFIG="/home/coder/.m2" + +USER root + +RUN apt-get update -qq && \ + apt-get install -qq -y \ + --no-install-recommends \ + --no-install-suggests \ + zip && \ + rm -rf /var/lib/apt/lists/* + +USER coder + +RUN curl -fsSL "https://get.sdkman.io?ci=true" -o /tmp/install_sdkman.sh && \ + echo "${SDKMAN_SHA512} /tmp/install_sdkman.sh" | sha512sum -c - && \ + bash /tmp/install_sdkman.sh && \ + rm /tmp/install_sdkman.sh && \ + bash -c "source ${SDKMAN_DIR}/bin/sdkman-init.sh && \ + sdk install java ${JAVA_VERSION} && \ + sdk install gradle ${GRADLE_VERSION} && \ + sdk install maven ${MAVEN_VERSION} && \ + sdk flush archives && \ + sdk flush temp" diff --git a/images/java/ubuntu.Dockerfile b/images/java/ubuntu.Dockerfile index 4727230..a4e0d83 100644 --- a/images/java/ubuntu.Dockerfile +++ b/images/java/ubuntu.Dockerfile @@ -3,48 +3,47 @@ FROM codercom/enterprise-base:ubuntu # Run everything as root USER root -# Install JDK (OpenJDK 8) -RUN DEBIAN_FRONTEND="noninteractive" apt-get update -y && \ - apt-get install -y openjdk-11-jdk -ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 -ENV PATH=$PATH:$JAVA_HOME/bin +ENV DEBIAN_FRONTEND="noninteractive" \ + JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 \ + GRADLE_HOME=/usr/bin/gradle \ + MAVEN_HOME=/usr/share/maven \ + MAVEN_CONFIG="/home/coder/.m2" -# Install Maven ARG MAVEN_VERSION=3.9.11 ARG MAVEN_SHA512=bcfe4fe305c962ace56ac7b5fc7a08b87d5abd8b7e89027ab251069faebee516b0ded8961445d6d91ec1985dfe30f8153268843c89aa392733d1a3ec956c9978 - -ENV MAVEN_HOME=/usr/share/maven -ENV MAVEN_CONFIG="/home/coder/.m2" - -RUN mkdir -p $MAVEN_HOME $MAVEN_HOME/ref \ - && echo "Downloading maven" \ - && curl -fsSL -o /tmp/apache-maven.tar.gz https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz \ - && echo "Checking downloaded file hash" \ - && echo "${MAVEN_SHA512} /tmp/apache-maven.tar.gz" | sha512sum -c - \ - && echo "Unzipping maven" \ - && tar -xzf /tmp/apache-maven.tar.gz -C $MAVEN_HOME --strip-components=1 \ - && echo "Cleaning and setting links" \ - && rm -f /tmp/apache-maven.tar.gz \ - && ln -s $MAVEN_HOME/bin/mvn /usr/bin/mvn - -# Install Gradle -ENV GRADLE_VERSION=6.7 +ARG GRADLE_VERSION=6.7 ARG GRADLE_SHA512=d495bc65379d2a854d2cca843bd2eeb94f381e5a7dcae89e6ceb6ef4c5835524932313e7f30d7a875d5330add37a5fe23447dc3b55b4d95dffffa870c0b24493 -ENV GRADLE_HOME=/usr/bin/gradle +# Install JDK (OpenJDK 8) +RUN apt-get update -qq && \ + apt-get install -y openjdk-11-jdk && \ + rm -rf /var/lib/apt/lists/* -RUN mkdir -p /usr/share/gradle /usr/share/gradle/ref \ - && echo "Downloading gradle" \ - && curl -fsSL -o /tmp/gradle.zip https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip \ - && echo "Checking downloaded file hash" \ - && echo "${GRADLE_SHA512} /tmp/gradle.zip" | sha512sum -c - \ - && echo "Unziping gradle" \ - && unzip -d /usr/share/gradle /tmp/gradle.zip \ - && echo "Cleaning and setting links" \ - && rm -f /tmp/gradle.zip \ - && ln -s /usr/share/gradle/gradle-${GRADLE_VERSION} /usr/bin/gradle +# Install Maven +RUN mkdir -p $MAVEN_HOME $MAVEN_HOME/ref && \ + echo "Downloading Maven" && \ + curl -fsSL -o /tmp/apache-maven.tar.gz https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/${MAVEN_VERSION}/apache-maven-${MAVEN_VERSION}-bin.tar.gz && \ + echo "Checking downloaded file hash" && \ + echo "${MAVEN_SHA512} /tmp/apache-maven.tar.gz" | sha512sum -c - && \ + echo "Unzipping Maven" && \ + tar -xzf /tmp/apache-maven.tar.gz -C $MAVEN_HOME --strip-components=1 && \ + echo "Cleaning and setting links" && \ + rm -f /tmp/apache-maven.tar.gz && \ + ln -s $MAVEN_HOME/bin/mvn /usr/bin/mvn -ENV PATH=$PATH:$GRADLE_HOME/bin +# Install Gradle +RUN mkdir -p /usr/share/gradle /usr/share/gradle/ref && \ + echo "Downloading Gradle" && \ + curl -fsSL -o /tmp/gradle.zip https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip && \ + echo "Checking downloaded file hash" && \ + echo "${GRADLE_SHA512} /tmp/gradle.zip" | sha512sum -c - && \ + echo "Unzipping Gradle" && \ + unzip -d /usr/share/gradle /tmp/gradle.zip && \ + echo "Cleaning and setting links" && \ + rm -f /tmp/gradle.zip && \ + ln -s /usr/share/gradle/gradle-${GRADLE_VERSION} /usr/bin/gradle + +ENV PATH=$PATH:$JAVA_HOME/bin:$GRADLE_HOME/bin # Set back to coder user USER coder diff --git a/scripts/build_images.sh b/scripts/build_images.sh index d01ded3..594f2c9 100755 --- a/scripts/build_images.sh +++ b/scripts/build_images.sh @@ -82,7 +82,7 @@ done docker_flags=() -if [ $QUIET = true ]; then +if [ "$QUIET" = true ]; then docker_flags+=( --quiet ) @@ -94,15 +94,24 @@ for image in "${IMAGES[@]}"; do enterprise_image_ref="codercom/enterprise-$image:$TAG" example_image_ref="codercom/example-$image:$TAG" image_path="$image_dir/$image_file" + platforms="linux/arm64,linux/amd64,linux/arm/v7" if [ ! -f "$image_path" ]; then - if [ $QUIET = false ]; then + if [ "$QUIET" = false ]; then echo "Path '$image_path' does not exist; skipping" >&2 fi continue fi - run_trace $DRY_RUN depot build --project "gb3p8xrshk" --load --platform linux/arm64,linux/amd64,linux/arm/v7 --save --metadata-file="build_${image}.json" \ + if [[ "$image" == "java-sdkman" ]]; then + platforms="linux/arm64,linux/amd64" + fi + + run_trace $DRY_RUN depot build \ + --load \ + --platform "$platforms" \ + --save \ + --metadata-file="build_${image}.json" \ "${docker_flags[@]}" \ "$image_dir" \ --file="$image_path" \ diff --git a/scripts/images.sh b/scripts/images.sh index 0439477..eabbc37 100644 --- a/scripts/images.sh +++ b/scripts/images.sh @@ -7,6 +7,7 @@ IMAGES=( "minimal" "golang" "java" + "java-sdkman" "node" "desktop" )