Skip to content

Commit b77963c

Browse files
add github actions
1 parent 7f6690d commit b77963c

File tree

6 files changed

+269
-18
lines changed

6 files changed

+269
-18
lines changed

.github/workflows/dabs/prod.yml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: 'Prod deployment'
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
workflow_name:
7+
required: false
8+
default: 'Prod deployment'
9+
trigger_type:
10+
required: false
11+
default: 'push'
12+
trigger_config:
13+
required: false
14+
default: |
15+
branches:
16+
- main
17+
environment:
18+
required: false
19+
default: 'prod'
20+
target:
21+
required: false
22+
default: 'dev'
23+
env_vars:
24+
required: false
25+
default: |
26+
DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
27+
DATABRICKS_CLIENT_SECRET: ${{ secrets.DATABRICKS_CLIENT_SECRET }}
28+
DATABRICKS_CLIENT_ID: ${{ secrets.DATABRICKS_CLIENT_ID }}
29+
DATABRICKS_BUNDLE_ENV: prod
30+
31+
jobs:
32+
deploy:
33+
uses: ./.github/workflows/dabs/templates/deploy.yml
34+
with:
35+
workflow_name: ${{ inputs.workflow_name }}
36+
trigger_type: ${{ inputs.trigger_type }}
37+
trigger_config: ${{ inputs.trigger_config }}
38+
environment: ${{ inputs.environment }}
39+
target: ${{ inputs.target }}
40+
env_vars: ${{ inputs.env_vars }}
41+
secrets: inherit

.github/workflows/dabs/qa.yml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: 'QA deployment'
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
workflow_name:
7+
required: false
8+
default: 'QA deployment'
9+
trigger_type:
10+
required: false
11+
default: 'pull_request'
12+
trigger_config:
13+
required: false
14+
default: |
15+
types: [opened, reopened, synchronize]
16+
environment:
17+
required: false
18+
default: 'qa'
19+
target:
20+
required: false
21+
default: 'qa'
22+
env_vars:
23+
required: false
24+
default: |
25+
DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
26+
DATABRICKS_CLIENT_SECRET: ${{ secrets.DATABRICKS_CLIENT_SECRET }}
27+
DATABRICKS_CLIENT_ID: ${{ secrets.DATABRICKS_CLIENT_ID }}
28+
DATABRICKS_BUNDLE_ENV: qa
29+
30+
jobs:
31+
deploy:
32+
uses: ./.github/workflows/dabs/templates/deploy.yml
33+
with:
34+
workflow_name: ${{ inputs.workflow_name }}
35+
trigger_type: ${{ inputs.trigger_type }}
36+
trigger_config: ${{ inputs.trigger_config }}
37+
environment: ${{ inputs.environment }}
38+
target: ${{ inputs.target }}
39+
env_vars: ${{ inputs.env_vars }}
40+
secrets: inherit
41+
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
name: ${{ inputs.workflow_name }}
2+
3+
concurrency: 1
4+
5+
on:
6+
${{ inputs.trigger_type }}:
7+
${{ inputs.trigger_config }}
8+
9+
jobs:
10+
detect-changes:
11+
name: 'Detect folder changes'
12+
runs-on: ubuntu-latest
13+
outputs:
14+
apps-changed: ${{ steps.changes.outputs.apps }}
15+
packages-changed: ${{ steps.changes.outputs.packages }}
16+
changed-apps: ${{ steps.changed-apps.outputs.list }}
17+
changed-packages: ${{ steps.changed-packages.outputs.list }}
18+
steps:
19+
- uses: actions/checkout@v3
20+
with:
21+
fetch-depth: 2 # Only need 2 commits for squash commit comparison
22+
23+
- name: Detect changes in apps folder
24+
id: changes
25+
run: |
26+
# Check if apps folder has changes
27+
if git diff --name-only HEAD~1 | grep -q "^apps/"; then
28+
echo "apps=true" >> $GITHUB_OUTPUT
29+
else
30+
echo "apps=false" >> $GITHUB_OUTPUT
31+
fi
32+
33+
# Check if packages folder has changes
34+
if git diff --name-only HEAD~1 | grep -q "^packages/"; then
35+
echo "packages=true" >> $GITHUB_OUTPUT
36+
else
37+
echo "packages=false" >> $GITHUB_OUTPUT
38+
fi
39+
40+
- name: Detect which specific apps changed
41+
id: changed-apps
42+
run: |
43+
# Get list of changed app directories
44+
CHANGED_APPS=$(git diff --name-only HEAD~1 | grep "^apps/" | cut -d'/' -f2 | sort -u | tr '\n' ',' | sed 's/,$//')
45+
if [ -n "$CHANGED_APPS" ]; then
46+
echo "list=$CHANGED_APPS" >> $GITHUB_OUTPUT
47+
else
48+
echo "list=" >> $GITHUB_OUTPUT
49+
fi
50+
51+
- name: Detect which specific packages changed
52+
id: changed-packages
53+
run: |
54+
# Get list of changed package directories
55+
CHANGED_PACKAGES=$(git diff --name-only HEAD~1 | grep "^packages/" | cut -d'/' -f2 | sort -u | tr '\n' ',' | sed 's/,$//')
56+
if [ -n "$CHANGED_PACKAGES" ]; then
57+
echo "list=$CHANGED_PACKAGES" >> $GITHUB_OUTPUT
58+
else
59+
echo "list=" >> $GITHUB_OUTPUT
60+
fi
61+
62+
deploy-apps:
63+
name: 'Deploy app ${{ matrix.app }} to ${{ inputs.environment }}'
64+
runs-on: ubuntu-latest
65+
needs: detect-changes
66+
if: needs.detect-changes.outputs.apps-changed == 'true' && needs.detect-changes.outputs.changed-apps != ''
67+
strategy:
68+
matrix:
69+
app: ${{ fromJson(format('[{0}]', needs.detect-changes.outputs.changed-apps)) }}
70+
steps:
71+
- uses: actions/checkout@v3
72+
73+
- uses: databricks/setup-cli@main
74+
75+
- name: Validate Bundle app ${{ matrix.app }}
76+
run: |
77+
databricks bundle validate \
78+
--target ${{ inputs.target }} \
79+
--var="type_of_deployment=apps" \
80+
--var="deployment_name=${{ matrix.app }}"
81+
working-directory: .
82+
env:
83+
${{ inputs.env_vars }}
84+
85+
86+
- name: Deploy app ${{ matrix.app }}
87+
run: |
88+
databricks bundle deploy \
89+
--target ${{ inputs.target }} \
90+
--var="type_of_deployment=apps" \
91+
--var="deployment_name=${{ matrix.app }}"
92+
working-directory: .
93+
env:
94+
${{ inputs.env_vars }}
95+
96+
deploy-packages:
97+
name: 'Deploy package ${{ matrix.package }} to ${{ inputs.environment }}'
98+
runs-on: ubuntu-latest
99+
needs: detect-changes
100+
if: needs.detect-changes.outputs.packages-changed == 'true' && needs.detect-changes.outputs.changed-packages != ''
101+
strategy:
102+
matrix:
103+
package: ${{ fromJson(format('[{0}]', needs.detect-changes.outputs.changed-packages)) }}
104+
steps:
105+
- uses: actions/checkout@v3
106+
107+
- uses: databricks/setup-cli@main
108+
109+
- name: Validate Bundle package ${{ matrix.package }}
110+
111+
run: |
112+
databricks bundle validate \
113+
--target ${{ inputs.target }} \
114+
--var="type_of_deployment=packages" \
115+
--var="deployment_name=${{ matrix.package }}"
116+
working-directory: .
117+
env:
118+
${{ inputs.env_vars }}
119+
120+
- name: Deploy package ${{ matrix.package }}
121+
run: |
122+
databricks bundle deploy \
123+
--target ${{ inputs.target }} \
124+
--var="type_of_deployment=packages" \
125+
--var="deployment_name=${{ matrix.package }}"
126+
working-directory: .
127+
env:
128+
${{ inputs.env_vars }}

.github/workflows/dabs/test.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: 'Test deployment'
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
workflow_name:
7+
required: false
8+
default: 'Test deployment'
9+
trigger_type:
10+
required: false
11+
default: 'pull_request'
12+
trigger_config:
13+
required: false
14+
default: |
15+
types: [opened, reopened, synchronize]
16+
environment:
17+
required: false
18+
default: 'test'
19+
target:
20+
required: false
21+
default: 'test'
22+
env_vars:
23+
required: false
24+
default: |
25+
DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
26+
DATABRICKS_CLIENT_SECRET: ${{ secrets.DATABRICKS_CLIENT_SECRET }}
27+
DATABRICKS_CLIENT_ID: ${{ secrets.DATABRICKS_CLIENT_ID }}
28+
DATABRICKS_BUNDLE_ENV: test
29+
30+
jobs:
31+
deploy:
32+
uses: ./.github/workflows/dabs/templates/deploy.yml
33+
with:
34+
workflow_name: ${{ inputs.workflow_name }}
35+
trigger_type: ${{ inputs.trigger_type }}
36+
trigger_config: ${{ inputs.trigger_config }}
37+
environment: ${{ inputs.environment }}
38+
target: ${{ inputs.target }}
39+
env_vars: ${{ inputs.env_vars }}
40+
secrets: inherit

.github/workflows/pr.yml

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,29 @@ on:
33
pull_request:
44
types: [opened, reopened, synchronize]
55
jobs:
6-
test-server: # you should test the other packages too
6+
pre-merge-checks:
77
runs-on: ubuntu-latest
88
defaults:
99
run:
10-
working-directory: apps/server
10+
working-directory: .
1111

1212
steps:
1313
- uses: actions/checkout@v4
14-
- uses: astral-sh/setup-uv@v5
14+
15+
16+
- name: Install uv
17+
uses: astral-sh/setup-uv@v5
18+
with:
19+
version: "0.7.16"
20+
21+
- name: "Set up Python"
22+
uses: actions/setup-python@v5
1523
with:
16-
version: "0.5.14"
17-
- run: uv sync --all-extras --locked --package=postmodern-server
18-
- run: uv run poe ci:fmt # check formatting is correct
19-
- run: uv run poe ci:lint # and linting
20-
- run: uv run poe check # typecheck too
21-
- run: uv run poe test # then run your tests!
24+
python-version-file: "pyproject.toml"
25+
26+
- name: Install dependencies
27+
run: uv sync --all-extras --locked
28+
29+
- name: Run checks
30+
run: make check
31+

databricks.yml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,7 @@ variables:
2727
default: "datastream"
2828
experimental:
2929
python:
30-
# Activate virtual environment before loading resources defined in Python.
31-
# If disabled, defaults to using the Python interpreter available in the current shell.
3230
venv_path: .venv
33-
# Functions called to load resources defined in Python. See resources/__init__.py
3431
resources:
3532
- "resources:load_resources"
3633
workspace:
@@ -39,8 +36,6 @@ artifacts:
3936
default:
4037
type: whl
4138
path: .
42-
# We use timestamp as Local version identifier (https://peps.python.org/pep-0440/#local-version-identifiers.)
43-
# to ensure that changes to wheel package are picked up when used on all-purpose clusters
4439
build: rm ./dist/* && uvx --with uv-dynamic-versioning --from build pyproject-build --installer uv --outdir ./dist --wheel ${var.type_of_deployment}/${var.deployment_name}
4540

4641
include:
@@ -49,10 +44,6 @@ include:
4944

5045
targets:
5146
dev:
52-
# The default target uses 'mode: development' to create a development copy.
53-
# - Deployed resources get prefixed with '[dev my_user_name]'
54-
# - Any job schedules and triggers are paused by default.
55-
# See also https://docs.databricks.com/dev-tools/bundles/deployment-modes.html.
5647
mode: development
5748
default: true
5849
workspace:

0 commit comments

Comments
 (0)