aboutsummaryrefslogtreecommitdiffstats
path: root/meson/docs/markdown/Continuous-Integration.md
diff options
context:
space:
mode:
Diffstat (limited to 'meson/docs/markdown/Continuous-Integration.md')
-rw-r--r--meson/docs/markdown/Continuous-Integration.md279
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
+```