name: test-nuget-package

on: [push, pull_request]

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build_macos_intel:
    runs-on: macos-15-intel
    # strategy:
      # matrix:
      #   python: [3.11]
    steps:
      - uses: actions/checkout@v4
      - name: Build HiGHS
        run: |
         cmake -E make_directory ${{runner.workspace}}/build
         cmake -E make_directory ${{runner.workspace}}/nugets
         cmake -E make_directory ${{runner.workspace}}/test_nuget

      - name: Configure CMake
        working-directory: ${{runner.workspace}}/build
        run: cmake $GITHUB_WORKSPACE -DCSHARP=ON -DBUILD_DOTNET=ON

      - name: Build
        working-directory: ${{runner.workspace}}/build
        run: cmake --build . --config Release --parallel

      - uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '6.0.x'

      - name: Dotnet pack
        working-directory: ${{runner.workspace}}/build/dotnet/Highs.Native
        run: dotnet pack -c Release /p:Version=1.13.1

      - name: Add local feed
        run: dotnet nuget add source ${{runner.workspace}}/nugets

      - name: Dotnet push to local feed
        working-directory: ${{runner.workspace}}/build/dotnet/Highs.Native
        run: dotnet nuget push ./bin/Release/*.nupkg -s ${{runner.workspace}}/nugets

      - name: Create new project and test
        shell: bash
        working-directory: ${{runner.workspace}}/test_nuget
        run: |
          dotnet new console
          rm Program.cs
          cp $GITHUB_WORKSPACE/examples/call_highs_from_csharp.cs .
          dotnet add package Highs.Native -s ${{runner.workspace}}/nugets
          dotnet run

  build_macos_arm:
    runs-on: macos-14  # macos-14 is arm64
    steps:
      - uses: actions/checkout@v4
      - name: Build HiGHS
        run: |
         cmake -E make_directory ${{runner.workspace}}/build
         cmake -E make_directory ${{runner.workspace}}/nugets
         cmake -E make_directory ${{runner.workspace}}/test_nuget

      - name: Configure CMake
        working-directory: ${{runner.workspace}}/build
        run: cmake $GITHUB_WORKSPACE -DCSHARP=ON -DBUILD_DOTNET=ON

      - name: Build
        working-directory: ${{runner.workspace}}/build
        run: cmake --build . --config Release --parallel

      - uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '6.0.x'

      - name: Dotnet pack
        working-directory: ${{runner.workspace}}/build/dotnet/Highs.Native
        run: dotnet pack -c Release /p:Version=1.13.1

      - name: Add local feed
        run: dotnet nuget add source ${{runner.workspace}}/nugets

      - name: Dotnet push to local feed
        working-directory: ${{runner.workspace}}/build/dotnet/Highs.Native
        run: dotnet nuget push ./bin/Release/*.nupkg -s ${{runner.workspace}}/nugets

      - name: Create new project and test
        shell: bash
        working-directory: ${{runner.workspace}}/test_nuget
        run: |
          dotnet new console
          rm Program.cs
          cp $GITHUB_WORKSPACE/examples/call_highs_from_csharp.cs .
          dotnet add package Highs.Native -s ${{runner.workspace}}/nugets
          dotnet run

  build_linux:
    runs-on: ubuntu-latest
    container: stabletec/build-core:debian-11
    steps:
      - uses: actions/checkout@v4
      - name: Build HiGHS
        run: |
         cmake -E make_directory /__w/HiGHS/HiGHS/build
         cmake -E make_directory /__w/HiGHS/HiGHS/nugets
         cmake -E make_directory /__w/HiGHS/HiGHS/test_nuget

      - name: Configure CMake
        working-directory: /__w/HiGHS/HiGHS/build
        run: cmake $GITHUB_WORKSPACE -DCSHARP=ON -DBUILD_DOTNET=ON

      - name: Build
        working-directory: /__w/HiGHS/HiGHS/build
        run: cmake --build . --config Release --parallel

      - uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '6.0.x'

      - name: Dotnet pack
        working-directory: /__w/HiGHS/HiGHS/build/dotnet/Highs.Native
        run: dotnet pack -c Release /p:Version=1.13.1

      - name: Add local feed
        run: dotnet nuget add source /__w/HiGHS/HiGHS/nugets

      - name: Dotnet push to local feed
        working-directory: /__w/HiGHS/HiGHS/build/dotnet/Highs.Native
        run: dotnet nuget push ./bin/Release/*.nupkg -s /__w/HiGHS/HiGHS/nugets

      - name: Create new project and test
        shell: bash
        working-directory: /__w/HiGHS/HiGHS/test_nuget
        run: |
          dotnet new console
          rm Program.cs
          cp $GITHUB_WORKSPACE/examples/call_highs_from_csharp.cs .
          dotnet add package Highs.Native -s /__w/HiGHS/HiGHS/nugets
          dotnet run

  build_linux_8:
    runs-on: ubuntu-latest
    container: stabletec/build-core:debian-11
    steps:
      - uses: actions/checkout@v4
      - name: Build HiGHS
        run: |
         cmake -E make_directory /__w/HiGHS/HiGHS/build
         cmake -E make_directory /__w/HiGHS/HiGHS/nugets
         cmake -E make_directory /__w/HiGHS/HiGHS/test_nuget

      - name: Configure CMake
        working-directory: /__w/HiGHS/HiGHS/build
        run: cmake $GITHUB_WORKSPACE -DCSHARP=ON -DBUILD_DOTNET=ON

      - name: Build
        working-directory: /__w/HiGHS/HiGHS/build
        run: cmake --build . --config Release --parallel

      - uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '8.0.x'

      - name: Dotnet pack
        working-directory: /__w/HiGHS/HiGHS/build/dotnet/Highs.Native
        run: dotnet pack -c Release /p:Version=1.13.1

      - name: Add local feed
        run: dotnet nuget add source /__w/HiGHS/HiGHS/nugets

      - name: Dotnet push to local feed
        working-directory: /__w/HiGHS/HiGHS/build/dotnet/Highs.Native
        run: dotnet nuget push ./bin/Release/*.nupkg -s /__w/HiGHS/HiGHS/nugets

      - name: Create new project and test
        shell: bash
        working-directory: /__w/HiGHS/HiGHS/test_nuget
        run: |
          dotnet new console
          rm Program.cs
          cp $GITHUB_WORKSPACE/examples/call_highs_from_csharp.cs .
          dotnet add package Highs.Native -s /__w/HiGHS/HiGHS/nugets
          dotnet run

  build_windows:
    runs-on: windows-2022
    steps:
      - uses: actions/checkout@v4
      - name: Build HiGHS Windows native
        run: |
         cmake -E make_directory ${{runner.workspace}}/build
         cmake -E make_directory ${{runner.workspace}}/nugets
         cmake -E make_directory ${{runner.workspace}}/test_nuget

      - name: Configure CMake
        shell: bash
        working-directory: ${{runner.workspace}}/build
        run: cmake $GITHUB_WORKSPACE -DCSHARP=ON -DBUILD_DOTNET=ON

      - name: Build
        shell: bash
        working-directory: ${{runner.workspace}}/build
        run: cmake --build . --config Release --parallel

      - uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '6.0.x'

      - name: Dotnet pack
        working-directory: ${{runner.workspace}}/build/dotnet/Highs.Native
        run: dotnet pack -c Release /p:Version=1.13.1

      - name: Add local feed
        run: dotnet nuget add source -n name ${{runner.workspace}}\nugets

      - name: Dotnet push to local feed
        working-directory: ${{runner.workspace}}/build/dotnet/Highs.Native
        shell: bash
        run: dotnet nuget push ./bin/Release/*.nupkg -s name

      - name: Create new project and test
        working-directory: ${{runner.workspace}}/test_nuget
        run: |
          dotnet new console
          rm Program.cs
          cp ${{runner.workspace}}\HiGHS\examples\call_highs_from_csharp.cs .
          dotnet add package Highs.Native -v 1.13.1 -s ${{runner.workspace}}\nugets
          dotnet run
