package Ġme tri k . project . domain . service . github actions Ċ Ċ import Ġme tri k . infrastructure . ut lil s . to LocalDateTime Ċ import Ġme tri k . infrastructure . ut lil s . to Timestamp Ċ import Ġme tri k . project . domain . model . Commit Ċ import Ġme tri k . project . domain . model . Pipeline Configuration Ċ import Ġme tri k . project . infrastructure . github . fe ign . Github Fe ign Client Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġjava . net . URL Ċ Ċ @ Service Ċ class ĠGithub Commit Service ( ĊĠĠĠ Ġprivate Ġval Ġgithub Fe ign Client : ĠGithub Fe ign Client , Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġlogger Ġ= ĠLoggerFactory . getLogger ( java Class . name ) ĊĠĠĠ Ġprivate Ġval Ġdefault Max PerPage Ġ= Ġ 1 0 0 ĊĊĠĠĠ Ġfun Ġget Commits Between Time Period ( ĊĠĠĠĠĠĠĠ ĠstartTime Stamp : ĠLong , ĊĠĠĠĠĠĠĠ ĠendTime Stamp : ĠLong , ĊĠĠĠĠĠĠĠ Ġbranch : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġpipeline : ĠPipeline Configuration ĊĠĠĠ Ġ): ĠList < Commit > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Started Ġsync Ġfor ĠGithub ĠActions Ġcommits Ġ[ ${ pipeline . url }] / [$ branch ]") ĊĊĠĠĠĠĠĠĠ Ġvar Ġkeep Retrie ving Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġvar Ġpage Index Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġall Commits Ġ= Ġmutable Set Of < Github Commit >() ĊĠĠĠĠĠĠĠ Ġwhile Ġ( keep Retrie ving ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommits From Github Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretrieve Commits ( pipeline . credential , Ġpipeline . url , ĠstartTime Stamp , ĠendTime Stamp , Ġbranch , Ġpage Index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Commits . addAll ( commits From Github ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeep Retrie ving Ġ= Ġcommits From Github . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Index ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġall Commits . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCommit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommit Id Ġ= Ġit . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġit . timestamp . to Timestamp (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġit . timestamp . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline Id Ġ= Ġpipeline . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġretrieve Commits ( ĊĠĠĠĠĠĠĠ Ġcredential : ĠString , ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ ĠstartTime Stamp : ĠLong , ĊĠĠĠĠĠĠĠ ĠendTime Stamp : ĠLong , ĊĠĠĠĠĠĠĠ Ġbranch : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġpage Index : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠList < Github Commit > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Get ĠGithub ĠCommit s Ġ- Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sending Ġrequest Ġto ĠGithub ĠFe ign ĠClient Ġwith Ġowner : Ġ$ url , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" since : Ġ${ startTime Stamp . to LocalDateTime ()}, Ġuntil : Ġ${ end TimeStamp . to LocalDateTime ()}, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" branch : Ġ$ branch , Ġpage Index : Ġ$ page Index " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcommits Ġ= Ġwith ( github Fe ign Client ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Owner Repo From Url ( url ). let Ġ{ Ġ( owner , Ġrepo ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretrieve Commits ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( startTime Stamp Ġ== Ġ 0 L ) Ġnull Ġelse ĠstartTime Stamp . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Stamp . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbranch , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Max PerPage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcommits ?. map Ġ{ Ġit . to Github Commit () Ġ} Ġ?: ĠlistOf () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Owner Repo From Url ( url : ĠString ): ĠPair < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġowner Index Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġcomponents Ġ= ĠURL ( url ). path . split ("/") ĊĠĠĠĠĠĠĠ Ġval Ġowner Ġ= Ġcomponents [ components . size Ġ- Ġowner Index ] ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġcomponents . last () ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( owner , Ġrepo ) ĊĠĠĠ Ġ} Ċ } Ċ