mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
f72bec2cea
It has caused errors by ENOSPC like https://travis-ci.org/github/ruby/ruby/jobs/682520961 too often. I cleared all cache of Travis yesterday, but it didn't help it. Until somebody figures out how to fix it, let me exclude it from CI status reports to avoid false alerts.
541 lines
15 KiB
YAML
541 lines
15 KiB
YAML
# -*- 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:
|
|
|
|
- &cron-only
|
|
if: (type = cron) AND (branch = master) AND (fork = false)
|
|
|
|
- &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
|
|
libgmp-dev
|
|
libjemalloc-dev
|
|
libncurses5-dev
|
|
libncursesw5-dev
|
|
libreadline6-dev
|
|
libssl-dev
|
|
libyaml-dev
|
|
openssl
|
|
valgrind
|
|
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
|
|
libgmp-dev
|
|
libjemalloc-dev
|
|
libncurses5-dev
|
|
libncursesw5-dev
|
|
libreadline6-dev
|
|
libssl-dev
|
|
libyaml-dev
|
|
openssl
|
|
valgrind
|
|
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
|
|
|
|
- &jemalloc
|
|
name: --with-jemalloc
|
|
<<: *gcc-8
|
|
<<: *cron-only
|
|
env:
|
|
- CONFIG_FLAG='--with-gmp --with-jemalloc --with-valgrind'
|
|
|
|
- &assertions
|
|
name: RUBY_DEBUG=1
|
|
<<: *gcc-8
|
|
#<<: *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-8
|
|
<<: *cron-only
|
|
<<: *make-test-only
|
|
env:
|
|
- GEMS_FOR_TEST=
|
|
- cppflags=-DVM_CHECK_MODE=0x0003
|
|
|
|
- &SUPPORT_JOKE
|
|
name: SUPPORT_JOKE
|
|
<<: *gcc-8
|
|
<<: *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-8
|
|
<<: *cron-only
|
|
<<: *make-test-only
|
|
env:
|
|
- cppflags=-DCPDEBUG
|
|
|
|
- &WITH_COROUTINE_UCONTEXT
|
|
name: COROUTINE=ucontext
|
|
<<: *gcc-8
|
|
<<: *cron-only
|
|
env:
|
|
- CONFIG_FLAG='--with-coroutine=ucontext'
|
|
|
|
- &WITH_COROUTINE_COPY
|
|
name: COROUTINE=copy
|
|
<<: *gcc-8
|
|
<<: *cron-only
|
|
env:
|
|
- CONFIG_FLAG='--with-coroutine=copy'
|
|
|
|
- &TOKEN_THREADED_CODE
|
|
name: TOKEN_THREADED_CODE
|
|
<<: *gcc-8
|
|
<<: *cron-only
|
|
<<: *make-test-only
|
|
env:
|
|
- GEMS_FOR_TEST=
|
|
- cppflags=-DOPT_THREADED_CODE=1
|
|
|
|
- &CALL_THREADED_CODE
|
|
name: CALL_THREADED_CODE
|
|
<<: *gcc-8
|
|
<<: *cron-only
|
|
<<: *make-test-only
|
|
env:
|
|
- GEMS_FOR_TEST=
|
|
- cppflags=-DOPT_THREADED_CODE=2
|
|
|
|
- &NO_THREADED_CODE
|
|
name: NO_THREADED_CODE
|
|
<<: *gcc-8
|
|
<<: *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-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
|
|
|
|
- &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-8
|
|
<<: *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:
|
|
- <<: *x86_64-linux
|
|
- <<: *i686-linux
|
|
- <<: *pedanticism
|
|
- <<: *assertions
|
|
- <<: *baseruby
|
|
- <<: *rubyspec25
|
|
- <<: *rubyspec27
|
|
- <<: *dependency
|
|
# Build every commit (Allowed Failures):
|
|
- <<: *arm32-linux
|
|
- <<: *arm64-linux
|
|
- <<: *s390x-linux
|
|
- <<: *ASAN
|
|
- <<: *MSAN
|
|
- <<: *UBSAN
|
|
# Cron only:
|
|
- <<: *jemalloc
|
|
- <<: *VM_CHECK_MODE
|
|
- <<: *SUPPORT_JOKE
|
|
- <<: *CPDEBUG
|
|
- <<: *WITH_COROUTINE_UCONTEXT
|
|
- <<: *WITH_COROUTINE_COPY
|
|
- <<: *TOKEN_THREADED_CODE
|
|
- <<: *CALL_THREADED_CODE
|
|
- <<: *NO_THREADED_CODE
|
|
allow_failures:
|
|
- name: arm32-linux
|
|
- name: arm64-linux
|
|
- name: s390x-linux
|
|
- name: -fsanitize=address
|
|
- name: -fsanitize=memory
|
|
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
|