/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 , ĠTeam Dev . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand / or Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice Ġand Ġthe Ġfollowing Ċ Ġ* Ġdisclaimer . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ċ Ġ* Ġ" AS ĠIS " ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR Ċ Ġ* ĠA ĠPARTICULAR ĠPURPOSE ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT Ċ Ġ* ĠOWNER ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , Ċ Ġ* ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , Ċ Ġ* ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY Ċ Ġ* ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ċ Ġ* Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE Ċ Ġ* ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġio . sp ine . publishing Ċ Ċ import Ġcom . google . common . f logger . Fluent Logger Ċ import Ġcom . google . common . io . Files Ċ import Ġio . sp ine . publishing . Application . GITHUB _ APP _ ID _ KEY Ċ import Ġio . sp ine . publishing . github . AppId Ċ import Ġio . sp ine . publishing . github . GitHub App Ċ import Ġio . sp ine . publishing . github . Signed Jw ts Ċ import Ġjava . nio . file . Path Ċ Ċ /** Ċ Ġ* ĠThe Ġpublishing Ġapplication . Ċ Ġ* Ċ Ġ* ĠSee Ġ[ Publishing Pipeline ] Ġfor Ġthe Ġdescription Ġof Ġthe Ġpublishing Ġprocess . Ċ Ġ*/ Ċ object ĠApplication Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġname Ġof Ġthe Ġproperty Ġcontaining Ġthe ĠGitHub ĠID Ġof Ġthis Ġapplication Ġas Ġan Ġapp Ġinstalled Ġto ĊĠĠĠĠ Ġ* Ġsome Ġorganization . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġof Ġthe Ġproperty Ġis Ġrequired Ġfor Ġrunning Ġthe Ġapplication . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠMay Ġbe Ġset Ġboth Ġas Ġa ĠJVM Ġproperty Ġ( i . e . Ġ`- D prop = value `) Ġor Ġas Ġan Ġenvironment Ġvariable . ĊĠĠĠĠ Ġ* ĠJVM Ġproperty Ġhas Ġa Ġhigher Ġpriority . ĠThe Ġenvironment Ġvariable Ġis Ġused Ġif Ġthe ĠJVM Ġproperty ĊĠĠĠĠ Ġ* Ġisn 't Ġset . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconst Ġval ĠG ITHUB _ APP _ ID _ KEY Ġ= Ġ" github _ app _ id " ĊĊĠĠĠ Ġprivate Ġval ĠprivateKey Path : ĠPath Ġ= Ġcopy PrivateKey () ĊĊĠĠĠ Ġprivate Ġval ĠappId : ĠApp Id Ġ= ĠappId () ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġinfo (). log (" Starting Ġthe Ġpublishing Ġapplication . ĠApp ĠID : Ġ`$ appId `. ") ĊĠĠĠĠĠĠĠ Ġval Ġjwt Factory Ġ= ĠSigned Jw ts ( privateKey Path ) ĊĠĠĠĠĠĠĠ Ġval Ġgit Hub App Ġ= ĠGitHub App ( appId , Ġjwt Factory ) ĊĠĠĠĠĠĠĠ Ġval Ġinstall ationToken Ġ= Ġgit Hub App . token Factory (). new Token () ĊĠĠĠĠĠĠĠ ĠPublish ing Pipeline ( Libraries To Publish . from ( remote Lib s ), Ġinstall ationToken ). eval () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġpublishing Ġapplication Ġlogger . Ċ Ġ*/ Ċ fun Ġlogger (): ĠFluent Logger Ġ= ĠFluent Logger . for En closing Class () Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlogger Ġthat Ġlogs Ġat Ġthe Ġ` F INE ` Ġlevel . Ċ Ġ*/ Ċ fun Ġdebug (): ĠFluent Logger . Api Ġ= Ġlogger (). at F ine () Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlogger Ġthat Ġlogs Ġa Ġthe Ġ` SEVERE ` Ġlevel . Ċ Ġ*/ Ċ fun Ġerror (): ĠFluent Logger . Api Ġ= Ġlogger (). at Se vere () Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlogger Ġthat Ġlogs Ġat Ġthe Ġ` INFO ` Ġlevel . Ċ Ġ*/ Ċ fun Ġinfo (): ĠFluent Logger . Api Ġ= Ġlogger (). at Info () Ċ Ċ /** Ċ Ġ* ĠReads Ġthe Ġapplication ĠID . Ċ Ġ*/ Ċ fun ĠappId (): ĠApp Id Ġ{ ĊĠĠĠ Ġreturn ĠSystem . getProperty ( GITHUB _ APP _ ID _ KEY ) Ġ?: ĠSystem . getenv ( GITHUB _ APP _ ID _ KEY ) Ċ } Ċ Ċ private Ġfun Ġcopy PrivateKey (): ĠPath Ġ{ ĊĠĠĠ Ġval Ġtemp Dir Ġ= ĠFiles . create TempDir () ĊĊĠĠĠ Ġval ĠprivateKey Ġ= Ġtemp Dir . resolve ( PRIVATE _ KEY _ FILE _ NAME ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠA Ġpotential ĠN PE Ġis Ġhandled . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" RECE IVER _ NULL ABILITY _ MIS MATCH _ BASE D _ ON _ JAVA _ AN NOT ATIONS ") ĊĠĠĠĠĠĠĠ Ġval ĠprivateKey Bytes Ġ= ĠApplication :: java Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. class Loader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getResource ( PRIVATE _ KEY _ FILE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Bytes () ĊĠĠĠĠĠĠĠ ĠprivateKey . write Bytes ( privateKey Bytes ) ĊĠĠĠĠĠĠĠ Ġreturn ĠprivateKey . to Path () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Could Ġnot Ġcopy Ġthe Ġdecrypted Ġkey Ġfile : Ġ`$ PRIVATE _ KEY _ FILE _ NAME `. " ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( message , Ġe ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġconst Ġval ĠPRIVATE _ KEY _ FILE _ NAME Ġ= Ġ" private _ key . pem " Ċ Ċ /** Ċ Ġ* ĠLocal ĠSp ine Ġlibraries Ġassociated Ġwith Ġtheir Ġremote Ġrepositories . Ċ Ġ*/ Ċ private Ġval Ġremote Lib s : ĠSet < Library > Ġ= ĠSp ine Library . values () ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . library Ġ} ĊĠĠĠĠĠĠĠ Ġ. toSet () Ċ