summaryrefslogtreecommitdiff
path: root/.github/workflows/tomlplusplus-ci.yml
blob: 7bffcc6f5f353400331347beb5407cf440199598 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
name: "tomlplusplus: CI"

on:
  workflow_dispatch:
  workflow_call:

concurrency:
  group: tomlplusplus-${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

env:
  clang_version: "14"
  gcc_version: "11"

jobs:
  linux:
    strategy:
      fail-fast: false
      matrix:
        compiler:
          - "clang"
          - "gcc"
        linker:
          - "lld"
        type:
          - "debug"
          - "release"

    runs-on: ubuntu-latest

    defaults:
      run:
        shell: bash
        working-directory: tomlplusplus

    steps:
      - uses: actions/checkout@v6

      - name: Install base dependencies
        working-directory: .
        run: |
          sudo apt -y update
          sudo apt -y install --no-install-recommends git ninja-build libstdc++-${{ env.gcc_version }}-dev locales-all

      - name: Install python dependencies
        run: |
          pip3 install --user --no-cache-dir --upgrade meson
          pip3 install --user --no-cache-dir --upgrade -r tools/requirements.txt

      - name: Check toml.hpp
        run: |
          cd tools
          python3 ci_single_header_check.py

      - name: Install lld
        if: ${{ startsWith(matrix.linker, 'lld') }}
        run: |
          sudo apt -y install --no-install-recommends lld-${{ env.clang_version }}
          sudo update-alternatives --install /usr/bin/ld.lld ld.lld /usr/bin/ld.lld-${{ env.clang_version }} 1000

      - name: Install clang
        if: ${{ startsWith(matrix.compiler, 'clang') }}
        run: |
          sudo apt -y install --no-install-recommends clang-${{ env.clang_version }}
          sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-${{ env.clang_version }} 1000
          sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang-${{ env.clang_version }} 1000

      - name: Install gcc
        if: ${{ startsWith(matrix.compiler, 'gcc') }}
        run: |
          sudo apt -y install --no-install-recommends gcc-${{ env.gcc_version }} g++-${{ env.gcc_version }}
          sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-${{ env.gcc_version }} 1000
          sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-${{ env.gcc_version }} 1000

      - name: Configure locales
        run: |
          sudo locale-gen 'en_US.utf8' 'ja_JP.utf8' 'de_DE.utf8' 'it_IT.utf8' 'tr_TR.utf8' 'fi_FI.utf8' 'fr_FR.utf8' 'zh_CN.utf8'

      - name: Configure Meson
        run: |
          CXX=c++ CXX_LD=${{ matrix.linker }} meson setup build --buildtype=${{ matrix.type }} -Ddevel=true -Db_lto=false

      - name: Build
        run: meson compile -C build

      - name: Test
        run: meson test -C build --verbose

  windows:
    strategy:
      fail-fast: false
      matrix:
        type:
          - "debug"
          - "release"
        permissive:
          - false
          - true
        arch:
          - name: "x64"
            runner: "windows-2022"
          - name: "arm64"
            runner: "windows-11-arm"
    runs-on: ${{ matrix.arch.runner }}

    defaults:
      run:
        shell: cmd
        working-directory: tomlplusplus

    steps:
      - uses: actions/checkout@v6

      - name: Install dependencies
        working-directory: .
        run: |
          python3 -m pip install -U pip
          pip3 install meson ninja

      - uses: ilammy/msvc-dev-cmd@v1
        with:
          arch: ${{ matrix.arch.name }}

      - name: Configure Meson
        run: meson setup build --vsenv --buildtype=${{ matrix.type }} -Ddevel=true -Db_lto=false -Dpermissive=${{ matrix.permissive }}

      - name: Build
        run: meson compile -C build

      - name: Test
        run: meson test -C build --verbose