継続的インテグレーション

ここでは、TravisやAppVeyorなどのさまざまなCIでMesonを使用するためのスニペットを紹介します。

これらの説明が機能しない場合は、問題を報告してください。

Dockerを使用したTravis-CI

Dockerを使用したTravisでは、選択した事前にインストールされたライブラリを使用する新しい非LTSのUbuntuバージョンにアクセスできます。

このymlファイルは、Mesonが独自のテストを実行するために使用した構成をMesonによって使用したものから派生しています。

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 setup builddir && meson test -C builddir"; fi
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then SDKROOT=$(xcodebuild -version -sdk macosx Path) meson setup builddir && meson test -C builddir; fi

Linuxホスト用のCircleCI(カスタムDockerイメージを使用)

CircleCiは、任意のLinuxイメージをスピンアップするために使用できます。これを使用するためのサンプルymlファイルを示します。

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:
          name: Configure Project
          command: meson setup builddir --backend ninja
      - run:
          name: Compile Project
          command: meson compile -C builddir
      - run:
          name: Run Tests
          command: meson test -C builddir

  meson_debian_build:
    executor: meson_debian_builder
    steps:
      - checkout
      - run:
          name: Configure Project
          command: meson setup builddir --backend ninja
      - run:
          name: Compile Project
          command: meson compile -C builddir
      - run:
          name: Run Tests
          command: meson test -C builddir

  meson_fedora_build:
    executor: meson_fedora_builder
    steps:
      - checkout
      - run:
          name: Configure Project
          command: meson setup builddir --backend ninja
      - run:
          name: Compile Project
          command: meson compile -C builddir
      - run:
          name: Run Tests
          command: meson test -C builddir

workflows:
  version: 2
  linux_workflow:
    jobs:
      - meson_ubuntu_build
      - meson_debian_build
      - meson_fedora_build

Linuxホスト用のCircleCI(カスタムDockerイメージを使用しない)

このCircleCI構成では、buildというワークフロー内にbuild-linuxbuild-macosという2つのジョブが定義されています。build-linuxジョブはPython 3.12.3を使用したDockerイメージを使用し、build-macosはXcode 15.3.0を使用したmacOSで実行されます。各ジョブでは、コードのチェックアウト、MesonとNinjaのインストール、プロジェクトの設定、コンパイル、Mesonを使用したテストの実行が含まれます。

version: 2.1

jobs:
  build-linux:
    docker:
      - image: cimg/python:3.12.3
    steps:
      - checkout
      - run:
          name: Install Meson and Ninja
          command: |
            python -m pip install --user meson ninja
      - run:
          name: Configure Project
          command: |
            meson setup builddir
      - run:
          name: Compile Project
          command: |
            meson compile -C builddir
      - run:
          name: Run Tests
          command: |
            meson test -C builddir

  build-macos:
    macos:
      xcode: 15.3.0
    steps:
      - checkout
      - run:
          name: Install Meson and Ninja
          command: |
            python -m pip install meson ninja
      - run:
          name: Configure Project
          command: |
            meson setup builddir
      - run:
          name: Compile Project
          command: |
            meson compile -C builddir
      - run:
          name: Run Tests
          command: |
            meson test -C builddir

workflows:
  version: 2.1
  build:
    jobs:
      - build-linux
      - build-macos

Windows用のAppVeyor

Windows用のCIであるAppVeyorは、既定の設定を幅広く用意しています。AppVeyorには、MacOSLinuxのCIイメージもあります。これは、Visual Studio 2017、2019、および2022を使用したWindows用のサンプルappveyor.ymlファイルです。

version: 1.0.{build}
image:
- Visual Studio 2022
- Visual Studio 2019
- Visual Studio 2017

install:
- cmd: python -m pip install meson ninja

build_script:
- cmd: >-
    meson setup builddir
    meson compile -C builddir

test_script:
- cmd: meson test -C builddir

Qt

Qt 5の場合は、PYTHON_ROOTの割り当ての近くに次の行を追加します。

 - cmd: if %arch%==x86 (set QT_ROOT=C:\Qt\5.11\%compiler%) else (set QT_ROOT=C:\Qt\5.11\%compiler%_64)

その後、%QT_ROOT%\binPATH変数に追加します。

たとえば、msvc2017の32ビットビルドはないため、ビルドマトリックスを調整する必要があるかもしれません。詳細については、AppVeyorのドキュメントのビルド環境ページを参照してください。

Boost

MesonがBoostを見つけるには以下のステートメントで十分です。

 - cmd: set BOOST_ROOT=C:\Libraries\boost_1_67_0

Dockerを使用しないTravis

Dockerを使用しないTravis-CIビルドでは、Linux、MacOS、またはWindowsを使用できます。ビルド**マトリックス**の目的のコンパイラを設定します。この例は**Linux**(Ubuntu 18.04)と**C**です。

dist: bionic
group: travis_latest

os: linux
language: python

matrix:
  include:
    - env: CC=gcc
    - env: CC=clang

install:
  - pip install meson ninja

script:
  - meson setup builddir
  - meson compile -C builddir
  - meson test -C builddir

GitHub Actions

GitHub Actionsは、継続的インテグレーション(CI)のための汎用的なプラットフォームを提供します。このサンプルワークフローファイルci_meson.ymlは、Linux、macOS、およびWindowsでGCCを利用するCベースのプロジェクト向けに調整されています。Cコードファイルの変更によってトリガーされ、さまざまなオペレーティングシステム全体で異なるバージョンのMeson(1.0.0、1.1.0、1.2.0、1.3.0、1.4.0)を使用して自動的にビルドおよびテストプロセスを実行します。ワークフローの各ジョブは、チェックアウト、依存関係のインストール、プロジェクト構成、テスト実行、および失敗時にオプションのテストログアップロードを処理します。

name: CI Meson

on:
  push:
    paths:
      - "**.c"
      - "**.h"
  pull_request:
    paths:
      - "**.c"
      - "**.h"

jobs:
  build:
    name: Build and Test on ${{ matrix.os }} with Meson v${{ matrix.meson_version }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        meson_version: ["1.2.0", "1.3.0", "1.4.0"]
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.x'
      - name: Install dependencies
        run: python -m pip install meson==${{ matrix.meson_version }} ninja
      - name: Configure Project
        run: meson setup builddir/
        env:
          CC: gcc
      - name: Run Tests
        run: meson test -C builddir/ -v
      - name: Upload Test Log
        uses: actions/upload-artifact@v4
        if: failure()
        with:
          name: ${{ matrix.os }}_Meson_Testlog
          path: builddir/meson-logs/testlog.txt

検索の結果は次のとおりです。