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@v4
        with:
          go-version: 1.21.0

      - name: Run GoReleaser
        id: releaser
        uses: goreleaser/goreleaser-action@v4
        with:
          version: latest
          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@v6
        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@v6
        with:
          github-token: ${{ secrets.DECO_GITHUB_TOKEN }}
          script: |
            let artifacts = JSON.parse('${{ 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@v6
        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 }}",
              }
            });
