# vim ft=yaml
# travis-ci.org definition

# NOTE TO MERGERS: Most of the contents in the Travis-CI configuration has been
# tailored for a specific release or MariaDB. As a general rule, do not merge
# changes in this file across MariaDB branches to avoid breaking the CI. Updates
# the the Travis-CI pipeline are most of the time better done manually.

dist: focal

git:
  depth: 2

language: cpp

cache:
  timeout: 500
  apt: true
  ccache: true

addons:
  apt:
    sources: &add-sources
      # Remember to document well what packages each extra repository is used for
      - ubuntu-toolchain-r-test
      # => gcc-9 and gcc-10 for Ubuntu Bionic
      # https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test/+packages?field.name_filter=&field.status_filter=published&field.series_filter=bionic
      - sourceline: 'ppa:maria-captains/travis-ci-helper-repo'
      # => galera-4 for Ubuntu Bionic
      # https://launchpad.net/~maria-captains/+archive/ubuntu/travis-ci-helper-repo/+packages?field.name_filter=&field.status_filter=published&field.series_filter=bionic
    packages: &common-packages
      # Remember to update this list if the Debian build dependencies are updated
      - bison
      - chrpath
      - clang-7  # In suites: focal, bionic-updates
      - clang-10 # In suites: focal, bionic
      - cmake
      - cracklib-runtime
      - galera-4 # In suites: focal, bionic (via ppa:maria-captains/travis-ci-helper-repo)
      - g++-7    # In suites: focal, bionic
      - g++-10   # In suites: focal, bionic (via ppa:ubuntu-toolchain-r/test)
      - gdb
      - libaio-dev
      - libarchive-dev
      - libboost-atomic-dev
      - libboost-chrono-dev
      - libboost-date-time-dev
      - libboost-dev
      - libboost-filesystem-dev
      - libboost-regex-dev
      - libboost-system-dev
      - libboost-thread-dev
      - libcrack2-dev
      - libcurl4-openssl-dev
      - libdbd-mysql
      - libedit-dev
      - libjemalloc-dev
      - libjudy-dev
      - libkrb5-dev
      - liblz4-dev
      - libncurses5-dev
      - libnuma-dev
      - libpam0g-dev
      - libpcre2-dev
      - libpmem-dev
      - libreadline-gplv2-dev
      - libsnappy-dev
      - libssl-dev
      - libxml2-dev
      - lsb-release
      - perl
      - psmisc
      - uuid-dev
      - zlib1g-dev
      # libsystemd-daemon-dev # https://github.com/travis-ci/apt-package-whitelist/issues/3882
  homebrew:
    # OSX builds are not properly maintained on Travis-CI nor buildbot and
    # thus this list of dependencies is likely to be inaccurate.
    packages:
      - bison
      - boost
      - ccache
      - cmake
      - cracklib
      - curl
      - gnutls
      - groonga
      - jemalloc
      - libxml2
      - lz4
      - lzo
      - ncurses
      - openssl@1.1
      - ossp-uuid
      - pcre2
      - perl
      - pkg-config
      - readline
      - snappy
      - xz
      - zlib
      - zstd

## Build jobs matrix
# The jobs matrix consists of all the combinations of 'arch', 'os', 'compiler'
# and 'env'. Ensure there is a good variation of architectures and at least the
# main suite is run on all architectures, as the main test suite needs to pass
# on all architectures (amd64, arm64, ppc64le, s390x) before a release is made.
#
# In gcc and clang use a fairly old version and one very recent and assume that
# if both of them built successfully all the intermediate version work as well.
arch: amd64
os: linux
compiler:
  - gcc
  - clang
env:
  - CC_VERSION=7 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=archive,optimizer_unfixed_bugs,parts,sys_vars,unit,vcol,innodb,innodb_gis,innodb_zip,innodb_fts
  - CC_VERSION=7 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=binlog,binlog_encryption,rocksdb,versioning,rpl
  - CC_VERSION=7 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=csv,federated,funcs_1,funcs_2,gcol,handler,heap,json,maria,perfschema,plugins,multi_source,roles,encryption
  - CC_VERSION=10 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=main

jobs:
  # Define extra jobs that are run in addition to the main jobs matrix
  include:
    - os: linux
      compiler: gcc
      env: DebPackages=focal
      addons: &deb-addons
        apt:
          sources: *add-sources
          # make sure these match debian/control contents
          packages:
            - *common-packages
            - debhelper
            - devscripts
            - dh-apparmor
            - dh-exec
            - dh-systemd
            - fakeroot
            - libsystemd-dev
            - libzstd-dev
            - po-debconf
            - unixodbc-dev
      script: &deb-script
        - ${CC} --version ; ${CXX} --version
        - apt-cache policy
        - env DEB_BUILD_OPTIONS="parallel=4" debian/autobake-deb.sh;
    - os: linux
      dist: bionic
      arch: s390x
      compiler: gcc
      env: DebPackages=bionic
      addons: *deb-addons
      script: *deb-script
      # Just one OS X build is enough
    - os: osx
      osx_image: xcode12u
      compiler: clang
      env: CC_VERSION=10 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=main
      # Some chosen ones with s390x and gcc
    - os: linux
      arch: s390x
      compiler: gcc
      env: CC_VERSION=10 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=main
    - os: linux
      arch: s390x
      compiler: gcc
      env: CC_VERSION=7 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=binlog,binlog_encryption,encryption,rocksdb,versioning,rpl
      # Some chosen ones with s390x and clang
    - os: linux
      arch: s390x
      compiler: clang
      env: CC_VERSION=7 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=archive,optimizer_unfixed_bugs,parts,sys_vars,unit,vcol,innodb,innodb_gis,innodb_zip,innodb_fts
    - os: linux
      arch: s390x
      compiler: clang
      env: CC_VERSION=10 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=csv,federated,funcs_1,funcs_2,gcol,handler,heap,json,maria,perfschema,plugins,multi_source,roles
    # Extra tests to ensure IBM Power and ARM 64 work
    - os: linux
      arch: ppc64le
      compiler: gcc
      env: CC_VERSION=7 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=main
    - os: linux
      arch: arm64
      compiler: gcc
      env: CC_VERSION=7 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=main

  allow_failures:
    # Permanently fails on main.column_compression 'innodb' test (MDEV-23954)
    - os: linux
      arch: s390x
      compiler: gcc
      env: CC_VERSION=10 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=main
    # Until OSX becomes a bit more stable
    - os: osx
    # ppc64el builder frequently runs out of memory
    - arch: ppc64le

before_install:
  - if [[ "${TRAVIS_OS_NAME}" == 'osx' ]]; then
      brew update;
      brew install gnutls lz4 lzo xz snappy ccache jemalloc curl ossp-uuid pcre zstd;
      brew link ccache;
      export PATH="/usr/local/opt/ccache/libexec:$PATH";
    fi

before_script:
  - df -h
  - ccache --version
  - ccache --show-stats
  - ccache --max-size=5G

script:
# following modules are disabled after sourcing .travis.compiler.sh:
# clang disabled: mroonga just generates too many warnings with clang and travis stops the job
# gcc/rpl: mroonga
  - source .travis.compiler.sh
  - cmake .
           -DCMAKE_BUILD_TYPE=${TYPE}
           ${CMAKE_OPT}
           -DWITH_SSL=system -DWITH_ZLIB=system
  - make -j 4
  - cd mysql-test
  - travis_wait 30 ./mtr --force --max-test-fail=20 --parallel=4 --testcase-timeout=${TEST_CASE_TIMEOUT}
         --suite=${MYSQL_TEST_SUITES}
         --skip-test=binlog.binlog_unsafe

after_script:
  - ccache --show-stats
  - df -h

notifications:
  irc:
    channels:
      - "chat.freenode.net#maria"
    on_success: never # [always|never|change]
    on_failure: never
    template:
      - "%{repository}/%{branch} (%{commit} - %{author}): %{build_url}: %{message}"