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