Skip to content

Conversation

@pietern
Copy link
Contributor

@pietern pietern commented Oct 23, 2025

Changes

The progress logger now only supports append (default) and json modes.

The json mode is not used anywhere and is up for removal next.

Why

In-place mode was added in #276 (March 2023) to update job progress on the same line using ANSI escape codes. The intent was to (eventually) show a rich UI with job status and task status but this didn't materialize. It was only ever implemented for job run status events, where the number of states to cycle through is minimal.

The feature was effectively disabled after commit 54e16d5 (#2213, Feb 2025) changed the default log level from disabled to warn. In-place mode required (log.level == "disabled" OR log.file != "stderr") AND stderr.IsTerminal(). With the new default, this is only met when log.file != "stderr" (uncommon). Additionally, only JobProgressEvent supported in-place updates while other events fell back to append mode.

Before (when forcing in-place mode):

Run URL: ...

2025-10-23 16:45:01 "Test Progress Logger" TERMINATED SUCCESS

After:

Run URL: ...

2025-10-23 16:46:28 "Test Progress Logger" RUNNING
2025-10-23 16:47:09 "Test Progress Logger" TERMINATED SUCCESS

Related: the escape codes that were used are not VT100 compliant and don't work in Ghostty.

Tests

Tests pass. Manually confirmed bundle run works as expected.

In-place mode was designed to update job progress in place using ANSI escape codes (e.g., showing 'PENDING' → 'RUNNING' → 'TERMINATED' on the same line). However, acceptance tests show jobs typically output only a single state transition: 'Run URL: <url>' followed by '[TIMESTAMP] "job-name" TERMINATED', suggesting the job completes before multiple states can be observed. The default mode selection logic required log-file to not be stderr AND stderr to be a terminal to enable in-place mode, which is an uncommon configuration. Additionally, only JobProgressEvent supported in-place updates while all other events (URLs, errors, pipeline events) fell back to append mode, making the feature inconsistent. The implementation added complexity with ANSI escape codes, terminal detection, and an IsInplaceSupported() interface method across all event types. Since the feature provided minimal practical value and likely was rarely (if ever) enabled by default, it has been removed in favor of the simpler append mode.
@eng-dev-ecosystem-bot
Copy link
Collaborator

eng-dev-ecosystem-bot commented Oct 23, 2025

Run: 18753030842

Env 🔄​flaky 💚​RECOVERED 🙈​SKIP ✅​pass 🙈​skip
💚​ aws linux 1 1 319 578
💚​ aws windows 1 1 320 577
💚​ aws-ucws linux 1 1 440 473
💚​ aws-ucws windows 1 1 441 472
💚​ azure linux 1 1 319 577
💚​ azure windows 1 1 320 576
💚​ azure-ucws linux 1 1 438 472
💚​ azure-ucws windows 1 1 439 471
🔄​ gcp linux 4 1 1 314 579
🔄​ gcp windows 5 1 1 314 578
11 failing tests:
Test Name aws linux aws windows aws-ucws linux aws-ucws windows azure linux azure windows azure-ucws linux azure-ucws windows gcp linux gcp windows
TestAccept 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R
TestAccept/bundle/destroy/jobs-and-pipeline ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p 🔄​f ✅​p
TestAccept/bundle/destroy/jobs-and-pipeline/DATABRICKS_BUNDLE_ENGINE=terraform ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p 🔄​f ✅​p
TestAccept/bundle/run/app-with-job 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
TestAccept/bundle/templates/default-python/combinations/classic ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p 🔄​f ✅​p
TestAccept/bundle/templates/default-python/combinations/classic/DATABRICKS_BUNDLE_ENGINE=direct-exp/DLT=no/NBOOK=yes/PY=yes ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p 🔄​f ✅​p
TestAccept/bundle/templates/default-python/combinations/classic/DATABRICKS_BUNDLE_ENGINE=terraform/DLT=no/NBOOK=no/PY=yes ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p 🔄​f
TestAccept/bundle/templates/default-python/combinations/classic/DATABRICKS_BUNDLE_ENGINE=terraform/DLT=no/NBOOK=yes/PY=no ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p 🔄​f
TestAccept/bundle/templates/default-python/combinations/classic/DATABRICKS_BUNDLE_ENGINE=terraform/DLT=yes/NBOOK=no/PY=no ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p 🔄​f
TestAccept/bundle/templates/default-python/integration_classic ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p 🔄​f
TestAccept/bundle/templates/default-python/integration_classic/DATABRICKS_BUNDLE_ENGINE=direct-exp/UV_PYTHON=3.9 ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p ✅​p 🔄​f

@pietern pietern temporarily deployed to test-trigger-is October 23, 2025 15:09 — with GitHub Actions Inactive
Copy link
Contributor

@lennartkats-db lennartkats-db left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removing this in this stage is fine. I would like us to revisit having a nicer progress updater, though. Maybe that nicer implementation should take inspiration from what we had here?

@pietern
Copy link
Contributor Author

pietern commented Oct 24, 2025

@lennartkats-db That's the idea. To set the stage for improvements, existing bits need to be cleaned up first.

Copy link
Contributor

@denik denik left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yay, red diff :)

@pietern pietern added this pull request to the merge queue Oct 24, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Oct 24, 2025
@pietern pietern added this pull request to the merge queue Oct 24, 2025
Merged via the queue into main with commit 08839b5 Oct 24, 2025
13 checks passed
@pietern pietern deleted the remove-inplace branch October 24, 2025 12:06
pietern added a commit that referenced this pull request Oct 24, 2025
## Changes

The progress logger now only supports `append` mode.

## Why

JSON mode was added in #276 (March 2023). The intent was to make
progress events machine readable but this didn't materialize (we didn't
end up using it in the VS Code extension).

This functionality would print events to stderr if the user specified
`--progress-format json`, or set the an equivalent environment variable.
Because the flag is hidden, and there are no online references to the
functionality, I believe it is safe to remove. If users take a
dependency on JSON output, it should be enabled via the existing
`--output json` flag and be written to stdout.

After this change is merged, the remaining functionality can be moved
into the core `cmdio` types, and the "progress logger" can be removed.
Once there is a single type for all I/O, we have a better shot at
improving it.

Related change: #3811.

## Tests

Tests pass.
pietern added a commit that referenced this pull request Oct 28, 2025
## Changes

This continues the progress logger simplification by migrating from the
`Logger.Log()` event-based system to direct cmdio calls. This builds on
#3811 and #3812, which made the progress logger effectively only write
strings to stderr.

## Why

This simplifies the codebase by removing the (unused) event abstraction
layer while maintaining functionality. The compatibility layer provides
a clean migration path and will eventually be removed once the
functionality in those functions have a dedicated new home.

## Tests

Tests pass. Analysis of the diff suggests that before/after is
functionally equivalent. A minor note is that we no longer have a mutex
around `.Log()` calls, but there are no concurrent calls to the
function.
pietern added a commit that referenced this pull request Oct 28, 2025
…3820)

## Changes

This change removes remaining references to the "progress logger".

All terminal I/O now goes through a single type in `cmdio`.

Builds on #3811, #3812, and #3818.
deco-sdk-tagging bot added a commit that referenced this pull request Oct 29, 2025
## Release v0.275.0

### Notable Changes
* Python support for Databricks Asset Bundles is now generally available.

### CLI
* Remove `inplace` mode for the `--progress-format` flag ([#3811](#3811))
* Remove `json` mode for the `--progress-format` flag ([#3812](#3812))
* Deprecate the `--progress-format` flag ([#3819](#3819))

### Bundles
* Add support for `--bind` flag in `bundle generate` ([#3782](#3782))
* Add `pydabs` template replacing `experimental-jobs-as-code` template ([#3806](#3806))
* You can now use the top-level `python` section instead of `experimental/python` ([#3540](#3540))
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.

6 participants