Skip to content

Add public API regression guard for databricks.bundles.core - #6439

Merged
Sankalp-Mittal merged 4 commits into
mainfrom
sankalp-mittal/pydabs-public-api-guard
Sep 3, 2026
Merged

Add public API regression guard for databricks.bundles.core#6439
Sankalp-Mittal merged 4 commits into
mainfrom
sankalp-mittal/pydabs-public-api-guard

Conversation

@Sankalp-Mittal

@Sankalp-Mittal Sankalp-Mittal commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

Summary

A regression guard has been added to the public facing API's on PyDABs, this is done to test that auto generating the code does not change any public API's.

Why

The upcoming PyDABs codegen/wiring refactor (#6397) converts the hand-written databricks.bundles.core wiring — Resources, the *_mutator functions, the _ResourceType registry, __all__ — into generated code. Nothing today guards the typed public surface customers import and type-check against, so that refactor (or a future one) could silently drop a type hint, move a * keyword marker, rename a method, or change the export set.

This lands a golden snapshot of that surface on main first, freezing the known-good pre-refactor API. #6397 then merges main in and must reproduce the identical golden — that passing test is the proof the refactor preserved the public API. generate-check cannot do this: after the refactor regenerates the wiring it trivially passes ("checked-in == regenerated"); only a golden captured here, before the refactor, can show the new generated wiring equals the old hand-written surface.

What

An acceptance test at acceptance/bundle/python/public-api/ whose script runs a checked-in dump_public_api.py under uv, snapshotting databricks.bundles.core's __all__, every Resources.add_* signature and property, the *_mutator overloads, Variable/VariableOr*, the support types, and the _ResourceType.all() registry.

Notable design decisions

  • Types render by public short name (Variable[str], not databricks.bundles.core._variable.Variable). The refactor moves internal _-prefixed modules; a golden keyed on internal paths would false-fail even when the public API is unchanged. Public imports go through the core.__init__ re-exports, which is exactly what the golden pins.
  • Signatures are reconstructed from inspect.Signature so /, *, *args, **kwargs markers render explicitly and stably.
  • --python 3.11 is pinned so the golden is reproducible independent of the repo-wide UV_PYTHON minimum, and typing.get_overloads (3.11+) is available. Output verified identical on 3.11 and 3.12.
  • Runtime error strings are deliberately excluded — that's behavior, not the typed API.

This pull request and its description were written by Isaac.

Comment thread acceptance/bundle/python/public-api/script Outdated
Comment thread python/databricks_tests/core/test_public_api.py
@Sankalp-Mittal
Sankalp-Mittal disabled the stack merge September 2, 2026 09:23
Sankalp-Mittal and others added 3 commits September 3, 2026 10:55
_bases() filtered out `object` but not underscore-prefixed private bases, so a
generated private base (e.g. _GeneratedResources introduced by the wiring
refactor) would surface in the golden as a false positive even though the public
contract is intact. Mirror _members()'s underscore filter. No-op for the current
golden on this branch, where Resources has no private base.

Co-authored-by: Isaac <no-reply@databricks.com>
The core public-API snapshot doesn't exercise the CLI end to end, so it belongs
with the other pure-Python pydabs tests rather than in acceptance/. Move it to
databricks_tests/core/test_public_api.py, comparing against a committed golden
(regenerate with UPDATE_SNAPSHOTS=1). Gate on Python >= 3.11 (via skipif, and a
sys.version_info guard so pyright at 3.10 is happy) instead of pinning an exact
interpreter, since typing.get_overloads needs 3.11+ and the output is identical on
3.11/3.12/3.13. Removes the acceptance/bundle/python/public-api test.

Co-authored-by: Isaac <no-reply@databricks.com>
@Sankalp-Mittal
Sankalp-Mittal force-pushed the sankalp-mittal/pydabs-public-api-guard branch from 01b685b to d25d843 Compare September 3, 2026 08:56
The whitespace linter (task checks -> ws) strips a trailing blank line and then
git diff --exit-code fails; in acceptance/ the golden was in the ws skip-list, but
as a committed .txt under python/ it is checked. Emit a single trailing newline.

Co-authored-by: Isaac <no-reply@databricks.com>
@Sankalp-Mittal
Sankalp-Mittal added this pull request to the merge queue Sep 3, 2026
Merged via the queue into main with commit 1a00760 Sep 3, 2026
34 checks passed
@Sankalp-Mittal
Sankalp-Mittal deleted the sankalp-mittal/pydabs-public-api-guard branch September 3, 2026 10:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants