.circleci/config.yml
version: 2.1
orbs:
browser-tools: circleci/browser-tools@1.2.4
k8s: digitalocean/k8s@0.1.1
helm: circleci/helm@1.2.0
coveralls: coveralls/coveralls@1.0.6
commands:
install_monorepo:
steps:
- restore_cache:
key: deps1-{{ .Branch }}-{{ checksum "yarn.lock" }}
- run:
name: Installing monorepo
command: yarn install
- save_cache:
key: deps1-{{ .Branch }}-{{ checksum "yarn.lock" }}
paths:
- "node_modules"
login_docker:
steps:
- run:
name: Logging into Docker
command: echo "$DOCKER_PASSWORD" | docker login --username $DOCKER_USERNAME --password-stdin
test_monorepo:
steps:
- run:
name: Testing monorepo
command: yarn run tests
build_ui_command:
steps:
- run:
name: Building monorepo
command: yarn run build
deploy_ui_command:
steps:
- run: curl -sL https://firebase.tools | bash
- run: firebase --token $FIREBASE_TOKEN deploy
patch_firefox:
steps:
- run:
name: Update repositories
command: sudo apt-get update
- run:
name: Install firefox dependency (take this out when browser-tools orb is fixed)
command: sudo apt-get install -y libasound-dev
jobs:
build_microservice_analysis:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
docker_layer_caching: true
- login_docker
- restore_cache:
key: ms-analysis1-{{ .Branch }}-{{ checksum "./packages/deep-microservice-analysis/package.json" }}
- run:
name: Installing package
command: yarn install
working_directory: ./packages/deep-microservice-analysis
- save_cache:
key: ms-analysis1-{{ .Branch }}-{{ checksum "./packages/deep-microservice-analysis/package.json" }}
paths:
- "./packages/deep-microservice-analysis/node_modules"
- run:
command: docker build -t thinkdeeptech/deep-microservice-analysis:${CIRCLE_BUILD_NUM} -t thinkdeeptech/deep-microservice-analysis:latest --build-arg PORT=$MICROSERVICE_ANALYSIS_PORT .
working_directory: ./packages/deep-microservice-analysis
- run: docker push thinkdeeptech/deep-microservice-analysis:${CIRCLE_BUILD_NUM}
- run: docker push thinkdeeptech/deep-microservice-analysis:latest
build_microservice_analysis_dev:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
docker_layer_caching: true
- login_docker
- restore_cache:
key: ms-analysis1-{{ .Branch }}-{{ checksum "./packages/deep-microservice-analysis/package.json" }}
- run:
name: Installing package
command: yarn install
working_directory: ./packages/deep-microservice-analysis
- save_cache:
key: ms-analysis1-{{ .Branch }}-{{ checksum "./packages/deep-microservice-analysis/package.json" }}
paths:
- "./packages/deep-microservice-analysis/node_modules"
- run:
command: docker build -t thinkdeeptech/deep-microservice-analysis-dev:${CIRCLE_BUILD_NUM} -t thinkdeeptech/deep-microservice-analysis-dev:latest --build-arg PORT=$MICROSERVICE_ANALYSIS_PORT .
working_directory: ./packages/deep-microservice-analysis
- run: docker push thinkdeeptech/deep-microservice-analysis-dev:${CIRCLE_BUILD_NUM}
- run: docker push thinkdeeptech/deep-microservice-analysis-dev:latest
build_microservice_collection:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
docker_layer_caching: true
- login_docker
- restore_cache:
key: ms-collection1-{{ .Branch }}-{{ checksum "./packages/deep-microservice-collection/package.json" }}
- run:
name: Installing package
command: yarn install
working_directory: ./packages/deep-microservice-collection
- save_cache:
key: ms-collection1-{{ .Branch }}-{{ checksum "./packages/deep-microservice-collection/package.json" }}
paths:
- "./packages/deep-microservice-collection/node_modules"
- run:
command: docker build -t thinkdeeptech/deep-microservice-collection:${CIRCLE_BUILD_NUM} -t thinkdeeptech/deep-microservice-collection:latest --build-arg PORT=$MICROSERVICE_COLLECTION_PORT .
working_directory: ./packages/deep-microservice-collection
- run: docker push thinkdeeptech/deep-microservice-collection:${CIRCLE_BUILD_NUM}
- run: docker push thinkdeeptech/deep-microservice-collection:latest
build_microservice_collection_dev:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
docker_layer_caching: true
- login_docker
- restore_cache:
key: ms-collection1-{{ .Branch }}-{{ checksum "./packages/deep-microservice-collection/package.json" }}
- run:
name: Installing package
command: yarn install
working_directory: ./packages/deep-microservice-collection
- save_cache:
key: ms-collection1-{{ .Branch }}-{{ checksum "./packages/deep-microservice-collection/package.json" }}
paths:
- "./packages/deep-microservice-collection/node_modules"
- run:
command: docker build -t thinkdeeptech/deep-microservice-collection-dev:${CIRCLE_BUILD_NUM} -t thinkdeeptech/deep-microservice-collection-dev:latest --build-arg PORT=$MICROSERVICE_COLLECTION_PORT .
working_directory: ./packages/deep-microservice-collection
- run: docker push thinkdeeptech/deep-microservice-collection-dev:${CIRCLE_BUILD_NUM}
- run: docker push thinkdeeptech/deep-microservice-collection-dev:latest
build_microservice_configuration:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
docker_layer_caching: true
- login_docker
- restore_cache:
key: ms-config1-{{ .Branch }}-{{ checksum "./packages/deep-microservice-configuration/package.json" }}
- run:
name: Installing package
command: yarn install
working_directory: ./packages/deep-microservice-configuration
- save_cache:
key: ms-config1-{{ .Branch }}-{{ checksum "./packages/deep-microservice-configuration/package.json" }}
paths:
- "./packages/deep-microservice-configuration/node_modules"
- run:
command: docker build -t thinkdeeptech/deep-microservice-configuration:${CIRCLE_BUILD_NUM} -t thinkdeeptech/deep-microservice-configuration:latest --build-arg PORT=$MICROSERVICE_CONFIGURATION_PORT .
working_directory: ./packages/deep-microservice-configuration
- run: docker push thinkdeeptech/deep-microservice-configuration:${CIRCLE_BUILD_NUM}
- run: docker push thinkdeeptech/deep-microservice-configuration:latest
build_microservice_configuration_dev:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
docker_layer_caching: true
- login_docker
- restore_cache:
key: ms-config1-{{ .Branch }}-{{ checksum "./packages/deep-microservice-configuration/package.json" }}
- run:
name: Installing package
command: yarn install
working_directory: ./packages/deep-microservice-configuration
- save_cache:
key: ms-config1-{{ .Branch }}-{{ checksum "./packages/deep-microservice-configuration/package.json" }}
paths:
- "./packages/deep-microservice-configuration/node_modules"
- run:
command: docker build -t thinkdeeptech/deep-microservice-configuration-dev:${CIRCLE_BUILD_NUM} -t thinkdeeptech/deep-microservice-configuration-dev:latest --build-arg PORT=$MICROSERVICE_CONFIGURATION_PORT .
working_directory: ./packages/deep-microservice-configuration
- run: docker push thinkdeeptech/deep-microservice-configuration-dev:${CIRCLE_BUILD_NUM}
- run: docker push thinkdeeptech/deep-microservice-configuration-dev:latest
build_microservice_gateway:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
docker_layer_caching: true
- login_docker
- run:
command: docker build -t thinkdeeptech/deep-microservice-gateway:${CIRCLE_BUILD_NUM} -t thinkdeeptech/deep-microservice-gateway:latest --build-arg PORT=$MICROSERVICE_GATEWAY_PORT .
working_directory: ./packages/deep-microservice-gateway
- run: docker push thinkdeeptech/deep-microservice-gateway:${CIRCLE_BUILD_NUM}
- run: docker push thinkdeeptech/deep-microservice-gateway:latest
build_microservice_gateway_dev:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
docker_layer_caching: true
- login_docker
- run:
command: docker build -t thinkdeeptech/deep-microservice-gateway-dev:${CIRCLE_BUILD_NUM} -t thinkdeeptech/deep-microservice-gateway-dev:latest --build-arg PORT=$MICROSERVICE_GATEWAY_PORT .
working_directory: ./packages/deep-microservice-gateway
- run: docker push thinkdeeptech/deep-microservice-gateway-dev:${CIRCLE_BUILD_NUM}
- run: docker push thinkdeeptech/deep-microservice-gateway-dev:latest
build_microservice_subscription:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
resource_class: large
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
docker_layer_caching: true
- login_docker
- run:
command: yarn install
working_directory: ./packages/deep-microservice-subscription
- run:
command: docker build -t thinkdeeptech/deep-microservice-subscription:${CIRCLE_BUILD_NUM} -t thinkdeeptech/deep-microservice-subscription:latest --build-arg PORT=$MICROSERVICE_SUBSCRIPTION_PORT .
working_directory: ./packages/deep-microservice-subscription
- run: docker push thinkdeeptech/deep-microservice-subscription:${CIRCLE_BUILD_NUM}
- run: docker push thinkdeeptech/deep-microservice-subscription:latest
build_microservice_subscription_dev:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
resource_class: large
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
docker_layer_caching: true
- login_docker
- run:
command: yarn install
working_directory: ./packages/deep-microservice-subscription
- run:
command: docker build -t thinkdeeptech/deep-microservice-subscription-dev:${CIRCLE_BUILD_NUM} -t thinkdeeptech/deep-microservice-subscription-dev:latest --build-arg PORT=$MICROSERVICE_SUBSCRIPTION_PORT .
working_directory: ./packages/deep-microservice-subscription
- run: docker push thinkdeeptech/deep-microservice-subscription-dev:${CIRCLE_BUILD_NUM}
- run: docker push thinkdeeptech/deep-microservice-subscription-dev:latest
build_data_collector:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
docker_layer_caching: true
- login_docker
- restore_cache:
key: ms-datacollector-{{ .Branch }}-{{ checksum "./packages/data-collector/package.json" }}
- run:
name: Installing package
command: yarn install
working_directory: ./packages/data-collector
- save_cache:
key: ms-datacollector-{{ .Branch }}-{{ checksum "./packages/data-collector/package.json" }}
paths:
- "./packages/data-collector/node_modules"
- run:
command: docker build -t thinkdeeptech/data-collector:${CIRCLE_BUILD_NUM} -t thinkdeeptech/data-collector:latest .
working_directory: ./packages/data-collector
- run: docker push thinkdeeptech/data-collector:${CIRCLE_BUILD_NUM}
- run: docker push thinkdeeptech/data-collector:latest
build_data_collector_dev:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
steps:
- checkout
- setup_remote_docker:
version: 20.10.7
docker_layer_caching: true
- login_docker
- restore_cache:
key: ms-datacollector-{{ .Branch }}-{{ checksum "./packages/data-collector/package.json" }}
- run:
name: Installing package
command: yarn install
working_directory: ./packages/data-collector
- save_cache:
key: ms-datacollector-{{ .Branch }}-{{ checksum "./packages/data-collector/package.json" }}
paths:
- "./packages/data-collector/node_modules"
- run:
command: docker build -t thinkdeeptech/data-collector-dev:${CIRCLE_BUILD_NUM} -t thinkdeeptech/data-collector-dev:latest .
working_directory: ./packages/data-collector
- run: docker push thinkdeeptech/data-collector-dev:${CIRCLE_BUILD_NUM}
- run: docker push thinkdeeptech/data-collector-dev:latest
build_ui_and_test_system:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
steps:
- patch_firefox
- browser-tools/install-browser-tools
- checkout
- install_monorepo
- test_monorepo
- build_ui_command
deploy_microservices:
docker:
- image: 'cimg/base:stable'
working_directory: ~/project
steps:
- checkout
- k8s/install
- k8s/initialize:
cluster: predecos-k8s-cluster-1
- helm/install-helm-client:
version: v3.7.2
- run:
name: Download analysis microservice project dependencies
command: helm dependency update
working_directory: ./packages/deep-microservice-analysis
- run:
name: Download collection microservice project dependencies
command: helm dependency update
working_directory: ./packages/deep-microservice-collection
- run:
name: Download configuration microservice project dependencies
command: helm dependency update
working_directory: ./packages/deep-microservice-configuration
- run:
name: Download gateway microservice project dependencies
command: helm dependency update
working_directory: ./packages/deep-microservice-gateway
- run:
name: Download subscription microservice project dependencies
command: helm dependency update
working_directory: ./packages/deep-microservice-subscription
- run:
name: Download project dependencies
command: helm dependency update
- helm/upgrade-helm-chart:
chart: "."
helm-version: "v3.7.2"
namespace: "production"
release-name: "v1"
atomic: true
values-to-override: "gateway.service.certificateId=$PROD_MICROSERVICE_GATEWAY_CERTIFICATE_ID,subscription.service.certificateId=$PROD_MICROSERVICE_SUBSCRIPTION_CERTIFICATE_ID,auth.audience=$PREDECOS_AUTH_AUDIENCE,auth.jwksUri=$PREDECOS_AUTH_JWKS_URI,auth.issuer=$PREDECOS_AUTH_ISSUER,analysis.neo4j.neo4j.username=$PROD_MICROSERVICE_ANALYSIS_NEO4J_USERNAME,analysis.neo4j.neo4j.password=$PROD_MICROSERVICE_ANALYSIS_NEO4J_PASSWORD,analysis.neo4j.services.neo4j.enabled=true,analysis.neo4j.services.neo4j.annotations.service\\.beta\\.kubernetes\\.io/do-loadbalancer-certificate-id=$PROD_ANALYSIS_NEO4J_LOADBALANCER_CERTIFICATE_ID,analysis.neo4j.config.dbms\\.default_database=$PROD_MICROSERVICE_ANALYSIS_NEO4J_DATABASE,analysis.neo4j.config.dbms\\.default_advertised_address=$PROD_MICROSERVICE_ANALYSIS_NEO4J_ADVERTISED_ADDRESS,collection.replicas=3,collection.twitter.bearer=$PROD_PREDECOS_TWITTER_BEARER,collection.data.collector.image=thinkdeeptech/data-collector:latest,replicas=1,global.docker.secretName=docker-secret,global.nodeEnv=production"
update-repositories: true
timeout: "960s"
wait: true
deploy_microservices_dev:
docker:
- image: 'cimg/base:stable'
working_directory: ~/project
steps:
- checkout
- k8s/install
- k8s/initialize:
cluster: predecos-k8s-cluster-1
- helm/install-helm-client:
version: v3.7.2
- run:
name: Download analysis microservice project dependencies
command: helm dependency update
working_directory: ./packages/deep-microservice-analysis
- run:
name: Download collection microservice project dependencies
command: helm dependency update
working_directory: ./packages/deep-microservice-collection
- run:
name: Download configuration microservice project dependencies
command: helm dependency update
working_directory: ./packages/deep-microservice-configuration
- run:
name: Download gateway microservice project dependencies
command: helm dependency update
working_directory: ./packages/deep-microservice-gateway
- run:
name: Download subscription microservice project dependencies
command: helm dependency update
working_directory: ./packages/deep-microservice-subscription
- run:
name: Download project dependencies
command: helm dependency update
- helm/upgrade-helm-chart:
chart: "."
helm-version: "v3.7.2"
namespace: "development"
release-name: "v1"
atomic: true
values-to-override: "gateway.service.certificateId=$DEV_MICROSERVICE_GATEWAY_CERTIFICATE_ID,subscription.service.certificateId=$DEV_MICROSERVICE_SUBSCRIPTION_CERTIFICATE_ID,auth.audience=$PREDECOS_TEST_AUTH_AUDIENCE,auth.jwksUri=$PREDECOS_TEST_AUTH_JWKS_URI,auth.issuer=$PREDECOS_TEST_AUTH_ISSUER,collection.twitter.bearer=$DEV_PREDECOS_TWITTER_BEARER,replicas=1,global.docker.secretName=docker-secret,analysis.container.image=thinkdeeptech/deep-microservice-analysis-dev:latest,analysis.neo4j.neo4j.username=$DEV_MICROSERVICE_ANALYSIS_NEO4J_USERNAME,analysis.neo4j.neo4j.password=$DEV_MICROSERVICE_ANALYSIS_NEO4J_PASSWORD,analysis.neo4j.services.neo4j.enabled=true,analysis.neo4j.services.neo4j.annotations.service\\.beta\\.kubernetes\\.io/do-loadbalancer-certificate-id=$DEV_ANALYSIS_NEO4J_LOADBALANCER_CERTIFICATE_ID,analysis.neo4j.config.dbms\\.default_database=$DEV_MICROSERVICE_ANALYSIS_NEO4J_DATABASE,analysis.neo4j.config.dbms\\.default_advertised_address=$DEV_MICROSERVICE_ANALYSIS_NEO4J_ADVERTISED_ADDRESS,collection.replicas=3,collection.container.image=thinkdeeptech/deep-microservice-collection-dev:latest,collection.data.collector.image=thinkdeeptech/data-collector-dev:latest,configuration.container.image=thinkdeeptech/deep-microservice-configuration-dev:latest,gateway.container.image=thinkdeeptech/deep-microservice-gateway-dev:latest,subscription.container.image=thinkdeeptech/deep-microservice-subscription-dev:latest,global.nodeEnv=development"
update-repositories: true
timeout: "960s"
wait: true
deploy_ui_and_publish_coverage:
docker:
- image: 'cimg/node:16.14.2'
working_directory: ~/project
steps:
- patch_firefox
- browser-tools/install-browser-tools
- checkout
- install_monorepo
- build_ui_command
- run:
name: Publishing test coverage results
command: yarn run tests:coverage:publish
- deploy_ui_command
workflows:
version: 2
build_and_deploy_if_master:
jobs:
- build_microservice_analysis_dev:
filters:
branches:
ignore: master
- build_microservice_collection_dev:
filters:
branches:
ignore: master
- build_data_collector_dev:
filters:
branches:
ignore: master
- build_microservice_configuration_dev:
filters:
branches:
ignore: master
- build_microservice_gateway_dev:
filters:
branches:
ignore: master
- build_microservice_subscription_dev:
filters:
branches:
ignore: master
- deploy_microservices_dev:
filters:
branches:
ignore: master
requires:
- build_microservice_analysis_dev
- build_microservice_collection_dev
- build_data_collector_dev
- build_microservice_configuration_dev
- build_microservice_gateway_dev
- build_microservice_subscription_dev
- build_ui_and_test_system:
requires:
- deploy_microservices_dev
- build_microservice_collection:
filters:
branches:
only: master
- build_data_collector:
filters:
branches:
only: master
- build_microservice_analysis:
filters:
branches:
only: master
- build_microservice_configuration:
filters:
branches:
only: master
- build_microservice_gateway:
filters:
branches:
only: master
- build_microservice_subscription:
filters:
branches:
only: master
- deploy_microservices:
requires:
- build_microservice_analysis
- build_microservice_collection
- build_data_collector
- build_microservice_configuration
- build_microservice_gateway
- build_microservice_subscription
filters:
branches:
only: master
- deploy_ui_and_publish_coverage:
requires:
- deploy_microservices
filters:
branches:
only: master