/* Ċ Ġ* ĠCopyright Ġ 2 0 1 4 - 2 0 2 1 ĠJetBrains Ġs . r . o Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ import Ġorg . gradle . api .* Ċ import Ġorg . gradle . api . publish .* Ċ import Ġorg . gradle . api . publish . maven .* Ċ import Ġorg . gradle . api . publish . maven . tasks .* Ċ import Ġorg . gradle . jvm . tasks .* Ċ import Ġorg . gradle . kotlin . dsl .* Ċ import Ġorg . gradle . plugins . signing .* Ċ import Ġjava . util . concurrent . locks . Re entrant Lock Ċ Ċ fun Ġis Available For Publication ( publication : ĠPublic ation ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġname Ġ= Ġpublication . name ĊĠĠĠ Ġif Ġ( name Ġ== Ġ" maven ") Ġreturn Ġtrue ĊĊĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠ Ġval Ġj vm And Common Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠ Ġ" jvm ", ĊĠĠĠĠĠĠĠ Ġ" android Release ", ĊĠĠĠĠĠĠĠ Ġ" android Debug ", ĊĠĠĠĠĠĠĠ Ġ" js ", ĊĠĠĠĠĠĠĠ Ġ" js Legacy ", ĊĠĠĠĠĠĠĠ Ġ" metadata ", ĊĠĠĠĠĠĠĠ Ġ" kotlin Multi platform " ĊĠĠĠ Ġ) ĊĠĠĠ Ġresult Ġ= Ġresult Ġ|| Ġname Ġin Ġj vm And Common ĊĠĠĠ Ġresult Ġ= Ġresult Ġ|| Ġ( HOST _ NAME Ġ== Ġ" linux " Ġ&& Ġname Ġ== Ġ" linux X 6 4 ") ĊĠĠĠ Ġresult Ġ= Ġresult Ġ|| Ġ( HOST _ NAME Ġ== Ġ" windows " Ġ&& Ġname Ġ== Ġ" mingw X 6 4 ") ĊĠĠĠ Ġval Ġmac Public ations Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠ Ġ" ios X 6 4 ", ĊĠĠĠĠĠĠĠ Ġ" ios Arm 6 4 ", ĊĠĠĠĠĠĠĠ Ġ" ios Arm 3 2 ", ĊĠĠĠĠĠĠĠ Ġ" ios Simulator Arm 6 4 ", ĊĊĠĠĠĠĠĠĠ Ġ" watch os X 8 6 ", ĊĠĠĠĠĠĠĠ Ġ" watch os X 6 4 ", ĊĠĠĠĠĠĠĠ Ġ" watch os Arm 3 2 ", ĊĠĠĠĠĠĠĠ Ġ" watch os Arm 6 4 ", ĊĠĠĠĠĠĠĠ Ġ" watch os Simulator Arm 6 4 ", ĊĊĠĠĠĠĠĠĠ Ġ" tv os X 6 4 ", ĊĠĠĠĠĠĠĠ Ġ" tv os Arm 6 4 ", ĊĠĠĠĠĠĠĠ Ġ" tv os Simulator Arm 6 4 ", ĊĊĠĠĠĠĠĠĠ Ġ" macos X 6 4 ", ĊĠĠĠĠĠĠĠ Ġ" macos Arm 6 4 " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġresult Ġ= Ġresult Ġ|| Ġ( HOST _ NAME Ġ== Ġ" macos " Ġ&& Ġname Ġin Ġmac Public ations ) ĊĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ fun ĠProject . configure Publication () Ġ{ ĊĠĠĠ Ġapply ( plugin Ġ= Ġ" maven - publish ") ĊĊĠĠĠ Ġtasks . with Type < Abstract Publish To Maven >(). all Ġ{ ĊĠĠĠĠĠĠĠ Ġonly If Ġ{ Ġis Available For Publication ( publication ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġpublishing User : ĠString ? Ġ= ĠSystem . getenv (" PUBL ISH ING _ USER ") ĊĠĠĠ Ġval Ġpublishing Password : ĠString ? Ġ= ĠSystem . getenv (" PUBL ISH ING _ PASSWORD ") ĊĊĠĠĠ Ġval Ġrepository Id : ĠString ? Ġ= ĠSystem . getenv (" REPOSITORY _ ID ") ĊĠĠĠ Ġval Ġpublishing Url : ĠString ? Ġ= Ġif Ġ( repository Id ?. isNotBlank () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Set Ġpublishing Ġto Ġrepository Ġ$ repository Id ") ĊĠĠĠĠĠĠĠ Ġ" https :// oss . son atype . org / service / local / staging / deploy By Repository Id /$ repository Id " ĊĠĠĠ Ġ} Ġelse ĠSystem . getenv (" PUBL ISH ING _ URL ") ĊĊĠĠĠ Ġval Ġpublish Local : ĠBoolean Ġby Ġroot Project . extra ĊĠĠĠ Ġval Ġglobal M 2 : ĠString Ġby Ġroot Project . extra ĊĠĠĠ Ġval Ġnon Default Project Structure : ĠList < String > Ġby Ġroot Project . extra ĊĊĠĠĠ Ġval Ġempty Jar Ġ= Ġtasks . register < Jar >(" empty Jar ") Ġ{ ĊĠĠĠĠĠĠĠ Ġarchive Append ix . set (" empty ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthe < Publishing Extension >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġrepositories Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaven Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( publish Local ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Url ( global M 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublishing Url ?. let Ġ{ Ġset Url ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġpublishing User ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġpublishing Password ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaven Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" test Local " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Url ("$ root Project . build Dir / m 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpublications . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpublication Ġ= Ġit Ġas ? ĠMaven Publication Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublication . pom . with Xml Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġas Node () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . append Node (" name ", Ġproject . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . append Node ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" description ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" K tor Ġis Ġa Ġframework Ġfor Ġquickly Ġcreating Ġweb Ġapplications Ġin ĠKotlin Ġwith Ġminimal Ġeffort ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . append Node (" url ", Ġ" https :// github . com / ktor io / ktor ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . append Node (" licenses "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Node (" license "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Node (" name ", Ġ" The ĠApache ĠSoftware ĠLicense , ĠVersion Ġ 2 . 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Node (" url ", Ġ" https :// www . apache . org / licenses / LICENSE - 2 . 0 . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Node (" distribution ", Ġ" repo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . append Node (" developers "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Node (" developer "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Node (" id ", Ġ" Jet Brains ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Node (" name ", Ġ" Jet Brains ĠTeam ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Node (" organization ", Ġ" Jet Brains ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Node (" organization Url ", Ġ" https :// www . jetbrains . com ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot . append Node (" scm "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Node (" url ", Ġ" https :// github . com / ktor io / ktor . git ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( non Default Project Structure . contains ( project . name )) Ġreturn @ apply ĊĊĠĠĠĠĠĠĠ Ġkotlin . targets . forEach Ġ{ Ġtarget Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpublication Ġ= Ġpublications . find ByName ( target . name ) Ġas ? ĠMaven Publication Ġ?: Ġreturn @ forEach ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target . platform Type . name Ġ== Ġ" jvm ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublication . artifact ( empty Jar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclassifier Ġ= Ġ" javadoc " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublication . artifact ( empty Jar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclassifier Ġ= Ġ" javadoc " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublication . artifact ( empty Jar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclassifier Ġ= Ġ" k doc " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target . platform Type . name Ġ== Ġ" native ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublication . artifact ( empty Jar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġpublish To Maven Local Ġ= Ġtasks . get ByName (" publish To Maven Local ") ĊĠĠĠ Ġtasks . get ByName (" publish "). depends On ( publish To Maven Local ) ĊĊĠĠĠ Ġval Ġsigning Key Ġ= ĠSystem . getenv (" SIGN _ KEY _ ID ") ĊĠĠĠ Ġval Ġsigning Key Pass phrase Ġ= ĠSystem . getenv (" SIGN _ KEY _ PAS SP HR ASE ") ĊĊĠĠĠ Ġif Ġ( signing Key Ġ!= Ġnull Ġ&& Ġsigning Key Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠ Ġextra [" signing . gn upg . key Name "] Ġ= Ġsigning Key ĊĠĠĠĠĠĠĠ Ġextra [" signing . gn upg . pass phrase "] Ġ= Ġsigning Key Pass phrase ĊĊĠĠĠĠĠĠĠ Ġapply ( plugin Ġ= Ġ" signing ") ĊĊĠĠĠĠĠĠĠ Ġthe < Signing Extension >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse G pg Cmd () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsign ( the < Publishing Extension >(). publications ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgpg Agent Lock : ĠRe entrant Lock Ġby Ġroot Project . extra Ġ{ ĠRe entrant Lock () Ġ} ĊĊĠĠĠĠĠĠĠ Ġtasks . with Type < Sign > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo First Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgpg Agent Lock . lock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Last Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgpg Agent Lock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ