Initial release: pre-generated from databricks-bundle-template v1.3.0 #2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # GitHub Actions Workflow for my_data_project | |
| # | |
| # This workflow validates and deploys Databricks Asset Bundles: | |
| # - bundle-ci: Validates bundle configuration on Pull Requests to main | |
| # - staging-cd: Deploys to staging when PRs are merged into main | |
| # - prod-cd: Deploys to production when PRs are merged into release | |
| # | |
| # Prerequisites: | |
| # 1. Configure repository secrets (see docs/CI_CD_SETUP.md) | |
| # 2. Ensure Unity Catalog prerequisites are met | |
| name: Bundle CI/CD for my_data_project | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - release | |
| paths-ignore: | |
| - 'README.md' | |
| - 'docs/**' | |
| - '.gitignore' | |
| pull_request: | |
| branches: | |
| - main | |
| paths-ignore: | |
| - 'README.md' | |
| - 'docs/**' | |
| - '.gitignore' | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| checks: write | |
| pull-requests: write | |
| defaults: | |
| run: | |
| working-directory: . | |
| env: | |
| # AWS/GCP Databricks uses OAuth M2M authentication | |
| STAGING_DATABRICKS_HOST: ${{ secrets.STAGING_DATABRICKS_HOST }} | |
| STAGING_DATABRICKS_CLIENT_ID: ${{ secrets.STAGING_DATABRICKS_CLIENT_ID }} | |
| STAGING_DATABRICKS_CLIENT_SECRET: ${{ secrets.STAGING_DATABRICKS_CLIENT_SECRET }} | |
| PROD_DATABRICKS_HOST: ${{ secrets.PROD_DATABRICKS_HOST }} | |
| PROD_DATABRICKS_CLIENT_ID: ${{ secrets.PROD_DATABRICKS_CLIENT_ID }} | |
| PROD_DATABRICKS_CLIENT_SECRET: ${{ secrets.PROD_DATABRICKS_CLIENT_SECRET }} | |
| jobs: | |
| # ============================================================================= | |
| # Job: bundle-ci - Validate bundle on Pull Requests | |
| # ============================================================================= | |
| bundle-ci: | |
| name: 'Validate and Test' | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| concurrency: | |
| group: my_data_project_ci_${{ github.ref }} | |
| cancel-in-progress: true | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| if [ -f "requirements_dev.txt" ]; then | |
| echo "Installing development dependencies..." | |
| python -m pip install --upgrade pip | |
| pip install -r requirements_dev.txt | |
| else | |
| echo "No requirements_dev.txt found, skipping dependency installation" | |
| fi | |
| - name: Run unit tests | |
| run: | | |
| if [ -d "tests" ] && [ -n "$(find tests -name 'test_*.py' -o -name '*_test.py' 2>/dev/null)" ]; then | |
| echo "Running unit tests..." | |
| python -m pytest tests/ -v --junitxml=test-results.xml | |
| else | |
| echo "No test files found, skipping unit tests" | |
| fi | |
| - name: Publish test results | |
| uses: dorny/test-reporter@v1 | |
| if: success() || failure() | |
| with: | |
| name: Unit Tests - my_data_project | |
| path: test-results.xml | |
| reporter: java-junit | |
| fail-on-error: false # Prevent "double failing" noise when pytest fails the job | |
| token: ${{ github.token }} | |
| - name: Install Databricks CLI | |
| uses: databricks/setup-cli@v0.274.0 | |
| - name: Validate bundle for staging | |
| env: | |
| DATABRICKS_HOST: ${{ env.STAGING_DATABRICKS_HOST }} | |
| DATABRICKS_CLIENT_ID: ${{ env.STAGING_DATABRICKS_CLIENT_ID }} | |
| DATABRICKS_CLIENT_SECRET: ${{ env.STAGING_DATABRICKS_CLIENT_SECRET }} | |
| run: | | |
| databricks bundle validate -t stage | |
| - name: Validate bundle for production | |
| env: | |
| DATABRICKS_HOST: ${{ env.PROD_DATABRICKS_HOST }} | |
| DATABRICKS_CLIENT_ID: ${{ env.PROD_DATABRICKS_CLIENT_ID }} | |
| DATABRICKS_CLIENT_SECRET: ${{ env.PROD_DATABRICKS_CLIENT_SECRET }} | |
| run: | | |
| databricks bundle validate -t prod | |
| # ============================================================================= | |
| # Job: staging-cd - Deploy to staging on merge to main | |
| # ============================================================================= | |
| staging-cd: | |
| name: 'Deploy to Staging' | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' | |
| runs-on: ubuntu-latest | |
| concurrency: | |
| group: my_data_project_staging_deploy | |
| cancel-in-progress: false | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Databricks CLI | |
| uses: databricks/setup-cli@v0.274.0 | |
| - name: Validate bundle for staging | |
| env: | |
| DATABRICKS_HOST: ${{ env.STAGING_DATABRICKS_HOST }} | |
| DATABRICKS_CLIENT_ID: ${{ env.STAGING_DATABRICKS_CLIENT_ID }} | |
| DATABRICKS_CLIENT_SECRET: ${{ env.STAGING_DATABRICKS_CLIENT_SECRET }} | |
| run: | | |
| databricks bundle validate -t stage | |
| - name: Deploy bundle to staging | |
| env: | |
| DATABRICKS_HOST: ${{ env.STAGING_DATABRICKS_HOST }} | |
| DATABRICKS_CLIENT_ID: ${{ env.STAGING_DATABRICKS_CLIENT_ID }} | |
| DATABRICKS_CLIENT_SECRET: ${{ env.STAGING_DATABRICKS_CLIENT_SECRET }} | |
| run: | | |
| databricks bundle deploy -t stage | |
| # ============================================================================= | |
| # Job: prod-cd - Deploy to production on merge to release | |
| # ============================================================================= | |
| prod-cd: | |
| name: 'Deploy to Production' | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/release' | |
| runs-on: ubuntu-latest | |
| concurrency: | |
| group: my_data_project_prod_deploy | |
| cancel-in-progress: false | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Databricks CLI | |
| uses: databricks/setup-cli@v0.274.0 | |
| - name: Validate bundle for production | |
| env: | |
| DATABRICKS_HOST: ${{ env.PROD_DATABRICKS_HOST }} | |
| DATABRICKS_CLIENT_ID: ${{ env.PROD_DATABRICKS_CLIENT_ID }} | |
| DATABRICKS_CLIENT_SECRET: ${{ env.PROD_DATABRICKS_CLIENT_SECRET }} | |
| run: | | |
| databricks bundle validate -t prod | |
| - name: Deploy bundle to production | |
| env: | |
| DATABRICKS_HOST: ${{ env.PROD_DATABRICKS_HOST }} | |
| DATABRICKS_CLIENT_ID: ${{ env.PROD_DATABRICKS_CLIENT_ID }} | |
| DATABRICKS_CLIENT_SECRET: ${{ env.PROD_DATABRICKS_CLIENT_SECRET }} | |
| run: | | |
| databricks bundle deploy -t prod |