name: Build

on:
  push:
    tags-ignore:
      - '*'
  pull_request:
  workflow_dispatch:

env:
  DOTNET_VERSION: '10.0.x'
  Solution_Name: LanMountainDesktop.sln

jobs:
  build-windows:
    runs-on: windows-latest
    name: Build_Windows_${{ matrix.configuration }}
    strategy:
      matrix:
        configuration: [ Debug, Release ]
      fail-fast: false
    
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          submodules: recursive

      - name: Setup .NET
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }}

      - name: Restore
        run: dotnet restore ${{ env.Solution_Name }}

      - name: Build
        run: dotnet build ${{ env.Solution_Name }} --no-restore -c ${{ matrix.configuration }} -v minimal

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: build-windows-${{ matrix.configuration }}
          path: |
            LanMountainDesktop/bin/${{ matrix.configuration }}/
          retention-days: 7

  build-linux:
    runs-on: ubuntu-latest
    name: Build_Linux
    
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          submodules: recursive

      - name: Install system dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y \
            libfontconfig1 libfreetype6 \
            libx11-6 libxrandr2 libxinerama1 \
            libxi6 libxcursor1 libxext6

      - name: Setup .NET
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }}

      - name: Restore
        run: dotnet restore

      - name: Build
        run: dotnet build --no-restore -c Release -v minimal

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: build-linux
          path: |
            LanMountainDesktop/bin/Release/
          retention-days: 7

  build-macos:
    runs-on: macos-latest
    name: Build_macOS
    
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          submodules: recursive

      - name: Setup .NET
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }}

      - name: Restore
        run: dotnet restore

      - name: Build
        run: dotnet build --no-restore -c Release -v minimal

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: build-macos
          path: |
            LanMountainDesktop/bin/Release/
          retention-days: 7
