name: Update Winget Package

on:
  workflow_dispatch: # allows manual triggering
  schedule:
    - cron: '28 5 * * *' # Update every day at 5:28 UTC

cache-mode: none
permissions:
  contents: read

jobs:
  update:
    name: Update Winget Package
    runs-on: ubuntu-24.04  # previously ubuntu-latest
    if: github.repository_owner == 'ggml-org'

    steps:
      - name: Install cargo binstall
        uses: cargo-bins/cargo-binstall@268643a6b5ea099f5718ee5cd3ff7dc89a5eb49b

      - name: Install komac
        run: |
          cargo binstall komac@2.16.0 -y

      # TODO: This should later be updated to publish releases instead of
      # development release builds.
      - name: Find latest release
        id: find_latest_release
        uses: actions/github-script@v8
        with:
          script: |
            const { data: releases } = await github.rest.repos.listReleases({
              owner: context.repo.owner,
              repo: context.repo.repo,
            });
            const { tag_name: version, assets: assets } = releases.find(({assets}) => assets.find(asset => asset.name.includes('win-vulkan')));
            const { browser_download_url: asset_url_x64 } = assets.find(asset => asset.name.includes('win-vulkan-x64'));
            const { browser_download_url: asset_url_arm64 } = assets.find(asset => asset.name.includes('win-vulkan-arm64'));
            console.log("Latest release:", version);
            core.setOutput('VERSION', version);
            core.setOutput('ASSETURL_X64', asset_url_x64);
            core.setOutput('ASSETURL_ARM64', asset_url_arm64);

      - name: Update manifest
        run: |
          echo "Updating manifest..."
          komac update --version ${{ steps.find_latest_release.outputs.VERSION }} \
            --urls "${{ steps.find_latest_release.outputs.ASSETURL_X64 }}" "${{ steps.find_latest_release.outputs.ASSETURL_ARM64 }}" \
            --token ${{ secrets.WINGET_GITHUB_TOKEN }} \
            --submit \
            ggml.llamacpp
