@@ -144,6 +144,65 @@ var handleCodeDeploy = function(event, context) {
144144 return _ . merge ( slackMessage , baseSlackMessage ) ;
145145} ;
146146
147+ var handleCodePipeline = function ( event , context ) {
148+ var subject = "AWS CodePipeline Notification" ;
149+ var timestamp = ( new Date ( event . Records [ 0 ] . Sns . Timestamp ) ) . getTime ( ) / 1000 ;
150+ var snsSubject = event . Records [ 0 ] . Sns . Subject ;
151+ var message ;
152+ var fields = [ ] ;
153+ var color = "warning" ;
154+ var changeType = "" ;
155+
156+ try {
157+ message = JSON . parse ( event . Records [ 0 ] . Sns . Message ) ;
158+ detailType = message [ 'detail-type' ] ;
159+
160+ if ( detailType === "CodePipeline Pipeline Execution State Change" ) {
161+ changeType = "" ;
162+ } else if ( detailType === "CodePipeline Stage Execution State Change" ) {
163+ changeType = "STAGE " + message . detail . stage ;
164+ } else if ( detailType === "CodePipeline Action Execution State Change" ) {
165+ changeType = "ACTION" ;
166+ }
167+
168+ if ( message . detail . state === "SUCCEEDED" ) {
169+ color = "good" ;
170+ } else if ( message . detail . state === "FAILED" ) {
171+ color = "danger" ;
172+ }
173+ header = message . detail . state + ": CodePipeline " + changeType ;
174+ fields . push ( { "title" : "Message" , "value" : header , "short" : false } ) ;
175+ fields . push ( { "title" : "Pipeline" , "value" : message . detail . pipeline , "short" : true } ) ;
176+ fields . push ( { "title" : "Region" , "value" : message . region , "short" : true } ) ;
177+ fields . push ( {
178+ "title" : "Status Link" ,
179+ "value" : "https://console.aws.amazon.com/codepipeline/home?region=" + message . region + "#/view/" + message . detail . pipeline ,
180+ "short" : false
181+ } ) ;
182+ }
183+ catch ( e ) {
184+ color = "good" ;
185+ message = event . Records [ 0 ] . Sns . Message ;
186+ header = message . detail . state + ": CodePipeline " + message . detail . pipeline ;
187+ fields . push ( { "title" : "Message" , "value" : header , "short" : false } ) ;
188+ fields . push ( { "title" : "Detail" , "value" : message , "short" : false } ) ;
189+ }
190+
191+
192+ var slackMessage = {
193+ text : "*" + subject + "*" ,
194+ attachments : [
195+ {
196+ "color" : color ,
197+ "fields" : fields ,
198+ "ts" : timestamp
199+ }
200+ ]
201+ } ;
202+
203+ return _ . merge ( slackMessage , baseSlackMessage ) ;
204+ } ;
205+
147206var handleElasticache = function ( event , context ) {
148207 var subject = "AWS ElastiCache Notification"
149208 var message = JSON . parse ( event . Records [ 0 ] . Sns . Message ) ;
@@ -311,7 +370,11 @@ var processEvent = function(event, context) {
311370 var eventSnsSubject = event . Records [ 0 ] . Sns . Subject || 'no subject' ;
312371 var eventSnsMessage = event . Records [ 0 ] . Sns . Message ;
313372
314- if ( eventSubscriptionArn . indexOf ( config . services . elasticbeanstalk . match_text ) > - 1 || eventSnsSubject . indexOf ( config . services . elasticbeanstalk . match_text ) > - 1 || eventSnsMessage . indexOf ( config . services . elasticbeanstalk . match_text ) > - 1 ) {
373+ if ( eventSubscriptionArn . indexOf ( config . services . codepipeline . match_text ) > - 1 || eventSnsSubject . indexOf ( config . services . codepipeline . match_text ) > - 1 || eventSnsMessage . indexOf ( config . services . codepipeline . match_text ) > - 1 ) {
374+ console . log ( "processing codepipeline notification" ) ;
375+ slackMessage = handleCodePipeline ( event , context )
376+ }
377+ else if ( eventSubscriptionArn . indexOf ( config . services . elasticbeanstalk . match_text ) > - 1 || eventSnsSubject . indexOf ( config . services . elasticbeanstalk . match_text ) > - 1 || eventSnsMessage . indexOf ( config . services . elasticbeanstalk . match_text ) > - 1 ) {
315378 console . log ( "processing elasticbeanstalk notification" ) ;
316379 slackMessage = handleElasticBeanstalk ( event , context )
317380 }
@@ -373,4 +436,4 @@ exports.handler = function(event, context) {
373436 } else {
374437 context . fail ( 'hook url has not been set.' ) ;
375438 }
376- } ;
439+ } ;
0 commit comments