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