name: CI
on:
  workflow_dispatch:
  push:
    branches:
    - main
  pull_request:
    branches:
    - main

defaults:
  run:
    shell: bash -l {0}

jobs:
  unix:

    runs-on: ${{ matrix.os }}

    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-22.04, ubuntu-24.04, macos-13, macos-14]
        xeus_static_dependencies: [0]
        xeus_build_shared_lib: [1]
        include:
          - os: ubuntu-22.04
            xeus_static_dependencies: 1
            xeus_build_shared_lib: 0
          - os: ubuntu-24.04
            xeus_static_dependencies: 1
            xeus_build_shared_lib: 0

    steps:
      - uses: actions/checkout@v4

      - name: Get number of CPU cores
        uses: SimenB/github-actions-cpu-cores@v2

      - name: Install micromamba
        uses: mamba-org/setup-micromamba@v2
        with:
          environment-file: environment-dev.yml
          environment-name: xeus
          create-args: libuuid

      - name: Make build directory
        run: mkdir build

      - name: Configure cmake
        run: |
          cmake .. \
           -DXEUS_BUILD_TESTS=ON \
           -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
           -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX \
           -DXEUS_STATIC_DEPENDENCIES=${{ matrix.xeus_static_dependencies }} \
           -DXEUS_BUILD_SHARED_LIBS=${{ matrix.xeus_build_shared_lib }}
        working-directory: build

      - name: Build
        run: make -j ${{ steps.cpu-cores.outputs.count }}
        working-directory: build

      - name: Test xeus
        uses: nick-fields/retry@v3
        with:
          timeout_minutes: 4
          max_attempts: 4
          shell: bash
          command: |
            cd build/test
            ctest --output-on-failure

      - name: Install xeus
        run: make install
        working-directory: build

  win:

    runs-on: ${{ matrix.os }}
    defaults:
      run:
        shell: cmd /C call {0}

    strategy:
      fail-fast: false
      matrix:
        os: [ windows-2022, windows-2025 ]

    steps:
      - uses: actions/checkout@v4

      - name: Install micromamba
        uses: mamba-org/setup-micromamba@v2
        with:
          environment-file: environment-dev.yml
          environment-name: xeus
          init-shell: cmd.exe

      - name: Make build directory
        run: mkdir build

      - name: Configure cmake
        run: |
          cmake .. ^
           -G Ninja ^
           -DCMAKE_BUILD_TYPE=Release ^
           -DXEUS_BUILD_TESTS=ON ^
           -DDEPENDENCY_SEARCH_PREFIX="%CONDA_PREFIX%\Library" ^
           -DCMAKE_PREFIX_PATH="%CONDA_PREFIX%\Library" ^
           -DCMAKE_INSTALL_PREFIX="%CONDA_PREFIX%"
        working-directory: build

      - name: Build
        run: |
          set CL=/MP
          ninja install
        working-directory: build

      - name: Test xeus
        uses: nick-fields/retry@v3
        with:
          timeout_minutes: 4
          max_attempts: 4
          command: |
            set PATH=%CONDA_PREFIX%;%CONDA_PREFIX%\\Scripts;%CONDA_PREFIX%\\Library;%CONDA_PREFIX%\\Library\\bin;%PATH%
            cd build
            ctest --output-on-failure
          shell: cmd

  emscripten_wasm:

    runs-on: ubuntu-24.04

    strategy:
      fail-fast: false

    steps:
      - uses: actions/checkout@v4

      - name: Get number of CPU cores
        uses: SimenB/github-actions-cpu-cores@v2

      - name: Install micromamba
        uses: mamba-org/setup-micromamba@v2
        with:
          environment-file: environment-wasm-build.yml
          environment-name: xeus-wasm-build
          create-args: libuuid

      - name: Build and package xeus
        run: |
          micromamba create -f environment-wasm-host.yml --platform=emscripten-wasm32

          mkdir build
          pushd build

          export PREFIX=$MAMBA_ROOT_PREFIX/envs/xeus-wasm-host
          export CMAKE_PREFIX_PATH=$PREFIX
          export CMAKE_SYSTEM_PREFIX_PATH=$PREFIX

          emcmake cmake \
            -DCMAKE_BUILD_TYPE=Release \
            -DCMAKE_FIND_ROOT_PATH=$PREFIX \
            -DXEUS_EMSCRIPTEN_WASM_BUILD=ON \
            -DXEUS_BUILD_STATIC_LIBS=ON \
            -DXEUS_BUILD_SHARED_LIBS=ON \
            ..

          make -j${{ steps.cpu-cores.outputs.count }}
