github.com/vipernet-xyz/tendermint-core@v0.32.0/.circleci/config.yml (about) 1 version: 2.1 2 3 executors: 4 golang: 5 docker: 6 - image: tendermintdev/docker-tendermint-build 7 working_directory: /go/src/github.com/tendermint/tendermint 8 environment: 9 GOBIN: /tmp/bin 10 release: 11 machine: true 12 docs: 13 docker: 14 - image: tendermintdev/docker-website-deployment 15 environment: 16 AWS_REGION: us-east-1 17 18 commands: 19 run_test: 20 parameters: 21 script_path: 22 type: string 23 steps: 24 - attach_workspace: 25 at: /tmp/bin 26 - restore_cache: 27 name: "Restore source code cache" 28 keys: 29 - go-src-v1-{{ .Revision }} 30 - checkout 31 - restore_cache: 32 name: "Restore go modules cache" 33 keys: 34 - go-mod-v1-{{ checksum "go.sum" }} 35 - run: 36 name: "Running test" 37 command: | 38 bash << parameters.script_path >> 39 40 jobs: 41 setup_dependencies: 42 executor: golang 43 steps: 44 - checkout 45 - restore_cache: 46 name: "Restore go modules cache" 47 keys: 48 - go-mod-v1-{{ checksum "go.sum" }} 49 - run: 50 command: | 51 mkdir -p /tmp/bin 52 - run: 53 name: Cache go modules 54 command: make go-mod-cache 55 - run: 56 name: tools 57 command: make tools 58 - run: 59 name: "Build binaries" 60 command: make install install_abci 61 - save_cache: 62 name: "Save go modules cache" 63 key: go-mod-v1-{{ checksum "go.sum" }} 64 paths: 65 - "/go/pkg/mod" 66 - save_cache: 67 name: "Save source code cache" 68 key: go-src-v1-{{ .Revision }} 69 paths: 70 - ".git" 71 - persist_to_workspace: 72 root: "/tmp/bin" 73 paths: 74 - "." 75 76 test_persistence: 77 executor: golang 78 steps: 79 - run_test: 80 script_path: test/persist/test_failure_indices.sh 81 82 test_cover: 83 executor: golang 84 parallelism: 4 85 steps: 86 - restore_cache: 87 name: "Restore source code cache" 88 keys: 89 - go-src-v1-{{ .Revision }} 90 - checkout 91 - restore_cache: 92 name: "Restore go module cache" 93 keys: 94 - go-mod-v2-{{ checksum "go.sum" }} 95 - run: 96 name: "Run tests" 97 command: | 98 export VERSION="$(git describe --tags --long | sed 's/v\(.*\)/\1/')" 99 export GO111MODULE=on 100 mkdir -p /tmp/logs /tmp/workspace/profiles 101 for pkg in $(go list github.com/tendermint/tendermint/... | circleci tests split --split-by=timings); do 102 id=$(basename "$pkg") 103 go test -v -timeout 5m -mod=readonly -race -coverprofile=/tmp/workspace/profiles/$id.out -covermode=atomic "$pkg" | tee "/tmp/logs/$id-$RANDOM.log" 104 done 105 - persist_to_workspace: 106 root: /tmp/workspace 107 paths: 108 - "profiles/*" 109 - store_artifacts: 110 path: /tmp/logs 111 112 localnet: 113 working_directory: /home/circleci/.go_workspace/src/github.com/tendermint/tendermint 114 machine: 115 image: circleci/classic:latest 116 environment: 117 GOBIN: /home/circleci/.go_workspace/bin 118 GOPATH: /home/circleci/.go_workspace/ 119 GOOS: linux 120 GOARCH: amd64 121 parallelism: 1 122 steps: 123 - checkout 124 - run: 125 name: run localnet and exit on failure 126 command: | 127 set -x 128 docker run --rm -v "$PWD":/go/src/github.com/tendermint/tendermint -w /go/src/github.com/tendermint/tendermint golang make build-linux 129 make localnet-start & 130 ./scripts/localnet-blocks-test.sh 40 5 10 localhost 131 132 test_p2p: 133 environment: 134 GOBIN: /home/circleci/.go_workspace/bin 135 GOPATH: /home/circleci/.go_workspace 136 machine: 137 image: circleci/classic:latest 138 parameters: 139 ipv: 140 type: integer 141 default: 4 142 steps: 143 - checkout 144 - run: mkdir -p $GOPATH/src/github.com/tendermint 145 - run: ln -sf /home/circleci/project $GOPATH/src/github.com/tendermint/tendermint 146 - run: bash test/p2p/circleci.sh << parameters.ipv >> 147 - store_artifacts: 148 path: /home/circleci/project/test/p2p/logs 149 150 upload_coverage: 151 executor: golang 152 steps: 153 - attach_workspace: 154 at: /tmp/workspace 155 - restore_cache: 156 name: "Restore source code cache" 157 keys: 158 - go-src-v1-{{ .Revision }} 159 - checkout 160 - restore_cache: 161 name: "Restore go module cache" 162 keys: 163 - go-mod-v2-{{ checksum "go.sum" }} 164 - run: 165 name: gather 166 command: | 167 echo "mode: atomic" > coverage.txt 168 for prof in $(ls /tmp/workspace/profiles/); do 169 tail -n +2 /tmp/workspace/profiles/"$prof" >> coverage.txt 170 done 171 - run: 172 name: upload 173 command: bash .circleci/codecov.sh -f coverage.txt 174 175 deploy_docs: 176 executor: docs 177 steps: 178 - checkout 179 - run: 180 name: "Build docs" 181 command: make build-docs 182 - run: 183 name: "Sync to S3" 184 command: make sync-docs 185 186 prepare_build: 187 executor: golang 188 steps: 189 - restore_cache: 190 name: "Restore source code cache" 191 keys: 192 - go-src-v1-{{ .Revision }} 193 - checkout 194 - run: 195 name: Get next release number 196 command: | 197 export LAST_TAG="`git describe --tags --abbrev=0 --match "${CIRCLE_BRANCH}.*"`" 198 echo "Last tag: ${LAST_TAG}" 199 if [ -z "${LAST_TAG}" ]; then 200 export LAST_TAG="${CIRCLE_BRANCH}" 201 echo "Last tag not found. Possibly fresh branch or feature branch. Setting ${LAST_TAG} as tag." 202 fi 203 export NEXT_TAG="`python -u scripts/release_management/bump-semver.py --version "${LAST_TAG}"`" 204 echo "Next tag: ${NEXT_TAG}" 205 echo "export CIRCLE_TAG=\"${NEXT_TAG}\"" > release-version.source 206 - run: 207 name: Build dependencies 208 command: make tools 209 - persist_to_workspace: 210 root: . 211 paths: 212 - "release-version.source" 213 - save_cache: 214 key: v2-release-deps-{{ checksum "go.sum" }} 215 paths: 216 - "/go/pkg/mod" 217 218 build_artifacts: 219 executor: golang 220 parallelism: 4 221 steps: 222 - restore_cache: 223 name: "Restore source code cache" 224 keys: 225 - go-src-v1-{{ .Revision }} 226 - checkout 227 - restore_cache: 228 name: "Restore release dependencies cache" 229 keys: 230 - v2-release-deps-{{ checksum "go.sum" }} 231 - attach_workspace: 232 at: /tmp/workspace 233 - run: 234 name: Build artifact 235 command: | 236 # Setting CIRCLE_TAG because we do not tag the release ourselves. 237 source /tmp/workspace/release-version.source 238 if test ${CIRCLE_NODE_INDEX:-0} == 0 ;then export GOOS=linux GOARCH=amd64 && export OUTPUT=build/tendermint_${GOOS}_${GOARCH} && make build && python -u scripts/release_management/zip-file.py ;fi 239 if test ${CIRCLE_NODE_INDEX:-0} == 1 ;then export GOOS=darwin GOARCH=amd64 && export OUTPUT=build/tendermint_${GOOS}_${GOARCH} && make build && python -u scripts/release_management/zip-file.py ;fi 240 if test ${CIRCLE_NODE_INDEX:-0} == 2 ;then export GOOS=windows GOARCH=amd64 && export OUTPUT=build/tendermint_${GOOS}_${GOARCH} && make build && python -u scripts/release_management/zip-file.py ;fi 241 if test ${CIRCLE_NODE_INDEX:-0} == 3 ;then export GOOS=linux GOARCH=arm && export OUTPUT=build/tendermint_${GOOS}_${GOARCH} && make build && python -u scripts/release_management/zip-file.py ;fi 242 - persist_to_workspace: 243 root: build 244 paths: 245 - "*.zip" 246 - "tendermint_linux_amd64" 247 248 release_artifacts: 249 executor: golang 250 steps: 251 - restore_cache: 252 name: "Restore source code cache" 253 keys: 254 - go-src-v1-{{ .Revision }} 255 - checkout 256 - attach_workspace: 257 at: /tmp/workspace 258 - run: 259 name: "Deploy to GitHub" 260 command: | 261 # Setting CIRCLE_TAG because we do not tag the release ourselves. 262 source /tmp/workspace/release-version.source 263 echo "---" 264 ls -la /tmp/workspace/*.zip 265 echo "---" 266 python -u scripts/release_management/sha-files.py 267 echo "---" 268 cat /tmp/workspace/SHA256SUMS 269 echo "---" 270 export RELEASE_ID="`python -u scripts/release_management/github-draft.py`" 271 echo "Release ID: ${RELEASE_ID}" 272 #Todo: Parallelize uploads 273 export GOOS=linux GOARCH=amd64 && python -u scripts/release_management/github-upload.py --id "${RELEASE_ID}" 274 export GOOS=darwin GOARCH=amd64 && python -u scripts/release_management/github-upload.py --id "${RELEASE_ID}" 275 export GOOS=windows GOARCH=amd64 && python -u scripts/release_management/github-upload.py --id "${RELEASE_ID}" 276 export GOOS=linux GOARCH=arm && python -u scripts/release_management/github-upload.py --id "${RELEASE_ID}" 277 python -u scripts/release_management/github-upload.py --file "/tmp/workspace/SHA256SUMS" --id "${RELEASE_ID}" 278 python -u scripts/release_management/github-publish.py --id "${RELEASE_ID}" 279 280 release_docker: 281 machine: 282 image: ubuntu-1604:201903-01 283 steps: 284 - checkout 285 - attach_workspace: 286 at: /tmp/workspace 287 - run: 288 name: "Deploy to Docker Hub" 289 command: | 290 # Setting CIRCLE_TAG because we do not tag the release ourselves. 291 source /tmp/workspace/release-version.source 292 cp /tmp/workspace/tendermint_linux_amd64 DOCKER/tendermint 293 docker build --label="tendermint" --tag="tendermint/tendermint:${CIRCLE_TAG}" --tag="tendermint/tendermint:latest" "DOCKER" 294 docker login -u "${DOCKERHUB_USER}" --password-stdin \<<< "${DOCKERHUB_PASS}" 295 docker push "tendermint/tendermint" 296 docker logout 297 298 reproducible_builds: 299 executor: golang 300 steps: 301 - attach_workspace: 302 at: /tmp/workspace 303 - checkout 304 - setup_remote_docker: 305 docker_layer_caching: true 306 - run: 307 name: Build tendermint 308 no_output_timeout: 20m 309 command: | 310 sudo apt-get update 311 sudo apt-get install -y ruby 312 bash -x ./scripts/gitian-build.sh all 313 for os in darwin linux windows; do 314 cp gitian-build-${os}/result/tendermint-${os}-res.yml . 315 cp gitian-build-${os}/build/out/tendermint-*.tar.gz . 316 rm -rf gitian-build-${os}/ 317 done 318 - store_artifacts: 319 path: /go/src/github.com/tendermint/tendermint/tendermint-darwin-res.yml 320 - store_artifacts: 321 path: /go/src/github.com/tendermint/tendermint/tendermint-linux-res.yml 322 - store_artifacts: 323 path: /go/src/github.com/tendermint/tendermint/tendermint-windows-res.yml 324 - store_artifacts: 325 path: /go/src/github.com/tendermint/tendermint/tendermint-*.tar.gz 326 327 # # Test RPC implementation against the swagger documented specs 328 # contract_tests: 329 # working_directory: /home/circleci/.go_workspace/src/github.com/tendermint/tendermint 330 # machine: 331 # image: circleci/classic:latest 332 # environment: 333 # GOBIN: /home/circleci/.go_workspace/bin 334 # GOPATH: /home/circleci/.go_workspace/ 335 # GOOS: linux 336 # GOARCH: amd64 337 # parallelism: 1 338 # steps: 339 # - checkout 340 # - run: 341 # name: Test RPC endpoints against swagger documentation 342 # command: | 343 # set -x 344 # export PATH=~/.local/bin:$PATH 345 # # install node and dredd 346 # ./scripts/get_nodejs.sh 347 # # build the binaries with a proper version of Go 348 # docker run --rm -v "$PWD":/go/src/github.com/tendermint/tendermint -w /go/src/github.com/tendermint/tendermint golang make build-linux build-contract-tests-hooks 349 # # This docker image works with go 1.7, we can install here the hook handler that contract-tests is going to use 350 # go get github.com/snikch/goodman/cmd/goodman 351 # make contract-tests 352 353 workflows: 354 version: 2 355 test-suite: 356 jobs: 357 - deploy_docs: 358 context: tendermint-docs 359 filters: 360 branches: 361 only: 362 - master 363 tags: 364 only: 365 - /^v.*/ 366 - deploy_docs: 367 context: tendermint-docs-staging 368 filters: 369 branches: 370 only: 371 - docs-staging 372 - setup_dependencies 373 - test_cover: 374 requires: 375 - setup_dependencies 376 - test_persistence: 377 requires: 378 - setup_dependencies 379 - localnet: 380 requires: 381 - setup_dependencies 382 - test_p2p 383 - test_p2p: 384 name: test_p2p_ipv6 385 ipv: 6 386 - upload_coverage: 387 requires: 388 - test_cover 389 - reproducible_builds: 390 filters: 391 branches: 392 only: 393 - master 394 - /v[0-9]+\.[0-9]+/ 395 # - contract_tests: 396 # requires: 397 # - setup_dependencies 398 399 release: 400 jobs: 401 - prepare_build 402 - build_artifacts: 403 requires: 404 - prepare_build 405 - release_artifacts: 406 requires: 407 - prepare_build 408 - build_artifacts 409 filters: 410 branches: 411 only: 412 - /v[0-9]+\.[0-9]+/ 413 - release_docker: 414 requires: 415 - prepare_build 416 - build_artifacts 417 filters: 418 branches: 419 only: 420 - /v[0-9]+\.[0-9]+/ 421 - master