11. Continuous Integration

To test the project the continuous integration tools

  • AppVeyor,

  • Azure Pipelines,

  • Cirrus CI and

  • Travis CI.

are used.

11.1. Project Status

CI Service

Build Status

Platform on Architecture with compiler

AppVeyor

Appveyor build status

  • Windows (Server 2016, Server 2019) on AMD64

    • msvc (2017, 2019)

    • gcc (8.1.0-posix-seh-rt_v6-rev0

    • clang (9.0.0 x64)

    • Cygwin

      • gcc

      • clang

  • Linux (Ubuntu 18.04) on AMD64

    • gcc (7.4.0)

    • clang (6.0.1)

Azure Pipelines

Azure Pipelines build status

  • Windows (Server 2019) on AMD64

    • msvc (2019)

    • gcc (8.1.0)

    • clang (9.0.0)

  • Linux (Ubuntu 18.04) on AMD64

    • gcc (7.4.0)

    • clang (6.0.1)

  • Unix (macOS 10.14) on AMD64

    • gcc (9.2.0)

    • clang (11.0.0)

Travis-CI

Travis CI build status

  • Linux (Ubuntu 16.04, Ubuntu 18.04) on AMD64, S390x, ARM64

    • gcc (5.4.0, 7.4.0)

    • clang (7.0.0, 7.0.0)

Cirrus-CI

Cirrus CI build status

  • Linux (Ubuntu 18.04, Fedora 30, Debian 10) on AMD64

    • gcc (7.4.0, 9.2.1, 8.3.0)

    • clang (9.0.1, 8.0.0, 9.0.1)

  • Unix (FreeBSD 12.1) on AMD64

    • gcc (9.2.0)

    • clang (8.0.1)

11.2. Configuration Details

11.2.1. AppVeyor

AppVeyor CI is configured by the .appveyor.yml file.

AppVeyor CI configuration
version: 5.3.5.{build}

image:
  - Visual Studio 2017
  - Visual Studio 2019
  - Ubuntu

cache:
  - C:\Users\appveyor\AppData\Local\pip\cache
  - C:\cygwin64\var\cache
  - C:\cygwin64\home\appveyor\.cache\pip

skip_commits:
  files:
    - .vscode/*
    - .github/*
    - .cirrus.yml
    - .editorconfig
    - .gitattributes
    - .gitignore
    - .travis.yml
    - .readthedocs.yml
    - azure-pipelines.yml
    - docs/environment.yml

init:
  - git config --global core.autocrlf input

install:
  - ps: |
      if ($isWindows) {
        $rmfp = "Docker", "SQL", "Mercurial", "Subversion", "Maven", "CMake"
        $rmfp += "nodejs", "nunit", "nuget", "java", "xunit", "go", "python"
        $rmfp += "Amazon", "ruby", "perl", "Azure", "Webdriver", "Coverity"
        $rmfp += "Octopus", "erl9", "dotnet", "iojs", "Yarn"
        $rmfp += "npm", "Windows Performance Toolkit"
        $rmfp += "Microsoft Service Fabric", "Microsoft DNX"
        $rmfp += "Microsoft Visual Studio"
        $rmfp += "ServiceFabricLocalClusterManager"
        foreach ($i in $rmfp) {
          $env:path = ($env:path -split ";").Where({!($_ -like "*$i*")}) -join ";"
        }
      }
  - cmd: |
      echo %APPVEYOR_BUILD_WORKER_IMAGE%
      if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" (pushd "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\" && call "VC\Auxiliary\Build\vcvars64.bat" && popd)
      if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" (pushd "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\" && call "VC\Auxiliary\Build\vcvars64.bat" && popd)
  - cmd: set PATH=C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;%PATH%
  - cmd: set PATH=C:\Python37-x64;C:\Python37-x64\Scripts;%PATH%
  - ps: |
      if ($isWindows) {
        Write-Host New `$env:Path
        Write-Host ($env:Path).Replace(';',"`n")
        }
  - cmd: python -m pip install --upgrade pip -q
  - cmd: python -m pip install pylint black sphinx pyyaml -q
  - sh: sudo apt-get update
  - sh: sudo apt-get install python3-pip -y
  - sh: sudo python3 -m pip install sphinx -q
  - cmd: mkdir C:\download && mkdir C:\download\doxygen && mkdir C:\download\graphviz
  - cmd: cd C:\download\doxygen && curl -o doxygen-x64.zip http://doxygen.nl/files/doxygen-1.8.16.windows.x64.bin.zip
  - cmd: cd C:\download\doxygen && 7z e doxygen-x64.zip
  - cmd: set PATH=C:\download\doxygen;%PATH%
  - cmd: cd C:\download\graphviz && curl -o graphviz.zip https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.zip
  - cmd: cd C:\download\graphviz && 7z x graphviz.zip
  - cmd: set PATH=C:\download\graphviz\release\bin;%PATH%
  - cmd: cd %APPVEYOR_BUILD_FOLDER%
  # setup cygwin64
  - cmd: curl -o setup-x86_64.exe http://www.cygwin.com/setup-x86_64.exe
  - cmd: setup-x86_64.exe --no-desktop --no-shortcuts --no-startmenu --quiet-mode --packages wget,python37,python37-pip,doxygen,graphviz,llvm,clang
  - cmd: C:\cygwin64\bin\bash.exe -l -c "python3 --version"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "python3 -m ensurepip --upgrade"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "pip3 install sphinx pyyaml -q"
  # python linting tools, only used on Windows (no cygwin)
  - cmd: black --version
  - cmd: pylint --version
  # print program versions that are build relevant
  # doxygen
  - doxygen --version
  - cmd: C:\cygwin64\bin\bash.exe -l -c "doxygen --version"
  # dot
  - dot -V
  - cmd: C:\cygwin64\bin\bash.exe -l -c "dot -V"
  # python
  - cmd: python --version
  - cmd: C:\cygwin64\bin\bash.exe -l -c "python3 --version"
  - sh: python3 --version
  # clang
  - clang --version
  - cmd: C:\cygwin64\bin\bash.exe -l -c "clang --version"
    # gcc
  - gcc --version
  - cmd: C:\cygwin64\bin\bash.exe -l -c "gcc --version"
    # MSVC
  - cmd: cl

  # for testing
  - cmd: set PATH=%PATH%;%userprofile%\AppData\Local\Programs\lua\bin

before_build:
  # check that the correct python versions are used
  - cmd: python waf --help
  - sh: python3 waf --help
  # ensure that only well formated wscripts are checked in
  - cmd: black . --config=pyproject.toml --check -v
  - cmd: pylint wscript
  - cmd: pylint conf.py
  - cmd: pylint scripts\\dot.py
  - cmd: pylint scripts\\doxygen.py
  - cmd: pylint scripts\\run_test.py
  - cmd: pylint scripts\\sphinx.py

build_script:
  # basic configuration
  - cmd: python waf configure
  - sh: python3 waf configure
  # check documentation build
  - cmd: python waf build_docs -v
  - sh: python3 waf build_docs -v
  - cmd: python waf clean_docs
  - sh: python3 waf clean_docs
  - cmd: python waf distclean
  - sh: python3 waf distclean
  # configure including the test files
  - cmd: python waf configure --include-tests
  - sh: python3 waf configure --include-tests
  # msvc
  - cmd: python waf build_msvc
  - cmd: python waf install_msvc
  - cmd: cd build/msvc/tests
  - cmd: lua -e"_U=true" all.lua
  # - cmd: lua all.lua
  - cmd: cd ../../..
  - cmd: python waf uninstall_msvc
  - cmd: python waf clean_msvc
  # gcc
  - cmd: python waf build_gcc
  - sh: python3 waf build_gcc
  - cmd: python waf install_gcc
  - sh: sudo python3 waf install_gcc
  - cd build/gcc/tests
  - lua -e"_U=true" all.lua
  #- sh: lua all.lua
  - cd ../../..
  - cmd: python waf uninstall_gcc
  - sh: sudo python3 waf uninstall_gcc
  - cmd: python waf clean_gcc
  - sh: python3 waf clean_gcc
  # clang
  - cmd: python waf build_clang
  - sh: python3 waf build_clang
  - cmd: python waf install_clang
  - sh: sudo python3 waf install_clang
  - cd build/clang/tests
  - lua -e"_U=true" all.lua
  #- sh: lua all.lua
  - cd ../../..
  - cmd: python waf uninstall_clang
  - sh: sudo python3 waf uninstall_clang
  - cmd: python waf clean_clang
  - sh: python3 waf clean_clang
  - cmd: python waf distclean
  - sh: python3 waf distclean
  - git clean -xdf
  # cygwin gcc
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf distclean configure --include-tests"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf build_docs"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf build_gcc"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf install_gcc"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua/build/gcc/tests && which lua && lua -v && lua -e\"_U=true\" all.lua"
  #- cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua/build/gcc/tests && which lua && lua -v && lua all.lua"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf uninstall_gcc"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf build_clang"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf install_clang"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua/build/clang/tests && which lua && lua -v && lua -e\"_U=true\" all.lua"
  #- cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua/build/clang/tests && which lua && lua -v && lua all.lua"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf uninstall_clang"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf distclean"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 scripts/run_test.py -c gcc -c clang --simple-test"
  # configure including the test files and the ltests
  - cmd: python waf configure --include-tests --ltests
  - sh: python3 waf configure --include-tests --ltests
  # msvc
  - cmd: python waf build_msvc
  - cmd: python waf install_msvc
  - cmd: cd build/msvc/tests
  - cmd: lua -e"_U=true" all.lua
  # - cmd: lua all.lua
  - cmd: cd ../../..
  - cmd: python waf uninstall_msvc
  - cmd: python waf clean_msvc
  # gcc
  - cmd: python waf build_gcc
  - sh: python3 waf build_gcc
  - cmd: python waf install_gcc
  - sh: sudo python3 waf install_gcc
  - cd build/gcc/tests
  - lua -e"_U=true" all.lua
  #- sh: lua all.lua
  - cd ../../..
  - cmd: python waf uninstall_gcc
  - sh: sudo python3 waf uninstall_gcc
  - cmd: python waf clean_gcc
  - sh: python3 waf clean_gcc
  # clang
  - cmd: python waf build_clang
  - sh: python3 waf build_clang
  - cmd: python waf install_clang
  - sh: sudo python3 waf install_clang
  - cd build/clang/tests
  - lua -e"_U=true" all.lua
  #- sh: lua all.lua
  - cd ../../..
  - cmd: python waf uninstall_clang
  - sh: sudo python3 waf uninstall_clang
  - cmd: python waf clean_clang
  - sh: python3 waf clean_clang
  - cmd: python waf distclean
  - sh: python3 waf distclean
  - git clean -xdf
  - cmd: python scripts\run_test.py -c msvc -c gcc -c clang --simple-test
  - sh: python3 scripts/run_test.py -c gcc -c clang --simple-test
  - cmd: python scripts\run_test.py -c msvc -c gcc -c clang --simple-test --ltests
  - sh: python3 scripts/run_test.py -c gcc -c clang --simple-test --ltests
  - git clean -xdf
  # cygwin gcc
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf distclean configure --include-tests"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf build_docs"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf build_gcc"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf install_gcc"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua/build/gcc/tests && which lua && lua -v && lua -e\"_U=true\" all.lua"
  #- cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua/build/gcc/tests && which lua && lua -v && lua all.lua"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf uninstall_gcc"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf build_clang"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf install_clang"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua/build/clang/tests && which lua && lua -v && lua -e\"_U=true\" all.lua"
  #- cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua/build/gcc/tests && which lua && lua -v && lua all.lua"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf uninstall_clang"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 waf distclean"
  - cmd: C:\cygwin64\bin\bash.exe -l -c "cd /cygdrive/c/projects/native-lua && python3 scripts/run_test.py -c gcc -c clang --simple-test"

11.2.2. Azure Pipelines

Azure Pipelines CI is configured by the azure-pipelines.yml file.

Azure Pipelines CI configuration
# specific path build
trigger:
  paths:
    exclude:
      - .vscode/*
      - .github/*
      - .appveyor.yml
      - .cirrus.yml
      - .editorconfig
      - .gitattributes
      - .gitignore
      - .pylintrc
      - .travis.yml
      - .readthedocs.yml
      - docs/environment.yml
      - pyproject.toml

jobs:
  - job: Linux
    pool:
      vmImage: "ubuntu-18.04"
    displayName: "Linux Build"
    steps:
      - task: UsePythonVersion@0
        inputs:
          versionSpec: "3.6"
          architecture: "x64"

      - script: lsb_release -a
        displayName: Ubuntu details

      - script: echo "##vso[task.prependpath]/opt/lua/bin"
        displayName: Add to path

      - script: echo $PATH
        displayName: echo PATH

      - script: |
          set -euxo pipefail
          wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
          sudo apt-get update
          sudo apt-get install -y dialog apt-utils software-properties-common libreadline7 libreadline-dev doxygen graphviz
          sudo apt-add-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main"
          sudo apt-get install -y build-essential
          sudo apt-get update
          sudo apt-get install -y clang-9 lld-9
          sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-9 100
          pip install --upgrade pip -q
          pip install sphinx pathlib pyyaml -q
        displayName: Install dependencies

      - script: |
          python --version
          gcc --version
          clang --version
          doxygen --version
          dot -V
          sphinx-build --version
        displayName: Compiler and Tools versions

      - script: |
          set -euxo pipefail
          python waf configure -v
          python waf build_docs
          python waf clean_docs
          python waf distclean
        displayName: Documentation build

      - script: |
          set -euxo pipefail
          python waf configure --include-tests --prefix=/opt/lua
          python waf build_gcc
          python waf install_gcc
          pushd build/gcc/tests
          lua -e"_U=true" all.lua
          lua all.lua
          popd
          python waf uninstall_gcc
          python waf clean_gcc
          python waf distclean
        displayName: GCC build including tests

      - script: |
          set -euxo pipefail
          python waf configure --ltests --include-tests --prefix=/opt/lua
          python waf build_gcc
          python waf install_gcc
          pushd build/gcc/tests
          lua -e"_U=true" all.lua
          lua all.lua
          popd
          python waf uninstall_gcc
          python waf clean_gcc
        displayName: GCC build including tests and ltests

      - script: |
          set -euxo pipefail
          python waf configure --include-tests --prefix=/opt/lua
          python waf build_clang
          python waf install_clang
          pushd build/clang/tests
          lua -e"_U=true" all.lua
          lua all.lua
          popd
          python waf uninstall_clang
          python waf clean_clang
          python waf distclean
        displayName: clang build including tests

      - script: |
          set -euxo pipefail
          python waf configure --ltests --include-tests --prefix=/opt/lua
          python waf build_clang
          python waf install_clang
          pushd build/clang/tests
          lua -e"_U=true" all.lua
          lua all.lua
          popd
          python waf uninstall_clang
          python waf clean_clang
        displayName: clang build including tests and ltests

      - script: |
          set -euxo pipefail
          python scripts/run_test.py -c gcc -c clang --simple-test
        displayName: test script (gcc, clang) with --simple-test

      - script: |
          set -euxo pipefail
          python scripts/run_test.py -c gcc -c clang --simple-test --ltests
        displayName: test script (gcc, clang) with --simple-test and ltests

  - job: Windows
    pool:
      vmImage: "windows-2019"
    displayName: "Windows Build"
    steps:
      - task: UsePythonVersion@0
        inputs:
          versionSpec: "3.6"
          addToPath: true
          architecture: "x64"

      - script: choco install llvm -y --version 9.0.0
        displayName: Install LLVM

      - script: |
          curl.exe -o $(Agent.TempDirectory)\doxygen-x64.zip http://doxygen.nl/files/doxygen-1.8.16.windows.x64.bin.zip
          curl.exe -o $(Agent.TempDirectory)\graphviz.zip https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.zip
        displayName: Downloading doxygen and graphviz

      - task: ExtractFiles@1
        inputs:
          archiveFilePatterns: "$(Agent.TempDirectory)/*.zip"
          destinationFolder: "$(Agent.TempDirectory)"
          cleanDestinationFolder: false
        displayName: Extracting doxygen and graphviz

      - script: echo "##vso[task.prependpath]$(Agent.TempDirectory)
        displayName: Add doxygen to path
      - script: echo "##vso[task.prependpath]$(Agent.TempDirectory)\release\bin
        displayName: Add graphviz to path
      - script: echo "##vso[task.prependpath]C:\Program Files\LLVM\bin\
        displayName: Add clang to path
      - script: echo %PATH%
        displayName: echo PATH

      - script: |
          pip install --upgrade pip -q
          pip install sphinx pyyaml -q
        displayName: installing dependencies

      - script: |
          python --version
          gcc --version
          clang --version
          "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.24.28314\bin\HostX64\x64\CL.exe"
          doxygen --version
          dot -V
          sphinx-build --version
        displayName: Compiler and Tools versions

      - script: python scripts\run_test.py -c msvc -c gcc -c clang --simple-test -vv
        displayName: test script (msvc, gcc, clang) with --simple-test

      - script: python scripts\run_test.py -c msvc -c gcc -c clang --simple-test --ltests -vv
        displayName: test script (msvc, gcc, clang) with --simple-test and ltests

  - job: OSXBuild
    pool:
      vmImage: "macOS-10.14"
    displayName: "MacOSX Build"
    steps:
      - task: UsePythonVersion@0
        inputs:
          versionSpec: "3.6"

      - script: echo "##vso[task.prependpath]/opt/lua/bin"
        displayName: Add lua install path to path
      - script: echo "##vso[task.prependpath]/usr/local/Cellar/gcc/9.1.0/bin/"
        displayName: Add gcc to path

      - script: echo $PATH
        displayName: echo PATH

      - script: |
          set -euxo pipefail
          brew install --force gcc coreutils
          brew ls --verbose gcc
          brew unlink gcc
          brew link gcc --dry-run
          brew link gcc
          ln -s /usr/local/bin/gcc-9 /usr/local/bin/gcc
          which gcc
          greadlink -f `which gcc`
          echo | gcc -E -Wp,-v -
          brew install doxygen graphviz
          pip3 install --upgrade pip -q
          pip3 install sphinx pyyaml -q
        displayName: Install dependencies

      - script: |
          python --version
          gcc --version
          clang --version
          doxygen --version
          dot -V
          sphinx-build --version
        displayName: Compiler and Tools versions

      - script: |
          set -euxo pipefail
          python waf configure -v
          python waf build_docs
          python waf clean_docs
          python waf distclean
        displayName: Documentation build

      - script: |
          set -euxo pipefail
          python waf configure --include-tests --prefix=/opt/lua -v
        displayName: configure with tests

      - script: |
          set -euxo pipefail
          python waf build_clang -v
          sudo python waf install_clang
          pushd build/clang/tests
          lua -e"_U=true" all.lua
          # lua all.lua
          popd
          sudo python waf uninstall_clang
          python waf clean_clang
        displayName: clang build including tests

      - script: |
          set -euxo pipefail
          python waf build_gcc -v
          sudo python waf install_gcc
          pushd build/gcc/tests
          lua -e"_U=true" all.lua
          # lua all.lua
          popd
          sudo python waf uninstall_gcc
          python waf clean_gcc
        displayName: gcc build including tests

      - script: |
          set -euxo pipefail
          python waf distclean
        displayName: distclean

      - script: |
          set -euxo pipefail
          python waf configure --ltests --include-tests --prefix=/opt/lua -v
        displayName: configure with tests and ltests

      - script: |
          set -euxo pipefail
          python waf build_clang -v
          sudo python waf install_clang
          pushd build/clang/tests
          lua -e"_U=true" all.lua
          # lua all.lua
          popd
          sudo python waf uninstall_clang
          python waf clean_clang
        displayName: clang build including tests and ltests

      - script: |
          set -euxo pipefail
          python waf build_gcc -v
          sudo python waf install_gcc
          pushd build/gcc/tests
          lua -e"_U=true" all.lua
          # lua all.lua
          popd
          sudo python waf uninstall_gcc
          python waf clean_gcc
        displayName: gcc build including tests and ltests

      - script: |
          set -euxo pipefail
          python waf distclean
        displayName: distclean

11.2.3. Cirrus CI

Cirrus CI is configured by the .cirrus.yml file.

Cirrus CI configuration
task:
  only_if: "changesInclude('.cirrus.yml', '*.rst', '*.py', '*.conf', 'LICENSE' 'VERSION', 'waf', 'wscript', 'demos/**', 'docs/**', 'scripts/**', 'src/**', 'tests/**')"
  pip_cache:
    folder: ~/.cache/pip
    fingerprint_script: echo $CIRRUS_OS
  matrix:
    - container:
        image: debian:10
      install_script:
        - export RUNLEVEL=1
        - apt-get update
        - apt-get install -y apt-utils lsb-release curl gnupg
        - curl -o llvm-snapshot.gpg.key https://apt.llvm.org/llvm-snapshot.gpg.key
        - cat llvm-snapshot.gpg.key
        - apt-key add llvm-snapshot.gpg.key
        - apt-get update
        - lsb_release -a
        - apt-get install -y dialog
        - apt-get install -y software-properties-common libreadline7 libreadline-dev
        - apt-add-repository "deb http://apt.llvm.org/buster/ llvm-toolchain-buster-9 main"
        - apt-get update
        - apt-get -y upgrade
        - apt-get install -y build-essential doxygen graphviz python3-pip
        - apt-get install -y clang-9 lld-9
        - update-alternatives --install /usr/bin/clang clang /usr/bin/clang-9 100
        - pip3 install sphinx pathlib pyyaml -q

    - container:
        image: fedora:30
      install_script:
        - export RUNLEVEL=1
        - dnf -y update
        - dnf -y install redhat-lsb-core gcc clang python3-pip doxygen graphviz readline readline-devel
        - lsb_release -a
        - pip3 install sphinx pathlib pyyaml -q

    - container:
        image: ubuntu:bionic
      install_script:
        - export RUNLEVEL=1
        - apt-get update
        - apt-get install -y apt-utils lsb-release curl gnupg
        - curl -o llvm-snapshot.gpg.key https://apt.llvm.org/llvm-snapshot.gpg.key
        - cat llvm-snapshot.gpg.key
        - apt-key add llvm-snapshot.gpg.key
        - apt-get update
        - lsb_release -a
        - apt-get install -y dialog python3-pip
        - apt-get install -y software-properties-common libreadline7 libreadline-dev
        - apt-add-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main"
        - apt-get update
        - apt-get -y upgrade
        - apt-get install -y build-essential doxygen graphviz
        - apt-get install -y clang-9 lld-9
        - update-alternatives --install /usr/bin/clang clang /usr/bin/clang-9 100
        - pip3 install sphinx pathlib pyyaml -q

    - freebsd_instance:
        image_family: freebsd-12-1
      freebsd_install_script:
        - pkg update -f
        - env ASSUME_ALWAYS_YES=YES pkg bootstrap -f
        - env ASSUME_ALWAYS_YES=YES pkg upgrade pkg
        - env ASSUME_ALWAYS_YES=YES pkg install lang/gcc bash doxygen
        - python3 -m ensurepip --default-pip
        - python3 -m pip install --upgrade pip
        - python3 -m pip install sphinx pathlib pyyaml -q
      freebsd_setup_script:
        - chsh -s /usr/local/bin/bash

  version_script:
    - python3 --version
    - gcc --version
    - clang --version
    - doxygen --version
    - dot -V
    - sphinx-build --version
  script:
    # basic configuration
    - python3 waf configure -v
    # documentation build
    - python3 waf build_docs
    - python3 waf clean_docs
    - python3 waf distclean
    # configuration
    - python3 waf configure --include-tests
    # gcc [
    - python3 waf build_gcc -v
    - python3 waf install_gcc -v
    - pushd build/gcc/tests
    - lua -e"_U=true" all.lua
    #- lua all.lua
    - popd
    - python3 waf uninstall_gcc
    - python3 waf clean_gcc
    # gcc ]
    - python3 waf distclean
    # including ltests
    - python3 waf configure --ltests --include-tests
    # gcc [
    - python3 waf build_gcc -v
    - python3 waf install_gcc -v
    - pushd build/gcc/tests
    - lua -e"_U=true" all.lua
    #- lua all.lua
    - popd
    - python3 waf uninstall_gcc
    - python3 waf clean_gcc
    # gcc ]
    # configuration
    - python3 waf configure --include-tests
    # clang [
    - python3 waf build_clang -v
    - python3 waf install_clang -v
    - pushd build/clang/tests
    - lua -e"_U=true" all.lua
    #- lua all.lua
    - popd
    - python3 waf uninstall_clang
    - python3 waf clean_clang
    # clang ]
    - python3 waf distclean
    # including ltests
    - python3 waf configure --ltests --include-tests
    # clang [
    - python3 waf build_clang -v
    - python3 waf install_clang -v
    - pushd build/clang/tests
    - lua -e"_U=true" all.lua
    #- lua all.lua
    - popd
    - python3 waf uninstall_clang
    - python3 waf clean_clang
    # clang ]
    # test script
    - python3 scripts/run_test.py -c gcc -c clang --simple-test
    - python3 scripts/run_test.py -c gcc -c clang --simple-test --ltests

11.2.4. Travis CI

Travis CI is configured by the .travis.yml file.

Travis CI configuration
branches:
  except:
  - /^appveyor-.*$/
  - /^azure.*$/
  - /^cirrus-ci.*$/

addons:
  apt:
    update: true
    packages:
      - doxygen
      - graphviz

cache: pip

matrix:
  fast_finish: true
  include:
    - os: linux
      dist: xenial
      language: python
      sudo: required
    - os: linux
      dist: bionic
      language: python
      sudo: required
    # - os: linux
    #   arch: ppc64le
    #   language: python
    #   sudo: required
    - os: linux
      arch: s390x
      language: python
      sudo: required
    - os: linux
      arch: arm64
      language: python
      sudo: required

install:
  - pip3 install sphinx pyyaml -q
  - if [ "$TRAVIS_CPU_ARCH" != "amd64" ]; then sudo apt-get install python3-pip -y; fi
  - if [ "$TRAVIS_CPU_ARCH" != "amd64" ]; then sudo python3 -m pip install sphinx pyyaml -q; fi

before_script:
  - which gcc
  - which clang
  - echo $PATH
  - python3 --version
  - gcc --version
  - clang --version
  - doxygen --version
  - sphinx-build --version

script:
  - python3 waf configure -vv
  # check documentation build
  - python3 waf build_docs
  - python3 waf clean_docs
  - python3 waf distclean
  - python3 waf configure --include-tests
  # gcc [
  - python3 waf build_gcc
  - sudo python3 waf install_gcc
  - pushd build/gcc/tests
  - lua -e"_U=true" all.lua
  - lua all.lua
  - popd
  - sudo python3 waf uninstall_gcc
  - python3 waf clean_gcc
  # gcc ]
  # clang [
  - python3 waf build_clang
  - sudo python3 waf install_clang
  - pushd build/clang/tests
  - lua -e"_U=true" all.lua
  - lua all.lua
  - popd
  - sudo python3 waf uninstall_clang
  - python3 waf clean_clang
  # clang ]
  - python3 waf distclean
  # including ltests
  - python3 waf configure --ltests --include-tests
  # gcc [
  - python3 waf build_gcc
  - sudo python3 waf install_gcc
  - pushd build/gcc/tests
  - lua -e"_U=true" all.lua
  - lua all.lua
  - popd
  - sudo python3 waf uninstall_gcc
  - python3 waf clean_gcc
  # gcc ]
  # clang [
  - python3 waf build_clang
  - sudo python3 waf install_clang
  - pushd build/clang/tests
  - lua -e"_U=true" all.lua
  - lua all.lua
  - popd
  - sudo python3 waf uninstall_clang
  - python3 waf clean_clang
  # clang ]
  - python3 waf distclean
  # test script
  - python3 scripts/run_test.py -c gcc -c clang --simple-test
  - python3 scripts/run_test.py -c gcc -c clang
  - python3 scripts/run_test.py -c gcc -c clang --simple-test --ltests
  - python3 scripts/run_test.py -c gcc -c clang --ltests