Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

CircleCi cleanup #198

Merged
merged 10 commits into from
Aug 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 15 additions & 78 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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.
Expand All @@ -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="<<parameters.nodeNo>>"' >> $BASH_ENV
command: echo 'export CIRCLE_JOB_ID="<<parameters.jobId>>"' >> $BASH_ENV
- run: ./.circleci/parallel.sh
# Save dependency cache
- save_cache:
Expand All @@ -59,40 +34,33 @@ 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-
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
- ~/.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
Expand All @@ -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
Expand All @@ -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="<<parameters.nodeNo>>"' >> $BASH_ENV
command: echo 'export CIRCLE_JOB_ID="<<parameters.jobId>>"' >> $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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
66 changes: 9 additions & 57 deletions .circleci/parallel.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down