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

on:
  push:
    branches-ignore:
      - 'dependabot/**'
    paths:
      - 'cmark/**'
      - '.github/workflows/cmark-ci.yml'
  pull_request:
    paths:
      - 'cmark/**'
      - '.github/workflows/cmark-ci.yml'
  workflow_dispatch:

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