diff --git a/.travis.yml b/.travis.yml index b6807555..4bcb719f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,50 +1,56 @@ language: cpp -matrix: +stages: + - test + - deploy +jobs: include: - - os: linux + - stage: test + name: "GCC + ONE_TIME_TESTS" + os: linux + compiler: gcc dist: trusty sudo: required env: - ONE_TIME_TESTS=true - - secure: "jYlg5yC8plC4zbV4sCt8BNXEHOgvF4tydJbbUsyPvmWqIKU4rScQOKvN4euDUa1UFc9dz7UxNahGuyEGQAWjG2jmvdgDG97+ImXOZa/kRnCsyJX/3R+k6dQZ/8MN9Ax6FOpXfOoHxHOZLBzE5PBIbaeF+Okcw9ks6eawXZDu2JLckGDxLDWXTz6x+NbZLE2wlm7UI9aladZBsAR/KHlYH3ms+xgZAxcrzZ2p2BFfhHpnplOYcNhivpLn0BP66DZ6/7HtpPYkfXmqTCZZ0HkxzJ2ayZ9PuvbVXL/cHXCxRJCNweRQsPYsdowzv+k/J74X2yN0jNCsSbWU619MXxzBPJGmTq20iSvEYvX0I+uEP1PCocP7PWfvfkjlj5Ts5vPJcpBZeAUgl1yjPxA4NrwRQ7iJni14VrK8dSxjQvubV/zyK2ey2vUU7e8nOpzqw/66UPDQmvDe7byadgHIacSG55ge7zZIeI6AeK1QGh5nRnLWaMMqb0drT7ZaM6BS7iwRTBVBzw2ZjKV67MRRU0O7PY+jsNx8JG58ycXqKvP4hB6tKEV+8YMSdSDl/f06FFZJT96p4sCQmUaVecXokzTyfq7ugFgWuiRRwRqcH/wi3LMLHY7JseHBw9S8bJ98dOFEcoZCUoviwnxNSXOqA3tXGudduQh4KsCDYDUKJNzDtAo=" - services: - - docker addons: apt: packages: - doxygen - - os: osx - -compiler: - - clang + before_install: + - sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart; + - ci/build-docker-image.sh docker/ci/Dockerfile-gcc nanocurrency/nano-ci-gcc; + - name: "clang" + os: linux + compiler: clang + dist: trusty + sudo: required + before_install: + - sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart; + - ci/build-docker-image.sh docker/ci/Dockerfile-clang nanocurrency/nano-ci-clang; + - name: "osx" + os: osx + compiler: clang + before_install: + - brew update && brew install qt5 && brew cask install xquartz && brew install rust; + install: + - brew install ccache; + - export PATH="/usr/local/opt/ccache/libexec:$PATH"; + - stage: deploy + script: + - if [ -n "$DOCKER_PASSWORD" ]; then ci/deploy-docker.sh; fi + env: + - secure: "jYlg5yC8plC4zbV4sCt8BNXEHOgvF4tydJbbUsyPvmWqIKU4rScQOKvN4euDUa1UFc9dz7UxNahGuyEGQAWjG2jmvdgDG97+ImXOZa/kRnCsyJX/3R+k6dQZ/8MN9Ax6FOpXfOoHxHOZLBzE5PBIbaeF+Okcw9ks6eawXZDu2JLckGDxLDWXTz6x+NbZLE2wlm7UI9aladZBsAR/KHlYH3ms+xgZAxcrzZ2p2BFfhHpnplOYcNhivpLn0BP66DZ6/7HtpPYkfXmqTCZZ0HkxzJ2ayZ9PuvbVXL/cHXCxRJCNweRQsPYsdowzv+k/J74X2yN0jNCsSbWU619MXxzBPJGmTq20iSvEYvX0I+uEP1PCocP7PWfvfkjlj5Ts5vPJcpBZeAUgl1yjPxA4NrwRQ7iJni14VrK8dSxjQvubV/zyK2ey2vUU7e8nOpzqw/66UPDQmvDe7byadgHIacSG55ge7zZIeI6AeK1QGh5nRnLWaMMqb0drT7ZaM6BS7iwRTBVBzw2ZjKV67MRRU0O7PY+jsNx8JG58ycXqKvP4hB6tKEV+8YMSdSDl/f06FFZJT96p4sCQmUaVecXokzTyfq7ugFgWuiRRwRqcH/wi3LMLHY7JseHBw9S8bJ98dOFEcoZCUoviwnxNSXOqA3tXGudduQh4KsCDYDUKJNzDtAo=" cache: - ccache: true - directories: - - $HOME/Library/Caches/Homebrew - - $HOME/.cargo - - $TRAVIS_BUILD_DIR/load-tester/target - -before_install: - - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update && brew install qt5 && brew cask install xquartz && brew install rust; fi - - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart; fi - - if [ "$TRAVIS_OS_NAME" = "linux" ]; then ci/build-docker-image.sh docker/ci/Dockerfile nanocurrency/nano-ci; fi - -install: - - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install ccache; fi - - if [ "$TRAVIS_OS_NAME" = "osx" ]; then export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi + - $HOME/Library/Caches/Homebrew + - $HOME/.cargo + - $TRAVIS_BUILD_DIR/load-tester/target script: - if [ -n "$ONE_TIME_TESTS" ]; then ci/check-commit-format.sh; fi - if [ -n "$ONE_TIME_TESTS" ]; then doxygen doxygen.config; fi # TODO also deploy the built HTML - if [ "$TRAVIS_OS_NAME" = "osx" ]; then ci/build-travis.sh "/usr/local/opt/qt5/lib/cmake/Qt5"; fi - - if [ "$TRAVIS_OS_NAME" = "linux" ]; then docker run -v $TRAVIS_BUILD_DIR:/workspace -v $HOME/.ccache:/ccache -v $HOME/.cargo:/cargo nanocurrency/nano-ci /bin/bash -c "apt install ccache; cd /workspace && ASAN=${ASAN} TSAN=${TSAN} CCACHE_DIR=/ccache CARGO_HOME=/cargo ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}"; fi - -deploy: - provider: script - skip_cleanup: true - script: ci/deploy-docker.sh - on: - all_branches: true - condition: -n "$ONE_TIME_TESTS" + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then docker run -v $TRAVIS_BUILD_DIR:/workspace -v $HOME/.ccache:/ccache -v $HOME/.cargo:/cargo nanocurrency/nano-ci-$TRAVIS_COMPILER /bin/bash -c "apt install ccache; cd /workspace && ASAN=${ASAN} TSAN=${TSAN} CCACHE_DIR=/ccache CARGO_HOME=/cargo ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}"; fi diff --git a/ci/deploy-docker.sh b/ci/deploy-docker.sh index bab009f5..68f4e4f4 100755 --- a/ci/deploy-docker.sh +++ b/ci/deploy-docker.sh @@ -3,39 +3,46 @@ set -e scripts="$(dirname "$0")" -echo "$DOCKER_PASSWORD" | docker login -u nanoreleaseteam --password-stdin +if [ -n "$DOCKER_PASSWORD" ]; then + echo "$DOCKER_PASSWORD" | docker login -u nanoreleaseteam --password-stdin -# We push this just so it can be a cache next time -if [ "$TRAVIS_BRANCH" = "master" ]; then - "$scripts"/custom-timeout.sh 30 docker push nanocurrency/nano-ci -fi - -tags=() -if [[ "${TRAVIS_TAG}" =~ 'RC' ]]; then - tags+=("$TRAVIS_TAG" latest-including-rc) -elif [ -n "$TRAVIS_TAG" ]; then - tags+=("$TRAVIS_TAG" latest latest-including-rc) -elif [ -n "$TRAVIS_BRANCH" ]; then - tags+=("$TRAVIS_BRANCH") -fi - -for network in live beta; do - if [ "${network}" = 'live' ]; then - network_tag_suffix='' - else - network_tag_suffix="-${network}" + # We push this just so it can be a cache next time + if [ "$TRAVIS_BRANCH" = "master" ]; then + for compiler in gcc clang; do + ci_image_name="nanocurrency/nano-ci-${compiler}" + ci/build-docker-image.sh docker/ci/Dockerfile-${compiler} nanocurrency/nano-ci-${compiler}; + "$scripts"/custom-timeout.sh 30 docker push "$ci_image_name" + done fi - docker_image_name="nanocurrency/nano${network_tag_suffix}" + tags=() + if [[ "${TRAVIS_TAG}" =~ 'RC' ]]; then + tags+=("$TRAVIS_TAG" latest-including-rc) + elif [ -n "$TRAVIS_TAG" ]; then + tags+=("$TRAVIS_TAG" latest latest-including-rc) + elif [ -n "$TRAVIS_BRANCH" ]; then + tags+=("$TRAVIS_BRANCH") + fi - "$scripts"/custom-timeout.sh 30 docker build --build-arg NETWORK="$network" -f docker/node/Dockerfile -t "$docker_image_name" . - for tag in "${tags[@]}"; do - # Sanitize docker tag - # https://docs.docker.com/engine/reference/commandline/tag/ - tag="$(printf '%s' "$tag" | tr -c '[a-z][A-Z][0-9]_.-' -)" - if [ "$tag" != "latest" ]; then - docker tag "$docker_image_name" "${docker_image_name}:$tag" + for network in live beta; do + if [ "${network}" = 'live' ]; then + network_tag_suffix='' + else + network_tag_suffix="-${network}" fi - "$scripts"/custom-timeout.sh 30 docker push "${docker_image_name}:$tag" + + docker_image_name="nanocurrency/nano${network_tag_suffix}" + + "$scripts"/custom-timeout.sh 30 docker build --build-arg NETWORK="$network" -f docker/node/Dockerfile -t "$docker_image_name" . + for tag in "${tags[@]}"; do + # Sanitize docker tag + # https://docs.docker.com/engine/reference/commandline/tag/ + tag="$(printf '%s' "$tag" | tr -c '[a-z][A-Z][0-9]_.-' -)" + if [ "$tag" != "latest" ]; then + docker tag "$docker_image_name" "${docker_image_name}:$tag" + fi + "$scripts"/custom-timeout.sh 30 docker push "${docker_image_name}:$tag" + done done -done + +fi \ No newline at end of file diff --git a/docker/ci/Dockerfile-clang b/docker/ci/Dockerfile-clang new file mode 100644 index 00000000..83faa714 --- /dev/null +++ b/docker/ci/Dockerfile-clang @@ -0,0 +1,28 @@ +FROM ubuntu:16.04 + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update -qq && apt-get install -yqq \ + cmake wget bzip2 + +RUN apt-get update -qq && apt-get install -yqq \ + qt5-default \ + valgrind \ + xorg xvfb xauth xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic \ + cargo + +RUN apt-get update -qq && apt-get install -yqq \ + clang-3.9 lldb-3.9 + +ENV CXX=/usr/bin/clang++ +ENV CC=/usr/bin/clang +RUN ln -s /usr/bin/clang-3.9 /usr/bin/clang +RUN ln -s /usr/bin/clang++-3.9 /usr/bin/clang++ +RUN update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100 +RUN update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++ 100 +ENV BOOST_ROOT=/usr/local +ADD util/build_prep/bootstrap_boost.sh bootstrap_boost.sh + +RUN ./bootstrap_boost.sh -m -c + +RUN rm bootstrap_boost.sh \ No newline at end of file diff --git a/docker/ci/Dockerfile b/docker/ci/Dockerfile-gcc similarity index 100% rename from docker/ci/Dockerfile rename to docker/ci/Dockerfile-gcc