package Ġcom . github . grad led ock ert ests . tasks Ċ Ċ import Ġorg . gradle . api . provider . Property Ċ import Ġorg . gradle . api . tasks . Input Ċ import Ġorg . gradle . api . tasks . Internal Ċ import Ġorg . gradle . api . tasks . Optional Ċ import Ġorg . gradle . api . tasks . Task Action Ċ import Ġorg . gradle . kotlin . dsl . property Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠA Ġgradle Ġtask Ġthat Ġbuilds Ġa Ġdocker Ġimage Ġusing Ġa ĠDockerfile . Ċ Ġ*/ Ċ @ Suppress (" unused ") Ċ abstract Ġclass ĠDocker Build Task Ġ: ĠDocker Task () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġname Ġof Ġthe Ġimage Ġto Ġbuild . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Input ĊĠĠĠ Ġ@ Optional ĊĠĠĠ Ġval Ġimage Name : ĠProperty < String > Ġ= Ġproject . objects . property ( String :: class ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġtag Ġto Ġuse Ġfor Ġthe Ġbuilt Ġimage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Input ĊĠĠĠ Ġ@ Optional ĊĠĠĠ Ġval Ġtag : ĠProperty < String > Ġ= Ġproject . objects . property ( String :: class ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġrepository Ġof Ġthe Ġimage . ĊĠĠĠĠ Ġ* ĠSpecify Ġonly Ġthe Ġname Ġwithout Ġa Ġtrailing Ġ/. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Input ĊĠĠĠ Ġ@ Optional ĊĠĠĠ Ġval Ġrepository : ĠProperty < String > Ġ= Ġproject . objects . property ( String :: class ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIndicates Ġwhether Ġor Ġnot Ġthe Ġbuilt Ġimage Ġshould Ġbe Ġtagged Ġas Ġlatest Ġbuild . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Input ĊĠĠĠ Ġ@ Optional ĊĠĠĠ Ġval Ġtag Latest : ĠProperty < Boolean > Ġ= Ġproject . objects . property ( Boolean :: class ). convention ( true ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġworking Ġdirectory Ġfor Ġthe Ġdocker Ġbuild Ġprocess . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Internal ĊĠĠĠ Ġvar Ġdirectory : ĠFile Ġ= Ġproject . project Dir ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġtarget Ġdirectory Ġwhere Ġbuild Ġimages Ġcan Ġbe Ġsaved . ĠSet Ġto Ġnull Ġto Ġdisable Ġsaving Ġbuild Ġimage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Internal ĊĠĠĠ Ġvar Ġtarget Image Folder : ĠFile ? Ġ= ĠFile ( project . build Dir , Ġ" container - images ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUtility Ġmethod Ġto Ġspecify Ġthe Ġtag Ġdirectly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtag ( tag : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . tag . set ( tag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUtility Ġmethod Ġto Ġspecify Ġthe Ġimage Ġname Ġdirectly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġimage Name ( image Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . image Name . set ( image Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUtility Ġmethod Ġto Ġspecify Ġthe Ġrepository Ġdirectly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrepository ( repository : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . repository . set ( repository . replace ("/", Ġ"")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUtility Ġmethod Ġto Ġspecify Ġthe Ġworking Ġdirectory Ġdirectly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdirectory ( directory : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . directory Ġ= Ġdirectory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpecify Ġthe Ġpath Ġwhere Ġthe Ġnew Ġimage Ġshould Ġbe Ġsaved . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave Image To ( directory : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . target Image Folder Ġ= Ġdirectory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpecify Ġthe Ġpath Ġwhere Ġthe Ġnew Ġimage Ġshould Ġbe Ġsaved . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave Image To ( directory Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtarget Image Folder Ġ= ĠFile ( directory Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġtag Latest Ġproperty Ġto Ġthe Ġspecified Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtag Latest ( is Tag Latest : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtag Latest . set ( is Tag Latest ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExec utes Ġthe Ġdocker Ġbuild Ġprocess Ġusing Ġthe Ġprovided Ġarguments . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġprivate Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! check Docker Availability ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Tag Ġ= Ġif Ġ( tag . isPresent ) Ġtag . get () Ġelse Ġproject . version . toString () ĊĠĠĠĠĠĠĠ Ġval Ġactual Repository Ġ= Ġif Ġ( repository . isPresent ) Ġrepository . get () Ġ+ Ġ"/" Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġactual Image Name Ġ= Ġif Ġ( image Name . isPresent ) Ġimage Name . get () Ġelse Ġproject . name ĊĠĠĠĠĠĠĠ Ġval Ġimage Base Name Ġ= Ġ"$ actual Repository $ actual Image Name :" ĊĠĠĠĠĠĠĠ Ġval Ġargument List Ġ= Ġmutable ListOf (" docker ", Ġ" build ", Ġ"- t ", Ġimage Base Name Ġ+ Ġactual Tag ) ĊĠĠĠĠĠĠĠ Ġif Ġ( tag Latest . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument List . add ("- t ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument List . add ( image Base Name Ġ+ Ġ" latest ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġargument List . add (".") ĊĊĠĠĠĠĠĠĠ Ġ// ĠExecute Ġimage Ġbuild Ġcommand ĊĠĠĠĠĠĠĠ Ġproject . exec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworking Dir ( directory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Line ( argument List ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSave Ġthe Ġnew Ġimage ĊĠĠĠĠĠĠĠ Ġval Ġtarget Folder Ġ= Ġtarget Image Folder ĊĠĠĠĠĠĠĠ Ġif Ġ( target Folder Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġtarget Ġfolder Ġexists ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Folder . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Image Location Ġ= ĠFile ( target Folder . path , Ġproject . name Ġ+ Ġ". tar ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdocker - archive Ġdoesn 't Ġsupport Ġmodifying Ġexisting Ġimages ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target Image Location . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Image Location . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . exec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworking Dir ( directory ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Line (" docker ", Ġ" save ", Ġ"- o ", Ġtarget Image Location . path , Ġimage Base Name Ġ+ Ġ" latest ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠName Ġ= Ġ" docker Build " ĊĠĠĠ Ġ} Ċ } Ċ