# travis.yml for testing radare2. # Initially written in 2014-2016 # by jn__. Updated 2018 by damo22 # xvilka, pancake, ret2libc in 2020 language: generic dist: trusty conditions: v1 branches: only: - master - /^release-.*$/ - /^prerelease-.*$/ services: - docker os: osx jobs: fast_finish: true include: # emscripten - if: (branch = master AND type = push) OR head_branch =~ ^wasm-* os: linux name: WASM env: EMSCRIPTEN=1 # Linux with GCC on PowerPC - if: (branch = master AND type = push) OR head_branch =~ ^ppc64-* os: linux name: PPC64 arch: ppc64le dist: bionic env: NODOCKER=1 COMPILER_NAME=gcc CXX=g++ CC=gcc CFLAGS="-DR2_ASSERT_STDOUT=1" # Linux with GCC on System Z - if: (branch = master AND type = push) OR head_branch =~ ^s390x-* os: linux name: S390X arch: s390x dist: bionic env: NODOCKER=1 COMPILER_NAME=gcc CXX=g++ CC=gcc CFLAGS="-DR2_ASSERT_STDOUT=1" # Linux with GCC on ARMv8 (64bit) - if: (branch = master AND type = push) OR head_branch =~ ^arm64-* os: linux name: ARM64 arch: arm64 dist: bionic env: NODOCKER=1 COMPILER_NAME=gcc CXX=g++ CC=gcc CFLAGS="-DR2_ASSERT_STDOUT=1" # Building *.deb package - if: (branch = master AND type = push) OR head_branch =~ ^debian-* os: linux name: Debian dist: stretch env: COMPILER_NAME=gcc DEBPKG=1 CC=gcc CFLAGS="-O2 -DR2_ASSERT_STDOUT=1" # Run Fuzzing Sanity Test on every push # XXX its broken it complains about invalid key #- os: linux # env: COMPILER_NAME=clang CXX=clang++ CC=clang R2_TESTS_DISABLE=1 FUZZIT=0 INSTALL_SYSTEM=static CXXFLAGS="-fsanitize=fuzzer" # TODO: move this as new GitHub workflows # ASAN as a best effort on every push - if: (not head_branch =~ ^release-* AND not head_branch =~ ^prerelease-* AND not branch =~ ^release-* AND not branch =~ ^prerelease-*) AND (head_branch =~ ^asan-* OR type = push) os: linux env: COMPILER_NAME=clang CXX=clang++ CC=clang ASAN=1 ASAN_OPTIONS=detect_odr_violation=0 LSAN_OPTIONS=detect_leaks=0 CFLAGS="-DR2_ASSERT_STDOUT=1" # release-only: meson build with system libraries - if: head_branch =~ ^release-* OR head_branch =~ ^prerelease-* OR branch =~ ^release-* OR branch =~ ^prerelease-* os: linux env: COMPILER_NAME=gcc CXX=g++ CC=gcc INSTALL_SYSTEM=meson R2_SYS_MAGIC=true R2_SYS_ZIP=true R2_SYS_LZ4=true R2_SYS_ZLIB=true R2_SYS_OPENSSL=true # release-only: meson build with ASAN and R2_ASSERT_STDOUT - if: head_branch =~ ^release-* OR head_branch =~ ^prerelease-* OR branch =~ ^release-* OR branch =~ ^prerelease-* os: linux env: COMPILER_NAME=clang CXX=clang++ CC=clang CFLAGS="-DR2_ASSERT_STDOUT=1" ASAN=1 ASAN_OPTIONS=detect_odr_violation=0 LSAN_OPTIONS=detect_leaks=0 RELEASE=1 # release-only: nogpl plugins file, just test if it builds - if: head_branch =~ ^release-* OR head_branch =~ ^prerelease-* OR branch =~ ^release-* OR branch =~ ^prerelease-* os: linux env: COMPILER_NAME=gcc CXX=g++ CC=gcc R2_PLUGINS_FILE=nogpl R2_TESTS_DISABLE=1 # release-only: static plugins file, just test if it builds - if: head_branch =~ ^release-* OR head_branch =~ ^prerelease-* OR branch =~ ^release-* OR branch =~ ^prerelease-* os: linux env: COMPILER_NAME=gcc CXX=g++ CC=gcc R2_PLUGINS_FILE=static R2_TESTS_DISABLE=1 # release-only: tiny plugins file, just test if it builds - if: head_branch =~ ^release-* OR head_branch =~ ^prerelease-* OR branch =~ ^release-* OR branch =~ ^prerelease-* os: linux env: COMPILER_NAME=gcc CXX=g++ CC=gcc R2_PLUGINS_FILE=tiny R2_TESTS_DISABLE=1 # release-only: system capstone (capstone3), just test if it builds - if: head_branch =~ ^release-* OR head_branch =~ ^prerelease-* OR branch =~ ^release-* OR branch =~ ^prerelease-* os: linux env: COMPILER_NAME=gcc CXX=g++ CC=gcc INSTALL_SYSTEM=meson R2_SYS_CAPSTONE=true R2_TESTS_DISABLE=1 allow_failures: # Emscripten - os: linux name: WASM env: EMSCRIPTEN=1 # Linux with GCC on PowerPC - os: linux arch: ppc64le env: NODOCKER=1 COMPILER_NAME=gcc CXX=g++ CC=gcc CFLAGS="-DR2_ASSERT_STDOUT=1" # Linux with GCC on System Z - os: linux arch: s390x env: NODOCKER=1 COMPILER_NAME=gcc CXX=g++ CC=gcc CFLAGS="-DR2_ASSERT_STDOUT=1" # Linux with GCC on ARMv8 (64bit) - os: linux arch: arm64 env: NODOCKER=1 COMPILER_NAME=gcc CXX=g++ CC=gcc CFLAGS="-DR2_ASSERT_STDOUT=1" - os: linux env: COMPILER_NAME=clang CXX=clang++ CC=clang ASAN=1 ASAN_OPTIONS=detect_odr_violation=0 LSAN_OPTIONS=detect_leaks=0 CFLAGS="-DR2_ASSERT_STDOUT=1" cache: - ccache addons: homebrew: packages: - libuv - cabextract before_install: - | if [ "${FUZZIT}" == "1" ]; then docker pull gcr.io/fuzzit-public/builders:llvm9.v1 elif [ "$TRAVIS_OS_NAME" != "osx" ] && [ "$NODOCKER" != "1" ]; then docker pull radareorg/r2-travis:latest || docker build -t radareorg/r2-travis:latest -f Dockerfile.travis . fi after_success: - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh - compgen -G "r2js.zip" > /dev/null && bash upload.sh r2js.zip - compgen -G "*.deb" > /dev/null && bash upload.sh *.deb - compgen -G "/tmp/*.pkg" > /dev/null && bash upload.sh /tmp/*.pkg script: - export PR_NAME=$(echo $TRAVIS_PULL_REQUEST_SLUG | cut -d'/' -f1) - | if [ "$TRAVIS_OS_NAME" != "osx" ] && [ "$NODOCKER" != "1" ]; then $SHELL ./travis-extract-var.sh | tee ${TRAVIS_BUILD_DIR}/docker-env.sh fi - | if [ "${FUZZIT}" == "1" ] ; then docker run -v /home/travis/.ccache:/root/.ccache -v "${TRAVIS_BUILD_DIR}":"${TRAVIS_BUILD_DIR}" --entrypoint "/bin/bash" gcr.io/fuzzit-public/builders:llvm9.v1 -c "cd ${TRAVIS_BUILD_DIR}; . docker-env.sh; bash travis-script" elif [ "$TRAVIS_OS_NAME" != "osx" ] && [ "$NODOCKER" != "1" ] ; then docker run -v /home/travis/.ccache:/root/.ccache -v "${TRAVIS_BUILD_DIR}":"${TRAVIS_BUILD_DIR}" --entrypoint "/bin/bash" radareorg/r2-travis:latest -c "cd ${TRAVIS_BUILD_DIR}; . docker-env.sh; bash travis-script" else $SHELL travis-script fi