diff --git a/.circleci/config.yml b/.circleci/config.yml index 00ff96f4818..5f3112bd919 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,8 +2,8 @@ version: 2.1 commands: # a reusable command with parameters command_build_and_test: parameters: - nodeNo: - default: "0" + jobId: + default: "unset" type: string steps: # Restore the dependency cache @@ -13,17 +13,6 @@ commands: # a reusable command with parameters - 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 - - run: - name: Install Headless Chrome dependencies - command: | - sudo apt-get update && sudo apt-get install -yq \ - gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \ - libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 \ - libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 \ - libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates \ - fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget libgbm1 # 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. @@ -33,24 +22,10 @@ commands: # a reusable command with parameters # This is based on your 1.0 configuration file or project settings - run: command: java -version - - 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 openapijsonschematools/openapi-petstore - # - run: docker run -d -e OPENAPI_BASE_PATH=/v3 -e DISABLE_API_KEY=1 -e DISABLE_OAUTH=1 -p 80:8080 openapijsonschematools/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 + command: echo 'export CIRCLE_JOB_ID="<>"' >> $BASH_ENV - run: ./.circleci/parallel.sh # Save dependency cache - save_cache: @@ -59,19 +34,16 @@ commands: # a reusable command with parameters # This is a broad list of cache paths to include many possible development environments # You can probably delete some of these entries - vendor/bundle - - ~/.nvm - ~/.pyenv - ~/virtualenvs - ~/.m2 - ~/.ivy2 - ~/.sbt - ~/.bundle - - ~/.go_workspace - ~/.gradle - ~/.cache/bower - ".git" - ~/.stack - - ~/R # save "default" cache using the key "source-v2-" - save_cache: key: source-v2- @@ -79,20 +51,16 @@ commands: # a reusable command with parameters # This is a broad list of cache paths to include many possible development environments # You can probably delete some of these entries - vendor/bundle - - ~/.nvm - ~/.pyenv - ~/virtualenvs - ~/.m2 - ~/.ivy2 - ~/.sbt - ~/.bundle - - ~/.go_workspace - ~/.gradle - ~/.cache/bower - ".git" - ~/.stack - - /home/circleci/OpenAPITools/openapi-json-schema-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 @@ -105,8 +73,8 @@ commands: # a reusable command with parameters path: /tmp/circleci-test-results command_docker_build_and_test: parameters: - nodeNo: - default: "0" + jobId: + default: "unset" type: string steps: # Machine Setup @@ -117,15 +85,9 @@ commands: # a reusable command with parameters # 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 + command: echo 'export CIRCLE_JOB_ID="<>"' >> $BASH_ENV - run: ./.circleci/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 @@ -138,18 +100,7 @@ commands: # a reusable command with parameters - store_artifacts: path: /tmp/circleci-test-results jobs: - node0: - machine: - image: ubuntu-2004:202201-02 - working_directory: ~/OpenAPITools/openapi-json-schema-generator - shell: /bin/bash --login - environment: - CIRCLE_ARTIFACTS: /tmp/circleci-artifacts - CIRCLE_TEST_REPORTS: /tmp/circleci-test-results - steps: - - command_build_and_test: - nodeNo: "0" - node1: + ensureSamplesAndGeneratorDocsUpToDate: machine: image: ubuntu-2004:202201-02 working_directory: ~/OpenAPITools/openapi-json-schema-generator @@ -159,8 +110,8 @@ jobs: CIRCLE_TEST_REPORTS: /tmp/circleci-test-results steps: - command_build_and_test: - nodeNo: "1" - node2: + jobId: "ensureSamplesAndGeneratorDocsUpToDate" + mvnCleanInstall: machine: image: ubuntu-2004:202201-02 working_directory: ~/OpenAPITools/openapi-json-schema-generator @@ -170,20 +121,8 @@ jobs: CIRCLE_TEST_REPORTS: /tmp/circleci-test-results steps: - command_build_and_test: - nodeNo: "2" - node3: - machine: - image: ubuntu-2004:202201-02 - working_directory: ~/OpenAPITools/openapi-json-schema-generator - shell: /bin/bash --login - environment: - CIRCLE_ARTIFACTS: /tmp/circleci-artifacts - CIRCLE_TEST_REPORTS: /tmp/circleci-test-results - steps: - - checkout - - command_build_and_test: - nodeNo: "3" - node4: + jobId: "mvnCleanInstall" + testPythonClientSamples: docker: - image: python:3.8 working_directory: ~/OpenAPITools/openapi-json-schema-generator @@ -194,13 +133,11 @@ jobs: steps: - checkout - command_docker_build_and_test: - nodeNo: "4" + jobId: "testPythonClientSamples" workflows: version: 2 build: jobs: - - node0 - - node1 - - node2 - - node3 - - node4 + - ensureSamplesAndGeneratorDocsUpToDate + - mvnCleanInstall + - testPythonClientSamples diff --git a/.circleci/parallel.sh b/.circleci/parallel.sh index 52151bebb9e..b8f42d3a3a1 100755 --- a/.circleci/parallel.sh +++ b/.circleci/parallel.sh @@ -3,77 +3,29 @@ # A bash script to run CircleCI node/test in parallel # -NODE_INDEX=${CIRCLE_NODE_INDEX:-0} +JOB_ID=${CIRCLE_JOB_ID:-"unset"} set -e export NODE_ENV=test -function cleanup { - # Show logs of 'petstore.swagger' container to troubleshoot Unit Test failures, if any. - if [ "$NODE_INDEX" != "4" ]; then - docker logs petstore.swagger # container name specified in circle.yml - fi -} - -trap cleanup EXIT - -if [ "$NODE_INDEX" = "1" ]; then - # node1 - # ensures samples + docs up to date - echo "Running node $NODE_INDEX" - +if [ "$JOB_ID" = "ensureSamplesAndGeneratorDocsUpToDate" ]; then + echo "Running job $JOB_ID" ./bin/utils/ensure-up-to-date -elif [ "$NODE_INDEX" = "2" ]; then - # node2 - echo "Running node $NODE_INDEX" - -elif [ "$NODE_INDEX" = "3" ]; then - # node3 - - echo "Running node $NODE_INDEX to test 'samples.circleci.node3' defined in pom.xml ..." - #wget https://www.python.org/ftp/python/3.8.9/Python-3.8.9.tgz - #tar -xf Python-3.8.9.tgz - #cd Python-3.8.9 - #./configure --enable-optimizations - #sudo make altinstall - pyenv install --list - pyenv install 3.6.3 - pyenv install 2.7.14 - pyenv global 3.6.3 - - # Install node@stable (for angular 6) - set +e - curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash - export NVM_DIR="/opt/circleci/.nvm" - [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" - #nvm install stable - # install v16 instead of the latest stable version - nvm install 16 - nvm alias default 16 - node --version - - # Each step uses the same `$BASH_ENV`, so need to modify it - echo 'export NVM_DIR="/opt/circleci/.nvm"' >> $BASH_ENV - echo "[ -s \"$NVM_DIR/nvm.sh\" ] && . \"$NVM_DIR/nvm.sh\"" >> $BASH_ENV - - # no longer testing python-prior - #mvn --no-snapshot-updates --quiet verify -Psamples.circleci.node3 -Dorg.slf4j.simpleLogger.defaultLogLevel=error - -elif [ "$NODE_INDEX" = "4" ]; then - # node4 - - echo "Running node $NODE_INDEX to test 'samples.circleci.node4' defined in pom.xml ..." +elif [ "$JOB_ID" = "mvnCleanInstall" ]; then + echo "Running job $JOB_ID" + mvn --no-snapshot-updates --quiet clean install -Dorg.slf4j.simpleLogger.defaultLogLevel=error - #mvn --no-snapshot-updates --quiet verify -Psamples.circleci.node4 -Dorg.slf4j.simpleLogger.defaultLogLevel=error +elif [ "$JOB_ID" = "testPythonClientSamples" ]; then + echo "Running job $JOB_ID ..." (cd samples/client/petstore/python && make test) (cd samples/client/3_0_3_unit_test/python && make test) (cd samples/client/openapi_features/nonCompliantUseDiscriminatorIfCompositionFails/python && make test) (cd samples/client/openapi_features/security/python && make test) else - echo "Running node $NODE_INDEX" + echo "Running job $JOB_ID" fi