aboutsummaryrefslogblamecommitdiffstats
path: root/circle.yml
blob: 30dccead41fe62b9f55008b3d6ef3af2b473bc65 (plain) (tree)
1
2
3
4
5
6
7





                                                                                
                                                               













                                                                                                                                                     
                                 

                           
                                 




                              
 

          
                   
           
                                                      

                 

                















                                                                                                                                                                         




                                                             
                                                           



                             
                         
                         

                                                      

                 



                            





                                                                                                                      


                                                                              
                         

                          
            
                           
                    
                                   
                                                                                           


                                                      

                 









                                                                                                                      


                                                                              
                         

                          
            
                              

                                   
                                                                                                              
                  

                                    

                 





                                          
                                                                                                                                                             
                                                       



                                            



                  

                 



                                          
                    





                              

                                                       



                                            
 
                 

                                    

                 








                                                       
                                  
                       





                             

                 











                                    
                       

                             
 








                                          
                                                        
                                          






                                    



            
                                        
                               
                            


                                 
                            

                              






                                       
                            
                   
                           
                            
defaults:
  # The default for tags is to not run, so we have to explicitly match a filter.
  - build_on_tags: &build_on_tags
      filters:
        tags:
          only: /.*/
  - setup_prerelease_commit_hash: &setup_prerelease_commit_hash
      name: Store commit hash and prerelease
      command: |
        if [ "$CIRCLE_BRANCH" = release -o -n "$CIRCLE_TAG" ]; then echo -n > prerelease.txt; else date -u +"nightly.%Y.%-m.%-d" > prerelease.txt; fi
        echo -n "$CIRCLE_SHA1" > commit_hash.txt
  - run_build: &run_build
      name: Build
      command: |
        mkdir -p build
        cd build
        cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
        make -j4
  - run_tests: &run_tests
      name: Tests
      command: scripts/tests.sh --junit_report test_results
  - solc_artifact: &solc_artifact
      path: build/solc/solc
      destination: solc
  - all_artifacts: &all_artifacts
      root: build
      paths:
        - solc/solc
        - test/soltest
        - test/tools/solfuzzer

version: 2
jobs:
  build_emscripten:
    docker:
      - image: trzeci/emscripten:sdk-tag-1.37.21-64bit
    environment:
      TERM: xterm
    steps:
      - checkout
      - restore_cache:
          name: Restore Boost build
          key: &boost-cache-key emscripten-boost-{{ checksum "scripts/travis-emscripten/install_deps.sh" }}{{ checksum "scripts/travis-emscripten/build_emscripten.sh" }}
      - run:
          name: Bootstrap Boost
          command: |
            scripts/travis-emscripten/install_deps.sh
      - run:
          name: Build
          command: |
            scripts/travis-emscripten/build_emscripten.sh
      - save_cache:
          name: Save Boost build
          key: *boost-cache-key
          paths:
            - boost_1_57_0
      - store_artifacts:
          path: build/libsolc/soljson.js
          destination: soljson.js
      - run: mkdir -p workspace
      - run: cp build/libsolc/soljson.js workspace/soljson.js
      - run: scripts/get_version.sh > workspace/version.txt
      - persist_to_workspace:
          root: workspace
          paths:
            - soljson.js
            - version.txt
  test_emscripten_solcjs:
    docker:
      - image: trzeci/emscripten:sdk-tag-1.37.21-64bit
    environment:
      TERM: xterm
    steps:
      - checkout
      - attach_workspace:
          at: /tmp/workspace
      - run:
          name: Install external tests deps
          command: |
            apt-get -qq update
            apt-get -qy install netcat curl
            curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | NVM_DIR=/usr/local/nvm bash
            export NVM_DIR="/usr/local/nvm"
            [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
            nvm --version
            nvm install 8
            node --version
            npm --version
      - run:
          name: Test solcjs
          command: |
            . /usr/local/nvm/nvm.sh
            test/solcjsTests.sh /tmp/workspace/soljson.js $(cat /tmp/workspace/version.txt)
  test_emscripten_external:
    docker:
      - image: trzeci/emscripten:sdk-tag-1.37.21-64bit
    environment:
      TERM: xterm
    steps:
      - checkout
      - attach_workspace:
          at: /tmp/workspace
      - run:
          name: Install external tests deps
          command: |
            apt-get -qq update
            apt-get -qy install netcat curl
            curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | NVM_DIR=/usr/local/nvm bash
            export NVM_DIR="/usr/local/nvm"
            [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
            nvm --version
            nvm install 8
            node --version
            npm --version
      - run:
          name: External tests
          command: |
            . /usr/local/nvm/nvm.sh
            test/externalTests.sh /tmp/workspace/soljson.js || test/externalTests.sh /tmp/workspace/soljson.js
  build_x86_linux:
    docker:
      - image: buildpack-deps:artful
    environment:
      TERM: xterm
    steps:
      - checkout
      - run:
          name: Install build dependencies
          command: |
            apt-get -qq update
            apt-get -qy install cmake libboost-regex-dev libboost-filesystem-dev libboost-test-dev libboost-system-dev libboost-program-options-dev libz3-dev
            ./scripts/install_obsolete_jsoncpp_1_7_4.sh
      - run: *setup_prerelease_commit_hash
      - run: *run_build
      - store_artifacts: *solc_artifact
      - persist_to_workspace: *all_artifacts

  build_x86_mac:
    macos:
      xcode: "9.0"
    environment:
      TERM: xterm
    steps:
      - checkout
      - run:
          name: Install build dependencies
          command: |
            brew update
            brew upgrade
            brew unlink python
            brew install z3
            brew install boost
            brew install cmake
            brew install wget
            ./scripts/install_obsolete_jsoncpp_1_7_4.sh
      - run: *setup_prerelease_commit_hash
      - run: *run_build
      - store_artifacts: *solc_artifact
      - persist_to_workspace: *all_artifacts

  test_x86_linux:
    docker:
      - image: buildpack-deps:artful
    environment:
      TERM: xterm
    steps:
      - checkout
      - attach_workspace:
          at: build
      - run:
          name: Install dependencies
          command: |
            apt-get -qq update
            apt-get -qy install libz3-dev libleveldb1v5
      - run: mkdir -p test_results
      - run: *run_tests
      - store_test_results:
          path: test_results/

  test_x86_mac:
    macos:
      xcode: "9.0"
    environment:
      TERM: xterm
    steps:
      - checkout
      - attach_workspace:
          at: build
      - run:
          name: Install dependencies
          command: |
            brew update
            brew upgrade
            brew unlink python
            brew install z3
      - run: mkdir -p test_results
      - run: *run_tests
      - store_test_results:
          path: test_results/

  docs:
    docker:
      - image: buildpack-deps:artful
    steps:
      - checkout
      - run:
          name: Install build dependencies
          command: |
            apt-get -qq update
            apt-get -qy install python-sphinx python-pip
      - run: *setup_prerelease_commit_hash
      - run:
          name: Build documentation
          command: ./scripts/docs.sh
      - store_artifacts:
          path: docs/_build/html/
          destination: docs-html

workflows:
  version: 2
  build_all:
    jobs:
      - build_emscripten: *build_on_tags
      - test_emscripten_solcjs:
          <<: *build_on_tags
          requires:
            - build_emscripten
      - test_emscripten_external:
          <<: *build_on_tags
          requires:
            - build_emscripten
      - build_x86_linux: *build_on_tags
      - build_x86_mac: *build_on_tags
      - test_x86_linux:
          <<: *build_on_tags
          requires:
            - build_x86_linux
      - test_x86_mac:
          <<: *build_on_tags
          requires:
            - build_x86_mac
      - docs: *build_on_tags