name: Rust

on:
  push:
    branches: [master, dev/0.2.x]
  pull_request:
    branches: [master, dev/0.2.x]

env:
  CARGO_TERM_COLOR: always

jobs:
  build:
    strategy:
      fail-fast: true
      matrix:
        os-arch:
          - { os: "ubuntu-latest", arch: "X64" }
          - { os: "windows-11", arch: "X64" }
          - { os: "macos-ventura", arch: "ARM64" }
          - { os: "ubuntu-22.04", arch: "ARM64" }
    runs-on: ["${{ matrix.os-arch.os }}", "${{ matrix.os-arch.arch }}"]

    steps:
      - uses: actions/checkout@v2
        with:
          submodules: recursive
      - name: Install ACL
        if: startsWith(matrix.os-arch.os,'ubuntu')
        run: sudo apt-get -y install acl-dev
      - name: Install LLVM toolchain
        if: startsWith(matrix.os-arch.os,'macos')
        run: |
          brew install llvm@19
          ls /opt/homebrew/opt/llvm@19/bin
          echo "/opt/homebrew/opt/llvm@19/bin" >> $GITHUB_PATH
      - name: Install Rust toolchain
        run: |
          rustup show
          rustup component add rustfmt clippy
      - name: Code format check
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: -- --check
      - name: Clippy check
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: -- -D warnings
      - name: Build (default features)
        run: cargo build --verbose
      - name: Build (with Iceoryx)
        run: cargo build --features iceoryx --verbose
      - name: Build (with symbol prefixing)
        run: cargo build --features prefix_symbols --verbose
      - name: Run tests (default features)
        run: cargo test --verbose
      - name: Run tests (with Iceoryx)
        run: cargo test --features iceoryx --verbose
      - name: Run tests (with symbol prefixing)
        run: cargo test --features prefix_symbols --verbose
