# name: Deploy
# on:
# push:
# branches: [ dev ] # Deploy to development
# tags: [ 'v*' ] # Deploy to production
# workflow_dispatch: # Manual deployment
# inputs:
# environment:
# type: choice
# options:
# - development
# - production
# jobs:
# deploy:
# runs-on: ubuntu-latest
# environment: ${{ github.ref_type == 'tag' && 'production' || github.event.inputs.environment || 'development' }}
# steps:
# - name: Checkout code
# uses: actions/checkout@v4
# - name: Setup environment
# run: |
# if [[ "${{ github.ref_type }}" == "tag" || "${{ github.event.inputs.environment }}" == "production" ]]; then
# echo "DATABRICKS_HOST=${{ secrets.PROD_DATABRICKS_HOST }}" >> $GITHUB_ENV
# echo "DATABRICKS_TOKEN=${{ secrets.PROD_DATABRICKS_TOKEN }}" >> $GITHUB_ENV
# echo "DATABRICKS_APP_NAME=${{ secrets.PROD_DATABRICKS_APP_NAME }}" >> $GITHUB_ENV
# echo "ENV_NAME=Production" >> $GITHUB_ENV
# else
# echo "DATABRICKS_HOST=${{ secrets.DEV_DATABRICKS_HOST }}" >> $GITHUB_ENV
# echo "DATABRICKS_TOKEN=${{ secrets.DEV_DATABRICKS_TOKEN }}" >> $GITHUB_ENV
# echo "DATABRICKS_APP_NAME=${{ secrets.DEV_DATABRICKS_APP_NAME }}" >> $GITHUB_ENV
# echo "ENV_NAME=Development" >> $GITHUB_ENV
# fi
# echo "DATABRICKS_AUTH_TYPE=pat" >> $GITHUB_ENV
# - name: Install tools
# run: |
# curl -LsSf https://astral.sh/uv/install.sh | sh
# echo "$HOME/.cargo/bin" >> $GITHUB_PATH
# curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sh
# echo "$HOME/.databricks/bin" >> $GITHUB_PATH
# curl -fsSL https://bun.sh/install | bash
# echo "$HOME/.bun/bin" >> $GITHUB_PATH
# - name: Build application
# run: |
# echo "Building for $ENV_NAME deployment..."
# uv run python scripts/generate_semver_requirements.py
# cd client && bun install --frozen-lockfile && bun run build
# # - name: Test connection
# # run: databricks current-user me
# - name: Deploy to Databricks
# run: |
# echo "Deploying $DATABRICKS_APP_NAME to $ENV_NAME..."
# # Create or update the repo in Databricks workspace using the current user
# CURRENT_USER=$(databricks current-user me --output json | python3 -c "import sys, json; print(json.load(sys.stdin)['userName'])")
# REPO_PATH="//Workspace/Users/${CURRENT_USER}/$(echo ${{ github.repository }} | cut -d'/' -f2)"
# # Check if repo already exists
# if databricks repos list --path-prefix "$REPO_PATH" --output json | python3 -c "
# import json, sys
# data = json.load(sys.stdin)
# repos = data.get('repos', [])
# for repo in repos:
# if repo.get('path') == '$REPO_PATH':
# print(repo.get('id'))
# break
# " > /tmp/repo_id; then
# REPO_ID=$(cat /tmp/repo_id)
# if [ ! -z "$REPO_ID" ]; then
# echo "Updating existing repo $REPO_ID to latest commit..."
# databricks repos update "$REPO_ID" --branch ${{ github.ref_name }}
# else
# echo "Creating new repo..."
# databricks repos create https://github.com/${{ github.repository }}.git gitHub --path "$REPO_PATH" --branch ${{ github.ref_name }}
# sleep 10
# fi
# else
# echo "Creating new repo..."
# databricks repos create https://github.com/${{ github.repository }}.git gitHub --path "$REPO_PATH" --branch ${{ github.ref_name }}
# sleep 10
# fi
# # Create app if it doesn't exist
# if ! databricks apps list | grep -q "^$DATABRICKS_APP_NAME "; then
# echo "Creating new app..."
# databricks apps create "$DATABRICKS_APP_NAME"
# sleep 30
# fi
# # Deploy the app using the repo path
# databricks apps deploy "$DATABRICKS_APP_NAME" --source-code-path "$REPO_PATH"
# - name: Get app URL
# run: |
# APP_URL=$(databricks apps list --output json | python3 -c "
# import json, sys
# data = json.load(sys.stdin)
# apps = data if isinstance(data, list) else data.get('apps', [])
# for app in apps:
# if app.get('name') == '$DATABRICKS_APP_NAME':
# print(app.get('url', ''))
# break
# ")
# echo "🚀 Deployed to $ENV_NAME: $APP_URL"