diff options
| author | nagachika <nagachika@ruby-lang.org> | 2023-11-18 12:04:57 +0900 |
|---|---|---|
| committer | nagachika <nagachika@ruby-lang.org> | 2023-11-18 12:04:57 +0900 |
| commit | d1ba26a54d9301ea12fbc1b7d0e8223ce507de3b (patch) | |
| tree | 451d409c16698ce085217fe10f243df68f1d973f | |
| parent | 4b16259d1d6f408a88ac2c8d04ed78e87bdeda9f (diff) | |
Revert "merge revision(s) 9682275b5493439334fb3933ce2da3b95271eb1c: [Backport #19999]"
This reverts commit 4b16259d1d6f408a88ac2c8d04ed78e87bdeda9f.
| -rw-r--r-- | .travis.yml | 198 | ||||
| -rw-r--r-- | tool/ci_functions.sh | 29 | ||||
| -rw-r--r-- | version.h | 2 |
3 files changed, 173 insertions, 56 deletions
diff --git a/.travis.yml b/.travis.yml index 6d942d1425..665feba914 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,44 +6,63 @@ # conditions mentioned in the file COPYING are met. Consult the file for # details. -# When you see Travis CI issues, or you are interested in understanding how to -# manage, please check the link below. -# https://github.com/ruby/ruby/wiki/CI-Servers#travis-ci - -# 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 OR commit_message !~ /\[DOC\]/ +# We only manage non-amd64 free pipelines. +# https://docs.travis-ci.com/user/billing-overview/ language: c os: linux -dist: jammy +if: commit_message !~ /\[DOC\]/ + +dist: focal git: quiet: true +cache: + ccache: true + directories: + - $HOME/config_2nd + - $HOME/.downloaded-cache + env: global: - - NPROC="$(nproc)" - - JOBS="-j${NPROC}" - # SETARCH are overridden when necessary. See below. + # 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" - # -g0 disables backtraces when SEGV. Do not set that. + # -O1 is faster than -O3 in our tests. + - optflags=-O1 + # -g0 disables backtraces when SEGV. Do not set that. - debugflags=-ggdb3 - - RUBY_TESTOPTS="$JOBS -q --tty=no" .org.ruby-lang.ci.matrix-definitions: - - &gcc-11 - compiler: gcc-11 + + - &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 - gcc-11 - g++-11 + ccache + gcc-10 + g++-10 libffi-dev libncurses-dev libncursesw5-dev @@ -52,42 +71,40 @@ env: libyaml-dev openssl zlib1g-dev - - gcc-11 --version + + # -------- + - &arm64-linux name: arm64-linux arch: arm64 - <<: *gcc-11 + <<: *gcc-10 + - &ppc64le-linux name: ppc64le-linux arch: ppc64le - <<: *gcc-11 + <<: *gcc-10 + - &s390x-linux name: s390x-linux arch: s390x - <<: *gcc-11 - env: - # Avoid possible test failures with the zlib applying the following patch - # on s390x CPU architecture. - # https://github.com/madler/zlib/pull/410 - - DFLTCC=0 + <<: *gcc-10 + - &arm32-linux name: arm32-linux arch: arm64 - # https://packages.ubuntu.com/jammy/crossbuild-essential-armhf + # https://packages.ubuntu.com/focal/crossbuild-essential-armhf compiler: arm-linux-gnueabihf-gcc env: - SETARCH='setarch linux32 --verbose --32bit' - # Still keep the -O1 for only arm32, while we want to test with the - # default optflags -O3. - # Because bootstraptest/test_ractor.rb fails with segfualt with the - # default -O3. - # https://bugs.ruby-lang.org/issues/19981 - - optflags=-O1 + # 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 @@ -102,46 +119,117 @@ env: matrix: include: - - <<: *arm64-linux + # Build every commit (Allowed Failures): + - <<: *arm32-linux + # Comment out as the 2nd arm64 pipeline is unstable. + # - <<: *arm64-linux - <<: *ppc64le-linux - <<: *s390x-linux - # FIXME: lib/rubygems/util.rb:104 glob_files_in_dir - - # <internal:dir>:411:in glob: File name too long - (Errno::ENAMETOOLONG) - # https://github.com/rubygems/rubygems/issues/7132 - - <<: *arm32-linux allow_failures: - # Allow failures for the unstable jobs. + # 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 - # - name: ppc64le-linux - # - name: s390x-linux - # The 2nd arm64 pipeline may be unstable. - # - name: arm32-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 + # Tentatively disable, because often hungs up **after** all tests + # have finished successfully and saving caches. + - name: s390x-linux fast_finish: true before_script: - - ./autogen.sh - - mkdir build + - . 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 gems/src + - chmod -R a-w . + - chmod -R u+w build config_1st config_2nd gems/src - cd build - - $SETARCH ../configure -C --disable-install-doc --prefix=$(pwd)/install + - |- + 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 $JOBS install - # Useful info to report issues to the Ruby. - - $SETARCH $(pwd)/install/bin/ruby -v - # Useful info To report issues to the RubyGems. - - $SETARCH $(pwd)/install/bin/gem env + - 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 - - ../tool/travis_wait.sh $SETARCH make -s test-all RUBYOPT="-w" - - $SETARCH make -s test-spec + - $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: - # ruby-lang slack: ruby/simpler-alerts-bot (travis) - - secure: mRsoS/UbqDkKkW5p3AEqM27d4SZnV6Gsylo3bm8T/deltQzTsGzZwrm7OIBXZv0UFZdE68XmPlyHfZFLSP2V9QZ7apXMf9/vw0GtcSe1gchtnjpAPF6lYBn7nMCbVPPx9cS0dwL927fjdRM1vj7IKZ2bk4F0lAJ25R25S6teqdk= + - secure: mRsoS/UbqDkKkW5p3AEqM27d4SZnV6Gsylo3bm8T/deltQzTsGzZwrm7OIBXZv0UFZdE68XmPlyHfZFLSP2V9QZ7apXMf9/vw0GtcSe1gchtnjpAPF6lYBn7nMCbVPPx9cS0dwL927fjdRM1vj7IKZ2bk4F0lAJ25R25S6teqdk= # ruby-lang slack: ruby/simpler-alerts-bot (travis) on_success: never on_failure: always + email: - jaruga@ruby-lang.org diff --git a/tool/ci_functions.sh b/tool/ci_functions.sh new file mode 100644 index 0000000000..7066bbe4ec --- /dev/null +++ b/tool/ci_functions.sh @@ -0,0 +1,29 @@ +# -*- BASH -*- +# Manage functions used on a CI. +# Run `. tool/ci_functions.sh` to use it. + +# Create options with patterns `-n !/name1/ -n !/name2/ ..` to exclude the test +# method names by the method names `name1 name2 ..`. +# See `ruby tool/test/runner.rb --help` `-n` option. +function ci_to_excluded_test_opts { + local tests_str="${1}" + # Use the backward matching `!/name$/`, as the perfect matching doesn't work. + # https://bugs.ruby-lang.org/issues/16936 + ruby <<EOF + opts = "${tests_str}".split.map { |test| "-n \!/#{test}\$$/" } + puts opts.join(' ') +EOF + return 0 +} + +# Create options with patterns `-n name1 -n name2 ..` to include the test +# method names by the method names `name1 name2 ..`. +# See `ruby tool/test/runner.rb --help` `-n` option. +function ci_to_included_test_opts { + local tests_str="${1}" + ruby <<EOF + opts = "${tests_str}".split.map { |test| "-n #{test}" } + puts opts.join(' ') +EOF + return 0 +} @@ -11,7 +11,7 @@ # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 2 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 130 +#define RUBY_PATCHLEVEL 129 #include "ruby/version.h" #include "ruby/internal/abi.h" |
