name: clang defaults: run: # Use a bash shell so we can use the same syntax for environment variable # access regardless of the host operating system shell: bash -e -x {0} on: # https://github.community/t/how-to-trigger-an-action-on-push-or-pull-request-but-not-both/16662 workflow_dispatch: push: branches: - master pull_request: branches: - master env: PROJ_PFX_TARGET: ryml- PROJ_PFX_CMAKE: RYML_ CMAKE_FLAGS: -DRYML_TEST_SUITE=ON NUM_JOBS_BUILD: # 4 jobs: clang_canary: name: ${{matrix.cxx}}/canary/c++${{matrix.std}}/${{matrix.bt}} if: | (!contains(github.event.head_commit.message, 'skip all')) || (!contains(github.event.head_commit.message, 'skip clang')) || contains(github.event.head_commit.message, 'only clang') continue-on-error: true runs-on: ${{matrix.os}} strategy: fail-fast: false matrix: include: - {std: 17, cxx: clang++-10 , bt: Debug , os: ubuntu-20.04, bitlinks: shared64 static32} - {std: 17, cxx: clang++-10 , bt: Release, os: ubuntu-20.04, bitlinks: shared64 static32} - {std: 20, cxx: clang++-10 , bt: Debug , os: ubuntu-20.04, bitlinks: shared64 static32} - {std: 20, cxx: clang++-10 , bt: Release, os: ubuntu-20.04, bitlinks: shared64 static32} - {std: 11, cxx: clang++-6.0, bt: Debug , os: ubuntu-20.04, bitlinks: shared64 static32} - {std: 11, cxx: clang++-6.0, bt: Release, os: ubuntu-20.04, bitlinks: shared64 static32} env: {STD: "${{matrix.std}}", CXX_: "${{matrix.cxx}}", BT: "${{matrix.bt}}", BITLINKS: "${{matrix.bitlinks}}", CMAKE_FLAGS: "${{matrix.cmkflags}}", VG: "${{matrix.vg}}", SAN: "${{matrix.san}}", LINT: "${{matrix.lint}}", OS: "${{matrix.os}}"} steps: - {name: checkout, uses: actions/checkout@v4, with: {submodules: recursive}} - {name: install requirements, run: source .github/reqs.sh && c4_install_test_requirements $OS} - {name: show info, run: source .github/setenv.sh && c4_show_info} - name: shared64-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test shared64 - {name: shared64-build, run: source .github/setenv.sh && c4_build_test shared64} - {name: shared64-run, run: source .github/setenv.sh && c4_run_test shared64} - {name: shared64-pack, run: source .github/setenv.sh && c4_package shared64} - name: static64-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test static64 - {name: static64-build, run: source .github/setenv.sh && c4_build_test static64} - {name: static64-run, run: source .github/setenv.sh && c4_run_test static64} - {name: static64-pack, run: source .github/setenv.sh && c4_package static64} - name: static32-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test static32 - {name: static32-build, run: source .github/setenv.sh && c4_build_test static32} - {name: static32-run, run: source .github/setenv.sh && c4_run_test static32} - {name: static32-pack, run: source .github/setenv.sh && c4_package static32} - name: shared32-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test shared32 - {name: shared32-build, run: source .github/setenv.sh && c4_build_test shared32} - {name: shared32-run, run: source .github/setenv.sh && c4_run_test shared32} - {name: shared32-pack, run: source .github/setenv.sh && c4_package shared32} clang_canary_tabtokens: name: tabtokens/${{matrix.cxx}}/canary/c++${{matrix.std}}/${{matrix.bt}} if: | (!contains(github.event.head_commit.message, 'skip all')) || (!contains(github.event.head_commit.message, 'skip clang')) || contains(github.event.head_commit.message, 'only clang') continue-on-error: true runs-on: ${{matrix.os}} strategy: fail-fast: false matrix: include: - {std: 17, cxx: clang++-10 , bt: Debug , os: ubuntu-20.04, bitlinks: static64, cmkflags: "-DRYML_WITH_TAB_TOKENS=ON"} - {std: 17, cxx: clang++-10 , bt: Release, os: ubuntu-20.04, bitlinks: static64, cmkflags: "-DRYML_WITH_TAB_TOKENS=ON"} - {std: 20, cxx: clang++-10 , bt: Debug , os: ubuntu-20.04, bitlinks: static64, cmkflags: "-DRYML_WITH_TAB_TOKENS=ON"} - {std: 20, cxx: clang++-10 , bt: Release, os: ubuntu-20.04, bitlinks: static64, cmkflags: "-DRYML_WITH_TAB_TOKENS=ON"} - {std: 11, cxx: clang++-6.0, bt: Debug , os: ubuntu-20.04, bitlinks: static64, cmkflags: "-DRYML_WITH_TAB_TOKENS=ON"} - {std: 11, cxx: clang++-6.0, bt: Release, os: ubuntu-20.04, bitlinks: static64, cmkflags: "-DRYML_WITH_TAB_TOKENS=ON"} env: {STD: "${{matrix.std}}", CXX_: "${{matrix.cxx}}", BT: "${{matrix.bt}}", BITLINKS: "${{matrix.bitlinks}}", CMAKE_FLAGS: "${{matrix.cmkflags}}", VG: "${{matrix.vg}}", SAN: "${{matrix.san}}", LINT: "${{matrix.lint}}", OS: "${{matrix.os}}"} steps: - {name: checkout, uses: actions/checkout@v4, with: {submodules: recursive}} - {name: install requirements, run: source .github/reqs.sh && c4_install_test_requirements $OS} - {name: show info, run: source .github/setenv.sh && c4_show_info} - name: shared64-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test shared64 - {name: shared64-build, run: source .github/setenv.sh && c4_build_test shared64} - {name: shared64-run, run: source .github/setenv.sh && c4_run_test shared64} - {name: shared64-pack, run: source .github/setenv.sh && c4_package shared64} - name: static64-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test static64 - {name: static64-build, run: source .github/setenv.sh && c4_build_test static64} - {name: static64-run, run: source .github/setenv.sh && c4_run_test static64} - {name: static64-pack, run: source .github/setenv.sh && c4_package static64} - name: static32-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test static32 - {name: static32-build, run: source .github/setenv.sh && c4_build_test static32} - {name: static32-run, run: source .github/setenv.sh && c4_run_test static32} - {name: static32-pack, run: source .github/setenv.sh && c4_package static32} - name: shared32-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test shared32 - {name: shared32-build, run: source .github/setenv.sh && c4_build_test shared32} - {name: shared32-run, run: source .github/setenv.sh && c4_run_test shared32} - {name: shared32-pack, run: source .github/setenv.sh && c4_package shared32} #---------------------------------------------------------------------------- clang_extended: name: ${{matrix.cxx}}/extended/c++${{matrix.std}}/${{matrix.bt}} needs: clang_canary if: | (!contains(github.event.head_commit.message, 'skip all')) || (!contains(github.event.head_commit.message, 'skip clang')) || contains(github.event.head_commit.message, 'only clang') continue-on-error: true runs-on: ${{matrix.os}} strategy: fail-fast: false matrix: include: - {std: 11, cxx: clang++-10 , bt: Debug , vg: on, os: ubuntu-20.04} - {std: 11, cxx: clang++-10 , bt: Release, vg: on, os: ubuntu-20.04} env: {STD: "${{matrix.std}}", CXX_: "${{matrix.cxx}}", BT: "${{matrix.bt}}", BITLINKS: "${{matrix.bitlinks}}", CMAKE_FLAGS: "${{matrix.cmkflags}}", VG: "${{matrix.vg}}", SAN: "${{matrix.san}}", LINT: "${{matrix.lint}}", OS: "${{matrix.os}}"} steps: - {name: checkout, uses: actions/checkout@v4, with: {submodules: recursive}} - {name: install requirements, run: source .github/reqs.sh && c4_install_test_requirements $OS} - {name: show info, run: source .github/setenv.sh && c4_show_info} - name: shared64-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test shared64 - {name: shared64-build, run: source .github/setenv.sh && c4_build_test shared64} - {name: shared64-run, run: source .github/setenv.sh && c4_run_test shared64} - {name: shared64-pack, run: source .github/setenv.sh && c4_package shared64} - name: static64-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test static64 - {name: static64-build, run: source .github/setenv.sh && c4_build_test static64} - {name: static64-run, run: source .github/setenv.sh && c4_run_test static64} - {name: static64-pack, run: source .github/setenv.sh && c4_package static64} - name: static32-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test static32 - {name: static32-build, run: source .github/setenv.sh && c4_build_test static32} - {name: static32-run, run: source .github/setenv.sh && c4_run_test static32} - {name: static32-pack, run: source .github/setenv.sh && c4_package static32} - name: shared32-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test shared32 - {name: shared32-build, run: source .github/setenv.sh && c4_build_test shared32} - {name: shared32-run, run: source .github/setenv.sh && c4_run_test shared32} - {name: shared32-pack, run: source .github/setenv.sh && c4_package shared32} #---------------------------------------------------------------------------- clang_sanitize: name: ${{matrix.cxx}}/san/c++${{matrix.std}}/${{matrix.bt}} needs: clang_canary if: | (!contains(github.event.head_commit.message, 'skip all')) || (!contains(github.event.head_commit.message, 'skip clang')) || contains(github.event.head_commit.message, 'only clang') continue-on-error: true runs-on: ${{matrix.os}} strategy: fail-fast: false matrix: include: # these jobs take much longer, so run only one bitlink pair per job to profit from parallelism - {std: 11, cxx: clang++-10, bt: Debug , vg: ON, san: ALL, bitlinks: shared64, os: ubuntu-20.04} - {std: 11, cxx: clang++-10, bt: Debug , vg: ON, san: ALL, bitlinks: static64, os: ubuntu-20.04} - {std: 11, cxx: clang++-10, bt: Debug , vg: ON, san: ALL, bitlinks: shared32, os: ubuntu-20.04} - {std: 11, cxx: clang++-10, bt: Debug , vg: ON, san: ALL, bitlinks: static32, os: ubuntu-20.04} - {std: 11, cxx: clang++-10, bt: Release, vg: ON, san: ALL, bitlinks: shared64, os: ubuntu-20.04} - {std: 11, cxx: clang++-10, bt: Release, vg: ON, san: ALL, bitlinks: static64, os: ubuntu-20.04} - {std: 11, cxx: clang++-10, bt: Release, vg: ON, san: ALL, bitlinks: shared32, os: ubuntu-20.04} - {std: 11, cxx: clang++-10, bt: Release, vg: ON, san: ALL, bitlinks: static32, os: ubuntu-20.04} - {std: 17, cxx: clang++-10, bt: Debug , vg: ON, san: ALL, bitlinks: shared64, os: ubuntu-20.04} - {std: 17, cxx: clang++-10, bt: Debug , vg: ON, san: ALL, bitlinks: static64, os: ubuntu-20.04} - {std: 17, cxx: clang++-10, bt: Debug , vg: ON, san: ALL, bitlinks: shared32, os: ubuntu-20.04} - {std: 17, cxx: clang++-10, bt: Debug , vg: ON, san: ALL, bitlinks: static32, os: ubuntu-20.04} - {std: 17, cxx: clang++-10, bt: Release, vg: ON, san: ALL, bitlinks: shared64, os: ubuntu-20.04} - {std: 17, cxx: clang++-10, bt: Release, vg: ON, san: ALL, bitlinks: static64, os: ubuntu-20.04} - {std: 17, cxx: clang++-10, bt: Release, vg: ON, san: ALL, bitlinks: shared32, os: ubuntu-20.04} - {std: 17, cxx: clang++-10, bt: Release, vg: ON, san: ALL, bitlinks: static32, os: ubuntu-20.04} - {std: 20, cxx: clang++-10, bt: Debug , vg: ON, san: ALL, bitlinks: shared64, os: ubuntu-20.04} - {std: 20, cxx: clang++-10, bt: Debug , vg: ON, san: ALL, bitlinks: static64, os: ubuntu-20.04} - {std: 20, cxx: clang++-10, bt: Debug , vg: ON, san: ALL, bitlinks: shared32, os: ubuntu-20.04} - {std: 20, cxx: clang++-10, bt: Debug , vg: ON, san: ALL, bitlinks: static32, os: ubuntu-20.04} - {std: 20, cxx: clang++-10, bt: Release, vg: ON, san: ALL, bitlinks: shared64, os: ubuntu-20.04} - {std: 20, cxx: clang++-10, bt: Release, vg: ON, san: ALL, bitlinks: static64, os: ubuntu-20.04} - {std: 20, cxx: clang++-10, bt: Release, vg: ON, san: ALL, bitlinks: shared32, os: ubuntu-20.04} - {std: 20, cxx: clang++-10, bt: Release, vg: ON, san: ALL, bitlinks: static32, os: ubuntu-20.04} env: {STD: "${{matrix.std}}", CXX_: "${{matrix.cxx}}", BT: "${{matrix.bt}}", BITLINKS: "${{matrix.bitlinks}}", VG: "${{matrix.vg}}", SAN: "${{matrix.san}}", LINT: "${{matrix.lint}}", OS: "${{matrix.os}}"} steps: - {name: checkout, uses: actions/checkout@v4, with: {submodules: recursive}} - {name: install requirements, run: source .github/reqs.sh && c4_install_test_requirements $OS} - {name: show info, run: source .github/setenv.sh && c4_show_info} - name: shared64-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test shared64 - {name: shared64-build, run: source .github/setenv.sh && c4_build_test shared64} - {name: shared64-run, run: source .github/setenv.sh && c4_run_test shared64} - {name: shared64-pack, run: source .github/setenv.sh && c4_package shared64} - name: static64-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test static64 - {name: static64-build, run: source .github/setenv.sh && c4_build_test static64} - {name: static64-run, run: source .github/setenv.sh && c4_run_test static64} - {name: static64-pack, run: source .github/setenv.sh && c4_package static64} - name: static32-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test static32 - {name: static32-build, run: source .github/setenv.sh && c4_build_test static32} - {name: static32-run, run: source .github/setenv.sh && c4_run_test static32} - {name: static32-pack, run: source .github/setenv.sh && c4_package static32} - name: shared32-configure--------------------------------------------------- run: source .github/setenv.sh && c4_cfg_test shared32 - {name: shared32-build, run: source .github/setenv.sh && c4_build_test shared32} - {name: shared32-run, run: source .github/setenv.sh && c4_run_test shared32} - {name: shared32-pack, run: source .github/setenv.sh && c4_package shared32} # #---------------------------------------------------------------------------- # # https://blog.kitware.com/static-checks-with-cmake-cdash-iwyu-clang-tidy-lwyu-cpplint-and-cppcheck/ # static_analysis: # if: | # (!contains(github.event.head_commit.message, 'skip all')) || # (!contains(github.event.head_commit.message, 'skip clang')) || # contains(github.event.head_commit.message, 'only clang') # continue-on-error: true # runs-on: ${{matrix.os}} # strategy: # fail-fast: false # matrix: # include: # # these jobs take much longer, so run only one bitlink pair per job to profit from parallelism # - {std: 11, cxx: clang++-10, bt: Debug , bitlinks: shared64, os: ubuntu-20.04} # - {std: 11, cxx: clang++-10, bt: Release, bitlinks: shared64, os: ubuntu-20.04} # - {std: 14, cxx: clang++-10, bt: Debug , bitlinks: shared64, os: ubuntu-20.04} # - {std: 14, cxx: clang++-10, bt: Release, bitlinks: shared64, os: ubuntu-20.04} # - {std: 17, cxx: clang++-10, bt: Debug , bitlinks: shared64, os: ubuntu-20.04} # - {std: 17, cxx: clang++-10, bt: Release, bitlinks: shared64, os: ubuntu-20.04} # - {std: 20, cxx: clang++-10, bt: Debug , bitlinks: shared64, os: ubuntu-20.04} # - {std: 20, cxx: clang++-10, bt: Release, bitlinks: shared64, os: ubuntu-20.04} # env: {STD: "${{matrix.std}}", CXX_: "${{matrix.cxx}}", BT: "${{matrix.bt}}", BITLINKS: "${{matrix.bitlinks}}", VG: "${{matrix.vg}}", SAN: "${{matrix.san}}", LINT: "${{matrix.lint}}", OS: "${{matrix.os}}"} # steps: # - {name: checkout, uses: actions/checkout@v4, with: {submodules: recursive}} # - {name: install requirements, run: source .github/reqs.sh && c4_install_test_requirements $OS} # - {name: show info, run: source .github/setenv.sh && c4_show_info} # - name: shared64-configure--------------------------------------------------- # run: source .github/setenv.sh && c4_cfg_test shared64 # - {name: shared64-build, run: source .github/setenv.sh && c4_build_test shared64} # - {name: clang-tidy, run: cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-3.9;-checks=*" ../path/to/source} # - {name: cppcheck, run: cmake "-DCMAKE_CXX_CPPCHECK=/usr/bin/cppcheck;--std=c++11" ../path/to/source} # - {name: cpplint, run: cmake "-DCMAKE_CXX_CPPLINT=/usr/local/bin/cpplint;--linelength=179" ..} # - {name: include-what-you-use, run: cmake "-DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=/usr/bin/iwyu;--transitive_includes_only" ..} # - {name: link-what-you-use, run: cmake -DCMAKE_LINK_WHAT_YOU_USE=TRUE ..}