diff --git a/Dockerfile b/Dockerfile index df4615e77cd..ec291fef4af 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,22 @@ FROM jimschubert/8-jdk-alpine-mvn:1.0 +ENV GEN_DIR /opt/swagger-codegen + +RUN set -x && \ + apk add --no-cache bash + RUN mkdir /opt -ADD . /opt/swagger-codegen +ADD . ${GEN_DIR} -WORKDIR /opt/swagger-codegen +VOLUME ${MAVEN_HOME}/.m2/repository -RUN mvn -am -pl "modules/swagger-codegen-cli" package && \ - mv /opt/swagger-codegen/modules/swagger-codegen-cli/target/swagger-codegen-cli.jar /opt/swagger-codegen/swagger-codegen-cli.jar && \ - mvn clean && \ - rm -rf ${MAVEN_HOME}/.m2/repository +WORKDIR ${GEN_DIR} -ENTRYPOINT ["java", "-jar", "/opt/swagger-codegen/swagger-codegen-cli.jar"] +RUN mvn -am -pl "modules/swagger-codegen-cli" package -CMD ["help"] +COPY docker-entrypoint.sh /usr/local/bin/ + +ENTRYPOINT ["docker-entrypoint.sh"] + +CMD ["build"] diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100755 index 00000000000..943ae1a2927 --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# GEN_DIR allows to share the entrypoint between Dockerfile and run-in-docker.sh (backward compatible) +GEN_DIR=${GEN_DIR:-/opt/swagger-codegen} +JAVA_OPTS=${JAVA_OPTS:-"-Xmx1024M -DloggerPath=conf/log4j.properties"} + +codegen="${GEN_DIR}/modules/swagger-codegen-cli/target/swagger-codegen-cli.jar" + +case "$1" in + generate|help|langs|meta|config-help) + # If ${GEN_DIR} has been mapped elsewhere from default, and that location has not been built + if [[ ! -f "${codegen}" ]]; then + (cd ${GEN_DIR} && exec mvn -am -pl "modules/swagger-codegen-cli" package) + fi + command=$1 + shift + exec java ${JAVA_OPTS} -jar ${codegen} ${command} "$@" + ;; + *) # Any other commands, e.g. docker run imagename ls -la or docker run -it imagename /bin/bash + exec "$@" + ;; +esac diff --git a/run-in-docker.sh b/run-in-docker.sh index 39a7601dd03..99581115871 100755 --- a/run-in-docker.sh +++ b/run-in-docker.sh @@ -1,34 +1,16 @@ #!/bin/bash -set -e -cd "$(dirname $BASH_SOURCE)" +set -exo pipefail -maven_cache_repo="$HOME/.m2/repository" -myname="$(basename $BASH_SOURCE)" +cd "$(dirname ${BASH_SOURCE})" -if [ "$1" = "mvn" ]; then - cmd="$1" - shift - args="$@" -else - jar="modules/swagger-codegen-cli/target/swagger-codegen-cli.jar" - - # Check if project is built - if [ ! -f "$jar" ]; then - echo "ERROR File not found: $jar" - echo "ERROR Did you forget to './$myname mvn package'?" - exit 1 - fi - - cmd="java -jar /gen/$jar" - args="$@" -fi +maven_cache_repo="${HOME}/.m2/repository" -mkdir -p "$maven_cache_repo" +mkdir -p "${maven_cache_repo}" -set -x - -docker run -it \ +docker run --rm -it \ -w /gen \ + -e GEN_DIR=/gen \ -v "${PWD}:/gen" \ -v "${maven_cache_repo}:/root/.m2/repository" \ - maven:3-jdk-7 $cmd $args + --entrypoint /gen/docker-entrypoint.sh \ + maven:3-jdk-7 "$@"