github.com/Foodji/aws-lambda-go@v1.20.2/events/codebuild.go (about)

     1  package events
     2  
     3  import (
     4  	"encoding/json"
     5  	"time"
     6  )
     7  
     8  const (
     9  	CodeBuildEventSource           = "aws.codebuild"
    10  	CodeBuildStateChangeDetailType = "CodeBuild Build State Change"
    11  	CodeBuildPhaseChangeDetailType = "CodeBuild Build Phase Change"
    12  )
    13  
    14  // CodeBuildPhaseStatus represents the status of code build phase (i.e. failed, in progress)
    15  type CodeBuildPhaseStatus string
    16  
    17  const (
    18  	CodeBuildPhaseStatusFailed     CodeBuildPhaseStatus = "FAILED"
    19  	CodeBuildPhaseStatusFault      CodeBuildPhaseStatus = "FAULT"
    20  	CodeBuildPhaseStatusInProgress CodeBuildPhaseStatus = "IN_PROGRESS"
    21  	CodeBuildPhaseStatusQueued     CodeBuildPhaseStatus = "QUEUED"
    22  	CodeBuildPhaseStatusStopped    CodeBuildPhaseStatus = "STOPPED"
    23  	CodeBuildPhaseStatusSucceeded  CodeBuildPhaseStatus = "SUCCEEDED"
    24  	CodeBuildPhaseStatusTimedOut   CodeBuildPhaseStatus = "TIMED_OUT"
    25  )
    26  
    27  // CodeBuildPhaseType represents the type of the code build phase (i.e. submitted, install)
    28  type CodeBuildPhaseType string
    29  
    30  const (
    31  	CodeBuildPhaseTypeSubmitted       CodeBuildPhaseType = "SUBMITTED"
    32  	CodeBuildPhaseTypeQueued          CodeBuildPhaseType = "QUEUED"
    33  	CodeBuildPhaseTypeProvisioning    CodeBuildPhaseType = "PROVISIONING"
    34  	CodeBuildPhaseTypeDownloadSource  CodeBuildPhaseType = "DOWNLOAD_SOURCE"
    35  	CodeBuildPhaseTypeInstall         CodeBuildPhaseType = "INSTALL"
    36  	CodeBuildPhaseTypePreBuild        CodeBuildPhaseType = "PRE_BUILD"
    37  	CodeBuildPhaseTypeBuild           CodeBuildPhaseType = "BUILD"
    38  	CodeBuildPhaseTypePostBuild       CodeBuildPhaseType = "POST_BUILD"
    39  	CodeBuildPhaseTypeUploadArtifacts CodeBuildPhaseType = "UPLOAD_ARTIFACTS"
    40  	CodeBuildPhaseTypeFinalizing      CodeBuildPhaseType = "FINALIZING"
    41  	CodeBuildPhaseTypeCompleted       CodeBuildPhaseType = "COMPLETED"
    42  )
    43  
    44  // CodeBuildEvent is documented at:
    45  // https://docs.aws.amazon.com/codebuild/latest/userguide/sample-build-notifications.html#sample-build-notifications-ref
    46  type CodeBuildEvent struct {
    47  	// AccountID is the id of the AWS account from which the event originated.
    48  	AccountID string `json:"account"`
    49  
    50  	// Region is the AWS region from which the event originated.
    51  	Region string `json:"region"`
    52  
    53  	// DetailType informs the schema of the Detail field. For build state-change
    54  	// events, the value will be CodeBuildStateChangeDetailType. For phase-change
    55  	// events, it will be CodeBuildPhaseChangeDetailType.
    56  	DetailType string `json:"detail-type"`
    57  
    58  	// Source should be equal to CodeBuildEventSource.
    59  	Source string `json:"source"`
    60  
    61  	// Version is the version of the event's schema.
    62  	Version string `json:"version"`
    63  
    64  	// Time is the event's timestamp.
    65  	Time time.Time `json:"time"`
    66  
    67  	// ID is the GUID of this event.
    68  	ID string `json:"id"`
    69  
    70  	// Resources is a list of ARNs of CodeBuild builds that this event pertains to.
    71  	Resources []string `json:"resources"`
    72  
    73  	// Detail contains information specific to a build state-change or
    74  	// build phase-change event.
    75  	Detail CodeBuildEventDetail `json:"detail"`
    76  }
    77  
    78  // CodeBuildEventDetail represents the all details related to the code build event
    79  type CodeBuildEventDetail struct {
    80  	BuildStatus           CodeBuildPhaseStatus                `json:"build-status"`
    81  	ProjectName           string                              `json:"project-name"`
    82  	BuildID               string                              `json:"build-id"`
    83  	AdditionalInformation CodeBuildEventAdditionalInformation `json:"additional-information"`
    84  	CurrentPhase          CodeBuildPhaseType                  `json:"current-phase"`
    85  	CurrentPhaseContext   string                              `json:"current-phase-context"`
    86  	Version               string                              `json:"version"`
    87  
    88  	CompletedPhaseStatus   CodeBuildPhaseStatus `json:"completed-phase-status"`
    89  	CompletedPhase         CodeBuildPhaseType   `json:"completed-phase"`
    90  	CompletedPhaseContext  string               `json:"completed-phase-context"`
    91  	CompletedPhaseDuration DurationSeconds      `json:"completed-phase-duration-seconds"`
    92  	CompletedPhaseStart    CodeBuildTime        `json:"completed-phase-start"`
    93  	CompletedPhaseEnd      CodeBuildTime        `json:"completed-phase-end"`
    94  }
    95  
    96  //CodeBuildEventAdditionalInformation represents additional information to the code build event
    97  type CodeBuildEventAdditionalInformation struct {
    98  	Artifact CodeBuildArtifact `json:"artifact"`
    99  
   100  	Environment CodeBuildEnvironment `json:"environment"`
   101  
   102  	Timeout DurationMinutes `json:"timeout-in-minutes"`
   103  
   104  	BuildComplete bool `json:"build-complete"`
   105  
   106  	Initiator string `json:"initiator"`
   107  
   108  	BuildStartTime CodeBuildTime `json:"build-start-time"`
   109  
   110  	Source CodeBuildSource `json:"source"`
   111  
   112  	Logs CodeBuildLogs `json:"logs"`
   113  
   114  	Phases []CodeBuildPhase `json:"phases"`
   115  }
   116  
   117  // CodeBuildArtifact represents the artifact provided to build
   118  type CodeBuildArtifact struct {
   119  	MD5Sum    string `json:"md5sum"`
   120  	SHA256Sum string `json:"sha256sum"`
   121  	Location  string `json:"location"`
   122  }
   123  
   124  // CodeBuildEnvironment represents the environment for a build
   125  type CodeBuildEnvironment struct {
   126  	Image                string                         `json:"image"`
   127  	PrivilegedMode       bool                           `json:"privileged-mode"`
   128  	ComputeType          string                         `json:"compute-type"`
   129  	Type                 string                         `json:"type"`
   130  	EnvironmentVariables []CodeBuildEnvironmentVariable `json:"environment-variables"`
   131  }
   132  
   133  // CodeBuildEnvironmentVariable encapsulate environment variables for the code build
   134  type CodeBuildEnvironmentVariable struct {
   135  	// Name is the name of the environment variable.
   136  	Name string `json:"name"`
   137  
   138  	// Type is PLAINTEXT or PARAMETER_STORE.
   139  	Type string `json:"type"`
   140  
   141  	// Value is the value of the environment variable.
   142  	Value string `json:"value"`
   143  }
   144  
   145  // CodeBuildSource represent the code source will be build
   146  type CodeBuildSource struct {
   147  	Location string `json:"location"`
   148  	Type     string `json:"type"`
   149  }
   150  
   151  // CodeBuildLogs gives the log details of a code build
   152  type CodeBuildLogs struct {
   153  	GroupName  string `json:"group-name"`
   154  	StreamName string `json:"stream-name"`
   155  	DeepLink   string `json:"deep-link"`
   156  }
   157  
   158  // CodeBuildPhase represents the phase of a build and its details
   159  type CodeBuildPhase struct {
   160  	PhaseContext []interface{} `json:"phase-context"`
   161  
   162  	StartTime CodeBuildTime `json:"start-time"`
   163  
   164  	EndTime CodeBuildTime `json:"end-time"`
   165  
   166  	Duration DurationSeconds `json:"duration-in-seconds"`
   167  
   168  	PhaseType CodeBuildPhaseType `json:"phase-type"`
   169  
   170  	PhaseStatus CodeBuildPhaseStatus `json:"phase-status"`
   171  }
   172  
   173  // CodeBuildTime represents the time of the build
   174  type CodeBuildTime time.Time
   175  
   176  const codeBuildTimeFormat = "Jan 2, 2006 3:04:05 PM"
   177  
   178  // MarshalJSON converts a given CodeBuildTime to json
   179  func (t CodeBuildTime) MarshalJSON() ([]byte, error) {
   180  	return json.Marshal(time.Time(t).Format(codeBuildTimeFormat))
   181  }
   182  
   183  // UnmarshalJSON converts a given json to a CodeBuildTime
   184  func (t *CodeBuildTime) UnmarshalJSON(data []byte) error {
   185  	var s string
   186  	if err := json.Unmarshal(data, &s); err != nil {
   187  		return err
   188  	}
   189  
   190  	ts, err := time.Parse(codeBuildTimeFormat, s)
   191  	if err != nil {
   192  		return err
   193  	}
   194  
   195  	*t = CodeBuildTime(ts)
   196  	return nil
   197  }