mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
a116f04cca
They are not "undefined". UBSAN reports them because it thinks they are "often unintentional". We see the report rather annoying.
464 lines
12 KiB
YAML
464 lines
12 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
|
|
|
|
dist: xenial
|
|
|
|
osx_image: xcode10.1
|
|
|
|
git:
|
|
quiet: true
|
|
|
|
addons:
|
|
apt:
|
|
config:
|
|
retries: true
|
|
update: true
|
|
sources:
|
|
- ubuntu-toolchain-r-test
|
|
packages:
|
|
- gcc-8
|
|
- libffi-dev
|
|
- libgdbm-dev
|
|
- libgmp-dev
|
|
- libjemalloc-dev
|
|
- libncurses5-dev
|
|
- libncursesw5-dev
|
|
- libreadline6-dev
|
|
- libssl-dev
|
|
- libyaml-dev
|
|
- openssl
|
|
- valgrind
|
|
- zlib1g-dev
|
|
homebrew:
|
|
packages:
|
|
- gdbm
|
|
- gmp
|
|
- libffi
|
|
- openssl@1.1
|
|
- zlib
|
|
- ccache
|
|
|
|
cache:
|
|
ccache: true
|
|
directories:
|
|
- $HOME/config_2nd
|
|
- $HOME/.downloaded-cache
|
|
|
|
env:
|
|
global:
|
|
- CONFIGURE_TTY=no
|
|
- CCACHE_COMPILERCHECK=none
|
|
- CCACHE_NOCOMPRESS=1
|
|
- CCACHE_MAXSIZE=512Mi
|
|
- >-
|
|
NPROC="`case ${TRAVIS_OS_NAME} in
|
|
osx) sysctl -n hw.activecpu ;;
|
|
linux) nproc ;;
|
|
esac`"
|
|
# JOBS and SETARCH are overridden when necessary; see below.
|
|
- JOBS=-j$((1+${NPROC}))
|
|
- SETARCH=
|
|
- RUBY_PREFIX=/tmp/ruby-prefix
|
|
- GEMS_FOR_TEST='timezone tzinfo'
|
|
|
|
.org.ruby-lang.ci.matrix-definitions:
|
|
|
|
- &cron-only
|
|
if: (type = cron) AND (branch = trunk) AND (fork = false)
|
|
|
|
- &make-test-only
|
|
script:
|
|
- $SETARCH make -s test TESTOPTS="${TESTOPTS=$JOBS -q --tty=no}"
|
|
|
|
- &linux
|
|
os: linux
|
|
compiler: gcc-8
|
|
|
|
- &osx
|
|
os: osx
|
|
compiler: clang
|
|
before_install:
|
|
- /usr/local/opt/openssl@1.1/bin/openssl version
|
|
|
|
- &clang-8
|
|
compiler: clang-8
|
|
addons:
|
|
apt:
|
|
config:
|
|
retries: true
|
|
update: true
|
|
sources:
|
|
- llvm-toolchain-xenial-8
|
|
packages:
|
|
- 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
|
|
<<: *linux
|
|
|
|
- &jemalloc
|
|
name: --with-jemalloc
|
|
<<: *linux
|
|
<<: *cron-only
|
|
env:
|
|
- CONFIG_FLAG='--with-gmp --with-jemalloc --with-valgrind'
|
|
|
|
- &assertions
|
|
name: RUBY_DEBUG=1
|
|
<<: *linux
|
|
#<<: *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
|
|
<<: *linux
|
|
<<: *cron-only
|
|
<<: *make-test-only
|
|
env:
|
|
- GEMS_FOR_TEST=
|
|
- cppflags=-DVM_CHECK_MODE=0x0003
|
|
|
|
- &FIBER_USE_sjlj
|
|
name: FIBER_USE_NATIVE=0
|
|
<<: *linux
|
|
<<: *cron-only
|
|
env:
|
|
- cppflags=-DFIBER_USE_NATIVE=0
|
|
|
|
- &TOKEN_THREADED_CODE
|
|
name: TOKEN_THREADED_CODE
|
|
<<: *linux
|
|
<<: *cron-only
|
|
<<: *make-test-only
|
|
env:
|
|
- GEMS_FOR_TEST=
|
|
- cppflags=-DOPT_THREADED_CODE=1
|
|
|
|
- &CALL_THREADED_CODE
|
|
name: CALL_THREADED_CODE
|
|
<<: *linux
|
|
<<: *cron-only
|
|
<<: *make-test-only
|
|
env:
|
|
- GEMS_FOR_TEST=
|
|
- cppflags=-DOPT_THREADED_CODE=2
|
|
|
|
- &NO_THREADED_CODE
|
|
name: NO_THREADED_CODE
|
|
<<: *linux
|
|
<<: *cron-only
|
|
<<: *make-test-only
|
|
env:
|
|
- GEMS_FOR_TEST=
|
|
- cppflags=-DOPT_THREADED_CODE=3
|
|
|
|
- &ASAN
|
|
name: -fsanitize=address
|
|
<<: *linux
|
|
#<<: *cron-only
|
|
<<: *make-test-only
|
|
<<: *clang-8
|
|
env:
|
|
- GEMS_FOR_TEST=
|
|
- ASAN_OPTIONS=detect_leaks=0
|
|
- cflags='-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
|
|
<<: *linux
|
|
#<<: *cron-only
|
|
<<: *make-test-only
|
|
<<: *clang-8
|
|
env:
|
|
- GEMS_FOR_TEST=
|
|
- cflags='-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
|
|
<<: *linux
|
|
#<<: *cron-only
|
|
<<: *make-test-only
|
|
<<: *clang-8
|
|
env:
|
|
- GEMS_FOR_TEST=
|
|
- cflags='-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
|
|
<<: *linux
|
|
env:
|
|
- GCC_FLAGS=-m32
|
|
- debugflags=-g0
|
|
- SETARCH='setarch i686 --verbose --3gb'
|
|
addons:
|
|
apt:
|
|
config:
|
|
retries: true
|
|
update: true
|
|
sources:
|
|
- ubuntu-toolchain-r-test
|
|
packages:
|
|
- gcc-8-multilib
|
|
- 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
|
|
|
|
- &pedanticism
|
|
name: -std=c99 -pedantic
|
|
<<: *linux
|
|
<<: *make-test-only
|
|
compiler: clang
|
|
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
|
|
|
|
- &rubyspec
|
|
name: ruby/spec on Ruby 2.4 # to ensure version guards are correctly added
|
|
<<: *linux
|
|
language: ruby
|
|
rvm: 2.4.6
|
|
addons:
|
|
apt:
|
|
packages:
|
|
before_install:
|
|
install:
|
|
before_script: chmod -R u+w spec/ruby
|
|
# -j randomly hangs. Using -fs to make sure we can know problematic spec on failure.
|
|
script: ruby -C spec/ruby ../mspec/bin/mspec -fs .
|
|
|
|
- &x86_64-darwin17
|
|
name: x86_64-darwin17
|
|
<<: *osx
|
|
env:
|
|
- CONFIG_FLAG=--with-opt-dir=/usr/local/opt/openssl@1.1:/usr/local/opt/zlib
|
|
- TEST_ALL_OPTS="--tty=no --excludes=\$(TESTSDIR)/excludes/_travis/osx --exclude test_gc_compact"
|
|
- TEST_ALL_ISOLATED_TESTS="../test/ruby/test_gc_compact.rb"
|
|
# Disabling -j3 because it seems to cause a hang on building Ruby: https://travis-ci.org/ruby/ruby/jobs/471021727
|
|
- JOBS=
|
|
|
|
- &universal-darwin17
|
|
name: uinversal.x86_64h-darwin17
|
|
<<: *osx
|
|
<<: *cron-only
|
|
<<: *make-test-only
|
|
env:
|
|
- GEMS_FOR_TEST=
|
|
- CONFIG_FLAG=--with-arch=x86_64h,x86_64,i386
|
|
- TEST_ALL_OPTS="$JOBS -q --tty=no --excludes=\$(TESTSDIR)/excludes/_travis/osx"
|
|
|
|
matrix:
|
|
include:
|
|
# to reduce time for finishing all jobs, run the slowest osx build first.
|
|
- <<: *x86_64-darwin17
|
|
- <<: *x86_64-linux
|
|
- <<: *i686-linux
|
|
- <<: *jemalloc
|
|
- <<: *pedanticism
|
|
- <<: *ASAN
|
|
- <<: *MSAN
|
|
- <<: *UBSAN
|
|
- <<: *assertions
|
|
- <<: *VM_CHECK_MODE
|
|
- <<: *FIBER_USE_sjlj
|
|
- <<: *TOKEN_THREADED_CODE
|
|
- <<: *CALL_THREADED_CODE
|
|
- <<: *NO_THREADED_CODE
|
|
- <<: *rubyspec
|
|
allow_failures:
|
|
- name: uinversal.x86_64h-darwin17
|
|
- name: -fsanitize=address
|
|
- name: -fsanitize=memory
|
|
- name: -fsanitize=undefined
|
|
fast_finish: true
|
|
|
|
before_script:
|
|
- date # Debugging "Permission defined" failure on darwin like https://travis-ci.org/ruby/ruby/jobs/508683759
|
|
- echo JOBS=${JOBS} SETARCH=${SETARCH}
|
|
- $SETARCH uname -a
|
|
- $SETARCH uname -r
|
|
- rm -fr .ext autom4te.cache
|
|
- echo $TERM
|
|
- |-
|
|
[ -d ~/.downloaded-cache ] ||
|
|
mkdir ~/.downloaded-cache
|
|
- ln -s ~/.downloaded-cache
|
|
- "> config.status"
|
|
- "> .rbconfig.time"
|
|
- sed -f tool/prereq.status Makefile.in common.mk > Makefile
|
|
- make -s $JOBS update-download
|
|
- 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
|
|
- ccache --show-stats
|
|
- |-
|
|
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
|
|
- |-
|
|
date; : # Debugging "Permission defined" failure on darwin like https://travis-ci.org/ruby/ruby/jobs/508683759
|
|
if ! make install; then
|
|
if [ "$(uname)" = Darwin ]; then
|
|
# Debugging "Permission defined" failure on darwin like https://travis-ci.org/ruby/ruby/jobs/508683759
|
|
set -x
|
|
date
|
|
./miniruby -e 'ARGV.map{[@1,File.stat(@1)]}.sort_by{@2.mtime}.each{p mtime:@2.mtime.to_f, ctime:@2.ctime.to_f, path:@1}' .ext/.timestamp/.RUBYCOMMONDIR*time .ext/common/bigdecimal/*.rb ../ext/bigdecimal/lib/bigdecimal/*.rb . .. .ext .ext/common .ext/common/bigdecimal ext/bigdecimal ../ext ../ext/bigdecimal ../ext/bigdecimal/lib ../ext/bigdecimal/lib/bigdecimal
|
|
fi
|
|
exit 1
|
|
fi
|
|
- ccache --show-stats
|
|
- |-
|
|
[ -z "${GEMS_FOR_TEST}" ] ||
|
|
$RUBY_PREFIX/bin/gem install --no-document $GEMS_FOR_TEST
|
|
|
|
script:
|
|
- $SETARCH make -s test TESTOPTS="${TESTOPTS=$JOBS -q --tty=no}"
|
|
- travis_wait 40 $SETARCH make -s test-all -o exts TESTOPTS="${TEST_ALL_OPTS=$TESTOPTS}" RUBYOPT="-w"
|
|
- |-
|
|
if [ -n "${TEST_ALL_ISOLATED_TESTS}" ]; then
|
|
$SETARCH make -s test-all -o exts TESTS="$TEST_ALL_ISOLATED_TESTS" RUBYOPT="-w"
|
|
fi
|
|
- $SETARCH make -s test-spec MSPECOPT=-ff # not using `-j` because sometimes `mspec -j` silently dies
|
|
|
|
# Branch matrix. Not all branches are Travis-ready so we limit branches here.
|
|
branches:
|
|
only:
|
|
- trunk
|
|
- ruby_2_4
|
|
- ruby_2_5
|
|
- ruby_2_6
|
|
- /^feature\//
|
|
- /^bug\//
|
|
- /^travis-/
|
|
|
|
# We want to be notified when something happens.
|
|
notifications:
|
|
irc:
|
|
channels:
|
|
- "chat.freenode.net#ruby-core"
|
|
- "chat.freenode.net#ruby-ja"
|
|
on_success: change # [always|never|change] # default: always
|
|
on_failure: always # [always|never|change] # default: always
|
|
template:
|
|
- "%{message} by @%{author}: See %{build_url}"
|
|
|
|
slack:
|
|
rooms:
|
|
- secure: i1GLETSKye85ea6dGNA3MxI/5myChmMFiZtBd5C69xK+s1sBFqEgOSbaSf9KHc0CYrHVyNhQMaZRruieV7xS+6Pfs0Zvxf1DO6QQTWC2KhkqwFDLvZncAzjoyASdR90hbr+iRPOngQ+HJuE94zemALAwEqNAinzA74PMiJXktqY= # ruby:<token>#commits
|
|
- secure: ah7UEHBvncXT7bM5mvYIQAO+tIyV/wl7nXLb7wQD16dO2v8Gragy0mWjB79Q09hrrMGmp6H9bCDpdGS80boIA5EHaHoG4QaP0i9bsSt8U2AMWgZtfyIgQKJ4H2kXkGlrjO+AXTgnIkP7LNjdgAVUUTGQPb26T3QmoN2Splt+fIQ= # ruby:<token>#alerts
|
|
on_pull_requests: false
|
|
on_success: change
|
|
on_failure: always
|
|
|
|
email:
|
|
- ko1c-failure@atdot.net
|