version: 2

defaults: &defaults
  working_directory: ~/ipfs/go-ipfs
  shell: /bin/bash --login
  environment:
    TEST_NO_FUSE: 1
    GOPATH: $HOME/.go_workspace
    CIRCLE_TEST_REPORTS: /tmp/circleci-test-results
    CIRCLE: 1
    SERVICE: circle-ci
    TEST_NO_DOCKER: 1
    CIRCLE_ARTIFACTS: /tmp/circleci-artifacts
    TEST_VERBOSE: 1
    TRAVIS: 1
    IMPORT_PATH: github.com/ipfs/go-ipfs

  docker:
  - image: circleci/build-image:ubuntu-14.04-XXL-upstart-1189-5614f37
    command: /sbin/init

jobs:
  gotest:
    <<: *defaults
    steps:
    - checkout
    - run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS
    - run: 'sudo docker info >/dev/null 2>&1 || sudo service docker start; '
    - run: sudo rm -rf /usr/local/go
    - run: if [ ! -e go1.11.linux-amd64.tar.gz ]; then curl -o go1.11.linux-amd64.tar.gz https://storage.googleapis.com/golang/go1.11.linux-amd64.tar.gz; fi
    - run: sudo tar -C /usr/local -xzf go1.11.linux-amd64.tar.gz

    - restore_cache:
        keys:
        - v1-dep-{{ .Branch }}-
        - v1-dep-master-

    - run: sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0 net.ipv6.conf.default.disable_ipv6=0 net.ipv6.conf.all.disable_ipv6=0
    - run: rm -rf "$HOME/.go_workspace/src/$IMPORT_PATH"
    - run: mkdir -p "$HOME/.go_workspace/src/$IMPORT_PATH"
    - run: cp -aT . "$HOME/.go_workspace/src/$IMPORT_PATH"
    - run: cd "$HOME/.go_workspace/src/$IMPORT_PATH" && make deps

    - save_cache:
        key: v1-dep-{{ .Branch }}-{{ epoch }}
        paths:
        - ~/.go_workspace
        - ~/go1.11.linux-amd64.tar.gz
        - ~/.go_workspace/src/gx/ipfs
        - ./node_modules


    - run: cd "$HOME/.go_workspace/src/$IMPORT_PATH" && curl -s https://codecov.io/bash > codecov
    - run: cd "$HOME/.go_workspace/src/$IMPORT_PATH" && make -j 1 test/unit/gotest.junit.xml
    - run: cd "$HOME/.go_workspace/src/$IMPORT_PATH" && bash codecov -cF unittests -X search -f coverage/unit_tests.coverprofile
    - run: mv "$HOME/.go_workspace/src/${IMPORT_PATH}/test/unit/gotest.junit.xml" /tmp/circleci-test-results
    - store_test_results:
        path: /tmp/circleci-test-results
    # Save artifacts
    - store_artifacts:
        path: /tmp/circleci-artifacts
    - store_artifacts:
        path: /tmp/circleci-test-results
  sharness:
    <<: *defaults
    steps:
    - checkout
    - run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS
    - run: 'sudo docker info >/dev/null 2>&1 || sudo service docker start; '
    - run: sudo rm -rf /usr/local/go
    - run: if [ ! -e go1.11.linux-amd64.tar.gz ]; then curl -o go1.11.linux-amd64.tar.gz https://storage.googleapis.com/golang/go1.11.linux-amd64.tar.gz; fi
    - run: sudo tar -C /usr/local -xzf go1.11.linux-amd64.tar.gz

    - restore_cache:
        keys:
        - v1-dep-{{ .Branch }}-
        - v1-dep-master-

    - run: sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0 net.ipv6.conf.default.disable_ipv6=0 net.ipv6.conf.all.disable_ipv6=0
    - run: rm -rf "$HOME/.go_workspace/src/$IMPORT_PATH"
    - run: mkdir -p "$HOME/.go_workspace/src/$IMPORT_PATH"
    - run: cp -aT . "$HOME/.go_workspace/src/$IMPORT_PATH"
    - run: cd "$HOME/.go_workspace/src/$IMPORT_PATH" && make deps

    - save_cache:
        key: v1-dep-{{ .Branch }}-{{ epoch }}
        paths:
        - ~/.go_workspace
        - ~/go1.11.linux-amd64.tar.gz
        - ~/.go_workspace/src/gx/ipfs
        - ./node_modules

    - run: cd "$HOME/.go_workspace/src/$IMPORT_PATH" && curl -s https://codecov.io/bash > codecov
    - run: cd "$HOME/.go_workspace/src/$IMPORT_PATH" && make -j 10 coverage/sharness_tests.coverprofile test/sharness/test-results/sharness.xml TEST_GENERATE_JUNIT=1 CONTINUE_ON_S_FAILURE=1
    - run: cd "$HOME/.go_workspace/src/$IMPORT_PATH" && bash codecov -cF sharness -X search -f coverage/sharness_tests.coverprofile
    - run: mv "$HOME/.go_workspace/src/${IMPORT_PATH}/test/sharness/test-results/sharness.xml" /tmp/circleci-test-results

    # make sure we fail if there are test failures
    - run: cd "$HOME/.go_workspace/src/$IMPORT_PATH" && ls test/sharness/test-results/t*-*.sh.*.counts | test/sharness/lib/sharness/aggregate-results.sh | grep 'failed\s*0'
    - store_test_results:
        path: /tmp/circleci-test-results
    # Save artifacts
    - store_artifacts:
        path: /tmp/circleci-artifacts
    - store_artifacts:
        path: /tmp/circleci-test-results

workflows:
  version: 2
  test:
    jobs:
    - gotest
    - sharness
