diffusion-rs 0.1.19

High level API for stable-diffusion.cpp
Documentation
name: test

on:
  workflow_dispatch:
  pull_request:
    branches: [ "main" ]

env:
  CARGO_TERM_COLOR: always

jobs:
  cargo-fmt:
    runs-on: ubuntu-22.04
    steps:
    - uses: actions/checkout@v4
      with:
        submodules: 'recursive'
    - name: Ubuntu build dependencies
      run: sudo apt update && sudo apt install -y clang cmake
    - uses: dtolnay/rust-toolchain@stable
      with:
        components: rustfmt
    - name: Check Style
      run: cargo fmt --check

  build-no-features:
    needs: cargo-fmt
    strategy:
      fail-fast: false
      matrix:
        platform:  [ubuntu-latest, macos-latest, windows-latest]
    runs-on: ${{ matrix.platform }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: 'recursive'
      - name: Ubuntu build dependencies
        if: matrix.platform == 'ubuntu-latest'
        run: sudo apt update && sudo apt install -y clang cmake
      - uses: dtolnay/rust-toolchain@stable
      - name: Build
        run: cargo build --examples
      - name: Test
        run: cargo test

  build-vulkan:
    needs: build-no-features
    strategy:
      fail-fast: false
      matrix:
        platform:  [ubuntu-latest, macos-latest, windows-2022]
    runs-on: ${{ matrix.platform }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: 'recursive'
      - name: install dependencies (ubuntu only)
        if: matrix.platform == 'ubuntu-latest'
        run: sudo apt update && sudo apt install -y clang cmake
      - name: Install Vulkan SDK (no windows)
        if: matrix.platform != 'windows-2022'
        uses: humbletim/install-vulkan-sdk@0ef43dbc8af56d77bcb1e8b1ebbbaa8718ead524
        with:
          version: 1.4.328.1
          cache: true
      - name: Install Vulkan SDK (windows only)
        if: matrix.platform == 'windows-2022'
        run: |
          curl.exe -o $env:RUNNER_TEMP/VulkanSDK-Installer.exe -L "https://sdk.lunarg.com/sdk/download/1.4.328.1/windows/vulkansdk-windows-X64-1.4.328.1.exe"
          & "$env:RUNNER_TEMP\VulkanSDK-Installer.exe" --accept-licenses --default-answer --confirm-command install
          Add-Content $env:GITHUB_ENV "VULKAN_SDK=C:\VulkanSDK\1.4.328.1"
          Add-Content $env:GITHUB_PATH "C:\VulkanSDK\1.4.328.1\bin"
      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@stable
      - name: Install Windows dependencies
        if: matrix.platform == 'windows-2022'
        uses: ilammy/msvc-dev-cmd@v1
      - name: Build (no windows)
        if: matrix.platform != 'windows-2022'
        run: cargo build --features vulkan
      - name: Build (windows only )
        if: matrix.platform == 'windows-2022'
        run: | 
          cd .. 
          & Move-Item -Path D:\a\diffusion-rs\diffusion-rs\* -Destination D:\a\diffusion-rs
          & cargo build --features vulkan
      - name: Test
        if: matrix.platform == 'ubuntu-latest'
        run: cargo test --features vulkan

  build-metal:
    needs: build-no-features
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: 'recursive'
      - uses: dtolnay/rust-toolchain@stable
      - name: Build
        run: cargo build --features metal
      - name: Test
        run: cargo test --features metal

  build-cuda:
    needs: build-no-features
    strategy:
      fail-fast: false
      matrix:
        platform: [ubuntu-22.04, windows-2022]
    runs-on: ${{ matrix.platform }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: 'recursive'
      - name: Install cuda toolkit
        uses: Jimver/cuda-toolkit@v0.2.29
        with:
          use-local-cache: false
          use-github-cache: false
          method: "network"
          cuda: "12.8.1"
      - name: Install Windows dependencies
        if: matrix.platform == 'windows-2022'
        uses: ilammy/msvc-dev-cmd@v1
      - name: Ubuntu build dependencies
        if: matrix.platform == 'ubuntu-22.04'
        run: sudo apt update && sudo apt install -y clang cmake
      - uses: dtolnay/rust-toolchain@stable
      - name: Build
        env:
          CUDA_COMPUTE_CAP: "75" 
        run: cargo build --features cuda

  build-rocm:
    needs: build-no-features
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: 'recursive'
      - name: Free Disk Space (Ubuntu) for Rocm
        uses: jlumbroso/free-disk-space@main
        with:
          tool-cache: false
          android: true
          dotnet: true
          haskell: true
          large-packages: true
          docker-images: true
          swap-storage: true
      - name: Ubuntu build dependencies
        run: sudo apt update && sudo apt install -y clang cmake ninja-build
      - name: Install Rocm Toolkit
        run: |
              wget https://repo.radeon.com/amdgpu-install/6.1.2/ubuntu/jammy/amdgpu-install_6.1.60102-1_all.deb
              sudo apt install ./amdgpu-install_6.1.60102-1_all.deb
              sudo apt update
              sudo apt install -y rocm
      - uses: dtolnay/rust-toolchain@stable
      - name: Build
        env:
          AMDGPU_TARGETS: "gfx1100" 
        run: cargo build --features hipblas

  build-sycl:
    needs: build-no-features
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: 'recursive'
      - name: Free Disk Space (Ubuntu) for OneAPI
        uses: jlumbroso/free-disk-space@main
        with:
          tool-cache: false
          android: true
          dotnet: true
          haskell: true
          large-packages: true
          docker-images: true
          swap-storage: true
      - name: Ubuntu build dependencies
        run: sudo apt update && sudo apt install -y clang cmake
      - name: Install oneAPI Toolkit
        run: |
          wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
          | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null
          echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" \
          | sudo tee /etc/apt/sources.list.d/oneAPI.list
          sudo apt update && sudo apt install -y intel-basekit intel-hpckit
      - uses: dtolnay/rust-toolchain@stable
      - name: Build
        run: |
          source /opt/intel/oneapi/setvars.sh 
          cargo build --features sycl
      - name: Test
        run: |
          source /opt/intel/oneapi/setvars.sh 
          cargo test --features sycl