@@ -56,10 +56,19 @@ export class Builder {
5656 }
5757
5858 public async inspect ( name : string ) : Promise < BuilderInfo > {
59+ // always enable debug for inspect command, so we can display additional
60+ // fields such as features: https://github.com/docker/buildx/pull/1854
61+ const envs = Object . assign ( { } , process . env , {
62+ DEBUG : '1'
63+ } ) as {
64+ [ key : string ] : string ;
65+ } ;
66+
5967 const cmd = await this . buildx . getCommand ( [ 'inspect' , name ] ) ;
6068 return await Exec . getExecOutput ( cmd . command , cmd . args , {
6169 ignoreReturnCode : true ,
62- silent : true
70+ silent : true ,
71+ env : envs
6372 } ) . then ( res => {
6473 if ( res . stderr . length > 0 && res . exitCode != 0 ) {
6574 throw new Error ( res . stderr . trim ( ) ) ;
@@ -83,7 +92,7 @@ export class Builder {
8392 continue ;
8493 }
8594 switch ( true ) {
86- case lkey == 'name' : {
95+ case lkey == 'name' :
8796 parsingType = undefined ;
8897 if ( builder . name == undefined ) {
8998 builder . name = value ;
@@ -98,42 +107,36 @@ export class Builder {
98107 currentNode = { name : value } ;
99108 }
100109 break ;
101- }
102- case lkey == 'driver' : {
110+ case lkey == 'driver' :
103111 parsingType = undefined ;
104112 builder . driver = value ;
105113 break ;
106- }
107- case lkey == 'last activity' : {
114+ case lkey == 'last activity' :
108115 parsingType = undefined ;
109116 builder . lastActivity = new Date ( value ) ;
110117 break ;
111- }
112- case lkey == 'endpoint' : {
118+ case lkey == 'endpoint' :
113119 parsingType = undefined ;
114120 currentNode . endpoint = value ;
115121 break ;
116- }
117- case lkey == 'driver options' : {
122+ case lkey == 'driver options' :
118123 parsingType = undefined ;
119124 currentNode [ 'driver-opts' ] = ( value . match ( / ( [ a - z A - Z 0 - 9 _ . ] + ) = " ( [ ^ " ] * ) " / g) || [ ] ) . map ( v => v . replace ( / ^ ( .* ) = " ( .* ) " $ / g, '$1=$2' ) ) ;
120125 break ;
121- }
122- case lkey == 'status' : {
126+ case lkey == 'status' :
123127 parsingType = undefined ;
124128 currentNode . status = value ;
125129 break ;
126- }
127- case lkey == 'flags' : {
130+ case lkey == 'buildkit daemon flags' :
131+ case lkey == 'flags' : // buildx < v0.13
128132 parsingType = undefined ;
129133 currentNode [ 'buildkitd-flags' ] = value ;
130134 break ;
131- }
132- case lkey == 'buildkit' : {
135+ case lkey == 'buildkit version' :
136+ case lkey == 'buildkit' : // buildx < v0.13
133137 parsingType = undefined ;
134138 currentNode . buildkit = value ;
135139 break ;
136- }
137140 case lkey == 'platforms' : {
138141 parsingType = undefined ;
139142 if ( ! value ) {
@@ -155,21 +158,28 @@ export class Builder {
155158 currentNode . platforms = platforms . join ( ',' ) ;
156159 break ;
157160 }
158- case lkey == 'labels' : {
161+ case lkey == 'features' :
162+ parsingType = 'features' ;
163+ currentNode . features = { } ;
164+ break ;
165+ case lkey == 'labels' :
159166 parsingType = 'label' ;
160167 currentNode . labels = { } ;
161168 break ;
162- }
163- case lkey . startsWith ( 'gc policy rule#' ) : {
169+ case lkey . startsWith ( 'gc policy rule#' ) :
164170 parsingType = 'gcpolicy' ;
165171 if ( currentNode . gcPolicy && currentGCPolicy ) {
166172 currentNode . gcPolicy . push ( currentGCPolicy ) ;
167173 currentGCPolicy = undefined ;
168174 }
169175 break ;
170- }
171176 default : {
172177 switch ( parsingType || '' ) {
178+ case 'features' : {
179+ currentNode . features = currentNode . features || { } ;
180+ currentNode . features [ key . trim ( ) ] = Boolean ( value ) ;
181+ break ;
182+ }
173183 case 'label' : {
174184 currentNode . labels = currentNode . labels || { } ;
175185 currentNode . labels [ key . trim ( ) ] = value ;
0 commit comments