name: ubuntu-latest-clang-ci

on:
  push:
    branches:
      - master
      - feature/**
      - improvement/**
      - bugfix/**

  pull_request:
    branches:
      - master
      - feature/**
      - improvement/**
      - bugfix/**

jobs:
  clang_tests:
    if: >-
      ! contains(toJSON(github.event.commits.*.message), '[skip ci]') &&
      ! contains(toJSON(github.event.commits.*.message), '[skip github]')

    strategy:
      matrix:
        # cmake clang12 is not able to compile a simple test program.
        # /usr/bin/ld: cannot find -lunwind
        version:
          ['latest', '16', '15', '14', '13', '11', '10', '9', '8', '7']
        type: [Release, Debug]

    runs-on: ubuntu-latest

    name: "Clang ${{matrix.version}}: ${{matrix.type}}"

    container:
      image: silkeh/clang:${{matrix.version}}

      options: -v /usr/local:/host_usr_local

    env:
      CC: clang
      CXX: clang++
      CXXFLAGS: -stdlib=libc++

    steps:
      - uses: actions/checkout@v1

      - uses: friendlyanon/fetch-core-count@v1
        id: cores

      - name: CMake
        run: echo "/host_usr_local/bin" >> $GITHUB_PATH

      - name: Install dependencies
        run: |
          apt-get update
          apt-get install -y git
          script/ci_install_deps.sh

      - name: Configure
        run: cmake -S test -B build -DCMAKE_BUILD_TYPE=${{matrix.type}}

      - name: Build
        run: cmake --build build -j ${{steps.cores.outputs.count}}

      - name: Run
        working-directory: build
        run: ctest --output-on-failure -j ${{steps.cores.outputs.count}}