ruby/.travis.yml

403 строки
10 KiB
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
sudo: false
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"
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="
.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
# --------
- &x86_64-linux
name: x86_64-linux
<<: *linux
- &jemalloc
name: --with-jemalloc
<<: *linux
<<: *cron-only
env:
- "CONFIG_FLAG='--with-gmp --with-jemalloc --with-valgrind'"
- &VM_CHECK_MODE
name: VM_CHECK_MODE=3
<<: *linux
<<: *cron-only
<<: *make-test-only
env:
- "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:
- "cppflags=-DOPT_THREADED_CODE=1"
- &CALL_THREADED_CODE
name: CALL_THREADED_CODE
<<: *linux
<<: *cron-only
<<: *make-test-only
env:
- "cppflags=-DOPT_THREADED_CODE=2"
- &NO_THREADED_CODE
name: NO_THREADED_CODE
<<: *linux
<<: *cron-only
<<: *make-test-only
env:
- "cppflags=-DOPT_THREADED_CODE=3"
- &ASAN
name: -fsanitize=address
<<: *linux
#<<: *cron-only
<<: *make-test-only
compiler: clang
env:
- "ASAN_OPTIONS=detect_leaks=0"
- "cflags='-march=native -fsanitize=address -fno-omit-frame-pointer'"
- "debugflags=-ggdb3"
- "optflags='-O1'"
- "LD=clang"
- "LDFLAGS=-fsanitize=address"
- &MSAN
name: -fsanitize=memory
<<: *linux
#<<: *cron-only
<<: *make-test-only
compiler: clang
env:
- "cflags='-fsanitize=memory'"
- "LD=clang"
- "LDFLAGS=-fsanitize=memory"
- &UBSAN
name: -fsanitize=undefined
<<: *linux
#<<: *cron-only
<<: *make-test-only
compiler: clang
env:
- "cflags='-fsanitize=undefined,integer,nullability -fno-omit-frame-pointer'"
- "cppflags='-DUNALIGNED_WORD_ACCESS=0'"
- "debugflags='-ggdb3'"
- "optflags='-O1 -march=native'"
- "LD=clang"
- "LDFLAGS=-fsanitize=undefined,integer,nullability"
- &i686-linux
name: i686-linux
<<: *linux
sudo: required
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: "-ansi -pedantic"
<<: *linux
<<: *make-test-only
compiler: clang
env:
- "GCC_FLAGS='-ansi -Werror=pedantic -pedantic-errors -std=iso9899:1990'"
- "CONFIG_FLAG="
- "JOBS="
# construct warnflags (using bashism...)
before_install: |
warnflags_array=(
-Wall
-Wextra
-Werror=declaration-after-statement
-Werror=deprecated-declarations
-Werror=division-by-zero
-Werror=extra-tokens
-Werror=implicit-function-declaration
-Werror=implicit-int
-Werror=long-long
-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
)
CONFIG_FLAG_ARRAY=(
warnflags="${warnflags_array[*]}"
LDFLAGS=-Wno-unused-command-line-argument)
- &rubyspec
name: ruby/spec on Ruby 2.3 # to ensure version guards are correctly added
<<: *linux
language: ruby
rvm: 2.3.8
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=\"$JOBS -q --tty=no --excludes=\\$(TESTSDIR)/excludes/_travis/osx\""
- &universal-darwin17
name: uinversal.x86_64h-darwin17
<<: *osx
<<: *cron-only
<<: *make-test-only
env:
- "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
- <<: *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:
- "echo JOBS=${JOBS} SETARCH=${SETARCH}"
- "$SETARCH uname -a"
- "$SETARCH uname -r"
- "rm -fr .ext autom4te.cache"
- "echo $TERM"
- "> config.status"
- "sed -f tool/prereq.status Makefile.in common.mk > Makefile"
- "make update-config_files"
- "make touch-unicode-files"
- "make -s $JOBS srcs UNICODE_FILES=."
- "rm 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*) the_gcc=(ccache $CC ${GCC_FLAGS[@]} -fno-diagnostics-color) ;;
clang*) the_gcc=(ccache $CC ${GCC_FLAGS[@]} -fno-color-diagnostics) ;;
esac
- |-
$SETARCH ../configure -C --disable-install-doc --prefix=/tmp/ruby-prefix --with-gcc="${the_gcc[*]}" $CONFIG_FLAG "${CONFIG_FLAG_ARRAY[@]}"
- "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 -r ~/config_2nd
mv ../config_2nd ~
chmod u-w ..
- "$SETARCH make -s $JOBS && make install"
- "ccache --show-stats"
script:
- "$SETARCH make -s test TESTOPTS=\"${TESTOPTS=$JOBS -q --tty=no}\""
- "$SETARCH make -s test-all -o exts TESTOPTS=\"${TEST_ALL_OPTS=$TESTOPTS}\""
- "$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_3
- ruby_2_4
- ruby_2_5
- /^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
# Local Variables:
# mode: YAML
# coding: utf-8-unix
# indent-tabs-mode: nil
# tab-width: 4
# fill-column: 79
# default-justification: full
# End: