summaryrefslogtreecommitdiff
path: root/.github/workflows/cmark-ci.yml
blob: 4d1fdb21800fcd7c85f45b3365cc3e3e90361f88 (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
name: "cmark: CI"

on:
  workflow_dispatch:
  workflow_call:

jobs:
  linter:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Install clang-tidy
        run: sudo apt-get install -y clang-tidy
      - name: lint with clang-tidy
        working-directory: cmark
        run: make lint
        env:
          CC: clang
          CXX: clang++

  posix:
    strategy:
      fail-fast: false
      matrix:
        os: [linux, macos]
        cc: [clang, gcc]
        build_type: [shared, static]
        sanitizers: ['', ASan]
        include:
          - os: 'linux'
            image: 'ubuntu-latest'
          - os: 'macos'
            image: 'macos-latest'
          - cc: 'clang'
            cxx: 'clang++'
          - cc: 'gcc'
            cxx: 'g++'
          - build_type: 'shared'
            cmake_shared: 'YES'
          - build_type: 'static'
            cmake_shared: 'NO'
          - sanitizers: 'ASan'
            san_cflags: '-fsanitize=address,undefined -fno-sanitize-recover=all'
          - sanitizers: 'ASan'
            os: 'linux'
            cc: 'gcc'
            build_type: 'shared'
            test_env: 'LD_PRELOAD=$(gcc -print-file-name=libasan.so)'
          - sanitizers: 'ASan'
            os: 'linux'
            cc: 'clang'
            build_type: 'shared'
            asan_cflags: '-shared-libasan'
            test_env: 'LD_PRELOAD=$(clang -print-file-name=libclang_rt.asan-x86_64.so)'
          - sanitizers: 'ASan'
            build_type: 'shared'
            asan_opts: 'detect_leaks=0'
          - sanitizers: 'ASan'
            cc: 'gcc'
            build_type: 'static'
            asan_cflags: '-static-libasan'
        exclude:
          - os: 'macos'
            cc: 'gcc'
          - os: 'macos'
            sanitizers: 'ASan'
            build_type: 'shared'

    runs-on: ${{ matrix.image }}

    env:
      ASAN_OPTIONS: ${{ matrix.asan_opts }}
      CC: ${{ matrix.cc }}
      CXX: ${{ matrix.cxx }}
      CFLAGS: '${{ matrix.san_cflags }} ${{ matrix.asan_cflags }}'
      CXXFLAGS: '${{ matrix.san_cflags }} ${{ matrix.asan_cflags }}'

    steps:
      - uses: actions/checkout@v6
      - name: Build and test
        working-directory: cmark
        run: |
          cmake \
            -DBUILD_SHARED_LIBS=${{ matrix.cmake_shared }} \
            -DCMAKE_BUILD_TYPE=Debug \
            -S . -B build
          cmake --build build
          ${{ matrix.test_env }} ctest --test-dir build --output-on-failure

  windows:
    runs-on: windows-latest
    strategy:
      fail-fast: false
      matrix:
        build_type: [shared, static]
        include:
          - build_type: 'shared'
            cmake_shared: 'YES'
          - build_type: 'static'
            cmake_shared: 'NO'
    steps:
      - uses: actions/checkout@v6
      - uses: ilammy/msvc-dev-cmd@v1
      - name: Build and test
        working-directory: cmark
        run: |
          cmake ^
              -DBUILD_SHARED_LIBS=${{ matrix.cmake_shared }} ^
              -DCMAKE_BUILD_TYPE=Debug ^
              -S . -B build
          cmake --build build
          ctest --test-dir build -C Debug --output-on-failure
        shell: cmd
      - name: Upload artifact
        if: ${{ matrix.build_type == 'static' }}
        uses: actions/upload-artifact@v7
        with:
          name: cmark windows ${{ matrix.build_type }}
          path: cmark/build/src/Debug/cmark.exe
          if-no-files-found: error