-
Notifications
You must be signed in to change notification settings - Fork 1
/
pipeline.go
57 lines (44 loc) · 1.49 KB
/
pipeline.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package main
import (
"time"
"context"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/codepipeline"
)
// PipelineState captures the current state of a pipeline
type PipelineState struct {
Name string
Created time.Time
Region string
StageStates []codepipeline.StageState
}
// PipelineStateProvider provides access to the current state of a pipeline
type PipelineStateProvider interface {
// GetPipelineState returns the current state of a pipeline
GetPipelineState() ([]PipelineState, error)
}
// AWSPipelineStateProvider provides access to the current state of a pipeline using the AWS API
type AWSPipelineStateProvider struct {
config aws.Config
}
// GetPipelineState provides access to the current state of a pipeline using the AWS API
func (p *AWSPipelineStateProvider) GetPipelineState() ([]PipelineState, error) {
svc := codepipeline.New(p.config)
req := svc.ListPipelinesRequest(&codepipeline.ListPipelinesInput{})
resp, err := req.Send(context.Background())
if err != nil {
return nil, err
}
pipelineStates := make([]PipelineState, 0)
for _, pipeline := range resp.Pipelines {
req := svc.GetPipelineStateRequest(&codepipeline.GetPipelineStateInput{
Name: pipeline.Name,
})
stageStates, err := req.Send(context.Background())
if err != nil {
return nil, err
}
pipelineStates = append(pipelineStates, PipelineState{*pipeline.Name, *pipeline.Created, p.config.Region, stageStates.StageStates})
}
return pipelineStates, nil
}