diff --git a/.circleci/config.yml b/.circleci/config.yml index b610ceeb2bb..4efc24c7ba1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,16 +1,135 @@ -version: 2 +version: 2.1 +commands: # a reusable command with parameters + command_build_and_test: + parameters: + nodeNo: + default: "0" + type: string + steps: + # Restore the dependency cache + - restore_cache: + keys: + # Default branch if not + - source-v2-{{ .Branch }}-{{ .Revision }} + - source-v2-{{ .Branch }}- + - source-v2- + # Machine Setup + # If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each + # The following `checkout` command checks out your code to your working directory. In 1.0 we did this implicitly. In 2.0 you can choose where in the course of a job your code should be checked out. + - checkout + # Prepare for artifact and test results collection equivalent to how it was done on 1.0. + # In many cases you can simplify this from what is generated here. + # 'See docs on artifact collection here https://circleci.com/docs/2.0/artifacts/' + - run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS + # This is based on your 1.0 configuration file or project settings + - run: + command: sudo update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java; sudo update-alternatives --set javac /usr/lib/jvm/java-8-openjdk-amd64/bin/javac; echo -e "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> $BASH_ENV + - run: + command: 'sudo docker info >/dev/null 2>&1 || sudo service docker start; ' + - run: + command: |- + printf '127.0.0.1 petstore.swagger.io + ' | sudo tee -a /etc/hosts + # - run: docker pull openapitools/openapi-petstore + # - run: docker run -d -e OPENAPI_BASE_PATH=/v3 -e DISABLE_API_KEY=1 -e DISABLE_OAUTH=1 -p 80:8080 openapitools/openapi-petstore + - run: docker pull swaggerapi/petstore + - run: docker run --name petstore.swagger -d -e SWAGGER_HOST=http://petstore.swagger.io -e SWAGGER_BASE_PATH=/v2 -p 80:8080 swaggerapi/petstore + - run: docker ps -a + - run: sleep 30 + - run: cat /etc/hosts + # Test + - run: mvn --no-snapshot-updates --quiet clean install -Dorg.slf4j.simpleLogger.defaultLogLevel=error + - run: + name: "Setup custom environment variables" + command: echo 'export CIRCLE_NODE_INDEX="<>"' >> $BASH_ENV + - run: ./CI/circle_parallel.sh + # Save dependency cache + - save_cache: + key: source-v2-{{ .Branch }}-{{ .Revision }} + paths: + # This is a broad list of cache paths to include many possible development environments + # You can probably delete some of these entries + - vendor/bundle + - ~/virtualenvs + - ~/.m2 + - ~/.ivy2 + - ~/.sbt + - ~/.bundle + - ~/.go_workspace + - ~/.gradle + - ~/.cache/bower + - ".git" + - ~/.stack + - /home/circleci/OpenAPITools/openapi-generator/samples/client/petstore/haskell-http-client/.stack-work + - ~/R + # save "default" cache using the key "source-v2-" + - save_cache: + key: source-v2- + paths: + # This is a broad list of cache paths to include many possible development environments + # You can probably delete some of these entries + - vendor/bundle + - ~/virtualenvs + - ~/.m2 + - ~/.ivy2 + - ~/.sbt + - ~/.bundle + - ~/.go_workspace + - ~/.gradle + - ~/.cache/bower + - ".git" + - ~/.stack + - /home/circleci/OpenAPITools/openapi-generator/samples/client/petstore/haskell-http-client/.stack-work + - ~/R + # Teardown + # If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each + # Save test results + - store_test_results: + path: /tmp/circleci-test-results + # Save artifacts + - store_artifacts: + path: /tmp/circleci-artifacts + - store_artifacts: + path: /tmp/circleci-test-results + command_docker_build_and_test: + parameters: + nodeNo: + default: "0" + type: string + steps: + # Machine Setup + # If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each + # The following `checkout` command checks out your code to your working directory. In 1.0 we did this implicitly. In 2.0 you can choose where in the course of a job your code should be checked out. + - checkout + # Prepare for artifact and test results collection equivalent to how it was done on 1.0. + # In many cases you can simplify this from what is generated here. + # 'See docs on artifact collection here https://circleci.com/docs/2.0/artifacts/' + - run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS + # This is based on your 1.0 configuration file or project settings + # - run: + # command: sudo update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java; sudo update-alternatives --set javac /usr/lib/jvm/java-8-openjdk-amd64/bin/javac; echo -e "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> $BASH_ENV + # - run: + # Test + # - run: mvn --no-snapshot-updates --quiet clean install -Dorg.slf4j.simpleLogger.defaultLogLevel=error + - run: + name: "Setup custom environment variables" + command: echo 'export CIRCLE_NODE_INDEX="<>"' >> $BASH_ENV + - run: ./CI/circle_parallel.sh + # Teardown + # If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each + # Save test results + - store_test_results: + path: /tmp/circleci-test-results + # Save artifacts + - store_artifacts: + path: /tmp/circleci-artifacts + - store_artifacts: + path: /tmp/circleci-test-results jobs: - build: - # docker: - # #- image: openapitools/openapi-generator - # - image: swaggerapi/petstore - # environment: - # SWAGGER_HOST=http://petstore.swagger.io - # SWAGGER_BASE_PATH=/v2 + node0: machine: image: circleci/classic:latest working_directory: ~/OpenAPITools/openapi-generator - parallelism: 4 shell: /bin/bash --login environment: CIRCLE_ARTIFACTS: /tmp/circleci-artifacts @@ -18,85 +137,68 @@ jobs: DOCKER_GENERATOR_IMAGE_NAME: openapitools/openapi-generator DOCKER_CODEGEN_CLI_IMAGE_NAME: openapitools/openapi-generator-cli steps: - # Restore the dependency cache - - restore_cache: - keys: - # Default branch if not - - source-v2-{{ .Branch }}-{{ .Revision }} - - source-v2-{{ .Branch }}- - - source-v2- - # Machine Setup - # If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each - # The following `checkout` command checks out your code to your working directory. In 1.0 we did this implicitly. In 2.0 you can choose where in the course of a job your code should be checked out. - - checkout - # Prepare for artifact and test results collection equivalent to how it was done on 1.0. - # In many cases you can simplify this from what is generated here. - # 'See docs on artifact collection here https://circleci.com/docs/2.0/artifacts/' - - run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS - # This is based on your 1.0 configuration file or project settings - - run: - command: sudo update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java; sudo update-alternatives --set javac /usr/lib/jvm/java-8-openjdk-amd64/bin/javac; echo -e "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> $BASH_ENV - - run: - command: 'sudo docker info >/dev/null 2>&1 || sudo service docker start; ' - - run: - command: |- - printf '127.0.0.1 petstore.swagger.io - ' | sudo tee -a /etc/hosts -# - run: docker pull openapitools/openapi-petstore -# - run: docker run -d -e OPENAPI_BASE_PATH=/v3 -e DISABLE_API_KEY=1 -e DISABLE_OAUTH=1 -p 80:8080 openapitools/openapi-petstore - - run: docker pull swaggerapi/petstore - - run: docker run --name petstore.swagger -d -e SWAGGER_HOST=http://petstore.swagger.io -e SWAGGER_BASE_PATH=/v2 -p 80:8080 swaggerapi/petstore - - run: docker ps -a - - run: sleep 30 - - run: cat /etc/hosts - # Test - - run: mvn --no-snapshot-updates --quiet clean install -Dorg.slf4j.simpleLogger.defaultLogLevel=error - - run: ./CI/circle_parallel.sh - # Save dependency cache - - save_cache: - key: source-v2-{{ .Branch }}-{{ .Revision }} - paths: - # This is a broad list of cache paths to include many possible development environments - # You can probably delete some of these entries - - vendor/bundle - - ~/virtualenvs - - ~/.m2 - - ~/.ivy2 - - ~/.sbt - - ~/.bundle - - ~/.go_workspace - - ~/.gradle - - ~/.cache/bower - - ".git" - - ~/.stack - - /home/circleci/OpenAPITools/openapi-generator/samples/client/petstore/haskell-http-client/.stack-work - - ~/R - # save "default" cache using the key "source-v2-" - - save_cache: - key: source-v2- - paths: - # This is a broad list of cache paths to include many possible development environments - # You can probably delete some of these entries - - vendor/bundle - - ~/virtualenvs - - ~/.m2 - - ~/.ivy2 - - ~/.sbt - - ~/.bundle - - ~/.go_workspace - - ~/.gradle - - ~/.cache/bower - - ".git" - - ~/.stack - - /home/circleci/OpenAPITools/openapi-generator/samples/client/petstore/haskell-http-client/.stack-work - - ~/R - # Teardown - # If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each - # Save test results - - store_test_results: - path: /tmp/circleci-test-results - # Save artifacts - - store_artifacts: - path: /tmp/circleci-artifacts - - store_artifacts: - path: /tmp/circleci-test-results + - command_build_and_test: + nodeNo: "0" + node1: + machine: + image: circleci/classic:latest + working_directory: ~/OpenAPITools/openapi-generator + shell: /bin/bash --login + environment: + CIRCLE_ARTIFACTS: /tmp/circleci-artifacts + CIRCLE_TEST_REPORTS: /tmp/circleci-test-results + DOCKER_GENERATOR_IMAGE_NAME: openapitools/openapi-generator + DOCKER_CODEGEN_CLI_IMAGE_NAME: openapitools/openapi-generator-cli + steps: + - command_build_and_test: + nodeNo: "1" + node2: + machine: + image: circleci/classic:latest + working_directory: ~/OpenAPITools/openapi-generator + shell: /bin/bash --login + environment: + CIRCLE_ARTIFACTS: /tmp/circleci-artifacts + CIRCLE_TEST_REPORTS: /tmp/circleci-test-results + DOCKER_GENERATOR_IMAGE_NAME: openapitools/openapi-generator + DOCKER_CODEGEN_CLI_IMAGE_NAME: openapitools/openapi-generator-cli + steps: + - command_build_and_test: + nodeNo: "2" + node3: + machine: + image: circleci/classic:latest + working_directory: ~/OpenAPITools/openapi-generator + shell: /bin/bash --login + environment: + CIRCLE_ARTIFACTS: /tmp/circleci-artifacts + CIRCLE_TEST_REPORTS: /tmp/circleci-test-results + DOCKER_GENERATOR_IMAGE_NAME: openapitools/openapi-generator + DOCKER_CODEGEN_CLI_IMAGE_NAME: openapitools/openapi-generator-cli + steps: + - checkout + - command_build_and_test: + nodeNo: "3" + node4: + docker: + - image: fkrull/multi-python + working_directory: ~/OpenAPITools/openapi-generator + shell: /bin/bash --login + environment: + CIRCLE_ARTIFACTS: /tmp/circleci-artifacts + CIRCLE_TEST_REPORTS: /tmp/circleci-test-results + DOCKER_GENERATOR_IMAGE_NAME: openapitools/openapi-generator + DOCKER_CODEGEN_CLI_IMAGE_NAME: openapitools/openapi-generator-cli + steps: + - checkout + - command_docker_build_and_test: + nodeNo: "4" +workflows: + version: 2 + build: + jobs: + - node0 + - node1 + - node2 + - node3 + - node4 \ No newline at end of file diff --git a/CI/circle_parallel.sh b/CI/circle_parallel.sh index 74e5f018f1b..b6e2691121a 100755 --- a/CI/circle_parallel.sh +++ b/CI/circle_parallel.sh @@ -11,7 +11,9 @@ export NODE_ENV=test function cleanup { # Show logs of 'petstore.swagger' container to troubleshoot Unit Test failures, if any. - docker logs petstore.swagger # container name specified in circle.yml + if [ "$NODE_INDEX" != "4" ]; then + docker logs petstore.swagger # container name specified in circle.yml + fi } trap cleanup EXIT @@ -61,7 +63,6 @@ elif [ "$NODE_INDEX" = "3" ]; then pyenv install 3.6.3 pyenv install 2.7.14 pyenv global 3.6.3 - python3 --version # Install node@stable (for angular 6) set +e @@ -80,6 +81,20 @@ elif [ "$NODE_INDEX" = "3" ]; then mvn --no-snapshot-updates --quiet verify -Psamples.circleci.node3 -Dorg.slf4j.simpleLogger.defaultLogLevel=error +elif [ "$NODE_INDEX" = "4" ]; then + + echo "Running node $NODE_INDEX to test 'samples.circleci.node4' defined in pom.xml ..." + + # install maven and java so we can use them to run our tests + apt-get update && apt-get install -y default-jdk maven sudo + java -version + export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::") + echo $JAVA_HOME + # show os version + uname -a + + mvn --no-snapshot-updates --quiet verify -Psamples.circleci.node4 -Dorg.slf4j.simpleLogger.defaultLogLevel=error + else echo "Running node $NODE_INDEX to test 'samples.circleci.others' defined in pom.xml ..." #sudo update-java-alternatives -s java-1.7.0-openjdk-amd64 diff --git a/modules/openapi-generator/src/main/resources/python-experimental/tox.handlebars b/modules/openapi-generator/src/main/resources/python-experimental/tox.handlebars index 5af8eb6f831..d1b68916df4 100644 --- a/modules/openapi-generator/src/main/resources/python-experimental/tox.handlebars +++ b/modules/openapi-generator/src/main/resources/python-experimental/tox.handlebars @@ -1,5 +1,5 @@ [tox] -envlist = py3 +envlist = py39 [testenv] deps=-r{toxinidir}/requirements.txt diff --git a/pom.xml b/pom.xml index 0dd62e012c4..06f87b9cb43 100644 --- a/pom.xml +++ b/pom.xml @@ -1285,7 +1285,6 @@ samples/client/petstore/python samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent - samples/openapi3/client/petstore/python @@ -1316,6 +1315,21 @@ samples/client/petstore/javascript-promise-es6 + + + samples.circleci.node4 + + + env + samples.circleci.node4 + + + + + samples/openapi3/client/petstore/python + samples/openapi3/client/petstore/python-experimental + + samples.circleci.others diff --git a/samples/openapi3/client/petstore/python-experimental/pom.xml b/samples/openapi3/client/petstore/python-experimental/pom.xml new file mode 100644 index 00000000000..7e737c36111 --- /dev/null +++ b/samples/openapi3/client/petstore/python-experimental/pom.xml @@ -0,0 +1,46 @@ + + 4.0.0 + org.openapitools + PythonExperimentalOAS3PetstoreTests + pom + 1.0-SNAPSHOT + Python Experimental OpenAPI3 Petstore Client + + + + maven-dependency-plugin + + + package + + copy-dependencies + + + ${project.build.directory} + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + test + integration-test + + exec + + + make + + test + + + + + + + + \ No newline at end of file diff --git a/samples/openapi3/client/petstore/python-experimental/tox.ini b/samples/openapi3/client/petstore/python-experimental/tox.ini index 8989fc3c4d9..ef7cec358ca 100644 --- a/samples/openapi3/client/petstore/python-experimental/tox.ini +++ b/samples/openapi3/client/petstore/python-experimental/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py3 +envlist = py39 [testenv] deps=-r{toxinidir}/requirements.txt