5
5
"encoding/base64"
6
6
"encoding/json"
7
7
"fmt"
8
- "io"
9
8
"os"
10
9
11
10
composetypes "github.com/compose-spec/compose-go/v2/types"
@@ -15,7 +14,9 @@ import (
15
14
"github.com/docker/docker/api/types/image"
16
15
dockerclient "github.com/docker/docker/client"
17
16
"github.com/docker/docker/pkg/archive"
17
+ "github.com/docker/docker/pkg/jsonmessage"
18
18
"github.com/docker/docker/registry"
19
+ "github.com/moby/term"
19
20
)
20
21
21
22
type BuildOptions struct {
@@ -102,19 +103,10 @@ func buildSingleService(ctx context.Context, dockerCli *dockerclient.Client, ser
102
103
}
103
104
defer buildResponse .Body .Close ()
104
105
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 )
118
110
}
119
111
120
112
return imageName , nil
@@ -161,24 +153,11 @@ func pushSingleServiceImage(ctx context.Context, dockerCli *dockerclient.Client,
161
153
}
162
154
defer pushResponse .Close ()
163
155
164
- fmt .Printf ("Pushing image %s for service %s\n " , imageName , serviceName )
156
+ fmt .Printf ("Pushing image %s for service %s... \n " , imageName , serviceName )
165
157
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 )
182
161
}
183
162
184
163
fmt .Printf ("Image %s pushed successfully.\n " , imageName )
0 commit comments