sul-dlss/argo

View on GitHub
.circleci/config.yml

Summary

Maintainability
Test Coverage
version: 2.1

orbs:
  ruby: circleci/ruby@2.1.0
  node: circleci/node@5.1.0

references:
  default_ruby_version: &default_ruby_version 3.2.2-browsers
  default_postgres_version: &default_postgres_version '11.13'
  ruby_envs: &ruby_envs
    environment:
      BUNDLE_JOBS: 3
      BUNDLE_RETRY: 3
      PGHOST: 127.0.0.1
      PGPASSWORD: sekret
  postgres_envs: &postgres_envs
    name: db
    environment:
      POSTGRES_DB: dor-services-app
      POSTGRES_PASSWORD: sekret
executors:
  default:
    parameters:
      ruby_tag:
        description: 'The `cimg/ruby` Docker image version tag.'
        type: string
        default: *default_ruby_version
    docker:
      - image: cimg/ruby:<< parameters.ruby_tag >>
        <<: *ruby_envs
  ruby_with_all_deps:
    parameters:
      ruby_tag:
        description: 'The `cimg/ruby` Docker image version tag.'
        type: string
        default: *default_ruby_version
      postgres_tag:
        description: 'The `cimg/postgres` Docker image version tag.'
        type: string
        default: *default_postgres_version
    docker:
      - image: cimg/ruby:<< parameters.ruby_tag >>
        <<: *ruby_envs
      - image: cimg/postgres:<< parameters.postgres_tag >>
        <<: *postgres_envs
      - image: suldlss/dor-services-app:latest
        name: dor-services-app
        environment:
          DATABASE_NAME: dor-services-app
          DATABASE_USERNAME: postgres
          DATABASE_PASSWORD: sekret
          DATABASE_HOSTNAME: db
          DATABASE_PORT: 5432
          SECRET_KEY_BASE: 769171f88c527d564fb65b4b7ef712d5ae9761a21e26a41cd7c88eb0af89c74f857b9be4089119f71cf806dfc8bf9d9d2f0df91c00b119c96f462b46ebf43b0f
          SOLR_URL: http://solr:8983/solr/argo
          SETTINGS__DOR_INDEXING__URL: http://dor-indexing-app:3000/dor
          SETTINGS__SOLR__URL: http://solr:8983/solr/argo
          SETTINGS__SURI__URL: http://suri:3000
          SETTINGS__WORKFLOW_URL: http://workflow:3000
          SETTINGS__ENABLED_FEATURES__CREATE_UR_ADMIN_POLICY: 'true'
          SETTINGS__VERSION_SERVICE__SYNC_WITH_PRESERVATION: 'false'
          SETTINGS__RABBITMQ__ENABLED: 'false'
          SETTINGS__REDIS_URL: redis://redis:6379/
      - image: suldlss/sdr-api:latest
        name: sdr-api
        environment:
          DATABASE_NAME: sdr
          DATABASE_USERNAME: postgres
          DATABASE_PASSWORD: sekret
          DATABASE_HOSTNAME: db
          DATABASE_PORT: 5432
          SECRET_KEY_BASE: 769171f88c527d564fb65b4b7ef712d5ae9761a21e26a41cd7c88eb0af89c74f857b9be4089119f71cf806dfc8bf9d9d2f0df91c00b119c96f462b46ebf43b0f
          USER_EMAIL: argo@dlss.sul.stanford.edu
          USER_PASSWORD: notusedanywhere
          RAILS_LOG_TO_STDOUT: 'true'
          SETTINGS__WORKFLOW__URL: http://workflow:3000
          SETTINGS__DOR_SERVICES__URL: http://dor-services-app:3000/
          # To generate the token: docker-compose run dor-services-app rake generate_token
          SETTINGS__DOR_SERVICES__TOKEN: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJGb28ifQ.-BVfLTW9Q1_ZQEsGv4tuzGLs5rESN7LgdtEwUltnKv4
      - image: suldlss/suri-rails:latest
        name: suri
        environment:
          DATABASE_NAME: suri
          DATABASE_USERNAME: postgres
          DATABASE_PASSWORD: sekret
          DATABASE_HOSTNAME: db
          DATABASE_PORT: 5432
      - image: suldlss/technical-metadata-service:latest
        name: techmd
        environment:
          DATABASE_NAME: technical_metadata
          DATABASE_USERNAME: postgres
          DATABASE_PASSWORD: sekret
          DATABASE_HOSTNAME: db
          DATABASE_PORT: 5432
          RAILS_LOG_TO_STDOUT: 'true'
          REDIS_URL: redis://redis:6379/
      - image: suldlss/workflow-server:latest
        name: workflow
        environment:
          RAILS_LOG_TO_STDOUT: true
          DATABASE_NAME: workflow-server
          DATABASE_USERNAME: postgres
          DATABASE_PASSWORD: sekret
          DATABASE_HOSTNAME: db
          DATABASE_PORT: 5432
          SETTINGS__DOR_SERVICES__URL: http://dor-services-app:3000
          SETTINGS__DOR_SERVICES__TOKEN: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJGb28ifQ.-BVfLTW9Q1_ZQEsGv4tuzGLs5rESN7LgdtEwUltnKv4
          SETTINGS__ENABLE_STOMP: false
          SETTINGS__REDIS__HOSTNAME: redis
      - image: cimg/redis:6.2
        name: redis

workflows:
  test:
    jobs:
      - test
      - lint
      - erblint
      - lint_js
jobs:
  lint:
    executor: default
    steps:
      - checkout
      - ruby/install-deps:
          key: gems-v2
      - ruby/rubocop-check
  erblint:
    executor: default
    steps:
      - checkout
      - ruby/install-deps:
          key: gems-v2
      - run:
          name: Lint ERBs
          command: bundle exec erblint --lint-all --format compact
  lint_js:
    executor: default
    steps:
      - checkout
      - node/install-packages:
          pkg-manager: yarn
      - run:
          name: Lint JavaScript
          command: yarn run lint
  test:
    environment:
      TZ: 'America/Los_Angeles'
      CC_TEST_REPORTER_ID: '266992849463aa465e0884ad7d582306656214e31ac9245258f93190868cbc9a'
      SETTINGS__DOR_INDEXING_URL: http://dor-indexing-app:3000/dor
      # To generate the token: docker-compose run dor-services-app rake generate_token
      SETTINGS__DOR_SERVICES__TOKEN: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJGb28ifQ.-BVfLTW9Q1_ZQEsGv4tuzGLs5rESN7LgdtEwUltnKv4
      SETTINGS__DOR_SERVICES__URL: http://dor-services-app:3000
      SETTINGS__REDIS_URL: redis://redis:6379/
      SETTINGS__SDR_API__URL: http://sdr-api:3000
      SETTINGS__SOLRIZER_URL: http://solr:8983/solr/argo
      SETTINGS__TECH_MD_SERVICE__URL: http://techmd:3000
      SETTINGS__WORKFLOW_URL: http://workflow:3000
      TT: 1 # track templates
    executor: ruby_with_all_deps
    steps:
      - setup_remote_docker
      - checkout
      - run:
          name: Build and run solr (using repo's solr configuration)
          command: |
            docker build -f docker/Dockerfile-solr -t "argo-solr:latest" .
            network=`docker network ls --filter label=task-network --format "{{.ID}}"`
            docker run -d --name solr -p 8983:8983 --network-alias solr --network $network argo-solr:latest
      - ruby/install-deps:
          key: gems-v2
      - node/install-packages:
          pkg-manager: yarn      
      # Check DB status
      - run:
          name: Wait for DB
          command: dockerize -wait tcp://db:5432 -timeout 10s
      # Setup database
      - run:
          name: Database setup
          command: bin/rails db:test:prepare
      - run:
          name: Build assets
          command: bin/rails assets:precompile
      - run:
          name: Set up CodeClimate
          command: |
            curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
            chmod +x ./cc-test-reporter
            ./cc-test-reporter before-build
      # Run rspec in parallel
      - ruby/rspec-test:
          rerun-fail: true
      - run:
          name: Report test coverage results to CodeClimate
          command: ./cc-test-reporter after-build --coverage-input-type simplecov --exit-code $?
      - store_artifacts:
          path: tmp/capybara
      - store_artifacts:
          path: log/test.log