clang for travis (#1846)
* build clang and gcc based ci docker containers split deployment out to a separate stage * build image and typo * revert to default clang for 16.04 * use clang 3.9 * symlink * whitespace change
This commit is contained in:
parent
6a6190de57
commit
d51acc18b2
4 changed files with 101 additions and 60 deletions
66
.travis.yml
66
.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
|
||||
|
|
|
@ -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
|
28
docker/ci/Dockerfile-clang
Normal file
28
docker/ci/Dockerfile-clang
Normal file
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue