summaryrefslogtreecommitdiff
path: root/.github/workflows/cmark-ci.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/cmark-ci.yml')
-rw-r--r--.github/workflows/cmark-ci.yml129
1 files changed, 129 insertions, 0 deletions
diff --git a/.github/workflows/cmark-ci.yml b/.github/workflows/cmark-ci.yml
new file mode 100644
index 0000000000..45daf6082f
--- /dev/null
+++ b/.github/workflows/cmark-ci.yml
@@ -0,0 +1,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