name: Lanelet2 CI

on:
  push:
    branches:
      - "**"
    tags:
      - "**"
  pull_request:

jobs:
  formatting:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Format
        uses: cpp-linter/cpp-linter-action@v2
        id: formatter
        with:
          version: 17
          style: file
          tidy-checks: '-*' # only formatting

      - name: Fail?
        if: steps.formatter.outputs.checks-failed > 0
        run: echo "Some files failed the formatting checks!" && exit 1

  lint:
    needs: formatting
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'
          cache: 'pip'

      - name: Install Dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

      - name: Create Conan build
        run: |
          conan profile detect --force
          conan install . --output-folder=build --build=missing

      - name: Build with CMake
        run: |
          cmake -S . -B build --preset conan-release -DCMAKE_BUILD_TYPE=Release
          cmake --build build

      - name: Lint
        uses: cpp-linter/cpp-linter-action@v2
        id: linter
        with:
          version: 17
          style: file
          tidy-checks: '' # force the use of .clang-tidy
          database: 'build'

  #      - name: Fail?
  #        if: steps.linter.outputs.checks-failed > 0
  #        run: echo "Some files failed the linting checks!" && exit 1

  test:
    needs: formatting
    strategy:
      fail-fast: false
      matrix:
        os: [ ubuntu-latest, windows-latest, macos-latest ]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'
          cache: 'pip'

      - name: Install Dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

      - name: Create Conan build
        run: |
          conan profile detect --force
          conan install . --output-folder=build --build=missing

      - name: Build with CMake on Windows
        if: runner.os == 'Windows'
        run: |
          cmake -S . -B build --preset conan-default
          cmake --build build --config Release

      - name: Build with CMake on Linux and macOS
        if: runner.os == 'Linux' || runner.os == 'macOS'
        run: |
          cmake -S . -B build --preset conan-release -DCMAKE_BUILD_TYPE=Release
          cmake --build build

      - name: Test with CTest
        run: |
          ctest --test-dir build
