version: ~> 1.0 # If the language is set to C or C++, Travis defines and exports CC # and CXX *after* we have defined our environment variables via 'env'. language: minimal # Run in two steps: # 1. Build the tarball # On a modern distro, with all the needed dependencies, including the whole git history. # 2. Check it on various environments. # Less dependencies, and little git content (we would like to have none, but it's not # an option on Travis). stages: - dist - check # The 'check' jobs do not need the repo at all, only the 'dist' # does. Let's save time, bandwith, energy, and polar bears. git: clone: false # matrix.include and jobs.include are aliases # (https://docs.travis-ci.com/user/conditional-builds-stages-jobs/). jobs: include: - stage: dist name: "Make dist" git: clone: true dist: bionic script: - sudo apt-get install -qq autoconf automake autopoint flex gettext gperf graphviz help2man m4 texinfo - autoconf --version - automake --version - autopoint --version - dot -V - gettext --version - gperf --version - help2man --version - makeinfo --version - m4 --version # Travis makes a shallow clone, but we need it in full to build the ChangeLog and apply the fixes in git-log-fix. - git fetch --unshallow || true - git submodule update --init --recursive # As of 2021-08, we don't have Autoconf 2.71 on Ubuntu. - sed -i 's/AC_PREREQ(\[2\.71])/AC_PREREQ([2.69])/g' configure.ac - ./bootstrap - ./configure --enable-gcc-warnings || { cat config.log && false; } - make -j2 - make -j2 dist-xz # Can help understanding why we get "dirty" tarballs. - git status - git diff - dist=$(echo bison*.xz) # Unfortunately we cannot deterministically know the name of the tarball without the full # git history (because git describe --abbrev=4 may use more than 4 characters if there are # conflicts). # # So for the sake of the 'check' jobs (that don't even have the repo at all), also expose this # tarball on a name that only depends on the Travis build number. # # Without -b -, exit status is always 0. # # If we rerun a job that was already uploaded, 'ln -s' will fail: remove beforehand. - sftp -b - bison@sftp.lrde.epita.fr <<< "put $dist"$'\n'"-rm bison-$TRAVIS_BUILD_NUMBER.tar.xz"$'\n'"ln -s $dist bison-$TRAVIS_BUILD_NUMBER.tar.xz" ## ------- ## ## First. ## ## ------- ## # Start with three completely different environments, to get errors asap. - name: "GCC 11 -O3" stage: check os: linux dist: bionic addons: &gcc11 apt: sources: # See https://github.com/travis-ci/apt-source-safelist/issues/410. - sourceline: 'ppa:ubuntu-toolchain-r/test' packages: g++-11 env: - CC=gcc-11 - CXX=g++-11 - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3' # ASAN is time consuming, and we timeout the 50min granted by # Travis if we run all the tests in one go. Run in two parts. - name: "Clang 11 libc++ and ASAN part 1" stage: check os: linux dist: bionic addons: &clang11 apt: sources: # See https://github.com/travis-ci/apt-source-safelist/issues/410. - sourceline: 'ppa:ubuntu-toolchain-r/test' - sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main' key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key' packages: - clang-11 - libc++-11-dev - libc++abi-11-dev env: # Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379 - CC='clang-11 -fsanitize=address' - CXX='clang++-11 -fsanitize=address -stdlib=libc++' - PART=1 - name: "Clang 11 libc++ and ASAN part 2" stage: check os: linux dist: bionic addons: *clang11 env: # Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379 - CC='clang-11 -fsanitize=address' - CXX='clang++-11 -fsanitize=address -stdlib=libc++' - PART=2 # See https://github.com/simd-everywhere/simde/blob/master/.travis.yml # and https://software.intel.com/content/www/us/en/develop/documentation/get-started-with-intel-oneapi-render-linux/top/configure-your-system.html. - name: "ICC" stage: check os: linux compiler: icc env: - CC=icc - CXX=icpc install: - source /opt/intel/oneapi/compiler/latest/env/vars.sh addons: apt: sources: - sourceline: 'deb https://apt.repos.intel.com/oneapi all main' key_url: 'https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB' packages: - intel-oneapi-icc - name: "ARM64: GCC 11 -O2 part 1" stage: check os: linux arch: arm64 dist: bionic addons: *gcc11 env: - CC=gcc-11 - CXX=g++-11 - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O2 CXXFLAGS=-O2' - PART=1 - name: "PPC64le: GCC 11 -O2 part 1" stage: check os: linux arch: ppc64le dist: bionic addons: apt: sources: # See https://github.com/travis-ci/apt-source-safelist/issues/410. - sourceline: 'ppa:ubuntu-toolchain-r/test' packages: g++-11 env: - CC=gcc-11 - CXX=g++-11 - CONFIGUREFLAGS='CFLAGS=-O2 CXXFLAGS=-O2' - PART=1 - name: "s390x: GCC 11 -O2 part 1" stage: check os: linux arch: s390x dist: bionic addons: *gcc11 env: - CC=gcc-11 - CXX=g++-11 - CONFIGUREFLAGS='CFLAGS=-O2 CXXFLAGS=-O2' - PART=1 ## ----- ## ## GCC. ## ## ----- ## - name: "GCC 10 with sanitizers part 1" stage: check os: linux dist: bionic addons: apt: sources: # See https://github.com/travis-ci/apt-source-safelist/issues/410. - sourceline: 'ppa:ubuntu-toolchain-r/test' packages: g++-10 env: - CC='gcc-10 -fsanitize=undefined,address -fno-omit-frame-pointer' - CXX='g++-10 -fsanitize=undefined,address -fno-omit-frame-pointer' - CONFIGUREFLAGS='CFLAGS=-O1 CXXFLAGS=-O1' - PART=1 # With glr2.cc, we run out of time with the full test suite. - name: "GCC 9 part 1" stage: check os: linux dist: bionic addons: apt: sources: # See https://github.com/travis-ci/apt-source-safelist/issues/410. - sourceline: 'ppa:ubuntu-toolchain-r/test' packages: g++-9 env: - CC=gcc-9 - CXX=g++-9 - PART=1 # With glr2.cc, we run out of time with the full test suite. - name: "GCC 8 part 1" stage: check os: linux dist: bionic addons: apt: packages: g++-8 env: - CC=gcc-8 - CXX=g++-8 - PART=1 - name: "GCC 7" stage: check os: linux dist: bionic addons: apt: packages: g++-7 env: - CC=gcc-7 - CXX=g++-7 - name: "GCC 6" stage: check os: linux dist: xenial addons: apt: sources: ubuntu-toolchain-r-test packages: g++-6 env: - CC=gcc-6 - CXX=g++-6 - name: "GCC 5" stage: check os: linux dist: xenial addons: apt: sources: ubuntu-toolchain-r-test packages: g++-5 env: - CC=gcc-5 - CXX=g++-5 - name: "GCC 4.9" stage: check os: linux dist: xenial addons: apt: sources: ubuntu-toolchain-r-test packages: g++-4.9 env: - CC=gcc-4.9 - CXX=g++-4.9 - name: "GCC 4.8" stage: check os: linux dist: xenial addons: apt: sources: ubuntu-toolchain-r-test packages: g++-4.8 env: - CC=gcc-4.8 - CXX=g++-4.8 - name: "GCC 4.7" stage: check os: linux dist: xenial addons: apt: sources: ubuntu-toolchain-r-test packages: g++-4.7 env: - CC=gcc-4.7 - CXX=g++-4.7 - name: "GCC 4.6" stage: check os: linux dist: xenial addons: apt: sources: ubuntu-toolchain-r-test packages: g++-4.6 env: - CC=gcc-4.6 - CXX=g++-4.6 ## ------- ## ## Clang. ## ## ------- ## - name: "Clang 10 -O3, libc++, part 1" stage: check os: linux dist: bionic addons: apt: sources: # See https://github.com/travis-ci/apt-source-safelist/issues/410. - sourceline: 'ppa:ubuntu-toolchain-r/test' - sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-10 main' key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key' packages: - clang-10 - libc++-10-dev - libc++abi-10-dev env: - CC='clang-10' - CXX='clang++-10 -stdlib=libc++' - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3' - PART=1 - name: "Clang 9 and libc++" stage: check os: linux dist: bionic addons: apt: sources: # See https://github.com/travis-ci/apt-source-safelist/issues/410. - sourceline: 'ppa:ubuntu-toolchain-r/test' - sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main' key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key' packages: - clang-9 - libc++-9-dev - libc++abi-9-dev env: - CC='clang-9' - CXX='clang++-9 -stdlib=libc++' - name: "Clang 8 and libc++" stage: check os: linux dist: bionic addons: apt: packages: - clang-8 - libc++-8-dev - libc++abi-8-dev env: - CC=clang-8 - CXX='clang++-8 -stdlib=libc++' - name: "Clang 7 and libc++" stage: check os: linux dist: bionic addons: apt: packages: - clang-7 - libc++-7-dev - libc++abi-7-dev env: - CC=clang-7 - CXX='clang++-7 -stdlib=libc++' - name: "Clang 6 and libc++" stage: check os: linux dist: xenial addons: apt: sources: - llvm-toolchain-xenial-6.0 - ubuntu-toolchain-r-test packages: - clang-6.0 - libc++-dev env: - CC=clang-6.0 - CXX='clang++-6.0 -stdlib=libc++' - name: "Clang 5" stage: check os: linux dist: xenial addons: apt: sources: llvm-toolchain-xenial-5.0 packages: - clang-5.0 - libc++-dev env: - CC='clang-5.0' - CXX='clang++-5.0' - name: "Clang 4" stage: check os: linux dist: xenial addons: apt: sources: llvm-toolchain-xenial-4.0 packages: clang-4.0 env: - CC=clang-4.0 - CXX=clang++-4.0 - name: "Clang 3.9" stage: check os: linux dist: xenial addons: apt: sources: llvm-toolchain-xenial-3.9 packages: clang-3.9 env: - CC=clang-3.9 - CXX=clang++-3.9 - name: "Clang 3.8" stage: check os: linux dist: xenial addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.8 packages: clang-3.8 env: - CC=clang-3.8 - CXX=clang++-3.8 - name: "CLang 3.7" stage: check os: linux dist: xenial addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.7 packages: clang-3.7 env: - CC=clang-3.7 - CXX=clang++-3.7 - name: "Clang 3.6" stage: check os: linux dist: xenial addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.6 packages: clang-3.6 env: - CC=clang-3.6 - CXX=clang++-3.6 - name: "Clang 3.5" stage: check os: linux dist: xenial addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.5 packages: clang-3.5 env: - CC=clang-3.5 - CXX=clang++-3.5 - name: "Clang 3.4" stage: check os: linux # Not available on Xenial. dist: trusty addons: apt: packages: clang-3.4 env: # No versioned name installed, but beware that Travis installs # a more modern clang earlier in the default PATH. - CC=/usr/bin/clang - CXX=/usr/bin/clang++ - name: "Clang 3.3" stage: check os: linux # Not available on Xenial. dist: trusty addons: apt: packages: clang-3.3 env: # See comment for 3.4. - CC=/usr/bin/clang - CXX=/usr/bin/clang++ ## From https://docs.gitlab.com/ce/ci/ssh_keys/#ssh-keys-when-using-the-docker-executor. ## Applies to Travis too. Applied to all the 'script's (of all the jobs). before_script: - 'which ssh-agent || ( sudo apt-get install openssh-client -y )' - eval "$(ssh-agent -s)" # $SSH_PRIVATE_KEY is multiline. Use $'...' to register its value: $'-----BEGIN OPENSSH PRIVATE KEY-----\nXXXXX...\n...==\n-----END OPENSSH PRIVATE KEY-----'. - echo "$SSH_PRIVATE_KEY" >/tmp/key.id_rsa - chmod 600 /tmp/key.id_rsa - ssh-add /tmp/key.id_rsa