Skip to content

Fix script output dropping last line without trailing newline#4995

Open
denik wants to merge 4 commits intomainfrom
denik/random-bugfixes-4
Open

Fix script output dropping last line without trailing newline#4995
denik wants to merge 4 commits intomainfrom
denik/random-bugfixes-4

Conversation

@denik
Copy link
Copy Markdown
Contributor

@denik denik commented Apr 16, 2026

Changes

Fix experimental.scripts hooks silently dropping the last line of output when it doesn't end with a trailing newline (e.g. printf "done").

Tests

Added acceptance test at acceptance/bundle/scripts/no-trailing-newline/ and unit tests for the script executor.

Running the acceptance test against the previous release demonstrates the bug:

$ go test ./acceptance -run 'TestAccept/bundle/scripts/no-trailing-newline' -useversion 0.296.0

--- Expected
+++ Actual (v0.296.0)
@@ -5,3 +5,2 @@
 line 2
-line without newline
 Name: scripts_no_trailing_newline

v0.296.0 drops "line without newline" because the last line has no trailing \n. The fix correctly includes it.

denik added a commit that referenced this pull request Apr 16, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 16, 2026

Approval status: pending

/acceptance/bundle/ - needs approval

5 files changed
Suggested: @pietern
Also eligible: @andrewnester, @lennartkats-db, @shreyas-goenka, @janniklasrose, @anton-107

/bundle/ - needs approval

Files: bundle/scripts/scripts.go, bundle/scripts/scripts_test.go
Suggested: @pietern
Also eligible: @andrewnester, @lennartkats-db, @shreyas-goenka, @janniklasrose, @anton-107

General files (require maintainer)

Files: NEXT_CHANGELOG.md
Based on git history:

  • @simonfaltum -- recent work in ./

Any maintainer (@andrewnester, @anton-107, @pietern, @shreyas-goenka, @simonfaltum, @renaudhartert-db) can approve all areas.
See OWNERS for ownership rules.

denik added 4 commits April 22, 2026 15:42
bufio.Reader.ReadString returns both data and io.EOF when the stream
ends without a delimiter. The old loop condition `for err == nil` caused
the last line of output to be silently dropped when it lacked a trailing
newline. This affected any bundle script (experimental.scripts hooks)
whose output didn't end with `\n`.

Restructure the loop to always process data before checking for errors,
which is the idiomatic Go pattern for ReadString.

Task: 001.md

Co-authored-by: Isaac
Co-authored-by: Isaac
This test demonstrates the bug where the last line of script output
was dropped when it didn't end with a trailing newline. Running this
test with -useversion 0.296.0 shows the bug: "line without newline"
is missing from the output.

Task: 002.md

Co-authored-by: Isaac
@denik denik force-pushed the denik/random-bugfixes-4 branch from a86395c to f43f4d2 Compare April 22, 2026 16:10
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.

1 participant