diff --git a/swagger/docker/codegen/Dockerfile b/swagger/docker/codegen/Dockerfile new file mode 100644 index 000000000..b7c3f3f5f --- /dev/null +++ b/swagger/docker/codegen/Dockerfile @@ -0,0 +1,53 @@ +FROM ubuntu:20.04 AS base +ARG uid + +ENV DEBIAN_FRONTEND=noninteractive + +# Create a user with sudo rights +RUN apt-get update && apt-get -y install sudo +RUN useradd -m appuser -u ${uid} && echo "appuser:appuser" | chpasswd \ + && adduser appuser sudo \ + && sudo usermod --shell /bin/bash appuser +RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers +USER appuser + +# Configure tzdata manually before anything else +ENV TZONE=Europe/Paris +RUN sudo ln -fs /usr/share/zoneinfo/$TZONE /etc/localtime \ + && sudo apt-get update && sudo apt-get -y install tzdata + +# Base packages required +RUN sudo apt-get update && sudo apt-get -y install \ + git \ + vim \ + wget \ + maven \ + openjdk-8-jdk + +# Prepare buiid and install environment +RUN sudo mkdir /opt/build /opt/install \ + && sudo chown appuser:appuser /opt/build /opt/install + +# swagger-codegen +FROM base as codegen_clone +ARG clone_label +WORKDIR /opt/build +RUN git clone --depth 1 https://github.com/f4exb/swagger-codegen.git -b sdrangel \ + && cd swagger-codegen \ + && mkdir build \ + && echo "${clone_label}" > build/clone_label.txt + +FROM base as codegen_build +COPY --from=codegen_clone --chown=appuser /opt/build/swagger-codegen /opt/build/swagger-codegen +WORKDIR /opt/build/swagger-codegen +RUN export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 \ + && mvn clean package +RUN mkdir -p /opt/install/swagger \ + && cp ./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar /opt/install/swagger + +FROM base as codegen +RUN mkdir -p /opt/build/sdrangel/swagger/sdrangel +COPY --from=codegen_build --chown=appuser /opt/install/swagger /opt/install/swagger +COPY swagger-codegen /opt/install/swagger + +WORKDIR /opt/build/sdrangel/swagger/sdrangel diff --git a/swagger/docker/codegen/build.sh b/swagger/docker/codegen/build.sh new file mode 100755 index 000000000..b1ac9a164 --- /dev/null +++ b/swagger/docker/codegen/build.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +OPTIND=1 # Reset in case getopts has been used previously in the shell. + +# Get options: +show_help() { + cat << EOF + Usage: ${0##*/} [-b branch] [-c label] [-t tag] [-h] + Build SDRangel image. + -b name Branch name (default sdrangel) + -c label Arbitrary clone label. Clone again if different from the last label (default current timestamp) + -t tag Docker image tag. Use git tag or commit hash (default latest) + -f file Specify a Dockerfile (default is Dockerfile in current directory i.e. '.') + -h Print this help. +EOF +} + +branch_name="sdrangel" +clone_label=$(date) +image_tag="latest" +uid=$(id -u) +docker_file="." + +while getopts "h?b:c:t:j:f:" opt; do + case "$opt" in + h|\?) + show_help + exit 0 + ;; + b) branch_name=${OPTARG} + ;; + c) clone_label=${OPTARG} + ;; + t) image_tag=${OPTARG} + ;; + f) docker_file="-f ${OPTARG} ." + ;; + esac +done + +shift $((OPTIND-1)) + +[ "${1:-}" = "--" ] && shift +# End of get options + +IMAGE_NAME=sdrangel/swagger/codegen:${image_tag} +DOCKER_BUILDKIT=1 docker build \ + --build-arg branch=${branch_name} \ + --build-arg clone_label="${clone_label}" \ + --build-arg uid=${uid} \ + --target codegen \ + -t ${IMAGE_NAME} ${docker_file} diff --git a/swagger/docker/codegen/swagger-codegen b/swagger/docker/codegen/swagger-codegen new file mode 100755 index 000000000..acae9ed1a --- /dev/null +++ b/swagger/docker/codegen/swagger-codegen @@ -0,0 +1,2 @@ +#!/bin/sh +/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar /opt/install/swagger/swagger-codegen-cli.jar ${*} diff --git a/swagger/docker/compose/compose.yml b/swagger/docker/compose/compose.yml new file mode 100644 index 000000000..ec8ad4505 --- /dev/null +++ b/swagger/docker/compose/compose.yml @@ -0,0 +1,29 @@ +version: '3' +services: + swgcodegen: + image: "sdrangel/swagger/codegen:${IMAGE_CODEGEN_VERSION}" + container_name: "sdrangel_swgcodegen" + volumes: + - "${SDRANGEL_BASE}:/opt/build/sdrangel:rw" + networks: + default: + ipv4_address: 172.20.0.2 + stdin_open: true + tty: true + swgserver: + image: "sdrangel/swagger/server:${IMAGE_SERVER_VERSION}" + container_name: "sdrangel_swgserver" + volumes: + - "${SDRANGEL_BASE}:/opt/build/sdrangel:rw" + expose: + - "8081" + networks: + default: + ipv4_address: 172.20.0.3 +networks: + default: + driver: bridge + ipam: + driver: default + config: + - subnet: 172.20.0.0/16 diff --git a/swagger/docker/compose/login.sh b/swagger/docker/compose/login.sh new file mode 100755 index 000000000..4d2a973ee --- /dev/null +++ b/swagger/docker/compose/login.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker exec -it sdrangel_swgcodegen /bin/bash \ No newline at end of file diff --git a/swagger/docker/compose/run.sh b/swagger/docker/compose/run.sh new file mode 100755 index 000000000..9e6429aa3 --- /dev/null +++ b/swagger/docker/compose/run.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +OPTIND=1 # Reset in case getopts has been used previously in the shell. + +# Get options: +show_help() { + cat << EOF + Usage: ${0##*/} [-t tag] [-T tag] [-D] [-h] + Run http-server and codegen in a Docker compose stack. + -D use this option to bring down the compose stack (default is to bring up). + -t tag Docker codegen image tag (default latest) + -T tag Docker server image tag (default latest) + -b path SDRangel source code root path (default /opt/build/sdrangel) + -c name Compose stack name (default sdrangelswg) + -h Print this help. +EOF +} + +image_tag_codegen="latest" +image_tag_server="latest" +sdrangel_codebase="/opt/build/sdrangel" +stack_name="-p sdrangelswg" +action="up -d" + +while getopts "h?Dt:T:b:c:" opt; do + case "$opt" in + h|\?) + show_help + exit 0 + ;; + D) action="down" + ;; + t) image_tag_codegen=${OPTARG} + ;; + T) image_tag_server=${OPTARG} + ;; + b) sdrangel_codebase=${OPTARG} + ;; + c) stack_name="-p ${OPTARG}" + ;; + esac +done + +shift $((OPTIND-1)) + +[ "${1:-}" = "--" ] && shift +# End of get options + +export USER_UID=$(id -u) +export IMAGE_CODEGEN_VERSION=${image_tag_codegen} +export IMAGE_SERVER_VERSION=${image_tag_server} +export SDRANGEL_BASE=${sdrangel_codebase} + +docker-compose -f compose.yml ${stack_name} ${action} diff --git a/swagger/docker/readme.md b/swagger/docker/readme.md new file mode 100644 index 000000000..4dbd2da6a --- /dev/null +++ b/swagger/docker/readme.md @@ -0,0 +1,40 @@ +