package Ġcom . netflix . spin n aker . ke el . slack . handlers Ċ Ċ import Ġcom . netflix . spin n aker . ke el . api . Sc m Info Ċ import Ġcom . netflix . spin n aker . ke el . api . artifacts . Git Metadata Ċ import Ġcom . netflix . spin n aker . ke el . artifacts . get Sc m Base Link Ċ import Ġcom . netflix . spin n aker . ke el . slack . Slack Pin ned Notification Ċ import Ġcom . netflix . spin n aker . ke el . notifications . Notification Type Ċ import Ġcom . netflix . spin n aker . ke el . slack . Slack Notifier Ċ import Ġcom . slack . api . model . kotlin _ extension . block . with Blocks Ċ import Ġorg . apache . logging . log 4 j . util . Strings Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ class ĠPin ned Notification Handler Ġ( ĊĠ Ġprivate Ġval Ġslack Notifier : ĠSlack Notifier , ĊĠ Ġprivate Ġval Ġsc m Info : ĠS cm Info , ĊĠ Ġ@ Value ("\ ${ spin n aker . baseUrl }") Ġprivate Ġval Ġsp inn aker BaseUrl : ĠString , Ċ ): ĠSlack Notification Handler < Slack Pin ned Notification > Ġ{ ĊĊĠ Ġoverride Ġval Ġtype : ĠNotification Type Ġ= ĠNotification Type . PIN N ED _ AR TI FACT ĊĠ Ġprivate Ġval Ġlog Ġby Ġlazy Ġ{ ĠLoggerFactory . getLogger ( java Class ) Ġ} ĊĊĠ Ġoverride Ġfun ĠsendMessage ( notification : ĠSlack Pin ned Notification ) Ġ{ ĊĠĠĠ Ġlog . debug (" Sending Ġpinned Environment Ġnotification Ġfor Ġapplication Ġ${ notification . application }") ĊĊĠĠĠ Ġwith ( notification ) Ġ{ ĊĠĠĠĠĠ Ġval Ġenv Ġ= ĠStrings . to Root UpperCase ( pin . target Environment ) ĊĠĠĠĠĠ Ġval Ġpinned Artifact Url Ġ= Ġ"$ spin n aker BaseUrl /#/ applications /${ application }/ environments /${ pinned Artifact ?. reference }/${ pinned Artifact ?. version }" ĊĠĠĠĠĠ Ġval Ġrepo Link Ġ= Ġgenerate Repo Link ( current Artifact ?. git Metadata ) ĊĠĠĠĠĠ Ġvar Ġdetails Ġ= Ġ"" ĊĠĠĠĠĠ Ġval Ġblocks Ġ= Ġwith Blocks Ġ{ ĊĠĠĠĠĠĠĠ Ġheader Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtext ("$ env Ġis Ġpinned ", Ġemoji Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsection Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġmarkdown Text ("* Version :* Ġ~ # ${ notification . current Artifact ?. build Metadata ?. number } ~ ĠâĨĴ Ġ<$ pinned Artifact Url | # ${ pinned Artifact ?. build Metadata ?. number }> Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" by Ġ${ pinned Artifact ?. git Metadata ?. author }\ n Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"* Where :* Ġ$ env \ n \ n Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ pinned Artifact ?. git Metadata ?. commit Info ?. message }") ĊĠĠĠĠĠĠĠĠĠ Ġaccess ory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage ( imageUrl Ġ= Ġ" https :// raw . githubusercontent . com / g com stock / managed . delivery / master / src / icons / pinned . png ", Ġalt Text Ġ= Ġ" pinned ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsection Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġwith ( notification . current Artifact ?. git Metadata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Ġ+ ="< $ repo Link | ${ this ?. project }/ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ this ?. repo ?. name }> ĠâĢ º Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< $ repo Link / branches | ${ this ?. branch }> ĠâĢ º Ġ" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Strings . isNotEmpty ( this ?. pull Request ?. number )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Ġ+= Ġ"< ${ this ?. pull Request ?. url }| PR # ${ this ?. pull Request ?. number }> ĠâĢ º " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarkdown Text ( details Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< ${ this ?. commit Info ?. link }| ${ this ?. commit Info ?. sha ?. substring ( 0 , 7 )} >") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġaccess ory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" More ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġfigure Ġout Ġwhich Ġaction Ġid Ġto Ġsend Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Id (" button - action ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl ( pinned Artifact Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġelements Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarkdown Text ("${ pin . pinned By } Ġpinned Ġon Ġ${ time }: Ġ\" ${ pin . comment }\" ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġslack Notifier . send Slack Notification ( notification . channel , Ġblocks ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġgenerate Repo Link ( git Metadata : ĠGit Metadata ?): ĠString Ġ{ ĊĠĠĠ Ġval Ġbase Sc m Url Ġ= Ġgit Metadata ?. commit Info ?. link ?. let Ġ{ Ġget Sc m Base Link ( scm Info , Ġit ) Ġ} ĊĠĠĠ Ġreturn Ġ"$ base Sc m Url / projects /${ git Metadata ?. project }/ repos /${ git Metadata ?. repo ?. name }" ĊĠ Ġ} ĊĊ Ċ } Ċ