config.yml 8.04 KB
Newer Older
Steven Allen's avatar
Steven Allen committed
1
version: 2.1
Łukasz Magiera's avatar
Łukasz Magiera committed
2

Jakub Sztandera's avatar
Jakub Sztandera committed
3 4
aliases:
  make_out_dirs: &make_out_dirs
Steven Allen's avatar
Steven Allen committed
5
    run: mkdir -p /tmp/circleci-artifacts /tmp/circleci-workspace /tmp/circleci-test-results/{unit,sharness}
Jakub Sztandera's avatar
Jakub Sztandera committed
6 7 8
  restore_gomod: &restore_gomod
    restore_cache:
      keys:
Steven Allen's avatar
Steven Allen committed
9 10 11 12
        - v4-dep-{{ .Branch }}-{{ checksum "~/ipfs/go-ipfs/go.sum" }}-{{ .Environment.CIRCLE_JOB }}
        - v4-dep-{{ .Branch }}-{{ checksum "~/ipfs/go-ipfs/go.sum" }}-
        - v4-dep-{{ .Branch }}-
        - v4-dep-master-
Jakub Sztandera's avatar
Jakub Sztandera committed
13 14
  store_gomod: &store_gomod
      save_cache:
Steven Allen's avatar
Steven Allen committed
15
        key: v4-dep-{{ .Branch }}-{{ checksum "~/ipfs/go-ipfs/go.sum" }}-{{ .Environment.CIRCLE_JOB }}
Jakub Sztandera's avatar
Jakub Sztandera committed
16 17 18 19
        paths:
          - ~/go/pkg/mod
          - ~/.cache/go-build/

Steven Allen's avatar
Steven Allen committed
20 21 22 23 24 25 26
default_environment: &default_environment
  SERVICE: circle-ci
  TRAVIS: 1
  CIRCLE: 1
  CIRCLE_TEST_REPORTS: /tmp/circleci-test-results
  CIRCLE_ARTIFACTS: /tmp/circleci-artifacts
  GIT_PAGER: cat
Jakub Sztandera's avatar
Jakub Sztandera committed
27

Steven Allen's avatar
Steven Allen committed
28 29 30
executors:
  golang:
    docker:
Steven Allen's avatar
Steven Allen committed
31
      - image: circleci/golang:1.13
Steven Allen's avatar
Steven Allen committed
32 33 34 35 36 37 38 39 40 41 42 43 44 45
    working_directory: ~/ipfs/go-ipfs
    environment:
      <<: *default_environment
      GO111MODULE: "on"
      TEST_NO_DOCKER: 1
      TEST_NO_FUSE: 1
      GOPATH: /home/circleci/go
      TEST_VERBOSE: 1
  node:
    docker:
      - image: circleci/node:10
    working_directory: ~/ipfs/go-ipfs
    environment:
      <<: *default_environment
Łukasz Magiera's avatar
Łukasz Magiera committed
46 47

jobs:
Steven Allen's avatar
Steven Allen committed
48
  gobuild:
Steven Allen's avatar
Steven Allen committed
49
    executor: golang
Steven Allen's avatar
Steven Allen committed
50 51 52 53 54 55 56 57 58 59 60 61 62
    steps:
    - checkout
    - *make_out_dirs
    - *restore_gomod
    - run:
        command: make cmd/ipfs-try-build
        environment:
          TEST_NO_FUSE: 0
    - run:
        command: make cmd/ipfs-try-build
        environment:
          TEST_NO_FUSE: 1
    - *store_gomod
Steven Allen's avatar
Steven Allen committed
63
  golint:
Steven Allen's avatar
Steven Allen committed
64
    executor: golang
Steven Allen's avatar
Steven Allen committed
65 66 67 68 69 70 71
    steps:
    - checkout
    - *make_out_dirs
    - *restore_gomod
    - run: |
        make -O test_go_lint
    - *store_gomod
Łukasz Magiera's avatar
Łukasz Magiera committed
72
  gotest:
Steven Allen's avatar
Steven Allen committed
73
    executor: golang
Łukasz Magiera's avatar
Łukasz Magiera committed
74 75
    steps:
    - checkout
Jakub Sztandera's avatar
Jakub Sztandera committed
76 77
    - *make_out_dirs
    - *restore_gomod
Łukasz Magiera's avatar
Łukasz Magiera committed
78

79
    - run: |
Jakub Sztandera's avatar
Jakub Sztandera committed
80
        make -j 1 test/unit/gotest.junit.xml \
81
        && [[ ! $(jq -s -c 'map(select(.Action == "fail")) | .[]' test/unit/gotest.json) ]]
Jakub Sztandera's avatar
Jakub Sztandera committed
82 83 84 85
    - run: 
        when: always
        command: bash <(curl -s https://codecov.io/bash) -cF unittests -X search -f coverage/unit_tests.coverprofile

86 87
    - run:
        when: always
Jakub Sztandera's avatar
Jakub Sztandera committed
88 89 90 91
        command: mv "test/unit/gotest.junit.xml" /tmp/circleci-test-results/unit

    - *store_gomod

Łukasz Magiera's avatar
Łukasz Magiera committed
92 93 94 95 96 97 98 99
    - store_test_results:
        path: /tmp/circleci-test-results
    # Save artifacts
    - store_artifacts:
        path: /tmp/circleci-artifacts
    - store_artifacts:
        path: /tmp/circleci-test-results
  sharness:
Steven Allen's avatar
Steven Allen committed
100
    executor: golang
Łukasz Magiera's avatar
Łukasz Magiera committed
101
    steps:
Jakub Sztandera's avatar
Jakub Sztandera committed
102
    - run: sudo apt install socat
Łukasz Magiera's avatar
Łukasz Magiera committed
103
    - checkout
Jakub Sztandera's avatar
Jakub Sztandera committed
104 105
    - *make_out_dirs
    - *restore_gomod
Łukasz Magiera's avatar
Łukasz Magiera committed
106

107
    - run: make -O -j 10 coverage/sharness_tests.coverprofile test/sharness/test-results/sharness.xml TEST_GENERATE_JUNIT=1 CONTINUE_ON_S_FAILURE=1
Łukasz Magiera's avatar
Łukasz Magiera committed
108

Jakub Sztandera's avatar
Jakub Sztandera committed
109 110 111
    - run:
        when: always
        command: bash <(curl -s https://codecov.io/bash) -cF sharness -X search -f coverage/sharness_tests.coverprofile
112

Jakub Sztandera's avatar
Jakub Sztandera committed
113
    - run: mv "test/sharness/test-results/sharness.xml" /tmp/circleci-test-results/sharness
114
    # make sure we fail if there are test failures
Jakub Sztandera's avatar
Jakub Sztandera committed
115 116 117 118
    - run: find test/sharness/test-results -name 't*-*.sh.*.counts' | test/sharness/lib/sharness/aggregate-results.sh | grep 'failed\s*0'

    - *store_gomod

Łukasz Magiera's avatar
Łukasz Magiera committed
119 120 121 122 123 124 125
    - store_test_results:
        path: /tmp/circleci-test-results
    # Save artifacts
    - store_artifacts:
        path: /tmp/circleci-artifacts
    - store_artifacts:
        path: /tmp/circleci-test-results
Steven Allen's avatar
Steven Allen committed
126
  build:
Steven Allen's avatar
Steven Allen committed
127
    executor: golang
Łukasz Magiera's avatar
Łukasz Magiera committed
128 129 130 131
    steps:
      - checkout
      - *make_out_dirs
      - *restore_gomod
Steven Allen's avatar
Steven Allen committed
132 133 134 135 136 137 138 139
      - run:
          name: Building
          command: make build
      - run:
          name: Storing
          command: |
            mkdir -p /tmp/circleci-workspace/bin
            cp cmd/ipfs/ipfs /tmp/circleci-workspace/bin
Łukasz Magiera's avatar
Łukasz Magiera committed
140 141 142
      - persist_to_workspace:
          root: /tmp/circleci-workspace
          paths:
Steven Allen's avatar
Steven Allen committed
143
            - bin/ipfs
Łukasz Magiera's avatar
Łukasz Magiera committed
144 145
      - *store_gomod
  interop:
Steven Allen's avatar
Steven Allen committed
146
    executor: node
Steven Allen's avatar
Steven Allen committed
147
    parallelism: 4
Łukasz Magiera's avatar
Łukasz Magiera committed
148 149 150 151
    steps:
      - *make_out_dirs
      - attach_workspace:
          at: /tmp/circleci-workspace
Steven Allen's avatar
Steven Allen committed
152 153 154 155 156
      - run:
          name: Cloning
          command: |
            git clone https://github.com/ipfs/interop.git
            git -C interop log -1
Steven Allen's avatar
Steven Allen committed
157 158 159 160
      - restore_cache:
          keys:
            - v1-interop-{{ checksum "~/ipfs/go-ipfs/interop/package-lock.json" }}
            - v1-interop-
Łukasz Magiera's avatar
Łukasz Magiera committed
161
      - run:
162 163 164
          name: Installing dependencies
          command: |
            npm install
Łukasz Magiera's avatar
Łukasz Magiera committed
165
          working_directory: ~/ipfs/go-ipfs/interop
Steven Allen's avatar
Steven Allen committed
166 167 168 169
      - save_cache:
          key: v1-interop-{{ checksum "~/ipfs/go-ipfs/interop/package-lock.json" }}
          paths:
            - ~/ipfs/go-ipfs/interop/node_modules
Steven Allen's avatar
Steven Allen committed
170 171 172 173 174
      - run:
          name: Installing js-ipfs
          command: |
            npm install ipfs
          working_directory: ~/ipfs/go-ipfs/interop
175 176 177
      - run:
          name: Installing reporting tools
          command: |
Steven Allen's avatar
Steven Allen committed
178
            npm install --save-dev mocha-junit-reporter@1.23.1 mocha-multi-reporters@1.1.0
179
          working_directory: ~/ipfs/go-ipfs/interop
Łukasz Magiera's avatar
Łukasz Magiera committed
180
      - run:
181 182 183 184
          name: Running tests
          command: |
            mkdir -p /tmp/test-results/interop/
            export MOCHA_FILE="$(mktemp /tmp/test-results/interop/unit.XXXXXX.xml)"
185
            echo '{"reporterEnabled": "mocha-junit-reporter, spec"}' > mocha-conf.json
Steven Allen's avatar
Steven Allen committed
186 187
            node_modules/.bin/mocha -R mocha-multi-reporters --reporter-options "configFile=mocha-conf.json" \
              $(sed -n -e "s|^require('\(.*\)')$|test/\1|p" test/node.js | circleci tests split)
Łukasz Magiera's avatar
Łukasz Magiera committed
188
          working_directory: ~/ipfs/go-ipfs/interop
189 190
          environment:
            IPFS_REUSEPORT: false
Steven Allen's avatar
Steven Allen committed
191 192
            LIBP2P_ALLOW_WEAK_RSA_KEYS: true
            IPFS_GO_EXEC: /tmp/circleci-workspace/bin/ipfs
193 194
      - store_test_results:
          path: /tmp/test-results
Steven Allen's avatar
Steven Allen committed
195
  go-ipfs-api:
Steven Allen's avatar
Steven Allen committed
196
    executor: golang
Steven Allen's avatar
Steven Allen committed
197 198 199 200 201
    steps:
      - *make_out_dirs
      - attach_workspace:
          at: /tmp/circleci-workspace
      - run:
Steven Allen's avatar
Steven Allen committed
202
          name: Cloning
Steven Allen's avatar
Steven Allen committed
203 204 205
          command: |
            git clone https://github.com/ipfs/go-ipfs-api.git
            git -C go-ipfs-api log -1
Steven Allen's avatar
Steven Allen committed
206 207
      - run:
          name: Starting the daemon
Steven Allen's avatar
Steven Allen committed
208 209 210 211 212 213 214 215 216
          command: /tmp/circleci-workspace/bin/ipfs daemon --init --enable-namesys-pubsub
          background: true
      - run:
          name: Waiting for the daemon
          no_output_timeout: 10s
          command: |
            while ! /tmp/circleci-workspace/bin/ipfs id --api=/ip4/127.0.0.1/tcp/5001 2>/dev/null; do
              sleep 1
            done
Steven Allen's avatar
Steven Allen committed
217 218 219 220
      - restore_cache:
          keys:
            - v1-go-api-{{ checksum "~/ipfs/go-ipfs/go-ipfs-api/go.sum" }}
            - v1-go-api-
Steven Allen's avatar
Steven Allen committed
221 222 223
      - run:
          command: go test -v ./...
          working_directory: ~/ipfs/go-ipfs/go-ipfs-api
Steven Allen's avatar
Steven Allen committed
224 225 226 227 228 229 230 231
      - save_cache:
          key: v1-go-api-{{ checksum "~/ipfs/go-ipfs/go-ipfs-api/go.sum" }}
          paths:
            - ~/go/pkg/mod
            - ~/.cache/go-build/
      - run:
          name: Stopping the daemon
          command: /tmp/circleci-workspace/bin/ipfs shutdown
Steven Allen's avatar
Steven Allen committed
232
  go-ipfs-http-client:
Steven Allen's avatar
Steven Allen committed
233
    executor: golang
Steven Allen's avatar
Steven Allen committed
234 235 236 237 238
    steps:
      - *make_out_dirs
      - attach_workspace:
          at: /tmp/circleci-workspace
      - run:
Steven Allen's avatar
Steven Allen committed
239
          name: Cloning
Steven Allen's avatar
Steven Allen committed
240 241 242
          command: |
            git clone https://github.com/ipfs/go-ipfs-http-client.git
            git -C go-ipfs-http-client log -1
Steven Allen's avatar
Steven Allen committed
243 244 245 246 247 248
      - restore_cache:
          keys:
            - v1-http-client-{{ checksum "~/ipfs/go-ipfs/go-ipfs-http-client/go.sum" }}
            - v1-http-client-
      - run:
          name: go test -v ./...
Steven Allen's avatar
Steven Allen committed
249 250 251 252
          command: |
            export PATH=/tmp/circleci-workspace/bin:$PATH
            go test -v ./...
          working_directory: ~/ipfs/go-ipfs/go-ipfs-http-client
Steven Allen's avatar
Steven Allen committed
253 254 255 256 257
      - save_cache:
          key: v1-http-client-{{ checksum "~/ipfs/go-ipfs/go-ipfs-http-client/go.sum" }}
          paths:
            - ~/go/pkg/mod
            - ~/.cache/go-build/
Łukasz Magiera's avatar
Łukasz Magiera committed
258 259 260 261
workflows:
  version: 2
  test:
    jobs:
Steven Allen's avatar
Steven Allen committed
262
    - gobuild
Steven Allen's avatar
Steven Allen committed
263
    - golint
Łukasz Magiera's avatar
Łukasz Magiera committed
264 265
    - gotest
    - sharness
Steven Allen's avatar
Steven Allen committed
266
    - build
Łukasz Magiera's avatar
Łukasz Magiera committed
267 268
    - interop:
        requires:
Steven Allen's avatar
Steven Allen committed
269 270 271 272 273 274 275
          - build
    - go-ipfs-api:
        requires:
          - build
    - go-ipfs-http-client:
        requires:
          - build