File tree Expand file tree Collapse file tree 5 files changed +24
-4
lines changed Expand file tree Collapse file tree 5 files changed +24
-4
lines changed Original file line number Diff line number Diff line change 1+ {
2+     "description" : " allow disabling buildkit for container engines lacking buildkit support." 
3+     "type" : " added" 
4+ }
Original file line number Diff line number Diff line change @@ -186,6 +186,8 @@ fn split_to_cloned_by_ws(string: &str) -> Vec<String> {
186186    string. split_whitespace ( ) . map ( String :: from) . collect ( ) 
187187} 
188188
189+ /// this takes the value of the environment variable, 
190+ /// so you should call `bool_from_envvar(env::var("FOO"))` 
189191pub  fn  bool_from_envvar ( envvar :  & str )  -> bool  { 
190192    if  let  Ok ( value)  = bool:: from_str ( envvar)  { 
191193        value
Original file line number Diff line number Diff line change @@ -71,8 +71,11 @@ impl<'a> Dockerfile<'a> {
7171        msg_info :  & mut  MessageInfo , 
7272    )  -> Result < String >  { 
7373        let  uses_zig = options. cargo_variant . uses_zig ( ) ; 
74-         let  mut  docker_build = docker:: subcommand ( & options. engine ,  "buildx" ) ; 
75-         docker_build. arg ( "build" ) ; 
74+         let  mut  docker_build = docker:: command ( & options. engine ) ; 
75+         match  docker:: Engine :: has_buildkit ( )  { 
76+             true  => docker_build. args ( [ "buildx" ,  "build" ] ) , 
77+             false  => docker_build. arg ( "build" ) , 
78+         } ; 
7679        docker_build. env ( "DOCKER_SCAN_SUGGEST" ,  "false" ) ; 
7780        self . runs_with ( ) 
7881            . specify_platform ( & options. engine ,  & mut  docker_build) ; 
Original file line number Diff line number Diff line change @@ -108,6 +108,13 @@ impl Engine {
108108            . map ( |s| bool_from_envvar ( & s) ) 
109109            . unwrap_or_default ( ) 
110110    } 
111+ 
112+     #[ must_use]  
113+     pub  fn  has_buildkit ( )  -> bool  { 
114+         !env:: var ( "CROSS_CONTAINER_ENGINE_NO_BUILDKIT" ) 
115+             . map ( |x| bool_from_envvar ( & x) ) 
116+             . unwrap_or_default ( ) 
117+     } 
111118} 
112119
113120// determine if the container engine is docker. this fixes issues with 
Original file line number Diff line number Diff line change @@ -176,7 +176,11 @@ pub fn build_docker_image(
176176            msg_info. note ( format_args ! ( "Build {target} for {}" ,  platform. target) ) ?; 
177177        } 
178178        let  mut  docker_build = docker:: command ( engine) ; 
179-         docker_build. args ( [ "buildx" ,  "build" ] ) ; 
179+         let  has_buildkit = docker:: Engine :: has_buildkit ( ) ; 
180+         match  has_buildkit { 
181+             true  => docker_build. args ( [ "buildx" ,  "build" ] ) , 
182+             false  => docker_build. arg ( "build" ) , 
183+         } ; 
180184        docker_build. current_dir ( & docker_root) ; 
181185
182186        docker_build. args ( [ "--platform" ,  & platform. docker_platform ( ) ] ) ; 
@@ -185,7 +189,7 @@ pub fn build_docker_image(
185189            docker_build. arg ( "--push" ) ; 
186190        }  else  if  engine. kind . is_docker ( )  && no_output { 
187191            docker_build. args ( [ "--output" ,  "type=tar,dest=/dev/null" ] ) ; 
188-         }  else  { 
192+         }  else  if  has_buildkit  { 
189193            docker_build. arg ( "--load" ) ; 
190194        } 
191195
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments