1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/.travis.yml
Takashi Kokubun 235d810c2e
Deprecate alerting multiple channels
Some CIs report to two channels, and some others report to only one.
This makes it consistent. Only alert channel should be alerted.
2019-08-20 22:33:32 +09:00

536 lines
16 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
git:
quiet: true
cache:
ccache: true
directories:
- $HOME/config_2nd
- $HOME/.downloaded-cache
env:
global:
# Reset timestamps early, before updating Homebrew etc.
- _=$(touch NEWS && find . -type f -exec touch -r NEWS {} +)
- 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'
- UPDATE_UNICODE="UNICODE_FILES=. UNICODE_PROPERTY_FILES=. UNICODE_AUXILIARY_FILES=. UNICODE_EMOJI_FILES=."
# 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}"
- &osx-clang
compiler: clang
before_install:
- gem uninstall ntlm-http plist -x --force
# `brew update` on Travis randomly hangs
- |-
timeout 300 brew update ||
timeout 300 brew update ||
timeout 300 brew update
# Travis homebrew addon is unstable for now. Use `before_install` instead.
# https://travis-ci.community/t/osx-homebrew-addons-module-not-as-reliable-as-claimed/4054
- |-
brew install \
ccache \
gdbm \
gmp \
libffi \
openssl@1.1 \
zlib
- /usr/local/opt/openssl@1.1/bin/openssl version
- &gcc-8
compiler: gcc-8
# # 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 \
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
os: linux
<<: *gcc-8
- &jemalloc
name: --with-jemalloc
os: linux
<<: *gcc-8
<<: *cron-only
env:
- CONFIG_FLAG='--with-gmp --with-jemalloc --with-valgrind'
- &assertions
name: RUBY_DEBUG=1
os: linux
<<: *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
os: linux
<<: *gcc-8
<<: *cron-only
<<: *make-test-only
env:
- GEMS_FOR_TEST=
- cppflags=-DVM_CHECK_MODE=0x0003
- &WITH_COROUTINE_UCONTEXT
name: COROUTINE=ucontext
os: linux
<<: *gcc-8
<<: *cron-only
env:
- CONFIG_FLAG='--with-coroutine=ucontext'
- &WITH_COROUTINE_COPY
name: COROUTINE=copy
os: linux
<<: *gcc-8
<<: *cron-only
env:
- CONFIG_FLAG='--with-coroutine=copy'
- &TOKEN_THREADED_CODE
name: TOKEN_THREADED_CODE
os: linux
<<: *gcc-8
<<: *cron-only
<<: *make-test-only
env:
- GEMS_FOR_TEST=
- cppflags=-DOPT_THREADED_CODE=1
- &CALL_THREADED_CODE
name: CALL_THREADED_CODE
os: linux
<<: *gcc-8
<<: *cron-only
<<: *make-test-only
env:
- GEMS_FOR_TEST=
- cppflags=-DOPT_THREADED_CODE=2
- &NO_THREADED_CODE
name: NO_THREADED_CODE
os: linux
<<: *gcc-8
<<: *cron-only
<<: *make-test-only
env:
- GEMS_FOR_TEST=
- cppflags=-DOPT_THREADED_CODE=3
- &ASAN
name: -fsanitize=address
os: linux
<<: *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
os: linux
<<: *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
os: linux
<<: *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
os: linux
compiler: gcc-8
env:
- GCC_FLAGS=-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 \
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
os: linux
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
- &rubyspec
name: Check ruby/spec version guards on Ruby 2.4
os: linux
language: ruby
rvm: 2.4.6
before_install:
install:
before_script: chmod -R u+w spec/ruby
# -j randomly hangs.
script: ruby -C spec/ruby ../mspec/bin/mspec .
after_failure:
- echo "ruby/spec failed on Ruby 2.4. This is likely because of a missing ruby_version_is guard, please add it. See spec/README.md."
- &baseruby
name: "BASERUBY: Ruby 1.9.3"
os: linux
<<: *gcc-8
<<: *make-test-only
dist: trusty # xenial no longer has ruby-1.9.3
language: ruby
rvm: 1.9.3
- &x86_64-darwin18
name: x86_64-darwin18
osx_image: xcode11
os: osx
<<: *osx-clang
<<: *cron-only
env:
- CONFIG_FLAG=--with-opt-dir=/usr/local/opt/openssl@1.1:/usr/local/opt/zlib
- TEST_ALL_OPTS="--timeout-scale=2.0 --excludes=\$(TESTSDIR)/excludes/_travis/osx"
- &dependency
name: Check dependencies in makefiles
os: linux
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:
# To reduce time for finishing all jobs, running the slowest osx build first.
# Build every commit:
- <<: *x86_64-linux
- <<: *i686-linux
- <<: *pedanticism
- <<: *assertions
- <<: *baseruby
- <<: *rubyspec
- <<: *dependency
# Build every commit (Allowed Failures):
- <<: *ASAN
- <<: *MSAN
- <<: *UBSAN
# Cron only:
- <<: *x86_64-darwin18
- <<: *jemalloc
- <<: *VM_CHECK_MODE
- <<: *WITH_COROUTINE_UCONTEXT
- <<: *WITH_COROUTINE_COPY
- <<: *TOKEN_THREADED_CODE
- <<: *CALL_THREADED_CODE
- <<: *NO_THREADED_CODE
allow_failures:
- 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 template/Makefile.in common.mk > Makefile
- date; make touch-unicode-files
- |-
[ ${TRAVIS_OS_NAME} != osx ] ||
ls -ltT tool/generic_erb.rb template/unicode_norm_gen.tmpl enc/unicode/data/*/ucd/.unicode-tables.time
- date; make -s $JOBS $UPDATE_UNICODE up
- date; 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
make COPY='cp -f' install
else
exit 1
fi
fi
- ccache --show-stats
- |-
[ -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
- /^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: ah7UEHBvncXT7bM5mvYIQAO+tIyV/wl7nXLb7wQD16dO2v8Gragy0mWjB79Q09hrrMGmp6H9bCDpdGS80boIA5EHaHoG4QaP0i9bsSt8U2AMWgZtfyIgQKJ4H2kXkGlrjO+AXTgnIkP7LNjdgAVUUTGQPb26T3QmoN2Splt+fIQ= # ruby:<token>#alerts
on_pull_requests: false
on_success: change
on_failure: always
email:
- ko1c-failure@atdot.net