package Ġcom . cogn if ide . gradle . environment . docker Ċ Ċ import Ġorg . build objects . process . External Process FailureException Ċ import Ġorg . build objects . process . Proc Builder Ċ import Ġorg . build objects . process . Proc Result Ċ import Ġorg . build objects . process . TimeoutException Ċ import Ġorg . gradle . process . internal . streams . Safe Streams Ċ Ċ @ Suppress (" Too Generic Exception Ca ught ", Ġ" Spread Operator ") Ċ class ĠDocker Process ( val Ġcommand Line : ĠIterable < String >) Ġ{ ĊĊĠĠĠ Ġconstructor () Ġ: Ġthis ( COMMAND ) ĊĊĠĠĠ Ġconstructor ( var arg Ġcommand Line : ĠString ) Ġ: Ġthis ( command Line . as Iterable ()) ĊĊĠĠĠ Ġprivate Ġfun Ġbuilder (): ĠProc Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġcommand Line . first () ĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġif Ġ( command Line . count () Ġ> Ġ 1 ) Ġcommand Line . drop ( 1 ) Ġelse ĠlistOf () ĊĠĠĠĠĠĠĠ Ġreturn ĠProc Builder ( command , Ġ* args . to Typed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexec ( options : ĠProc Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠProc Result Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with No Timeout () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with OutputStream ( Safe Streams . system Out ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Error Stream ( Safe Streams . system Err ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Ġcompose Exception ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexec Quiet ly ( options : ĠProc Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠProc Result Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ignore Exit Status () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Ġcompose Exception ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexec String ( options : ĠProc Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠString Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with No Timeout () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. output String . trim () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Ġcompose Exception ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Spread Operator ") ĊĠĠĠ Ġfun Ġexec Spec ( spec : ĠDocker Spec ) Ġ= ĠDocker Result ( exec Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Working Directory ( spec . command Dir . get (). as File ) ĊĠĠĠĠĠĠĠ Ġwith Args (* spec . command Line . get (). map Ġ{ Ġit . toString () Ġ}. to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġwith Expected Exit Statuses ( spec . exit Codes . get (). toSet ()) ĊĠĠĠĠĠĠĠ Ġspec . input . or Null . let Ġ{ Ġwith InputStream ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġspec . output . or Null ?. let Ġ{ Ġwith OutputStream ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġspec . errors . or Null ?. let Ġ{ Ġwith Error Stream ( it ) Ġ} ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġprivate Ġfun Ġcompose Exception ( e : ĠException ): ĠDocker Exception Ġ= Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠExternal Process FailureException Ġ-> ĠDocker Exception (" Docker Ġcommand Ġprocess Ġfailure !" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠCommand : Ġ'${ e . command }', Ġerror : Ġ'${ e . stderr }', Ġexit Ġcode : Ġ'${ e . exit Value }' ", Ġe ) ĊĠĠĠĠĠĠĠ Ġis ĠTimeout Exception Ġ-> ĠDocker Exception (" Docker Ġcommand Ġtimeout ! ĠError : Ġ'${ e . message }' ", Ġe ) ĊĠĠĠĠĠĠĠ Ġis ĠDocker Exception Ġ-> Ġe ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠDocker Exception (" Docker Ġunknown Ġerror : Ġ'${ e . message }' ", Ġe ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCOMMAND Ġ= Ġ" docker " ĊĠĠĠ Ġ} Ċ } Ċ