継続的インテグレーション
ここでは、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-linux
とbuild-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には、MacOSとLinuxの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%\bin
をPATH
変数に追加します。
たとえば、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
検索の結果は次のとおりです。