Skip to content

Commit aaf3293

Browse files
cornzyblackCopilot
andcommitted
feat: update README on usage, and disable dropdown of targets
Co-authored-by: Copilot <copilot@github.com>
1 parent 4f6f1e7 commit aaf3293

4 files changed

Lines changed: 37 additions & 238 deletions

File tree

CHANGELOG.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
All notable changes to the **Databricks Bundle Inspector** extension are documented in this file.
44

5+
## [0.1.1] - 2026-05-04
6+
7+
### Changed
8+
9+
- Simplified README to focus on structural DAG visualization and removed development/testing documentation.
10+
- Disabled target selection dropdown in the panel. The extension now displays "structural preview" only, removing the ability to switch between targets. This aligns with the focus on structural inspection.
11+
512
## [0.1.0] - 2026-05-04
613

714
Initial public release. The extension is a read-only inspector for Declarative Automation Bundles (previously known as Databricks Asset Bundles). It runs `databricks bundle validate --output json`, renders the resolved bundle as an interactive graph, and surfaces bundle issues in VS Code's native Problems panel. Everything operates on the CLI-resolved bundle. The extension does not modify YAML and does not call Databricks workspace APIs.
@@ -91,5 +98,6 @@ Initial public release. The extension is a read-only inspector for Declarative A
9198
- Node 22 (development).
9299
- Databricks CLI `v0.270.1` or newer.
93100

94-
[Unreleased]: https://github.com/uncoverthestack/databricks-bundle-inspector/compare/v0.1.0...HEAD
101+
[Unreleased]: https://github.com/uncoverthestack/databricks-bundle-inspector/compare/v0.1.1...HEAD
102+
[0.1.1]: https://github.com/uncoverthestack/databricks-bundle-inspector/compare/v0.1.0...v0.1.1
95103
[0.1.0]: https://github.com/uncoverthestack/databricks-bundle-inspector/releases/tag/v0.1.0

README.md

Lines changed: 21 additions & 204 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,38 @@
11
# Databricks Bundle Inspector
22

3-
A VS Code extension for inspecting Declarative Automation Bundles (previously known as Databricks Asset Bundles) before you deploy or review them. It runs `databricks bundle validate --output json`, turns the CLI-resolved bundle into an interactive job graph, and surfaces bundle issues in context.
3+
A VS Code extension that visualizes Databricks Bundles as interactive job dependency graphs. See the actual structure of your bundle jobs, task dependencies, and configurations at a glance.
44

55
## What it does
66

7-
Declarative Automation Bundles (previously known as Databricks Asset Bundles) (DABs) describe jobs, tasks, dependencies, and compute in YAML that can span many files and layers of variable substitution. Reading the raw YAML rarely tells you what will actually run. This extension closes that gap inside your editor.
7+
Open a `databricks.yml` file and run **Inspect Databricks Bundle** to see:
88

9-
Open a `databricks.yml` file, run **Inspect Databricks Bundle**, and you get:
9+
- **Visual DAG**: Interactive graph of jobs and `depends_on` relationships with pan, zoom, and search.
10+
- **Task details**: Type, source file, parameters, compute, and dependencies.
11+
- **Issue detection**: Missing files, unresolved variables, unknown task types, and Databricks CLI diagnostics.
12+
- **Layout controls**: Automatic graph layout to keep parallel branches visually separated.
1013

11-
- A visual DAG for bundle jobs, with arrows for `depends_on` relationships.
12-
- Task details including type, source file, parameters, compute, dependencies, and direct dependents.
13-
- Bundle issue detection for missing local files/libraries, unresolved variables, unknown task types, and Databricks CLI diagnostics.
14-
- File-content enrichment for local task files, including detected secret scopes and widgets where supported.
15-
16-
The graph is powered by React Flow and includes pan, zoom, a minimap, search, job switching, issue-focused views, and layout controls.
14+
<div>
15+
<a href="https://www.loom.com/share/634c3b8081f545b198e947ff68f99f3d">
16+
<p>Databricks Bundle Inspector Demo - Watch Video</p>
17+
</a>
18+
<a href="https://www.loom.com/share/634c3b8081f545b198e947ff68f99f3d">
19+
<img style="max-width:300px;" src="https://cdn.loom.com/sessions/thumbnails/634c3b8081f545b198e947ff68f99f3d-8b76e3bf25272d13-full-play.gif#t=0.1">
20+
</a>
21+
</div>
1722

1823
## Requirements
1924

20-
The [Databricks CLI](https://docs.databricks.com/dev-tools/cli/index.html) must be installed. The extension looks for it in this order:
21-
22-
1. The VS Code setting `databricksBundleInspector.cliPath`, if configured.
23-
2. `databricks` on the system `PATH`.
24-
25-
Databricks authentication is not strictly required for structural inspection. The extension uses a probe target by default so it can often read the CLI-resolved bundle even when workspace credentials are not configured. Validation runs with a 30 second timeout.
25+
The [Databricks CLI](https://docs.databricks.com/dev-tools/cli/index.html) must be installed and available on your `PATH`, or configured via the `databricksBundleInspector.cliPath` VS Code setting.
2626

2727
## Usage
2828

29-
1. Open a folder that contains a `databricks.yml` or `databricks.yaml` file.
29+
1. Open a folder containing a `databricks.yml` or `databricks.yaml` file.
3030
2. Open the bundle file in the editor.
31-
3. Run a command from one of these entry points:
32-
* The **Inspect Databricks Bundle** button in the editor title bar (only shown for bundle files).
33-
* Right-click in the editor and choose **Inspect Databricks Bundle**.
34-
* The Command Palette.
31+
3. Click **Inspect Databricks Bundle** (editor title bar button) or right-click and select the command.
3532

36-
The webview opens in a new editor column. After a bundle has been inspected, saving the bundle file or a tracked related file refreshes diagnostics and updates the active inspector panel.
33+
The graph opens in a new editor panel. It refreshes automatically when you save the bundle file or related configurations.
3734

38-
## Commands
35+
## Command
3936

4037
| Command ID | Title | When available |
4138
| --- | --- | --- |
@@ -44,191 +41,11 @@ The webview opens in a new editor column. After a bundle has been inspected, sav
4441

4542
## How it works
4643

47-
The extension is split into two halves that talk over VS Code's webview message channel:
48-
49-
The **extension host** (`src/extension.ts`) resolves the Databricks CLI, invokes `databricks bundle validate --output json` in the bundle directory, builds diagnostics/issues, enriches the graph from local task files, and passes the parsed result to the webview. Validation warnings, auth failures, and timeouts are surfaced as VS Code notifications or Problems panel diagnostics.
50-
51-
The **webview** (`src/webview/`) is a React 19 + Vite + Tailwind v4 app that receives the parsed bundle graph and renders it with `@xyflow/react`. Layout is computed with a topological level assignment and a row-packing heuristic so parallel branches stay visually separated.
52-
53-
The bundle graph model lives in `src/bundle/graph/`. Issue building, semantic graph export, source location handling, target resolution, and task file detection live under `src/bundle/`.
54-
55-
## Development
56-
57-
```bash
58-
npm install
59-
npm run build # builds the extension and the webview
60-
npm run watch:esbuild # rebuild the extension on change
61-
npm run watch:tsc # type-check the extension on change
62-
npm run verify # unit tests, semantic baselines, typecheck, lint
63-
```
64-
65-
Press `F5` in VS Code to launch an Extension Development Host with the extension loaded. Fixture bundles for tests and manual smoke checks live under `src/test/fixtures/`.
66-
67-
## Testing
68-
69-
The test suite is split by confidence layer:
70-
71-
| Command | Purpose |
72-
| --- | --- |
73-
| `npm run test:unit` | Pure unit tests for parsers, graph extraction, issue building, documentation policy, and file-content detection. |
74-
| `npm run test:semantic` | Golden semantic graph baseline tests from committed Databricks CLI-shaped JSON fixtures. |
75-
| `npm run test:semantic:cli` | Live Databricks CLI compatibility check. Runs the configured CLI against a fixture and compares the resulting semantic graph to the committed baseline. |
76-
| `npm run test:semantic:cli:matrix` | Runs the live CLI compatibility check across the CLI/fixture pairs in `semantic-cli-matrix.config.json`. |
77-
| `npm run test` | Runs unit tests and semantic graph baselines. |
78-
| `npm run typecheck` | Runs TypeScript without emitting build output. |
79-
| `npm run lint` | Runs ESLint over `src`. |
80-
| `npm run verify` | Local pre-PR check: tests, semantic baselines, typecheck, and lint. |
81-
82-
Semantic graph baselines intentionally use committed `validated-bundle.json`
83-
fixtures that represent `databricks bundle validate --output json` output. They
84-
do not parse raw YAML directly and normal tests do not overwrite fixture files.
85-
86-
To check a real Databricks CLI version without overwriting committed fixtures:
87-
88-
```bash
89-
npm run test:semantic:cli
90-
```
91-
92-
By default this runs `databricks` against
93-
`src/test/fixtures/secret-scope-example` and compares the resulting semantic
94-
graph with `src/test/fixtures/baselines/secret-scope-example.semantic.json`.
95-
Use environment variables to point it at another CLI or fixture:
96-
97-
```bash
98-
SEMANTIC_CLI_COMMAND=/usr/local/bin/databricks \
99-
SEMANTIC_CLI_FIXTURE=src/test/fixtures/secret-scope-example \
100-
SEMANTIC_CLI_BASELINE=src/test/fixtures/baselines/secret-scope-example.semantic.json \
101-
npm run test:semantic:cli
102-
```
103-
104-
Live CLI artifacts are written under `.test-artifacts/semantic-cli/` for
105-
inspection and are ignored by git. This command is intentionally not part of
106-
`npm run verify` because it depends on an external CLI installation and local
107-
Databricks environment behavior.
108-
109-
To run the compatibility check across multiple CLI commands and fixtures:
110-
111-
```bash
112-
npm run test:semantic:cli:matrix
113-
```
114-
115-
The default matrix lives in `semantic-cli-matrix.config.json`. It is deliberately
116-
small so it works in a normal local environment. For broader compatibility
117-
testing, provide a separate config whose `clis` entries point at pinned
118-
Databricks CLI binaries, for example:
119-
120-
```json
121-
{
122-
"clis": [
123-
{ "name": "0.270.1", "command": "/opt/databricks-cli/0.270.1/databricks" },
124-
{ "name": "0.295.0", "command": "/opt/databricks-cli/0.295.0/databricks" },
125-
{ "name": "latest", "command": "/usr/local/bin/databricks" }
126-
],
127-
"fixtures": [
128-
{
129-
"name": "secret-scope-example",
130-
"fixture": "src/test/fixtures/secret-scope-example",
131-
"baseline": "src/test/fixtures/baselines/secret-scope-example.semantic.json"
132-
}
133-
]
134-
}
135-
```
136-
137-
Run it with:
138-
139-
```bash
140-
npm run test:semantic:cli:matrix -- --config path/to/matrix.json
141-
```
142-
143-
The intended compatibility floor for v0 is Databricks CLI `v0.270.1+`, but broad
144-
compatibility claims should be tied to the fixture suite covered by this matrix.
145-
146-
To install a local matrix of pinned Databricks CLI binaries from GitHub releases:
147-
148-
```bash
149-
npm run cli:install-matrix -- --min 0.270.1
150-
```
151-
152-
This installs every Databricks CLI release at or above the minimum into
153-
`.tools/databricks-cli/` and writes `semantic-cli-matrix.local.json`. Then run:
154-
155-
```bash
156-
npm run test:semantic:cli:matrix -- --config semantic-cli-matrix.local.json
157-
```
158-
159-
For a faster smoke matrix, use:
160-
161-
```bash
162-
npm run cli:install-matrix -- --min 0.270.1 --strategy latest-patch-per-minor
163-
```
164-
165-
The smoke strategy is useful for quick local checks, but it should not be used
166-
as the compatibility claim for v0.
167-
168-
To intentionally refresh a validated bundle fixture and its provenance metadata:
169-
170-
```bash
171-
npm run fixtures:update:validated-bundle -- \
172-
--fixture src/test/fixtures/secret-scope-example \
173-
--cli databricks
174-
```
175-
176-
This command writes both `validated-bundle.json` and
177-
`validated-bundle.meta.json`. The metadata includes the CLI version, generation
178-
timestamp, target, and a canonical SHA-256 of the JSON payload so formatting-only
179-
changes do not invalidate provenance.
180-
181-
## Dev Container
182-
183-
The repository includes a VS Code dev container for repeatable local checks. It
184-
uses Node 22, installs project dependencies with `npm ci`, and installs the
185-
Databricks CLI inside the container.
186-
187-
Recommended workflow:
188-
189-
1. Open the repository in VS Code.
190-
2. Run **Dev Containers: Reopen in Container**.
191-
3. Run deterministic checks:
192-
193-
```bash
194-
npm run verify
195-
```
196-
197-
4. Run the live CLI semantic compatibility check inside the container:
198-
199-
```bash
200-
npm run test:semantic:cli
201-
```
202-
203-
The dev container sets `databricksBundleInspector.cliPath` to
204-
`/usr/local/bin/databricks` for extension development hosts launched from the
205-
container.
206-
207-
## Release process
208-
209-
Releases are tag-driven. After merging a release PR with `package.json`,
210-
`package-lock.json`, `CHANGELOG.md`, and `README.md` ready for the target
211-
version, create and push a matching version tag:
212-
213-
```bash
214-
git tag v0.1.0
215-
git push origin v0.1.0
216-
```
217-
218-
The release workflow verifies, builds, packages a VSIX, writes a SHA-256
219-
checksum, verifies that checksum, and publishes both files to a GitHub Release.
220-
The Marketplace publish job then waits for approval on the `vscode-marketplace`
221-
GitHub Environment. After approval, it downloads the same VSIX artifact, verifies
222-
the checksum again, and publishes that exact package to the VS Code Marketplace.
223-
224-
Maintainers need to configure the `vscode-marketplace` environment in GitHub
225-
with required reviewers and a `VSCE_PAT` environment secret. The token must be an
226-
Azure DevOps Personal Access Token with Marketplace Manage scope for the
227-
`UncoverTheStack` publisher.
44+
The extension runs `databricks bundle validate --output json` to resolve your bundle structure, builds a dependency graph from the jobs and their `depends_on` relationships, and renders it as an interactive visual DAG using React Flow.
22845

22946
## Project status
23047

231-
Version 0.1.0. Active development. Feedback, bug reports, and feature requests are welcome on the [issue tracker](https://github.com/uncoverthestack/databricks-bundle-inspector/issues).
48+
Version 0.1.1. Active development. Feedback, bug reports, and feature requests are welcome on the [issue tracker](https://github.com/uncoverthestack/databricks-bundle-inspector/issues).
23249

23350
## License
23451

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "databricks-bundle-inspector",
33
"displayName": "Databricks Bundle Inspector",
44
"description": "Inspect and visualize Databricks bundle structure",
5-
"version": "0.1.0",
5+
"version": "0.1.1",
66
"publisher": "UncoverTheStack",
77
"icon": "resources/dark/logo.png",
88
"license": "Apache-2.0",

src/webview/components/AppHeader.jsx

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -31,38 +31,12 @@ export default function AppHeader({
3131
<span className="truncate text-sm font-semibold text-stone-200">
3232
{bundleName ?? "Bundle Inspector"}
3333
</span>
34-
{targetOptions.length > 0 ? (
35-
<select
36-
title={targetTitle}
37-
value={selectedTarget ?? ""}
38-
onChange={(e) => onTargetChange(e.target.value || undefined)}
39-
className={[
40-
"hidden cursor-pointer rounded-md border px-2 py-1 text-xs outline-none focus:border-blue-400 md:block",
41-
targetMode === "probe"
42-
? "border-yellow-500/30 bg-yellow-500/10 text-yellow-300"
43-
: "border-stone-700 bg-stone-900 text-stone-300",
44-
].join(" ")}
45-
>
46-
<option value="">structural preview</option>
47-
{targetOptions.map((target) => (
48-
<option key={target} value={target}>
49-
target: {target}
50-
</option>
51-
))}
52-
</select>
53-
) : (
54-
<span
55-
title={targetTitle}
56-
className={[
57-
"hidden shrink-0 rounded-md border px-2 py-0.5 text-[11px] md:inline-flex",
58-
targetMode === "probe"
59-
? "border-yellow-500/25 bg-yellow-500/10 text-yellow-300"
60-
: "border-stone-800 bg-stone-900/70 text-stone-400",
61-
].join(" ")}
62-
>
63-
{targetLabel}
64-
</span>
65-
)}
34+
<span
35+
title={targetTitle}
36+
className="hidden shrink-0 rounded-md border border-stone-800 bg-stone-900/70 px-2 py-0.5 text-[11px] text-stone-400 md:inline-flex"
37+
>
38+
structural preview
39+
</span>
6640
{jobKeys.length > 0 && <span className="text-xs text-stone-700">·</span>}
6741
{jobKeys.length > 1 ? (
6842
<select

0 commit comments

Comments
 (0)