This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch issue/SLING-13208 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-starter.git
commit cac7fa5adc801162778d1499d878cdf6e663fc9a Author: Robert Munteanu <[email protected]> AuthorDate: Wed May 20 14:34:28 2026 +0200 SLING-13208 - Allow including additional features when launching the Sling Starter container image Introduce and document the --repository-urls and --extra-features flags --- README.md | 26 ++++++++++++ src/main/container/bin/launch.sh | 87 +++++++++++++++++++++++++++++++++++++--- 2 files changed, 108 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cfac328..e4a7776 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,19 @@ following environment variables: | `JAVA_DEBUG_PORT` | Run Sling Starter in Java debug mode | `5005` | | `EXTRA_JAVA_OPTS` | Extra java options e.g `Xmx` or `Xms`. | `-Xms256m -Xmx2048m` | +The following command arguments are supported: + +| Command argument | Description | Example | +|------------------|----------------------------------------|----------------------| +| --repository-urls | Repository URLs to be used by Sling Starter. Replaces built-in values. | `file:///opt/sling/m2repo https://repo.maven.apache.org/maven2` | +| --extra-features | Extra features to be added to the Sling Starter | `mvn:org.apache.sling/org.apache.sling.thumbnails/1.0.2/slingosgifeature/default` | + + +> [!NOTE] +> The --extra-features argument is intended for quick experiments and debugging. When using the this functionality there is no guarantee that the features are compatible with the +> Sling Starter configuration and startup will proceed even if some bundles cannot resolve. It is recommended to build a custom image with the required features and to +> run the appropriate feature model analysers during the build. + > **Example** > running Sling Starter in debug mode with custom memory settings @@ -109,6 +122,19 @@ following environment variables: docker run -p 8080:8080 -p 5005:5005 -e JAVA_DEBUG_PORT=5005 -e EXTRA_JAVA_OPTS='-Xms256m -Xmx2048m' apache/sling:snapshot ``` +> running Sling Starter with an additional feature available in the default repositories + +```bash +docker run -p 8080:8080 apache/sling:snapshot oak_tar --extra-features mvn:org.apache.sling/org.apache.sling.thumbnails/1.0.2/slingosgifeature/default +``` + +> running Sling Starter with a SNAPSHOT feature available in the local Maven repository + +```bash +docker run -p 8080:8080 -v $HOME/.m2/repository:/opt/sling/m2repo apache/sling:snapshot oak_tar --repository-urls file:///opt/sling/m2repo https://repo.maven.apache.org/maven2 --extra-features mvn:org.apache.sling/org.apache.sling.thumbnails/1.0.3-SNAPSHOT/slingosgifeature/default +``` + + ## Building the Docker image This module can optionally build a Docker image. This is achieved by running a build with the `-Ddocker.skip=false` argument. By default, the image is built as `apache/sling:snapshot`. The tag can be overrriden using the `docker.image.tag` Maven property. diff --git a/src/main/container/bin/launch.sh b/src/main/container/bin/launch.sh index 002c7b2..e0f66ab 100755 --- a/src/main/container/bin/launch.sh +++ b/src/main/container/bin/launch.sh @@ -19,6 +19,54 @@ feature_name="${1}" + +if [[ -z "${feature_name}" ]]; then + echo "[ERROR] Missing feature name. Aborting" + exit 1 +fi + +shift + +extra_features=() +repository_urls=() + +while [[ $# -gt 0 ]]; do + case "$1" in + --extra-features) + shift + start_count=${#extra_features[@]} + while [[ $# -gt 0 && "$1" != -* ]]; do + extra_features+=("$1") + shift + done + if [[ ${#extra_features[@]} -eq ${start_count} ]]; then + echo "[ERROR] --extra-features requires at least one value. Aborting" + exit 1 + fi + ;; + --repository-urls) + shift + start_count=${#repository_urls[@]} + while [[ $# -gt 0 && "$1" != -* ]]; do + repository_urls+=("$1") + shift + done + if [[ ${#repository_urls[@]} -eq ${start_count} ]]; then + echo "[ERROR] --repository-urls requires at least one value. Aborting" + exit 1 + fi + ;; + -*) + echo "[ERROR] Unknown option $1. Aborting" + exit 1 + ;; + *) + echo "[ERROR] Unexpected argument $1. Aborting" + exit 1 + ;; + esac +done + feature=$(find artifacts -name "*${feature_name}*.slingosgifeature") if [[ ! -f "${feature}" ]]; then @@ -31,7 +79,37 @@ docker_feature=$(find artifacts -name "*docker.slingosgifeature") echo "[INFO] Selected ${feature} for launching" echo "[INFO] Automatically appended ${docker_feature}" -feature="${feature},${docker_feature}" +feature_list=("${feature}") +for extra_feature in "${extra_features[@]}"; do + echo "[INFO] Appended extra feature ${extra_feature}" + feature_list+=("${extra_feature}") +done +feature_list+=("${docker_feature}") + +feature=$(IFS=, ; printf '%s' "${feature_list[*]}") + +effective_repository_urls=( + "file:///opt/sling/artifacts" +) + +if [[ ${#repository_urls[@]} -eq 0 ]]; then + effective_repository_urls+=( + "https://repo.maven.apache.org/maven2" + "https://repository.apache.org/content/groups/snapshots" + ) +else + effective_repository_urls+=("${repository_urls[@]}") +fi + +launcher_args=( + -u + "${effective_repository_urls[@]}" + -CC "org.apache.sling.commons.log.LogManager=MERGE_LATEST" +) + +echo "[INFO] Using repository URLs ${effective_repository_urls[*]}" + +launcher_args+=(-f "${feature}") if [ ! -z "${JAVA_DEBUG_PORT}" ]; then JAVA_DEBUG_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:${JAVA_DEBUG_PORT}" @@ -48,7 +126,6 @@ done export JAVA_OPTS echo "[INFO] JAVA_OPTS=${JAVA_OPTS}" -exec org.apache.sling.feature.launcher/bin/launcher \ - -c artifacts \ - -CC "org.apache.sling.commons.log.LogManager=MERGE_LATEST" \ - -f ${feature} +echo "[INFO] Launch feature list: ${feature}" + +exec org.apache.sling.feature.launcher/bin/launcher "${launcher_args[@]}"
