version: 2.1

jobs:
    build:
        resource_class: xlarge
        docker:
            - image: node:12
        environment:
            NODE_OPTIONS: '--max-old-space-size=16384'
        working_directory: ~/repo
        steps:
            - checkout
            - run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV
            - run:
                  name: install-yarn
                  command: npm install --force --global yarn@1.22.0
            - run:
                  name: yarn
                  command: yarn --frozen-lockfile --ignore-engines install || yarn --frozen-lockfile --ignore-engines install
            - setup_remote_docker
            - run: yarn build:ci || yarn build:ci || yarn build:ci || yarn build:ci || yarn build:ci || yarn build:ci
            - run: yarn build:ts || yarn build:ts || yarn build:ts || yarn build:ts || yarn build:ts || yarn build:ts
            - save_cache:
                  key: repo-{{ .Environment.CIRCLE_SHA1 }}
                  paths:
                      - ~/repo
            - store_artifacts:
                  path: ~/repo/packages/abi-gen/test-cli/output
            - store_artifacts:
                  path: ~/repo/packages/contract-wrappers/generated_docs
    test-exchange-ganache:
        resource_class: medium+
        docker:
            - image: node:12
        working_directory: ~/repo
        steps:
            - restore_cache:
                  keys:
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
            - run: yarn wsrun -p @0x/contracts-exchange -m --serial -c test:circleci
    test-integrations-ganache:
        resource_class: medium+
        docker:
            - image: node:12
        working_directory: ~/repo
        steps:
            - restore_cache:
                  keys:
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
            - run: yarn wsrun -p @0x/contracts-integrations -m --serial -c test:circleci
    test-contracts-staking-ganache:
        resource_class: medium+
        docker:
            - image: node:12
        working_directory: ~/repo
        steps:
            - restore_cache:
                  keys:
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
            - run: yarn wsrun -p @0x/contracts-staking -m --serial -c test:circleci
    test-contracts-extra-ganache:
        resource_class: medium+
        docker:
            - image: node:12
        working_directory: ~/repo
        steps:
            - restore_cache:
                  keys:
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
            - run: yarn wsrun -p @0x/contracts-exchange-forwarder -p @0x/contracts-coordinator -m --serial -c test:circleci
    test-contracts-rest-ganache:
        resource_class: medium+
        docker:
            - image: node:12
        working_directory: ~/repo
        steps:
            - restore_cache:
                  keys:
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
            - run: yarn wsrun -p @0x/contracts-multisig -p @0x/contracts-utils -p @0x/contracts-exchange-libs -p  @0x/contracts-erc20 -p @0x/contracts-erc721 -p @0x/contracts-erc1155 -p @0x/contracts-asset-proxy -p @0x/contracts-broker -p @0x/contracts-zero-ex -m --serial -c test:circleci
    test-publish:
        resource_class: large
        environment:
            NODE_OPTIONS: '--max-old-space-size=6442'
        docker:
            - image: node:12
            - image: 0xorg/verdaccio
        working_directory: ~/repo
        steps:
            - restore_cache:
                  keys:
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
            - run:
                  command: yarn test:publish:circleci
                  no_output_timeout: 1800
            - store_artifacts:
                  path: ~/.npm/_logs
    test-doc-generation:
        docker:
            - image: node:12
        working_directory: ~/repo
        steps:
            - restore_cache:
                  keys:
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
            - run:
                  command: yarn test:generate_docs:circleci
                  no_output_timeout: 1200
    test-rest:
        docker:
            - image: node:12
        working_directory: ~/repo
        steps:
            - restore_cache:
                  keys:
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
            - run: yarn wsrun -p @0x/contracts-test-utils -m --serial -c test:circleci
            - run: yarn wsrun -p @0x/contract-artifacts -m --serial -c test:circleci
            - run: yarn wsrun -p @0x/contract-wrappers-test -m --serial -c test:circleci
            - run: yarn wsrun -p @0x/migrations -m --serial -c test:circleci
            - run: yarn wsrun -p @0x/order-utils -m --serial -c test:circleci
            - run: yarn wsrun -p @0x/asset-swapper -m --serial -c test:circleci
            - save_cache:
                  key: coverage-contract-wrappers-test-{{ .Environment.CIRCLE_SHA1 }}
                  paths:
                      - ~/repo/packages/contract-wrappers-test/coverage/lcov.info
            - save_cache:
                  key: coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }}
                  paths:
                      - ~/repo/packages/order-utils/coverage/lcov.info
            - save_cache:
                  key: coverage-web3-wrapper-{{ .Environment.CIRCLE_SHA1 }}
                  paths:
                      - ~/repo/packages/web3-wrapper/coverage/lcov.info
    static-tests:
        resource_class: large
        working_directory: ~/repo
        docker:
            - image: node:12
        steps:
            - restore_cache:
                  keys:
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
            - run: yarn lerna run lint
            - run: yarn prettier:ci
            - run: yarn deps_versions:ci
            - run: yarn diff_md_docs:ci
    submit-coverage:
        docker:
            - image: node:12
        working_directory: ~/repo
        steps:
            - restore_cache:
                  keys:
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
            - restore_cache:
                  keys:
                      - coverage-contract-wrappers-test-{{ .Environment.CIRCLE_SHA1 }}
            - restore_cache:
                  keys:
                      - coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }}
            - restore_cache:
                  keys:
                      - coverage-contracts-{{ .Environment.CIRCLE_SHA1 }}
            - run: yarn report_coverage
workflows:
    version: 2
    main:
        jobs:
            - build
            # Disabled until we begin actively developing on these packages again.
            # - test-exchange-ganache:
            #       requires:
            #           - build
            # - test-integrations-ganache:
            #       requires:
            #           - build
            # - test-contracts-staking-ganache:
            #       requires:
            #           - build
            # - test-contracts-extra-ganache:
            #       requires:
            #           - build
            - test-contracts-rest-ganache:
                  requires:
                      - build
            - test-rest:
                  requires:
                      - build
            - static-tests:
                  requires:
                      - build
            - test-publish:
                  requires:
                      - build
            - test-doc-generation:
                  requires:
                      - build
            # Disabled until this repo has a coveralls API key
            # - submit-coverage:
            #       requires:
            #           # Disabled until we begin actively developing on these packages again.
            #           # - test-exchange-ganache
            #           # - test-integrations-ganache
            #           # - test-contracts-staking-ganache
            #           # - test-contracts-extra-ganache
            #           - test-contracts-rest-ganache
            #           - test-rest
            #           - static-tests
