Skip to content

Commit 26f34df

Browse files
committed
fix: Improve output for build operations
1 parent 89fb9ef commit 26f34df

File tree

3 files changed

+15
-33
lines changed

3 files changed

+15
-33
lines changed

.github/workflows/go-tests.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ jobs:
3131
go-version: "1.23.2"
3232

3333
- name: Install dependencies
34-
run: go mod tidy
34+
run: |
35+
go mod tidy
36+
git diff --exit-code ||
37+
(echo "go.mod or go.sum has changed. Please run 'go mod tidy' and commit the changes." && exit 1)
3538
3639
- name: Run tests
3740
run: make test

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ require (
3737
github.com/jmoiron/sqlx v1.4.0
3838
github.com/lmittmann/tint v1.0.5
3939
github.com/miekg/dns v1.1.65
40+
github.com/moby/term v0.5.0
4041
github.com/opencontainers/go-digest v1.0.0
4142
github.com/opencontainers/image-spec v1.1.0
4243
github.com/siderolabs/discovery-api v0.1.4
@@ -215,7 +216,6 @@ require (
215216
github.com/moby/sys/signal v0.7.1 // indirect
216217
github.com/moby/sys/user v0.3.0 // indirect
217218
github.com/moby/sys/userns v0.1.0 // indirect
218-
github.com/moby/term v0.5.0 // indirect
219219
github.com/morikuni/aec v1.0.0 // indirect
220220
github.com/mr-tron/base58 v1.2.0 // indirect
221221
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect

internal/cli/build.go

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"encoding/base64"
66
"encoding/json"
77
"fmt"
8-
"io"
98
"os"
109

1110
composetypes "github.com/compose-spec/compose-go/v2/types"
@@ -15,7 +14,9 @@ import (
1514
"github.com/docker/docker/api/types/image"
1615
dockerclient "github.com/docker/docker/client"
1716
"github.com/docker/docker/pkg/archive"
17+
"github.com/docker/docker/pkg/jsonmessage"
1818
"github.com/docker/docker/registry"
19+
"github.com/moby/term"
1920
)
2021

2122
type BuildOptions struct {
@@ -102,19 +103,10 @@ func buildSingleService(ctx context.Context, dockerCli *dockerclient.Client, ser
102103
}
103104
defer buildResponse.Body.Close()
104105

105-
// Print the build output
106-
decoder := json.NewDecoder(buildResponse.Body)
107-
for {
108-
var message map[string]interface{}
109-
if err := decoder.Decode(&message); err == io.EOF {
110-
break
111-
} else if err != nil {
112-
return "", fmt.Errorf("failed to decode build output for service %s: %w", service.Name, err)
113-
}
114-
115-
if stream, ok := message["stream"]; ok {
116-
fmt.Print(stream)
117-
}
106+
// Display the build response
107+
fd, isTerminal := term.GetFdInfo(os.Stdout)
108+
if err := jsonmessage.DisplayJSONMessagesStream(buildResponse.Body, os.Stdout, fd, isTerminal, nil); err != nil {
109+
return "", fmt.Errorf("failed to display build response for service %s: %w", service.Name, err)
118110
}
119111

120112
return imageName, nil
@@ -161,24 +153,11 @@ func pushSingleServiceImage(ctx context.Context, dockerCli *dockerclient.Client,
161153
}
162154
defer pushResponse.Close()
163155

164-
fmt.Printf("Pushing image %s for service %s\n", imageName, serviceName)
156+
fmt.Printf("Pushing image %s for service %s...\n", imageName, serviceName)
165157

166-
// Handle output and errors
167-
decoder := json.NewDecoder(pushResponse)
168-
for {
169-
var message map[string]interface{}
170-
if err := decoder.Decode(&message); err == io.EOF {
171-
break
172-
} else if err != nil {
173-
return fmt.Errorf("failed to decode push output for image %s: %w", imageName, err)
174-
}
175-
if stream, ok := message["stream"]; ok {
176-
fmt.Print(stream)
177-
} else if errorMessage, ok := message["error"]; ok {
178-
return fmt.Errorf("error pushing image %s: %s", imageName, errorMessage)
179-
} else if status, ok := message["status"]; ok {
180-
fmt.Printf(" %s\n", status)
181-
}
158+
fd, isTerminal := term.GetFdInfo(os.Stdout)
159+
if err := jsonmessage.DisplayJSONMessagesStream(pushResponse, os.Stdout, fd, isTerminal, nil); err != nil {
160+
return fmt.Errorf("failed to display push response for image %s: %w", imageName, err)
182161
}
183162

184163
fmt.Printf("Image %s pushed successfully.\n", imageName)

0 commit comments

Comments
 (0)