From 9d4266fd5555c9c4388e2e8592008d0e0d8ccf21 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Tue, 25 May 2021 10:24:45 +0200 Subject: .travis.yml: Update to use arm64/ppc64le/s390x. * Use only the free pipelines arm64/ppc64le/s390x without credits on Travis. See . * 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 --- .travis.yml | 388 ++++++++++-------------------------------------------------- 1 file changed, 61 insertions(+), 327 deletions(-) (limited to '.travis.yml') 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 -- cgit v1.2.1