name: release

on:
  push:
    tags:
      - "v*"

  workflow_dispatch:

jobs:
  goreleaser:
    outputs:
      artifacts: ${{ steps.releaser.outputs.artifacts }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository and submodules
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          fetch-tags: true

      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: 1.23.2

          # 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@v3"
        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@v3

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

  create-setup-cli-release-pr:
    needs: goreleaser
    runs-on: ubuntu-latest
    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@v7
        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:
    needs: goreleaser
    runs-on: ubuntu-latest
    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@v7
        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:
    needs: goreleaser
    runs-on: ubuntu-latest
    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@v7
        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 }}",
              }
            });