# -*- YAML -*- # Copyright (C) 2011 Urabe, Shyouhei. All rights reserved. # # This file is a part of the programming language Ruby. Permission is hereby # granted, to either redistribute or modify this file, provided that the # conditions mentioned in the file COPYING are met. Consult the file for # details. # This is a Travis-CI build configuration file. The list of configurations # available is located in # # http://about.travis-ci.org/docs/user/build-configuration/ # # and as Ruby itself is a project written in C language, # # http://about.travis-ci.org/docs/user/languages/c/ # # is also a good place to look at. language: c dist: xenial osx_image: xcode10.1 git: quiet: true addons: apt: config: retries: true update: true sources: - ubuntu-toolchain-r-test packages: - gcc-8 - libffi-dev - libgdbm-dev - libgmp-dev - libjemalloc-dev - libncurses5-dev - libncursesw5-dev - libreadline6-dev - libssl-dev - libyaml-dev - openssl - valgrind - zlib1g-dev homebrew: packages: - gdbm - gmp - libffi - openssl@1.1 - zlib - ccache cache: ccache: true directories: - $HOME/config_2nd - $HOME/.downloaded-cache env: global: - CONFIGURE_TTY=no - CCACHE_COMPILERCHECK=none - CCACHE_NOCOMPRESS=1 - CCACHE_MAXSIZE=512Mi - >- NPROC="`case ${TRAVIS_OS_NAME} in osx) sysctl -n hw.activecpu ;; linux) nproc ;; esac`" # JOBS and SETARCH are overridden when necessary; see below. - JOBS=-j$((1+${NPROC})) - SETARCH= - RUBY_PREFIX=/tmp/ruby-prefix - GEMS_FOR_TEST='timezone tzinfo' - UPDATE_UNICODE="UNICODE_FILES=. UNICODE_PROPERTY_FILES=. UNICODE_AUXILIARY_FILES=. UNICODE_EMOJI_FILES=." .org.ruby-lang.ci.matrix-definitions: - &cron-only if: (type = cron) AND (branch = master) AND (fork = false) - &make-test-only script: - $SETARCH make -s test TESTOPTS="${TESTOPTS=$JOBS -q --tty=no}" - &linux os: linux compiler: gcc-8 - &osx os: osx compiler: clang before_install: - /usr/local/opt/openssl@1.1/bin/openssl version - &clang-8 compiler: clang-8 addons: apt: config: retries: true update: true sources: - llvm-toolchain-xenial-8 packages: - clang-8 - llvm-8-tools - libffi-dev - libgdbm-dev - libgmp-dev - libjemalloc-dev - libncurses5-dev - libncursesw5-dev - libreadline6-dev - libssl-dev - libyaml-dev - openssl - valgrind - zlib1g-dev # -------- - &x86_64-linux name: x86_64-linux <<: *linux - &jemalloc name: --with-jemalloc <<: *linux <<: *cron-only env: - CONFIG_FLAG='--with-gmp --with-jemalloc --with-valgrind' - &assertions name: RUBY_DEBUG=1 <<: *linux #<<: *cron-only <<: *make-test-only env: - GEMS_FOR_TEST= - cppflags='-DRUBY_DEBUG -DVM_CHECK_MODE=1 -DTRANSIENT_HEAP_CHECK_MODE -DRGENGC_CHECK_MODE -DENC_DEBUG' - &VM_CHECK_MODE name: VM_CHECK_MODE=3 <<: *linux <<: *cron-only <<: *make-test-only env: - GEMS_FOR_TEST= - cppflags=-DVM_CHECK_MODE=0x0003 - &FIBER_USE_sjlj name: FIBER_USE_NATIVE=0 <<: *linux <<: *cron-only env: - cppflags=-DFIBER_USE_NATIVE=0 - &TOKEN_THREADED_CODE name: TOKEN_THREADED_CODE <<: *linux <<: *cron-only <<: *make-test-only env: - GEMS_FOR_TEST= - cppflags=-DOPT_THREADED_CODE=1 - &CALL_THREADED_CODE name: CALL_THREADED_CODE <<: *linux <<: *cron-only <<: *make-test-only env: - GEMS_FOR_TEST= - cppflags=-DOPT_THREADED_CODE=2 - &NO_THREADED_CODE name: NO_THREADED_CODE <<: *linux <<: *cron-only <<: *make-test-only env: - GEMS_FOR_TEST= - cppflags=-DOPT_THREADED_CODE=3 - &ASAN name: -fsanitize=address <<: *linux #<<: *cron-only <<: *make-test-only <<: *clang-8 env: - GEMS_FOR_TEST= - ASAN_OPTIONS=detect_leaks=0 - cflags='-U_FORTIFY_SOURCE -march=native -fsanitize=address -fno-omit-frame-pointer -fPIC' - debugflags=-ggdb3 - optflags=-O1 - LD=clang-8 - LDFLAGS='-fsanitize=address -fPIC' - CONFIG_FLAG='--with-out-ext=openssl --without-gmp --without-jemalloc --without-valgrind' - &MSAN name: -fsanitize=memory <<: *linux #<<: *cron-only <<: *make-test-only <<: *clang-8 env: - GEMS_FOR_TEST= - cflags='-U_FORTIFY_SOURCE -fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -fPIC' - optflags=-O1 - LD=clang-8 - LDFLAGS='-fsanitize=memory -fPIC' - CONFIG_FLAG='--with-out-ext=openssl --without-gmp --without-jemalloc --without-valgrind' - &UBSAN name: -fsanitize=undefined <<: *linux #<<: *cron-only <<: *make-test-only <<: *clang-8 env: - GEMS_FOR_TEST= - cflags='-U_FORTIFY_SOURCE -fsanitize=undefined,integer,nullability -fno-sanitize=implicit-integer-sign-change,unsigned-integer-overflow' - cppflags=-DUNALIGNED_WORD_ACCESS=0 - debugflags=-ggdb3 - optflags='-O1 -march=native' - LD=clang-8 - LDFLAGS='-fsanitize=undefined,integer,nullability -fno-sanitize=implicit-integer-sign-change,unsigned-integer-overflow' - &i686-linux name: i686-linux <<: *linux env: - GCC_FLAGS=-m32 - debugflags=-g0 - SETARCH='setarch i686 --verbose --3gb' addons: apt: config: retries: true update: true sources: - ubuntu-toolchain-r-test packages: - gcc-8-multilib - libffi-dev:i386 - libffi6:i386 - libgdbm-dev:i386 - libgdbm3:i386 - libncurses5-dev:i386 - libncurses5:i386 - libncursesw5-dev:i386 - libreadline6-dev:i386 - libreadline6:i386 - libssl-dev:i386 - libssl1.0.0:i386 - linux-libc-dev:i386 - zlib1g-dev:i386 - zlib1g:i386 - &pedanticism name: -std=c99 -pedantic <<: *linux <<: *make-test-only compiler: clang env: - GEMS_FOR_TEST= - GCC_FLAGS='-std=c99 -Werror=pedantic -pedantic-errors' - CONFIG_FLAG= - JOBS= - >- warnflags=' -Wall -Wextra -Werror=deprecated-declarations -Werror=division-by-zero -Werror=extra-tokens -Werror=implicit-function-declaration -Werror=implicit-int -Werror=pointer-arith -Werror=shorten-64-to-32 -Werror=write-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-local-typedef -Wno-unused-parameter -Wunused-variable ' - LDFLAGS=-Wno-unused-command-line-argument - &rubyspec name: ruby/spec on Ruby 2.4 # to ensure version guards are correctly added <<: *linux language: ruby rvm: 2.4.6 addons: apt: packages: before_install: install: before_script: chmod -R u+w spec/ruby # -j randomly hangs. script: ruby -C spec/ruby ../mspec/bin/mspec . - &x86_64-darwin17 name: x86_64-darwin17 <<: *osx env: - CONFIG_FLAG=--with-opt-dir=/usr/local/opt/openssl@1.1:/usr/local/opt/zlib - TEST_ALL_OPTS="--tty=no --excludes=\$(TESTSDIR)/excludes/_travis/osx --exclude test_gc_compact" - TEST_ALL_ISOLATED_TESTS="../test/ruby/test_gc_compact.rb" # Disabling -j3 because it seems to cause a hang on building Ruby: https://travis-ci.org/ruby/ruby/jobs/471021727 - JOBS= - &universal-darwin17 name: uinversal.x86_64h-darwin17 <<: *osx <<: *cron-only <<: *make-test-only env: - GEMS_FOR_TEST= - CONFIG_FLAG=--with-arch=x86_64h,x86_64,i386 - TEST_ALL_OPTS="$JOBS -q --tty=no --excludes=\$(TESTSDIR)/excludes/_travis/osx" matrix: include: # to reduce time for finishing all jobs, run the slowest osx build first. - <<: *x86_64-darwin17 - <<: *x86_64-linux - <<: *i686-linux - <<: *jemalloc - <<: *pedanticism - <<: *ASAN - <<: *MSAN - <<: *UBSAN - <<: *assertions - <<: *VM_CHECK_MODE - <<: *FIBER_USE_sjlj - <<: *TOKEN_THREADED_CODE - <<: *CALL_THREADED_CODE - <<: *NO_THREADED_CODE - <<: *rubyspec allow_failures: - name: uinversal.x86_64h-darwin17 - name: -fsanitize=address - name: -fsanitize=memory - name: -fsanitize=undefined fast_finish: true before_script: - date # Debugging "Permission defined" failure on darwin like https://travis-ci.org/ruby/ruby/jobs/508683759 - echo JOBS=${JOBS} SETARCH=${SETARCH} - $SETARCH uname -a - $SETARCH uname -r - rm -fr .ext autom4te.cache - echo $TERM - |- [ -d ~/.downloaded-cache ] || mkdir ~/.downloaded-cache - ln -s ~/.downloaded-cache - "> config.status" - "> .rbconfig.time" - sed -f tool/prereq.status Makefile.in common.mk > Makefile - make touch-unicode-files - make -s $JOBS $UPDATE_UNICODE up - make -s $JOBS srcs - rm -f config.status Makefile rbconfig.rb .rbconfig.time - |- if [ -d ~/config_2nd ]; then cp -pr ~/config_2nd build else mkdir build fi - mkdir config_1st config_2nd - chmod -R a-w . - chmod -R u+w build config_1st config_2nd - cd build - ccache --show-stats - |- case "$CC" in gcc*) CC="ccache $CC${GCC_FLAGS:+ }$GCC_FLAGS -fno-diagnostics-color";; clang*) CC="ccache $CC${GCC_FLAGS:+ }$GCC_FLAGS -fno-color-diagnostics";; esac - |- [ ! -f config.cache ] || [ "$CC" = "`sed -n s/^ac_cv_prog_CC=//p config.cache`" ] || (set -x; exec rm config.cache) - $SETARCH ../configure -C --disable-install-doc --prefix=$RUBY_PREFIX $CONFIG_FLAG - cp -pr config.cache config.status .ext/include ../config_1st - $SETARCH make reconfig - cp -pr config.cache config.status .ext/include ../config_2nd - (cd .. && exec diff -ru config_1st config_2nd) - chmod u+w .. - rm -rf ~/config_2nd - mv ../config_2nd ~ - chmod u-w .. - $SETARCH make -s $JOBS - |- date; : # Debugging "Permission defined" failure on darwin like https://travis-ci.org/ruby/ruby/jobs/508683759 if ! make install; then if [ "$(uname)" = Darwin ]; then # Debugging "Permission defined" failure on darwin like https://travis-ci.org/ruby/ruby/jobs/508683759 set -x date ./miniruby -e 'ARGV.map{[@1,File.stat(@1)]}.sort_by{@2.mtime}.each{p mtime:@2.mtime.to_f, ctime:@2.ctime.to_f, path:@1}' .ext/.timestamp/.RUBYCOMMONDIR*time .ext/common/bigdecimal/*.rb ../ext/bigdecimal/lib/bigdecimal/*.rb . .. .ext .ext/common .ext/common/bigdecimal ext/bigdecimal ../ext ../ext/bigdecimal ../ext/bigdecimal/lib ../ext/bigdecimal/lib/bigdecimal make COPY='cp -f' install else exit 1 fi fi - ccache --show-stats - |- [ -z "${GEMS_FOR_TEST}" ] || $RUBY_PREFIX/bin/gem install --no-document $GEMS_FOR_TEST script: - $SETARCH make -s test TESTOPTS="${TESTOPTS=$JOBS -q --tty=no}" - travis_wait 40 $SETARCH make -s test-all -o exts TESTOPTS="${TEST_ALL_OPTS=$TESTOPTS}" RUBYOPT="-w" - |- if [ -n "${TEST_ALL_ISOLATED_TESTS}" ]; then $SETARCH make -s test-all -o exts TESTS="$TEST_ALL_ISOLATED_TESTS" RUBYOPT="-w" fi - $SETARCH make -s test-spec MSPECOPT=-ff # not using `-j` because sometimes `mspec -j` silently dies # Branch matrix. Not all branches are Travis-ready so we limit branches here. branches: only: - master - ruby_2_4 - ruby_2_5 - ruby_2_6 - /^feature\// - /^bug\// - /^travis-/ # We want to be notified when something happens. notifications: irc: channels: - "chat.freenode.net#ruby-core" - "chat.freenode.net#ruby-ja" on_success: change # [always|never|change] # default: always on_failure: always # [always|never|change] # default: always template: - "%{message} by @%{author}: See %{build_url}" slack: rooms: - secure: i1GLETSKye85ea6dGNA3MxI/5myChmMFiZtBd5C69xK+s1sBFqEgOSbaSf9KHc0CYrHVyNhQMaZRruieV7xS+6Pfs0Zvxf1DO6QQTWC2KhkqwFDLvZncAzjoyASdR90hbr+iRPOngQ+HJuE94zemALAwEqNAinzA74PMiJXktqY= # ruby:#commits - secure: ah7UEHBvncXT7bM5mvYIQAO+tIyV/wl7nXLb7wQD16dO2v8Gragy0mWjB79Q09hrrMGmp6H9bCDpdGS80boIA5EHaHoG4QaP0i9bsSt8U2AMWgZtfyIgQKJ4H2kXkGlrjO+AXTgnIkP7LNjdgAVUUTGQPb26T3QmoN2Splt+fIQ= # ruby:#alerts on_pull_requests: false on_success: change on_failure: always email: - ko1c-failure@atdot.net