diff options
Diffstat (limited to 'meson/docs/markdown/Continuous-Integration.md')
-rw-r--r-- | meson/docs/markdown/Continuous-Integration.md | 279 |
1 files changed, 279 insertions, 0 deletions
diff --git a/meson/docs/markdown/Continuous-Integration.md b/meson/docs/markdown/Continuous-Integration.md new file mode 100644 index 000000000..f24bdb06d --- /dev/null +++ b/meson/docs/markdown/Continuous-Integration.md @@ -0,0 +1,279 @@ +# Continuous Integration + +Here you will find snippets to use Meson with various CI such as +Travis and AppVeyor. + +Please [file an issue](https://github.com/mesonbuild/meson/issues/new) +if these instructions don't work for you. + +## Travis-CI with Docker + +Travis with Docker gives access to newer non-LTS Ubuntu versions with +pre-installed libraries of your choice. + +This `yml` file is derived from the +[configuration used by Meson](https://github.com/mesonbuild/meson/blob/master/.travis.yml) +for running its own tests. + +```yaml +os: + - linux + - osx + +language: + - cpp + +services: + - docker + +before_install: + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install python3 ninja; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then pip3 install meson; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker pull YOUR/REPO:eoan; fi + +script: + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then echo FROM YOUR/REPO:eoan > Dockerfile; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then echo ADD . /root >> Dockerfile; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker build -t withgit .; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker run withgit /bin/sh -c "cd /root && TRAVIS=true CC=$CC CXX=$CXX meson builddir && meson test -C builddir"; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then SDKROOT=$(xcodebuild -version -sdk macosx Path) meson builddir && meson test -C builddir; fi +``` + +## CircleCi for Linux (with Docker) + +[CircleCi](https://circleci.com/) can work for spinning all of the +Linux images you wish. Here's a sample `yml` file for use with that. + +```yaml +version: 2.1 + +executors: + # Your dependencies would go in the docker images that represent + # the Linux distributions you are supporting + meson_ubuntu_builder: + docker: + - image: your_dockerhub_username/ubuntu-sys + + meson_debian_builder: + docker: + - image: your_dockerhub_username/debian-sys + + meson_fedora_builder: + docker: + - image: your_dockerhub_username/fedora-sys + +jobs: + meson_ubuntu_build: + executor: meson_ubuntu_builder + steps: + - checkout + - run: meson setup builddir --backend ninja + - run: meson compile -C builddir + - run: meson test -C builddir + + meson_debian_build: + executor: meson_debian_builder + steps: + - checkout + - run: meson setup builddir --backend ninja + - run: meson compile -C builddir + - run: meson test -C builddir + + meson_fedora_build: + executor: meson_fedora_builder + steps: + - checkout + - run: meson setup builddir --backend ninja + - run: meson compile -C builddir + - run: meson test -C builddir + +workflows: + version: 2 + linux_workflow: + jobs: + - meson_ubuntu_build + - meson_debian_build + - meson_fedora_build +``` + +## AppVeyor for Windows + +For CI on Windows, [AppVeyor](https://www.appveyor.com/) has a wide +selection of [default +configurations](https://www.appveyor.com/docs/windows-images-software/). +AppVeyor also has +[MacOS](https://www.appveyor.com/docs/macos-images-software/) and +[Linux](https://www.appveyor.com/docs/linux-images-software/) CI +images. This is a sample `appveyor.yml` file for Windows with Visual +Studio 2015 and 2017. + +```yaml +image: Visual Studio 2017 + +environment: + matrix: + - arch: x86 + compiler: msvc2015 + - arch: x64 + compiler: msvc2015 + - arch: x86 + compiler: msvc2017 + - arch: x64 + compiler: msvc2017 + +platform: + - x64 + +install: + # Set paths to dependencies (based on architecture) + - cmd: if %arch%==x86 (set PYTHON_ROOT=C:\python37) else (set PYTHON_ROOT=C:\python37-x64) + # Print out dependency paths + - cmd: echo Using Python at %PYTHON_ROOT% + # Add necessary paths to PATH variable + - cmd: set PATH=%cd%;%PYTHON_ROOT%;%PYTHON_ROOT%\Scripts;%PATH% + # Install meson and ninja + - cmd: pip install ninja meson + # Set up the build environment + - cmd: if %compiler%==msvc2015 ( call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %arch% ) + - cmd: if %compiler%==msvc2017 ( call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" %arch% ) + +build_script: + - cmd: echo Building on %arch% with %compiler% + - cmd: meson --backend=ninja builddir + - cmd: meson compile -C builddir + +test_script: + - cmd: meson test -C builddir +``` + +### Qt + +For Qt 5, add the following line near the `PYTHON_ROOT` assignment: + +```yaml + - cmd: if %arch%==x86 (set QT_ROOT=C:\Qt\5.11\%compiler%) else (set QT_ROOT=C:\Qt\5.11\%compiler%_64) +``` + +And afterwards add `%QT_ROOT%\bin` to the `PATH` variable. + +You might have to adjust your build matrix as there are, for example, +no msvc2017 32-bit builds. Visit the [Build +Environment](https://www.appveyor.com/docs/build-environment/) page in +the AppVeyor docs for more details. + +### Boost + +The following statement is sufficient for Meson to find Boost: + +```yaml + - cmd: set BOOST_ROOT=C:\Libraries\boost_1_67_0 +``` + +## Travis without Docker + +Non-Docker Travis-CI builds can use Linux, MacOS or Windows. +Set the desired compiler(s) in the build **matrix**. +This example is for **Linux** (Ubuntu 18.04) and **C**. + +```yaml +dist: bionic +group: travis_latest + +os: linux +language: python + +matrix: + include: + - env: CC=gcc + - env: CC=clang + +install: + - pip install meson ninja + +script: + - meson builddir + - meson compile -C builddir + - meson test -C builddir +``` + +## GitHub Actions + +GitHub Actions are distinct from Azure Pipelines in their workflow +syntax. It can be easier to setup specific CI tasks in Actions than +Pipelines, depending on the particular task. This is an example file: +.github/workflows/ci_meson.yml supposing the project is C-based, using +GCC on Linux, Mac and Windows. The optional `on:` parameters only run +this CI when the C code is changed--corresponding ci_python.yml might +run only on "**.py" file changes. + +```yml +name: ci_meson + +on: + push: + paths: + - "**.c" + - "**.h" + pull_request: + paths: + - "**.c" + - "**.h" + +jobs: + + linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-python@v1 + with: + python-version: '3.x' + - run: pip install meson ninja + - run: meson setup builddir/ + env: + CC: gcc + - run: meson test -C builddir/ -v + - uses: actions/upload-artifact@v1 + if: failure() + with: + name: Linux_Meson_Testlog + path: builddir/meson-logs/testlog.txt + + macos: + runs-on: macos-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-python@v1 + with: + python-version: '3.x' + - run: brew install gcc + - run: pip install meson ninja + - run: meson setup builddir/ + env: + CC: gcc + - run: meson test -C builddir/ -v + - uses: actions/upload-artifact@v1 + if: failure() + with: + name: MacOS_Meson_Testlog + path: builddir/meson-logs/testlog.txt + + windows: + runs-on: windows-latest + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-python@v1 + with: + python-version: '3.x' + - run: pip install meson ninja + - run: meson setup builddir/ + env: + CC: gcc + - run: meson test -C builddir/ -v + - uses: actions/upload-artifact@v1 + if: failure() + with: + name: Windows_Meson_Testlog + path: builddir/meson-logs/testlog.txt +``` |