@@ -11,7 +11,6 @@ class GitHubDeployment < BaseEvent
11
11
@github = Runway ::GitHub .new(log)
12
12
@deployment_filter = (@event .deployment_filter.try(& .to_i) || 1 )
13
13
@repo = @event .repo.not_nil!
14
- @timezone = Runway ::TimeHelpers .timezone(@event .schedule.timezone)
15
14
@success = " success"
16
15
@failure = " failure"
17
16
end
@@ -42,9 +41,9 @@ class GitHubDeployment < BaseEvent
42
41
# create a deployment status
43
42
result = @github .create_deployment_status(@repo , deployment_id, status)
44
43
45
- @log .debug { " deployment status result: #{ JSON .parse( result) .to_pretty_json} " } if Runway ::VERBOSE
44
+ @log .debug { " deployment status result: #{ result.to_pretty_json } " } if Runway ::VERBOSE
46
45
47
- raise " Unexpected deployment status result" unless JSON .parse( result)[ " state" ] == @success
46
+ raise " Unexpected deployment status result" unless result. state == @success
48
47
49
48
# logs about the deployment status
50
49
@log .info { Emoji .emojize(" :white_check_mark: successfully completed deployment for #{ @repo } in the #{ @event .environment} environment" ) } if status == @success unless Runway ::QUIET
@@ -54,7 +53,7 @@ class GitHubDeployment < BaseEvent
54
53
rescue error : Exception
55
54
@log .error { " error handling deployment event: #{ error.message } - attempting to set a 'failure' statue on the deployment" }
56
55
result = @github .create_deployment_status(@repo , payload.id.to_s.to_i64.not_nil!, @failure )
57
- @log .debug { " deployment status result (on error): #{ JSON .parse( result) .to_pretty_json} " }
56
+ @log .debug { " deployment status result (on error): #{ result.to_pretty_json } " }
58
57
return payload
59
58
end
60
59
@@ -86,20 +85,18 @@ class GitHubDeployment < BaseEvent
86
85
# this should already have been done by the GitHub API, but we'll do it again out of extra caution
87
86
# @param deployments [JSON::Any] the deployments to filter
88
87
# @return [Array] the filtered deployments
89
- protected def filter_deployments (deployments : JSON :: Any ) : Array
90
- deployments.as_a. select do |deployment |
91
- deployment[ " environment" ] == @event .environment
88
+ protected def filter_deployments (deployments : Array ( Octokit :: Models :: Deployment )) : Array ( Octokit :: Models :: Deployment )
89
+ deployments.select do |deployment |
90
+ deployment. environment == @event .environment
92
91
end
93
92
end
94
93
95
94
# sort deployments by created_at date with the most recent first
96
95
# uses the deployment_filter attribute to only grab the X most recent deployments
97
96
# @param deployments [Array] the deployments to sort
98
97
# @return [Array] the sorted deployments
99
- protected def sort_deployments (deployments : Array ) : Array
100
- deployments = deployments.sort_by do |deployment |
101
- Time .parse(deployment[" created_at" ].as_s, " %FT%T%z" , @timezone )
102
- end .reverse!
98
+ protected def sort_deployments (deployments : Array (Octokit ::Models ::Deployment )) : Array (Octokit ::Models ::Deployment )
99
+ deployments = deployments.sort_by(& .created_at).reverse!
103
100
104
101
# only grab the X most recent deployments (based on event.filters.deployments)
105
102
return deployments.first(@deployment_filter )
@@ -108,22 +105,20 @@ class GitHubDeployment < BaseEvent
108
105
# A helper method to find the most recent deployment with an "in_progress" status and return it (if it exists)
109
106
# @param deployments [Array] the deployments to search through
110
107
# @return [JSON::Any] the deployment with an "in_progress" status or nil if it doesn't exist
111
- protected def find_in_progress_deployment (deployments : Array ) : JSON :: Any ?
108
+ protected def find_in_progress_deployment (deployments : Array ) : Octokit :: Models :: Deployment | Nil
112
109
# loop through all filtered deployments and get their deployment statuses
113
110
# the first deployment to have an "in_progress" status will be the one we're looking for
114
111
# however, the "in_progress" status must be the most recent status for the deployment or we'll ignore it
115
112
deployments.each do |deployment |
116
- deployment_id = deployment[ " id " ].to_s.to_i
113
+ deployment_id = deployment.id.to_i32
117
114
statuses = @github .list_deployment_statuses(@event .repo.not_nil!, deployment_id, per_page: 100 )
118
- statuses = JSON .parse( statuses.records.to_json).as_a
115
+ statuses = statuses.records
119
116
120
117
# sort statuses by created_at date with the most recent first
121
- statuses = statuses.sort_by do |status |
122
- Time .parse(status[" created_at" ].as_s, " %FT%T%z" , @timezone )
123
- end .reverse!
118
+ statuses = statuses.sort_by(& .created_at).reverse!
124
119
125
120
# if the most recent status is "in_progress", we have our deployment
126
- if statuses.first[ " state" ] == " in_progress"
121
+ if statuses.first. state == " in_progress"
127
122
@log .debug { " found an in_progress deployment for #{ @repo } in the #{ @event .environment} environment" }
128
123
return deployment
129
124
end
@@ -135,17 +130,17 @@ class GitHubDeployment < BaseEvent
135
130
136
131
# set the payload attributes based on the detected deployment
137
132
# @param payload [Payload] the payload object to set attributes on
138
- # @param detected_deployment [JSON::Any ] the detected deployment to get attributes from
133
+ # @param detected_deployment [Octokit::Models::Deployment ] the detected deployment to get attributes from
139
134
# @return [Payload] the payload object with attributes set
140
- protected def set_payload_attributes (payload : Payload , detected_deployment : JSON :: Any ) : Payload
141
- payload.id = detected_deployment[ " id " ] .to_s.not_nil!
142
- payload.environment = detected_deployment.try( & .[ " environment" ]).try( & .to_s) || nil
143
- payload.created_at = detected_deployment.try( & .[ " created_at" ]).try( & . to_s) || nil
144
- payload.updated_at = detected_deployment.try( & .[ " updated_at" ]).try( & . to_s) || nil
145
- payload.description = detected_deployment.try( & .[ " description" ]).try( & .to_s) || nil
146
- payload.user = detected_deployment.try( & .[ " creator" ]).try( & .[ " login" ]).try( & .to_s) || nil
147
- payload.sha = detected_deployment.try( & .[ " sha" ]).try( & .to_s) || nil
148
- payload.ref = detected_deployment.try( & .[ " ref" ]).try( & .to_s) || nil
135
+ protected def set_payload_attributes (payload : Payload , detected_deployment : Octokit :: Models :: Deployment ) : Payload
136
+ payload.id = detected_deployment.id .to_s
137
+ payload.environment = detected_deployment.environment
138
+ payload.created_at = detected_deployment.created_at. to_s
139
+ payload.updated_at = detected_deployment.updated_at. to_s
140
+ payload.description = detected_deployment.description
141
+ payload.user = detected_deployment.creator. login
142
+ payload.sha = detected_deployment.sha
143
+ payload.ref = detected_deployment.ref
149
144
payload.status = " in_progress"
150
145
payload.ship_it = true
151
146
return payload
@@ -165,9 +160,8 @@ class GitHubDeployment < BaseEvent
165
160
# It then sorts the deployments as well
166
161
# @param deployments [String] the deployments raw JSON response
167
162
# @return [Array] the parsed, filtered, and sorted deployments
168
- protected def parse_and_filter_deployments (deployments : String ) : Array
169
- deployments = JSON .parse(deployments)
170
- deployments = filter_deployments(deployments)
163
+ protected def parse_and_filter_deployments (deployments : Octokit ::Connection ::Paginator (Octokit ::Models ::Deployment )) : Array
164
+ deployments = filter_deployments(deployments.records)
171
165
sort_deployments(deployments)
172
166
end
173
167
end
0 commit comments