esdiag 0.16.4

Elastic Stack diagnostic collector and processor
name: Desktop Artifacts

on:
  workflow_dispatch:

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

      - name: Install jq
        run: sudo apt-get update && sudo apt-get install -y jq

      - name: Verify desktop configuration
        run: bash desktop/scripts/verify-desktop-config.sh

  build-macos:
    runs-on: macos-latest
    needs: verify-config
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Rust
        uses: dtolnay/rust-toolchain@stable

      - name: Install Tauri CLI
        run: cargo install tauri-cli --locked

      - name: Build macOS desktop bundle
        run: ESDIAG_GENERATE_NOTICE=0 cargo tauri build --features desktop --bundles dmg

      - name: Stage macOS artifact
        run: |
          mkdir -p target/artifacts/macos
          cp target/release/bundle/dmg/*.dmg target/artifacts/macos/

      - name: Upload macOS artifact
        uses: actions/upload-artifact@v4
        with:
          name: macos-desktop
          path: target/artifacts/macos/*

  build-windows:
    runs-on: windows-latest
    needs: verify-config
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Rust
        uses: dtolnay/rust-toolchain@stable

      - name: Normalize Cargo version for MSI
        shell: bash
        run: bash desktop/scripts/normalize-cargo-version-for-msi.sh Cargo.toml

      - name: Install Tauri CLI
        run: cargo install tauri-cli --locked

      - name: Build Windows desktop bundle
        run: $env:ESDIAG_GENERATE_NOTICE = "0"; cargo tauri build --features desktop --bundles msi

      - name: Stage Windows artifact
        shell: pwsh
        run: |
          New-Item -ItemType Directory -Path target/artifacts/windows -Force | Out-Null
          Copy-Item target/release/bundle/msi/*.msi target/artifacts/windows/

      - name: Upload Windows artifact
        uses: actions/upload-artifact@v4
        with:
          name: windows-desktop
          path: target/artifacts/windows/*

  build-flatpak:
    runs-on: ubuntu-latest
    needs: verify-config
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Rust
        uses: dtolnay/rust-toolchain@stable

      - name: Install Flatpak tooling
        run: |
          sudo apt-get update
          sudo apt-get install -y flatpak flatpak-builder jq
          flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
          flatpak install --user -y flathub org.gnome.Platform//49 org.gnome.Sdk//49 org.freedesktop.Sdk.Extension.rust-stable//25.08

      - name: Build local Flatpak artifact
        run: bash desktop/scripts/build-flatpak-local.sh

      - name: Stage Flatpak artifact
        run: |
          mkdir -p target/artifacts/flatpak
          cp target/flatpak/com.elastic.esdiag-0.15.0.flatpak target/artifacts/flatpak/

      - name: Upload Flatpak artifact
        uses: actions/upload-artifact@v4
        with:
          name: flatpak-desktop
          path: target/artifacts/flatpak/*

  validate-desktop-artifacts:
    runs-on: ubuntu-latest
    needs:
      - build-macos
      - build-windows
      - build-flatpak
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Download macOS artifact
        uses: actions/download-artifact@v4
        with:
          name: macos-desktop
          path: target/artifacts/macos

      - name: Download Windows artifact
        uses: actions/download-artifact@v4
        with:
          name: windows-desktop
          path: target/artifacts/windows

      - name: Download Flatpak artifact
        uses: actions/download-artifact@v4
        with:
          name: flatpak-desktop
          path: target/artifacts/flatpak

      - name: Validate required desktop artifacts
        run: bash desktop/scripts/validate-desktop-artifacts.sh target/artifacts