This commit is contained in:
Tony Tam 2017-02-09 13:17:22 -05:00
commit 8fa2ef8ec2
7 changed files with 137 additions and 75 deletions

View File

@ -1,3 +1,4 @@
.git/
*.iml *.iml
out/ out/
*.ipr *.ipr
@ -13,35 +14,13 @@ generated-sources/*
generated-code/* generated-code/*
*.swp *.swp
*.swo *.swo
*.bak
/target project/
/generated-files samples/*
/nbactions.xml target/
*.pyc .idea/
__pycache__ .lib/
samples/server-generator/scalatra/output
samples/server-generator/node/output/node_modules
samples/server-generator/scalatra/target
samples/server-generator/scalatra/output/.history
samples/client/petstore/qt5cpp/PetStore/moc_*
samples/client/petstore/qt5cpp/PetStore/*.o
samples/client/petstore/objc/PetstoreClient.xcworkspace/xcuserdata
samples/client/petstore/qt5cpp/build-*
samples/client/petstore/qt5cpp/PetStore/PetStore
samples/client/petstore/qt5cpp/PetStore/Makefile
samples/client/petstore/java/hello.txt
samples/client/petstore/android/default/hello.txt
samples/client/petstore/objc/Build
samples/client/petstore/objc/Pods
samples/server/petstore/nodejs/node_modules
target
.idea
.lib
atlassian-ide-plugin.xml
.DS_Store .DS_Store
samples/client/petstore/php/SwaggerClient-php/composer.lock # Not needed in a linux container
samples/client/petstore/php/SwaggerClient-php/vendor/ bin/windows/*
samples/client/petstore/silex/SwaggerServer/composer.lock
samples/client/petstore/silex/SwaggerServer/venodr/

View File

@ -1,14 +1,22 @@
FROM jimschubert/8-jdk-alpine-mvn:1.0
FROM maven:3-jdk-7-alpine ENV GEN_DIR /opt/swagger-codegen
WORKDIR /src RUN set -x && \
VOLUME /src apk add --no-cache bash
VOLUME /root/.m2/repository
ADD . /opt/swagger-codegen RUN mkdir /opt
RUN cd /opt/swagger-codegen && mvn package ADD . ${GEN_DIR}
ENTRYPOINT ["java", "-jar", "/opt/swagger-codegen/modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"] VOLUME ${MAVEN_HOME}/.m2/repository
CMD ["help"] WORKDIR ${GEN_DIR}
RUN mvn -am -pl "modules/swagger-codegen-cli" package
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["build"]

View File

@ -110,8 +110,23 @@ After cloning the project, you can build it from source with this command:
mvn clean package mvn clean package
``` ```
### Homebrew
To install, run `brew install swagger-codegen`
Here is an example usage:
```
swagger-codegen generate -i http://petstore.swagger.io/v2/swagger.json -l ruby -o /tmp/test/
```
### Docker ### Docker
#### Build and run using docker
#### Development in docker
You can use `run-in-docker.sh` to do all development. This script maps your local repository to `/gen`
in the docker container. It also maps `~/.m2/repository` to the appropriate container location.
To execute `mvn package`:
``` ```
git clone https://github.com/swagger-api/swagger-codegen git clone https://github.com/swagger-api/swagger-codegen
@ -119,7 +134,17 @@ cd swagger-codegen
./run-in-docker.sh mvn package ./run-in-docker.sh mvn package
``` ```
Build artifacts are now accessible in your working directory.
Once built, `run-in-docker.sh` will act as an executable for swagger-codegen-cli. To generate code, you'll need to output to a directory under `/gen` (e.g. `/gen/out`). For example:
```
./run-in-docker.sh help # Executes 'help' command for swagger-codegen-cli
./run-in-docker.sh langs # Executes 'langs' command for swagger-codegen-cli
./run-in-docker.sh /gen/bin/go-petstore.sh # Builds the Go client
./run-in-docker.sh generate -i modules/swagger-codegen/src/test/resources/2_0/petstore.yaml \
-l go -o /gen/out/go-petstore -DpackageName=petstore # generates go client, outputs locally to ./out/go-petstore
```
#### Run Docker in Vagrant #### Run Docker in Vagrant
Prerequisite: install [Vagrant](https://www.vagrantup.com/downloads.html) and [VirtualBox](https://www.virtualbox.org/wiki/Downloads). Prerequisite: install [Vagrant](https://www.vagrantup.com/downloads.html) and [VirtualBox](https://www.virtualbox.org/wiki/Downloads).
@ -132,18 +157,54 @@ cd /vagrant
./run-in-docker.sh mvn package ./run-in-docker.sh mvn package
``` ```
#### Public Docker image #### Public Pre-built Docker images
- https://hub.docker.com/r/swaggerapi/swagger-generator/ (official) - https://hub.docker.com/r/swaggerapi/swagger-generator/ (official web service)
- https://hub.docker.com/r/jimschubert/swagger-codegen-cli/ (unofficial) - https://hub.docker.com/r/swaggerapi/swagger-codegen-cli/ (official CLI)
=======
### Homebrew ##### Swagger Generator Docker Image
To install, run `brew install swagger-codegen`
The Swagger Generator image can act as a self-hosted web application and API for generating code. This container can be incorporated into a CI pipeline, and requires at least two HTTP requests and some docker orchestration to access generated code.
Example usage (note this assumes `jq` is installed for command line processing of JSON):
Here is an example usage:
``` ```
swagger-codegen generate -i http://petstore.swagger.io/v2/swagger.json -l ruby -o /tmp/test/ # Start container and save the container id
CID=$(docker run -d swaggerapi/swagger-generator)
# allow for startup
sleep 5
# Get the IP of the running container
GEN_IP=$(docker inspect --format '{{.NetworkSettings.IPAddress}}' $CID)
# Execute an HTTP request and store the download link
RESULT=$(curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{
"swaggerUrl": "http://petstore.swagger.io/v2/swagger.json"
}' 'http://localhost:8188/api/gen/clients/javascript' | jq '.link' | tr -d '"')
# Download the generated zip and redirect to a file
curl $RESULT > result.zip
# Shutdown the swagger generator image
docker stop $CID && docker rm $CID
``` ```
In the example above, `result.zip` will contain the generated client.
##### Swagger Codegen Docker Image
The Swagger Codegen image acts as a standalone executable. It can be used as an alternative to installing via homebrew, or for developers who are unable to install Java or upgrade the installed version.
To generate code with this image, you'll need to mount a local location as a volume.
Example:
```
docker run --rm -v ${PWD}:/local swagger-api/swagger-codegen generate \
-i http://petstore.swagger.io/v2/swagger.json \
-l go \
-o /local/out/go
```
The generated code will be located under `./out/go` in the current directory.
## Getting Started ## Getting Started
To generate a PHP client for http://petstore.swagger.io/v2/swagger.json, please run the following To generate a PHP client for http://petstore.swagger.io/v2/swagger.json, please run the following

24
docker-entrypoint.sh Executable file
View File

@ -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

View File

@ -0,0 +1,7 @@
FROM java:8-jre-alpine
ADD target/swagger-codegen-cli.jar /opt/swagger-codegen-cli/swagger-codegen-cli.jar
ENTRYPOINT ["java", "-jar", "/opt/swagger-codegen-cli/swagger-codegen-cli.jar"]
CMD ["help"]

View File

@ -1,12 +1,13 @@
FROM java:8-jdk FROM java:8-jre-alpine
WORKDIR /generator WORKDIR /generator
COPY target/lib/jetty-runner* /generator/jetty-runner.jar COPY target/lib/jetty-runner* /generator/jetty-runner.jar
COPY target/*.war /generator/swagger-generator.war COPY target/*.war /generator/swagger-generator.war
ENV GENERATOR_HOST=https://generator.swaggerhub.com/api/swagger.json ENV GENERATOR_HOST=https://generator.swaggerhub.com/api/swagger.json
RUN apt-get update
EXPOSE 8080 EXPOSE 8080
CMD ["java", "-jar", "/generator/jetty-runner.jar", "/generator/swagger-generator.war"] CMD ["java", "-jar", "/generator/jetty-runner.jar", "/generator/swagger-generator.war"]

View File

@ -1,34 +1,16 @@
#!/bin/bash #!/bin/bash
set -e set -exo pipefail
cd "$(dirname $BASH_SOURCE)"
maven_cache_repo="$HOME/.m2/repository" cd "$(dirname ${BASH_SOURCE})"
myname="$(basename $BASH_SOURCE)"
if [ "$1" = "mvn" ]; then maven_cache_repo="${HOME}/.m2/repository"
cmd="$1"
shift
args="$@"
else
jar="modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
# Check if project is built mkdir -p "${maven_cache_repo}"
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" docker run --rm -it \
args="$@"
fi
mkdir -p "$maven_cache_repo"
set -x
docker run -it \
-w /gen \ -w /gen \
-e GEN_DIR=/gen \
-v "${PWD}:/gen" \ -v "${PWD}:/gen" \
-v "${maven_cache_repo}:/root/.m2/repository" \ -v "${maven_cache_repo}:/root/.m2/repository" \
maven:3-jdk-7 $cmd $args --entrypoint /gen/docker-entrypoint.sh \
maven:3-jdk-7 "$@"