Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions NEXT_CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
### CLI

### Bundles
* Fix script output dropping last line without trailing newline ([#4995](https://github.com/databricks/cli/pull/4995))

### Dependency updates

Expand Down
6 changes: 6 additions & 0 deletions acceptance/bundle/scripts/no-trailing-newline/databricks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
bundle:
name: scripts_no_trailing_newline

experimental:
scripts:
preinit: "python3 ./myscript.py"
5 changes: 5 additions & 0 deletions acceptance/bundle/scripts/no-trailing-newline/myscript.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import sys

sys.stdout.write("line 1\n")
sys.stdout.write("line 2\n")
sys.stdout.write("line without newline")
5 changes: 5 additions & 0 deletions acceptance/bundle/scripts/no-trailing-newline/out.test.toml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions acceptance/bundle/scripts/no-trailing-newline/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@

>>> [CLI] bundle validate
Executing 'preinit' script
line 1
line 2
line without newline
Name: scripts_no_trailing_newline
Target: default
Workspace:
User: [USERNAME]
Path: /Workspace/Users/[USERNAME]/.bundle/scripts_no_trailing_newline/default

Validation OK!
1 change: 1 addition & 0 deletions acceptance/bundle/scripts/no-trailing-newline/script
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
trace $CLI bundle validate
12 changes: 8 additions & 4 deletions bundle/scripts/scripts.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,14 @@ func (m *script) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagnostics {
cmdio.LogString(ctx, fmt.Sprintf("Executing '%s' script", m.scriptHook))

reader := bufio.NewReader(out)
line, err := reader.ReadString('\n')
for err == nil {
cmdio.LogString(ctx, strings.TrimSpace(line))
line, err = reader.ReadString('\n')
for {
line, err := reader.ReadString('\n')
if line != "" {
cmdio.LogString(ctx, strings.TrimSpace(line))
}
if err != nil {
break
}
}

err = cmd.Wait()
Expand Down
50 changes: 50 additions & 0 deletions bundle/scripts/scripts_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package scripts_test

import (
"runtime"
"testing"

"github.com/databricks/cli/bundle"
"github.com/databricks/cli/bundle/config"
"github.com/databricks/cli/bundle/scripts"
"github.com/databricks/cli/libs/cmdio"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestExecuteOutputWithoutTrailingNewline(t *testing.T) {
if runtime.GOOS == "windows" {
t.Skip("skipping on windows")
}

dir := t.TempDir()
b := &bundle.Bundle{
BundleRootPath: dir,
Config: config.Root{
Experimental: &config.Experimental{
Scripts: map[config.ScriptHook]config.Command{
config.ScriptPreInit: "printf 'line1\nline2\nlast line without newline'",
},
},
},
}

ctx, stderr := cmdio.NewTestContextWithStderr(t.Context())
diags := bundle.Apply(ctx, b, scripts.Execute(config.ScriptPreInit))
require.NoError(t, diags.Error())

output := stderr.String()
assert.Contains(t, output, "line1")
assert.Contains(t, output, "line2")
assert.Contains(t, output, "last line without newline")
}

func TestExecuteNoScript(t *testing.T) {
b := &bundle.Bundle{
Config: config.Root{},
}

ctx, _ := cmdio.NewTestContextWithStderr(t.Context())
diags := bundle.Apply(ctx, b, scripts.Execute(config.ScriptPreInit))
require.NoError(t, diags.Error())
}
Loading