diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 400b6be..d312962 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -19,6 +19,7 @@ jobs: - mise - mise-bun - mise-golang + - mise-java - mise-node - mise-python - mise-ruby @@ -70,6 +71,7 @@ jobs: - mise - mise-bun - mise-golang + - mise-java - mise-node - mise-python - mise-ruby diff --git a/README.md b/README.md index 1e36b93..cf080d9 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ This repository contains the following features: - [Mise - mise-en-place version manager](./src/mise/README.md): Installs mise-en-place version manager. - [Bun (via mise)](./src/mise-bun/README.md): Installs Bun via mise-en-place version manager. - [Go (via mise)](./src/mise-golang/README.md): Installs Go via mise-en-place version manager. +- [Java (via mise)](./src/mise-java/README.md): Installs Java via mise-en-place version manager. - [Node.js (via mise)](./src/mise-node/README.md): Installs Node.js via mise-en-place version manager. - [Python (via mise)](./src/mise-python/README.md): Installs Python via mise-en-place version manager. - [Ruby (via mise)](./src/mise-ruby/README.md): Installs Ruby via mise-en-place version manager. diff --git a/src/mise-java/README.md b/src/mise-java/README.md new file mode 100644 index 0000000..6599390 --- /dev/null +++ b/src/mise-java/README.md @@ -0,0 +1,25 @@ + +# Java (via mise) (mise-java) + +Installs Java via mise-en-place version manager. + +## Example Usage + +```json +"features": { + "ghcr.io/roul/devcontainer-features/mise-java:1": {} +} +``` + +## Options + +| Options Id | Description | Type | Default Value | +|-----|-----|-----|-----| +| version | Version to be installed as default. | string | latest | +| extra_versions | Additional versions to be installed. (space separated) | string | - | + + + +--- + +_Note: This file was auto-generated from the [devcontainer-feature.json](https://github.com/RouL/devcontainer-features/blob/main/src/mise-java/devcontainer-feature.json). Add additional notes to a `NOTES.md`._ diff --git a/src/mise-java/devcontainer-feature.json b/src/mise-java/devcontainer-feature.json new file mode 100644 index 0000000..7f7ffdb --- /dev/null +++ b/src/mise-java/devcontainer-feature.json @@ -0,0 +1,21 @@ +{ + "id": "mise-java", + "version": "1.0.0", + "name": "Java (via mise)", + "description": "Installs Java via mise-en-place version manager.", + "dependsOn": { + "ghcr.io/roul/devcontainer-features/mise:latest": {} + }, + "options": { + "version": { + "description": "Version to be installed as default.", + "type": "string", + "default": "latest" + }, + "extra_versions": { + "description": "Additional versions to be installed. (space separated)", + "type": "string", + "default": "" + } + } +} diff --git a/src/mise-java/install.sh b/src/mise-java/install.sh new file mode 100755 index 0000000..1a57617 --- /dev/null +++ b/src/mise-java/install.sh @@ -0,0 +1,45 @@ +#!/usr/bin/bash +set -e + +USERNAME="${USERNAME:-"${_REMOTE_USER:-"automatic"}"}" +VERSION="${VERSION:-latest}" + +REQUIRED_PACKAGES="build-essential git ca-certificates" + +apt_get_update() +{ + if [ "$(find /var/lib/apt/lists/* | wc -l)" = "0" ]; then + echo "Running apt-get update..." + apt-get update -y + fi +} + +check_packages() { + if ! dpkg -s "$@" > /dev/null 2>&1; then + apt_get_update + apt-get -y install --no-install-recommends "$@" + fi +} + +export DEBIAN_FRONTEND=noninteractive + +check_packages $REQUIRED_PACKAGES + +install() { + su ${USERNAME} -c "mise use --global java@${VERSION}" +} + +echo "(*) Installing Java (${VERSION}) via mise as default..." + +install + +for extraVersion in $EXTRA_VERSIONS +do + echo "(*) Installung Java (${extraVersion}) via mise" + su ${USERNAME} -c "mise install java@${extraVersion}" +done + +# Clean up +rm -rf /var/lib/apt/lists/* + +echo "Done!" diff --git a/test/mise-java/openjdk9.sh b/test/mise-java/openjdk9.sh new file mode 100644 index 0000000..28c66e1 --- /dev/null +++ b/test/mise-java/openjdk9.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e + +source dev-container-features-test-lib + +check "check default java == 9.*" bash -c "java -version 2>&1 | grep -E '^openjdk version \"9\.'" + +reportResults diff --git a/test/mise-java/scenarios.json b/test/mise-java/scenarios.json new file mode 100644 index 0000000..198ab94 --- /dev/null +++ b/test/mise-java/scenarios.json @@ -0,0 +1,19 @@ +{ + "openjdk9": { + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "mise-java": { + "version": "9" + } + } + }, + "zulu8_temurin20_corretto19": { + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "mise-java": { + "version": "zulu-8", + "extra_versions": "temurin-20 corretto-19" + } + } + } +} diff --git a/test/mise-java/test.sh b/test/mise-java/test.sh new file mode 100644 index 0000000..438f9a4 --- /dev/null +++ b/test/mise-java/test.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e + +source dev-container-features-test-lib + +check "check default java" bash -c "java -version 2>&1 | grep -E '^openjdk version \"[1-9][0-9]*\"'" + +reportResults diff --git a/test/mise-java/zulu8_temurin20_corretto19.sh b/test/mise-java/zulu8_temurin20_corretto19.sh new file mode 100644 index 0000000..63f287d --- /dev/null +++ b/test/mise-java/zulu8_temurin20_corretto19.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -e + +source dev-container-features-test-lib + +check "check default java == 1.8.*" bash -c "java -version 2>&1 | grep -E '^openjdk version \"1\.8\.'" +check "check java 20.*" bash -c "mise exec java@temurin-20 -- java -version 2>&1 | grep -E '^openjdk version \"20\.'" +check "check java 19.*" bash -c "mise exec java@corretto-19 -- java -version 2>&1 | grep -E '^openjdk version \"19\.'" + +reportResults