# -*- 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 os: linux dist: xenial git: quiet: true cache: ccache: true directories: - $HOME/config_2nd - $HOME/.downloaded-cache env: global: # Reset timestamps early - _=$(touch NEWS && find . -type f -exec touch -r NEWS {} +) - CONFIGURE_TTY=no - CCACHE_COMPILERCHECK=none - CCACHE_NOCOMPRESS=1 - CCACHE_MAXSIZE=512Mi - NPROC="`nproc`" # 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=." - BEFORE_INSTALL=true # https://github.com/travis-ci/travis-build/blob/e411371dda21430a60f61b8f3f57943d2fe4d344/lib/travis/build/bash/travis_apt_get_options.bash#L7 - travis_apt_get_options='--allow-downgrades --allow-remove-essential --allow-change-held-packages' - travis_apt_get_options="-yq --no-install-suggests --no-install-recommends $travis_apt_get_options" .org.ruby-lang.ci.matrix-definitions: - &make-test-only script: - $SETARCH make -s test TESTOPTS="${TESTOPTS=$JOBS -q --tty=no}" - &gcc-8 compiler: gcc-8 # # Not using addon to control retries # addons: # apt: # sources: # - ubuntu-toolchain-r-test before_install: - bash -cx "${BEFORE_INSTALL}" - tool/travis_retry.sh sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" - tool/travis_retry.sh sudo bash -c "rm -rf '${TRAVIS_ROOT}/var/lib/apt/lists/'* && exec apt-get update -yq" - >- tool/travis_retry.sh sudo -E apt-get $travis_apt_get_options install ccache gcc-8 g++-8 libffi-dev libgdbm-dev libncurses5-dev libncursesw5-dev libreadline6-dev libssl-dev libyaml-dev openssl zlib1g-dev - &clang-8 compiler: clang-8 addons: apt: # Not doing this manually unlike other sources, because it has been stable. sources: - llvm-toolchain-xenial-8 config: retries: true before_install: - tool/travis_retry.sh sudo bash -c "rm -rf '${TRAVIS_ROOT}/var/lib/apt/lists/'* && exec apt-get update -yq" - >- tool/travis_retry.sh sudo -E apt-get $travis_apt_get_options install clang-8 llvm-8-tools libffi-dev libgdbm-dev libncurses5-dev libncursesw5-dev libreadline6-dev libssl-dev libyaml-dev openssl zlib1g-dev # -------- - &x86_64-linux name: x86_64-linux <<: *gcc-8 - &arm64-linux name: arm64-linux arch: arm64 <<: *gcc-8 - &s390x-linux name: s390x-linux arch: s390x <<: *gcc-8 - &i686-linux name: i686-linux compiler: gcc-8 env: - GCC_FLAGS=-m32 - CXX='g++-8 -m32' - debugflags=-g0 - SETARCH='setarch i686 --verbose --3gb' # # Not using addon to control retries # addons: # apt: # sources: # - ubuntu-toolchain-r-test before_install: - tool/travis_retry.sh sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" - tool/travis_retry.sh sudo bash -c "rm -rf '${TRAVIS_ROOT}/var/lib/apt/lists/'* && exec apt-get update -yq" - >- tool/travis_retry.sh sudo -E apt-get $travis_apt_get_options install gcc-8-multilib g++-8 g++-8-multilib libstdc++-8-dev:i386 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 - &arm32-linux name: arm32-linux arch: arm64 # https://packages.ubuntu.com/xenial/crossbuild-essential-armhf compiler: arm-linux-gnueabihf-gcc env: - debugflags=-g0 - SETARCH='setarch linux32 --verbose --32bit' before_install: - sudo dpkg --add-architecture armhf - tool/travis_retry.sh sudo bash -c "rm -rf '${TRAVIS_ROOT}/var/lib/apt/lists/'* && exec apt-get update -yq" - >- tool/travis_retry.sh sudo -E apt-get $travis_apt_get_options install ccache crossbuild-essential-armhf libc6:armhf libstdc++-5-dev:armhf libffi-dev:armhf libffi6:armhf libgdbm-dev:armhf libgdbm3:armhf libncurses5-dev:armhf libncurses5:armhf libncursesw5-dev:armhf libreadline6-dev:armhf libreadline6:armhf libssl-dev:armhf libssl1.0.0:armhf linux-libc-dev:armhf zlib1g-dev:armhf zlib1g:armhf matrix: include: # Build every commit: - <<: *i686-linux # Build every commit (Allowed Failures): - <<: *arm32-linux - <<: *arm64-linux - <<: *s390x-linux allow_failures: - name: arm32-linux - name: arm64-linux - name: s390x-linux fast_finish: true before_script: - rm -fr .ext autom4te.cache - |- [ -d ~/.downloaded-cache ] || mkdir ~/.downloaded-cache - ln -s ~/.downloaded-cache - "> config.status" - "> .rbconfig.time" - sed -f tool/prereq.status template/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 - |- 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 - make -s install - |- [ -z "${GEMS_FOR_TEST}" ] || $RUBY_PREFIX/bin/gem install --no-document $GEMS_FOR_TEST - echo "raise 'do not load ~/.irbrc in test'" > ~/.irbrc script: - $SETARCH make -s test -o showflags TESTOPTS="${TESTOPTS=$JOBS -q --tty=no}" - travis_wait 50 $SETARCH make -s test-all -o exts TESTOPTS="${TESTOPTS} ${TEST_ALL_OPTS}" RUBYOPT="-w" - $SETARCH make -s test-spec MSPECOPT=-ff # not using `-j` because sometimes `mspec -j` silently dies - $SETARCH make -s -o showflags leaked-globals # 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 - ruby_2_7 # We want to be notified when something happens. notifications: irc: channels: - "chat.freenode.net#ruby-core" on_success: change # [always|never|change] # default: always on_failure: always # [always|never|change] # default: always template: - "%{message} by @%{author}: See %{build_url}" webhooks: urls: - secure: mRsoS/UbqDkKkW5p3AEqM27d4SZnV6Gsylo3bm8T/deltQzTsGzZwrm7OIBXZv0UFZdE68XmPlyHfZFLSP2V9QZ7apXMf9/vw0GtcSe1gchtnjpAPF6lYBn7nMCbVPPx9cS0dwL927fjdRM1vj7IKZ2bk4F0lAJ25R25S6teqdk= # ruby-lang slack: ruby/simpler-alerts-bot (travis) on_success: never on_failure: always email: - ko1c-failure@atdot.net