name: release

on:
  push:
    tags:
      - "v*"

  workflow_dispatch:

jobs:
  goreleaser:
    runs-on:
      group: databricks-deco-testing-runner-group
      labels: ubuntu-latest-deco

    outputs:
      artifacts: ${{ steps.releaser.outputs.artifacts }}

    steps:
      - name: Checkout repository and submodules
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          fetch-depth: 0
          fetch-tags: true

      - name: Setup Go
        uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0
        with:
          go-version: 1.23.4

          # The default cache key for this action considers only the `go.sum` file.
          # We include .goreleaser.yaml here to differentiate from the cache used by the push action
          # that runs unit tests. This job produces and uses a different cache.
          cache-dependency-path: |
            go.sum
            .goreleaser.yaml

      # Log into the GitHub Container Registry. The goreleaser action will create
      # the docker images and push them to the GitHub Container Registry.
      - uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
        with:
          registry: "ghcr.io"
          username: "${{ github.actor }}"
          password: "${{ secrets.GITHUB_TOKEN }}"

      # QEMU is required to build cross platform docker images using buildx.
      # It allows virtualization of the CPU architecture at the application level.
      - name: Set up QEMU dependency
        uses: docker/setup-qemu-action@53851d14592bedcffcf25ea515637cff71ef929a # v3.3.0

      - name: Run GoReleaser
        id: releaser
        uses: goreleaser/goreleaser-action@9ed2f89a662bf1735a48bc8557fd212fa902bebf # v6.1.0
        with:
          version: ~> v2
          args: release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  create-setup-cli-release-pr:
    runs-on:
      group: databricks-deco-testing-runner-group
      labels: ubuntu-latest-deco

    needs: goreleaser

    steps:
      - name: Set VERSION variable from tag
        run: |
          VERSION=${{ github.ref_name }}
          echo "VERSION=${VERSION:1}" >> $GITHUB_ENV

      - name: Update setup-cli
        uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
        with:
          github-token: ${{ secrets.DECO_GITHUB_TOKEN }}
          script: |
            await github.rest.actions.createWorkflowDispatch({
              owner: 'databricks',
              repo: 'setup-cli',
              workflow_id: 'release-pr.yml',
              ref: 'main',
              inputs: {
                version: "${{ env.VERSION }}",
              }
            });

  create-homebrew-tap-release-pr:
    runs-on:
      group: databricks-deco-testing-runner-group
      labels: ubuntu-latest-deco

    needs: goreleaser

    steps:
      - name: Set VERSION variable from tag
        run: |
          VERSION=${{ github.ref_name }}
          echo "VERSION=${VERSION:1}" >> $GITHUB_ENV

      - name: Update homebrew-tap
        uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
        with:
          github-token: ${{ secrets.DECO_GITHUB_TOKEN }}
          script: |
            let artifacts = ${{ needs.goreleaser.outputs.artifacts }}
            artifacts = artifacts.filter(a => a.type == "Archive")
            artifacts = new Map(
              artifacts.map(a => [
                a.goos + "_" + a.goarch,
                a.extra.Checksum.replace("sha256:", "")
              ])
            )

            await github.rest.actions.createWorkflowDispatch({
              owner: 'databricks',
              repo: 'homebrew-tap',
              workflow_id: 'release-pr.yml',
              ref: 'main',
              inputs: {
                version: "${{ env.VERSION }}",
                darwin_amd64_sha: artifacts.get('darwin_amd64'),
                darwin_arm64_sha: artifacts.get('darwin_arm64'),
                linux_amd64_sha: artifacts.get('linux_amd64'),
                linux_arm64_sha: artifacts.get('linux_arm64')
              }
            });

  create-vscode-extension-update-pr:
    runs-on:
      group: databricks-deco-testing-runner-group
      labels: ubuntu-latest-deco

    needs: goreleaser

    steps:
      - name: Set VERSION variable from tag
        run: |
          VERSION=${{ github.ref_name }}
          echo "VERSION=${VERSION:1}" >> $GITHUB_ENV

      - name: Update CLI version in the VSCode extension
        uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
        with:
          github-token: ${{ secrets.DECO_GITHUB_TOKEN }}
          script: |
            await github.rest.actions.createWorkflowDispatch({
              owner: 'databricks',
              repo: 'databricks-vscode',
              workflow_id: 'update-cli-version.yml',
              ref: 'main',
              inputs: {
                version: "${{ env.VERSION }}",
              }
            });