name: publish-winget

on:
  workflow_dispatch:
    inputs:
      tag:
        description: 'Tag to publish'
        default: ''

jobs:
  publish-to-winget-pkgs:
    runs-on:
      group: databricks-deco-testing-runner-group
      labels: ubuntu-latest-deco

    environment: release

    steps:
      - name: Checkout repository and submodules
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

        # When updating the version of komac, make sure to update the checksum in the next step.
        # Find both at https://github.com/russellbanks/Komac/releases.
      - name: Download komac binary
        run: |
          curl -s -L -o $RUNNER_TEMP/komac-2.9.0-x86_64-unknown-linux-gnu.tar.gz https://github.com/russellbanks/Komac/releases/download/v2.9.0/komac-2.9.0-x86_64-unknown-linux-gnu.tar.gz

      - name: Verify komac binary
        run: |
          echo "d07a12831ad5418fee715488542a98ce3c0e591d05c850dd149fe78432be8c4c  $RUNNER_TEMP/komac-2.9.0-x86_64-unknown-linux-gnu.tar.gz" | sha256sum -c -

      - name: Untar komac binary to temporary path
        run: |
          mkdir -p $RUNNER_TEMP/komac
          tar -xzf $RUNNER_TEMP/komac-2.9.0-x86_64-unknown-linux-gnu.tar.gz -C $RUNNER_TEMP/komac

      - name: Add komac to PATH
        run: echo "$RUNNER_TEMP/komac" >> $GITHUB_PATH

      - name: Confirm komac version
        run: komac --version

        # Use the tag from the input, or the ref name if the input is not provided.
        # The ref name is equal to the tag name when this workflow is triggered by the "sign-cli" command.
      - name: Strip "v" prefix from version
        id: strip_version
        run: echo "version=$(echo ${{ inputs.tag || github.ref_name }} | sed 's/^v//')" >> "$GITHUB_OUTPUT"

      - name: Get URLs of signed Windows binaries
        id: get_windows_urls
        run: |
          urls=$(
            gh api https://api.github.com/repos/databricks/cli/releases/tags/${{ inputs.tag || github.ref_name }} | \
            jq -r .assets[].browser_download_url | \
            grep -E '_windows_.*-signed\.zip$' | \
            tr '\n' ' '
          )
          if [ -z "$urls" ]; then
            echo "No signed Windows binaries found" >&2
            exit 1
          fi
          echo "urls=$urls" >> "$GITHUB_OUTPUT"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Publish to Winget
        run: |
          komac update Databricks.DatabricksCLI \
            --version ${{ steps.strip_version.outputs.version }} \
            --submit \
            --urls ${{ steps.get_windows_urls.outputs.urls }} \
        env:
          KOMAC_FORK_OWNER: eng-dev-ecosystem-bot
          GITHUB_TOKEN: ${{ secrets.ENG_DEV_ECOSYSTEM_BOT_TOKEN }}