# -*- 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. # We only manage non-amd64 free pipelines. # https://docs.travis-ci.com/user/billing-overview/ language: c os: linux dist: focal git: quiet: true cache: ccache: true directories: - $HOME/config_2nd - $HOME/.downloaded-cache env: global: # The tests skipped in `make test-all`. - TEST_ALL_SKIPPED_TESTS= # The tests executed separately by `make test-all`. - TEST_ALL_SEPARATED_TESTS= # 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' # 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" # -O1 is faster than -O3 in our tests. - optflags=-O1 # -g0 disables backtraces when SEGV. Do not set that. - debugflags=-ggdb3 .org.ruby-lang.ci.matrix-definitions: - &gcc-10 compiler: gcc-10 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 ccache gcc-10 g++-10 libffi-dev libgdbm-dev libncurses-dev libncursesw5-dev libreadline-dev libssl-dev libyaml-dev openssl zlib1g-dev # -------- - &arm64-linux name: arm64-linux arch: arm64 <<: *gcc-10 - &ppc64le-linux name: ppc64le-linux arch: ppc64le <<: *gcc-10 - &s390x-linux name: s390x-linux arch: s390x <<: *gcc-10 - &arm32-linux name: arm32-linux arch: arm64 # https://packages.ubuntu.com/focal/crossbuild-essential-armhf compiler: arm-linux-gnueabihf-gcc env: - SETARCH='setarch linux32 --verbose --32bit' # The "TestReadline#test_interrupt_in_other_thread" started failing on arm32 # from https://www.travis-ci.com/github/ruby/ruby/jobs/529005145 - TEST_ALL_SKIPPED_TESTS=test_interrupt_in_other_thread 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++-10-dev:armhf libffi-dev:armhf libgdbm-dev:armhf libncurses-dev:armhf libncursesw5-dev:armhf libreadline-dev:armhf libssl-dev:armhf linux-libc-dev:armhf zlib1g-dev:armhf matrix: include: # Build every commit (Allowed Failures): - <<: *arm32-linux # Comment out as the 2nd arm64 pipeline is unstable. # - <<: *arm64-linux - <<: *ppc64le-linux - <<: *s390x-linux allow_failures: # We see multiple errors indicating errors on the Travis environment itself in a short while: # https://app.travis-ci.com/github/ruby/ruby/jobs/544382885 # https://app.travis-ci.com/github/ruby/ruby/jobs/544361370 # It's not a fault of Ruby's arm32 support but just Travis arm32 seems unsable. - name: arm32-linux # - name: arm64-linux # We see "Some worker was crashed." in about 40% of recent ppc64le-linux jobs # e.g. https://app.travis-ci.com/github/ruby/ruby/jobs/530959548 - name: ppc64le-linux # - name: s390x-linux fast_finish: true before_script: - . tool/ci_functions.sh - |- if [ -n "${TEST_ALL_SKIPPED_TESTS}" ]; then TEST_ALL_OPTS="${TEST_ALL_OPTS} $(ci_to_excluded_test_opts "${TEST_ALL_SKIPPED_TESTS}")" if [ -z "${TEST_ALL_SEPARATED_TESTS}" ]; then TEST_ALL_SEPARATED_TESTS="${TEST_ALL_SKIPPED_TESTS}" fi fi - |- if [ -n "${TEST_ALL_SEPARATED_TESTS}" ]; then TEST_ALL_OPTS_SEPARATED="$(ci_to_included_test_opts "${TEST_ALL_SEPARATED_TESTS}")" fi - echo TEST_ALL_OPTS="${TEST_ALL_OPTS}" TEST_ALL_OPTS_SEPARATED="${TEST_ALL_OPTS_SEPARATED}" - 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 -s $JOBS 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}" - ../tool/travis_wait.sh $SETARCH make -s test-all -o exts TESTOPTS="$JOBS -q --tty=no ${TEST_ALL_OPTS}" RUBYOPT="-w" # Run the failing tests separately returning ok status to check if it works, # visualize them. - | if [ -n "${TEST_ALL_OPTS_SEPARATED}" ]; then $SETARCH make -s test-all -o exts TESTOPTS="$JOBS -v --tty=no ${TEST_ALL_OPTS_SEPARATED}" RUBYOPT="-w" || : fi - $SETARCH make -s test-spec MSPECOPT=-ff # not using `-j` because sometimes `mspec -j` silently dies - $SETARCH make -s -o showflags leaked-globals # We enable Travis on the specific branches or forked repositories here. if: (repo = ruby/ruby AND (branch = master OR branch =~ /^ruby_\d_\d$/)) OR repo != ruby/ruby # 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: - jaruga@ruby-lang.org