summaryrefslogtreecommitdiff
path: root/.travis.yml
diff options
context:
space:
mode:
authorJun Aruga <jaruga@redhat.com>2021-05-25 10:24:45 +0200
committerJun Aruga <junaruga@users.noreply.github.com>2021-05-25 12:38:05 +0200
commit9d4266fd5555c9c4388e2e8592008d0e0d8ccf21 (patch)
tree5a0518f88b3bf09ed4a8c909019c5bec60397b84 /.travis.yml
parent83efb2e47cd5648dfff3d416820003b44f77bb44 (diff)
downloadruby-9d4266fd5555c9c4388e2e8592008d0e0d8ccf21.tar.gz
.travis.yml: Update to use arm64/ppc64le/s390x.
* Use only the free pipelines arm64/ppc64le/s390x without credits on Travis. See <https://docs.travis-ci.com/user/billing-overview/#partner-queue-solution>. * Add ppc64le case. * Update the gcc to gcc-11. * Remove unused logic. * Add the `tool/travis_wait.sh` to avoid a command timeout. * Run the tests skipping some failing tests. * Set `TEST_ALL_SKIPPED_TESTS` env to skip the tests. * Run the tests separately returning ok status. The tests are executed if `TEST_ALL_SKIPPED_TESTS` env is set or `TEST_ALL_SEPARATED_TESTS` env is set. * Add `tool/ci_functions.sh` to manage the functions used in CI. * Add arm64 to allow_failures due to the following issue. An arm64 job sometimes does not start right now. https://travis-ci.community/t/11629
Diffstat (limited to '.travis.yml')
-rw-r--r--.travis.yml388
1 files changed, 61 insertions, 327 deletions
diff --git a/.travis.yml b/.travis.yml
index a4a21b3c08..65271160f8 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,16 +6,8 @@
# 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.
+# We only manage non-amd64 free pipelines.
+# https://docs.travis-ci.com/user/billing-overview/
language: c
@@ -47,29 +39,34 @@ env:
- 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
+ # The tests skipped in `make test-all`.
+ - TEST_ALL_SKIPPED_TESTS=
+ # Run the separated tests with allowing failures.
+ - RUN_SEPARATED_TESTS=true
+ # The tests executed separately by `make test-all`.
+ - TEST_ALL_SEPARATED_TESTS=
# 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:
- - &make-test-only
- script:
- - $SETARCH make -s test TESTOPTS="${TESTOPTS=$JOBS -q --tty=no}"
-
- - &gcc-9
- compiler: gcc-9
+ - &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-9
- g++-9
+ gcc-10
+ g++-10
libffi-dev
libgdbm-dev
- libncurses5-dev
+ libncurses-dev
libncursesw5-dev
libreadline-dev
libssl-dev
@@ -77,215 +74,35 @@ env:
openssl
zlib1g-dev
- - &clang-10
- compiler: clang-10
- addons:
- apt:
- # Not doing this manually unlike other sources, because it has been stable.
- sources:
- - llvm-toolchain-xenial-10
- 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-10
- llvm-10-tools
- libffi-dev
- libgdbm-dev
- libncurses5-dev
- libncursesw5-dev
- libreadline8-dev
- libssl-dev
- libyaml-dev
- openssl
- zlib1g-dev
-
# --------
- - &x86_64-linux
- name: x86_64-linux
- <<: *gcc-9
-
- &arm64-linux
name: arm64-linux
arch: arm64
- <<: *gcc-9
+ <<: *gcc-10
+
+ - &ppc64le-linux
+ name: ppc64le-linux
+ arch: ppc64le
+ <<: *gcc-10
+ env:
+ # FIXME: Skip some failing TestGCCompact tests.
+ # https://bugs.ruby-lang.org/issues/17871
+ - TEST_ALL_SKIPPED_TESTS="test_gc_compact_stats test_complex_hash_keys test_ast_compacts test_compact_count"
+ # The tests crash the process.
+ - RUN_SEPARATED_TESTS=false
- &s390x-linux
name: s390x-linux
arch: s390x
- <<: *gcc-9
-
- - &jemalloc
- name: --with-jemalloc
- <<: *gcc-9
- <<: *cron-only
- env:
- - CONFIG_FLAG='--with-gmp --with-jemalloc --with-valgrind'
-
- - &assertions
- name: RUBY_DEBUG=1
- <<: *gcc-9
- #<<: *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
- <<: *gcc-9
- <<: *cron-only
- <<: *make-test-only
- env:
- - GEMS_FOR_TEST=
- - cppflags=-DVM_CHECK_MODE=0x0003
-
- - &SUPPORT_JOKE
- name: SUPPORT_JOKE
- <<: *gcc-9
- <<: *cron-only
- <<: *make-test-only
- env:
- - BEFORE_INSTALL="sed vm_opts.h -e 's/OPT_SUPPORT_JOKE *0/OPT_SUPPORT_JOKE 1/' -i"
-
- - &CPDEBUG
- name: CPDEBUG
- <<: *gcc-9
- <<: *cron-only
- <<: *make-test-only
- env:
- - cppflags=-DCPDEBUG
-
- - &WITH_COROUTINE_UCONTEXT
- name: COROUTINE=ucontext
- <<: *gcc-9
- <<: *cron-only
- env:
- - CONFIG_FLAG='--with-coroutine=ucontext'
-
- - &WITH_COROUTINE_COPY
- name: COROUTINE=copy
- <<: *gcc-9
- <<: *cron-only
- env:
- - CONFIG_FLAG='--with-coroutine=copy'
-
- - &TOKEN_THREADED_CODE
- name: TOKEN_THREADED_CODE
- <<: *gcc-9
- <<: *cron-only
- <<: *make-test-only
- env:
- - GEMS_FOR_TEST=
- - cppflags=-DOPT_THREADED_CODE=1
-
- - &CALL_THREADED_CODE
- name: CALL_THREADED_CODE
- <<: *gcc-9
- <<: *cron-only
- <<: *make-test-only
- env:
- - GEMS_FOR_TEST=
- - cppflags=-DOPT_THREADED_CODE=2
-
- - &NO_THREADED_CODE
- name: NO_THREADED_CODE
- <<: *gcc-9
- <<: *cron-only
- <<: *make-test-only
- env:
- - GEMS_FOR_TEST=
- - cppflags=-DOPT_THREADED_CODE=3
-
- - &ASAN
- name: -fsanitize=address
- <<: *clang-8
- #<<: *cron-only
- <<: *make-test-only
- 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
- <<: *clang-8
- #<<: *cron-only
- <<: *make-test-only
- 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
- <<: *clang-8
- #<<: *cron-only
- <<: *make-test-only
- 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
- compiler: gcc-9
- 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-9-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
+ <<: *gcc-10
- &arm32-linux
name: arm32-linux
arch: arm64
- # https://packages.ubuntu.com/xenial/crossbuild-essential-armhf
+ # https://packages.ubuntu.com/focal/crossbuild-essential-armhf
compiler: arm-linux-gnueabihf-gcc
env:
- - debugflags=-g0
- SETARCH='setarch linux32 --verbose --32bit'
before_install:
- sudo dpkg --add-architecture armhf
@@ -295,132 +112,46 @@ env:
ccache
crossbuild-essential-armhf
libc6:armhf
- libstdc++-5-dev:armhf
+ libstdc++-10-dev:armhf
libffi-dev:armhf
- libffi6:armhf
libgdbm-dev:armhf
- libgdbm6:armhf
- libncurses5-dev:armhf
- libncurses5:armhf
+ libncurses-dev:armhf
libncursesw5-dev:armhf
- libreadline8-dev:armhf
- libreadline8:armhf
+ libreadline-dev:armhf
libssl-dev:armhf
- libssl1.0.0:armhf
linux-libc-dev:armhf
zlib1g-dev:armhf
- zlib1g:armhf
-
- - &pedanticism
- name: -std=c99 -pedantic
- compiler: clang
- <<: *make-test-only
- 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
-
- - &spec-on-old-ruby
- language: ruby
- before_install:
- install:
- before_script: chmod -R u+w spec/ruby
- # -j randomly hangs.
- script: ruby -C spec/ruby ../mspec/bin/mspec .
-
- - &rubyspec25
- name: Check ruby/spec version guards on Ruby 2.5
- rvm: 2.5.7
- <<: *spec-on-old-ruby
- after_failure:
- - echo "ruby/spec failed on Ruby 2.5. This is likely because of a missing ruby_version_is guard, please add it. See spec/README.md."
-
- - &rubyspec27
- name: Check ruby/spec version guards on Ruby 2.7
- rvm: 2.7.0
- <<: *spec-on-old-ruby
- after_failure:
- - echo "ruby/spec failed on Ruby 2.7. This is likely because of a missing ruby_version_is guard, please add it. See spec/README.md."
-
- - &baseruby
- name: "BASERUBY: Ruby 2.2"
- <<: *gcc-9
- <<: *make-test-only
- language: ruby
- rvm: 2.2
-
- - &dependency
- name: Check dependencies in makefiles
- language: ruby
- before_install:
- install:
- before_script:
- - |-
- ruby -e 'new = []
- Dir.glob("ext/**/extconf.rb") {|ex|
- unless File.exist?(dep = File.dirname(ex)+"/depend")
- puts "Adding "+dep
- File.copy_stream("template/depend.tmpl", dep)
- new << dep
- end
- }
- exec("git", "add", *new) unless new.empty?'
- - git diff --cached
- - "> 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
- - $SETARCH ./configure -C --disable-install-doc --prefix=$RUBY_PREFIX --disable-rubygems 'optflags=-O0' 'debugflags=-save-temps=obj -g'
- - ruby tool/update-deps --fix
- script:
- - git diff --no-ext-diff --ignore-submodules --exit-code
- after_failure:
- - echo "Dependencies need to update"
- env:
- - CONFIG_FLAG=
matrix:
include:
- # Build every commit:
- - <<: *i686-linux
# Build every commit (Allowed Failures):
- <<: *arm32-linux
- <<: *arm64-linux
+ - <<: *ppc64le-linux
- <<: *s390x-linux
allow_failures:
+ # An arm64 job sometimes does not start right now.
+ # https://travis-ci.community/t/11629
- name: arm32-linux
- name: arm64-linux
- - name: s390x-linux
+ # - 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 ] ||
@@ -470,7 +201,13 @@ before_script:
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"
+ - ../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 [ "${RUN_SEPARATED_TESTS}" = true -a -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
@@ -478,10 +215,7 @@ script:
branches:
only:
- master
- - ruby_2_4
- - ruby_2_5
- - ruby_2_6
- - ruby_2_7
+ - /^ruby_\d_\d$/
# We want to be notified when something happens.
notifications:
@@ -500,4 +234,4 @@ notifications:
on_failure: always
email:
- - ko1c-failure@atdot.net
+ - jaruga@ruby-lang.org