Add Lakeflow template #13342
Workflow file for this run
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
name: build | |
on: | |
pull_request: | |
types: [opened, synchronize] | |
merge_group: | |
types: [checks_requested] | |
push: | |
# Always run on push to main. The build cache can only be reused | |
# if it was saved by a run from the repository's default branch. | |
# The run result will be identical to that from the merge queue | |
# because the commit is identical, yet we need to perform it to | |
# seed the build cache. | |
branches: | |
- main | |
schedule: | |
- cron: '0 0,12 * * *' # Runs at 00:00 and 12:00 UTC daily | |
env: | |
GOTESTSUM_FORMAT: github-actions | |
jobs: | |
cleanups: | |
runs-on: | |
group: databricks-deco-testing-runner-group | |
labels: ubuntu-latest-deco | |
steps: | |
- name: Clean up cache if running on schedule | |
if: ${{ github.event_name == 'schedule' }} | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: gh cache delete --all --repo databricks/cli || true | |
tests: | |
needs: cleanups | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- macos-latest | |
- ubuntu-latest | |
- windows-latest | |
steps: | |
- name: Checkout repository and submodules | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Setup Go | |
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 | |
with: | |
go-version-file: go.mod | |
- name: Setup Python | |
uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0 | |
with: | |
python-version: '3.9' | |
- name: Install uv | |
uses: astral-sh/setup-uv@6b9c6063abd6010835644d4c2e1bef4cf5cd0fca # v6.0.1 | |
with: | |
version: "0.6.5" | |
- name: Pull external libraries | |
run: | | |
go mod download | |
pip3 install wheel==0.45.1 | |
- name: Run tests without coverage | |
# We run tests without coverage on PR because we don't make use of coverage information | |
# and would like to run the tests as fast as possible. We run it on schedule as well, because that is what | |
# populates the cache and cache may include test results. | |
if: ${{ github.event_name == 'pull_request' || github.event_name == 'schedule' }} | |
run: make test | |
- name: Run tests with coverage | |
# Still run 'make cover' on push to main and merge checks to make sure it does not get broken. | |
if: ${{ github.event_name != 'pull_request' && github.event_name != 'schedule' }} | |
run: make cover | |
- name: Analyze slow tests | |
run: make slowest | |
linters: | |
needs: cleanups | |
name: lint | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 | |
with: | |
go-version-file: go.mod | |
# Use different schema from regular job, to avoid overwriting the same key | |
cache-dependency-path: | | |
go.sum | |
.golangci.yaml | |
- name: Run go mod tidy | |
run: | | |
go mod tidy | |
- name: Fail on differences | |
run: | | |
# Exit with status code 1 if there are differences (i.e. unformatted files) | |
git diff --exit-code | |
- name: Run Go lint checks (does not include formatting checks) | |
uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd # v7.0.0 | |
with: | |
version: v2.0.2 | |
args: --timeout=15m | |
- name: Run ruff (Python linter and formatter) | |
uses: astral-sh/ruff-action@c6bea5606c33b5d04902374392d9233464b90660 # v3.3.0 | |
with: | |
version: "0.9.1" | |
args: "format --check" | |
- name: Run formatting (does not include linting checks) | |
run: | | |
make fmt | |
- name: Fail on formatting differences | |
run: | | |
# Exit with status code 1 if there are differences (i.e. unformatted files) | |
git diff --exit-code | |
- name: Run whitespace check | |
run: make ws | |
validate-bundle-schema: | |
needs: cleanups | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Setup Go | |
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 | |
with: | |
go-version-file: go.mod | |
# Use different schema from regular job, to avoid overwriting the same key | |
cache-dependency-path: | | |
go.sum | |
bundle/internal/schema/*.* | |
- name: Verify that the schema is up to date | |
run: | | |
if ! ( make schema && git diff --exit-code ); then | |
echo "The schema is not up to date. Please run 'make schema' and commit the changes." | |
exit 1 | |
fi | |
# Github repo: https://github.com/ajv-validator/ajv-cli | |
- name: Install ajv-cli | |
run: npm install -g ajv-cli@5.0.0 | |
# Assert that the generated bundle schema is a valid JSON schema by using | |
# ajv-cli to validate it against bundle configuration files. | |
# By default the ajv-cli runs in strict mode which will fail if the schema | |
# itself is not valid. Strict mode is more strict than the JSON schema | |
# specification. See for details: https://ajv.js.org/options.html#strict-mode-options | |
# The ajv-cli is configured to use the markdownDescription keyword which is not part of the JSON schema specification, | |
# but is used in editors like VSCode to render markdown in the description field | |
- name: Validate bundle schema | |
run: | | |
go run main.go bundle schema > schema.json | |
# Add markdownDescription keyword to ajv | |
echo "module.exports = function(a) { | |
a.addKeyword('deprecationMessage'); | |
a.addKeyword('doNotSuggest'); | |
a.addKeyword('markdownDescription'); | |
a.addKeyword('x-databricks-preview'); | |
}" >> keywords.js | |
for file in ./bundle/internal/schema/testdata/pass/*.yml; do | |
ajv test -s schema.json -d $file --valid -c=./keywords.js | |
done | |
for file in ./bundle/internal/schema/testdata/fail/*.yml; do | |
ajv test -s schema.json -d $file --invalid -c=./keywords.js | |
done | |
validate-python-codegen: | |
needs: cleanups | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Install uv | |
uses: astral-sh/setup-uv@6b9c6063abd6010835644d4c2e1bef4cf5cd0fca # v6.0.1 | |
with: | |
version: "0.6.5" | |
- name: Verify that python/codegen is up to date | |
working-directory: experimental/python | |
run: | | |
make codegen | |
if ! ( git diff --exit-code ); then | |
echo "Generated Python code is not up-to-date. Please run 'pushd experimental/python && make codegen' and commit the changes." | |
exit 1 | |
fi |