mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			469 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			469 lines
		
	
	
	
		
			13 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'
 | 
						|
    - UPDATE_UNICODE="UNICODE_FILES=. UNICODE_PROPERTY_FILES=. UNICODE_AUXILIARY_FILES=. UNICODE_EMOJI_FILES=."
 | 
						|
 | 
						|
.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}"
 | 
						|
 | 
						|
  - &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='-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
 | 
						|
    <<: *linux
 | 
						|
    #<<: *cron-only
 | 
						|
    <<: *make-test-only
 | 
						|
    <<: *clang-8
 | 
						|
    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
 | 
						|
    <<: *linux
 | 
						|
    #<<: *cron-only
 | 
						|
    <<: *make-test-only
 | 
						|
    <<: *clang-8
 | 
						|
    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
 | 
						|
    <<: *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.
 | 
						|
    script: ruby -C spec/ruby ../mspec/bin/mspec .
 | 
						|
 | 
						|
  - &baseruby
 | 
						|
    name: "BASERUBY: Ruby 1.9.3"
 | 
						|
    <<: *linux
 | 
						|
    <<: *make-test-only
 | 
						|
    dist: trusty # xenial no longer has ruby-1.9.3
 | 
						|
    language: ruby
 | 
						|
    rvm: 1.9.3
 | 
						|
 | 
						|
  - &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=
 | 
						|
 | 
						|
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
 | 
						|
    - <<: *baseruby
 | 
						|
    - <<: *rubyspec
 | 
						|
  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
 | 
						|
  - 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
 | 
						|
  - 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
 | 
						|
 | 
						|
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
 | 
						|
  - $SETARCH make -s leaked-globals
 | 
						|
 | 
						|
# Branch matrix.  Not all branches are Travis-ready so we limit branches here.
 | 
						|
branches:
 | 
						|
  only:
 | 
						|
    # Because default branch is still "trunk", we build only "trunk" to avoid
 | 
						|
    # doubly building on master and trigger CI on Pull Request.
 | 
						|
    - trunk # TODO: s/master/trunk/ when the default branch is switched to master on 7/1.
 | 
						|
    - 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
 |