1
+ /* eslint-disable camelcase */
1
2
/* eslint-disable no-console */
2
- import { getInput , setFailed , info , error } from '@actions/core'
3
- import * as github from '@actions/github'
4
- import { Octokit } from '@octokit/core'
5
- import { RequestError } from '@octokit/request-error'
3
+ import { getInput , setFailed , info , error } from '@actions/core' ;
4
+ import * as github from '@actions/github' ;
5
+ import { Octokit } from '@octokit/core' ;
6
+ import { RequestError } from '@octokit/request-error' ;
6
7
7
8
interface ListDeploymentIDs { owner : string ; repo : string ; environment : string ; ref : string ; limit : number }
8
- interface Deployment { owner : string ; repo : string ; deploymentId : number }
9
- interface Context { owner : string ; repo : string }
10
- export interface DeploymentRef { deploymentId : number ; ref : string }
9
+ interface Deployment { owner : string ; repo : string ; deploymentId : number }
10
+ interface Context { owner : string ; repo : string }
11
+ export interface DeploymentRef { deploymentId : number ; ref : string }
11
12
12
13
/*
13
14
Func > getNum
14
15
*/
15
16
16
17
function getNum ( num : string | '0' )
17
18
{
18
- return Math . floor ( Number ( num ) ) || 0
19
+ return Math . floor ( Number ( num ) ) || 0 ;
19
20
}
20
21
21
22
/*
@@ -24,8 +25,7 @@ function getNum( num: string | '0' )
24
25
25
26
async function listDeployments ( client : Octokit , { owner, repo, environment, ref = '' , limit = 100 } : ListDeploymentIDs , page = 0 ) : Promise < DeploymentRef [ ] >
26
27
{
27
-
28
- info ( ` › 📝 Searching \x1b[38;5;9menv ${ environment } \x1b[0m` )
28
+ info ( ` › 📝 Searching \x1b[38;5;9menv ${ environment } \x1b[0m` ) ;
29
29
30
30
const { data } = await client . request ( 'GET /repos/{owner}/{repo}/deployments' ,
31
31
{
@@ -35,30 +35,28 @@ async function listDeployments( client: Octokit, { owner, repo, environment, ref
35
35
ref,
36
36
per_page : limit , // number of items per page, max 100
37
37
page
38
- } )
38
+ } ) ;
39
39
40
40
/*
41
41
Limit not reached || limit set to default 100
42
42
loop function again to page 2+
43
43
*/
44
44
45
- const deploymentRefs : DeploymentRef [ ] = data . map ( ( deployment ) => ( { deploymentId : deployment . id , ref : deployment . ref } ) )
46
- const itemsTotal = deploymentRefs . length
45
+ const deploymentRefs : DeploymentRef [ ] = data . map ( ( deployment ) => ( { deploymentId : deployment . id , ref : deployment . ref } ) ) ;
46
+ const itemsTotal = deploymentRefs . length ;
47
47
48
48
if ( ! limit || limit === 100 )
49
49
{
50
- info ( ` › ⚙️ Using default limit of \x1b[38;5;1m${ limit } \x1b[0m` )
50
+ info ( ` › ⚙️ Using default limit of \x1b[38;5;1m${ limit } \x1b[0m` ) ;
51
51
if ( itemsTotal === 100 )
52
- return deploymentRefs . concat ( await listDeployments ( client , { owner, repo, environment, ref, limit } , page + 1 ) )
53
-
52
+ return deploymentRefs . concat ( await listDeployments ( client , { owner, repo, environment, ref, limit } , page + 1 ) ) ;
53
+ }
54
54
/*
55
55
user specified custom limit
56
56
*/
57
-
58
- }
59
57
else if ( limit >= 100 )
60
58
{
61
- const pagesNeeded = Math . ceil ( limit / 100 )
59
+ const pagesNeeded = Math . ceil ( limit / 100 ) ;
62
60
63
61
/*
64
62
if total items is less than limit
@@ -67,22 +65,22 @@ async function listDeployments( client: Octokit, { owner, repo, environment, ref
67
65
68
66
if ( itemsTotal < limit && page < pagesNeeded )
69
67
{
70
- info ( ` › ⚙️ Using custom limit of \x1b[38;5;1m${ limit } \x1b[0m › reading page \x1b[38;5;32mpage ${ page } /${ pagesNeeded } \x1b[0m` )
71
- return deploymentRefs . concat ( await listDeployments ( client , { owner, repo, environment, ref, limit } , page + 1 ) )
68
+ info ( ` › ⚙️ Using custom limit of \x1b[38;5;1m${ limit } \x1b[0m › reading page \x1b[38;5;32mpage ${ page } /${ pagesNeeded } \x1b[0m` ) ;
69
+ return deploymentRefs . concat ( await listDeployments ( client , { owner, repo, environment, ref, limit } , page + 1 ) ) ;
72
70
}
73
71
}
74
72
else if ( limit !== 100 )
75
73
{
76
- info ( ` › ⚙️ Using custom limit of \x1b[38;5;1m${ limit } \x1b[0m › not using pagination` )
74
+ info ( ` › ⚙️ Using custom limit of \x1b[38;5;1m${ limit } \x1b[0m › not using pagination` ) ;
77
75
}
78
76
79
77
/*
80
78
Done getting items, return deployment list
81
79
*/
82
80
83
- info ( ` › 📚 Finished fetching deployment results` )
81
+ info ( ` › 📚 Finished fetching deployment results` ) ;
84
82
85
- return deploymentRefs
83
+ return deploymentRefs ;
86
84
}
87
85
88
86
/*
@@ -91,14 +89,14 @@ async function listDeployments( client: Octokit, { owner, repo, environment, ref
91
89
92
90
async function setDeploymentInactive ( client : Octokit , { owner, repo, deploymentId } : Deployment ) : Promise < void >
93
91
{
94
- info ( ` › ✔️ ID \x1b[38;5;244m${ deploymentId } \x1b[0m inactive` )
92
+ info ( ` › ✔️ ID \x1b[38;5;244m${ deploymentId } \x1b[0m inactive` ) ;
95
93
await client . request ( 'POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses' ,
96
94
{
97
95
owner,
98
96
repo,
99
97
deployment_id : deploymentId ,
100
98
state : 'inactive'
101
- } )
99
+ } ) ;
102
100
}
103
101
104
102
/*
@@ -107,13 +105,13 @@ async function setDeploymentInactive( client: Octokit, { owner, repo, deployment
107
105
108
106
async function deleteDeploymentById ( client : Octokit , { owner, repo, deploymentId } : Deployment ) : Promise < void >
109
107
{
110
- info ( ` › ✔️ ID \x1b[38;5;244m${ deploymentId } \x1b[0m deleted` )
108
+ info ( ` › ✔️ ID \x1b[38;5;244m${ deploymentId } \x1b[0m deleted` ) ;
111
109
await client . request ( 'DELETE /repos/{owner}/{repo}/deployments/{deployment_id}' ,
112
110
{
113
111
owner,
114
112
repo,
115
113
deployment_id : deploymentId
116
- } )
114
+ } ) ;
117
115
}
118
116
119
117
/*
@@ -122,8 +120,7 @@ async function deleteDeploymentById( client: Octokit, { owner, repo, deploymentI
122
120
123
121
async function deleteTheEnvironment ( client : Octokit , environment : string , { owner, repo } : Context ) : Promise < void >
124
122
{
125
-
126
- let existingEnv = false
123
+ let existingEnv = false ;
127
124
128
125
try
129
126
{
@@ -132,30 +129,30 @@ async function deleteTheEnvironment( client: Octokit, environment: string, { own
132
129
owner,
133
130
repo,
134
131
environment_name : environment
135
- } )
132
+ } ) ;
136
133
137
- existingEnv = typeof getEnvResult === 'object'
134
+ existingEnv = typeof getEnvResult === 'object' ;
138
135
}
139
136
catch ( err )
140
137
{
141
138
if ( ( err as RequestError ) . status !== 404 )
142
139
{
143
- error ( 'Error deleting environment' )
144
- throw err
140
+ error ( 'Error deleting environment' ) ;
141
+ throw err ;
145
142
}
146
143
}
147
144
148
145
if ( existingEnv )
149
146
{
150
- info ( ` › 🗑️ Deleting \x1b[38;5;9menv ${ environment } \x1b[0m` )
147
+ info ( ` › 🗑️ Deleting \x1b[38;5;9menv ${ environment } \x1b[0m` ) ;
151
148
await client . request ( 'DELETE /repos/{owner}/{repo}/environments/{environment_name}' ,
152
149
{
153
150
owner,
154
151
repo,
155
152
environment_name : environment
156
- } )
153
+ } ) ;
157
154
158
- info ( ` › ✔️ Deleted` )
155
+ info ( ` › ✔️ Deleted` ) ;
159
156
}
160
157
}
161
158
@@ -165,141 +162,140 @@ async function deleteTheEnvironment( client: Octokit, environment: string, { own
165
162
166
163
export async function main ( ) : Promise < void >
167
164
{
168
- let deleteDeployment = true
169
- let deleteEnvironment = true
165
+ let deleteDeployment = true ;
166
+ let deleteEnvironment = true ;
170
167
171
- const { context } = github
172
- const token : string = getInput ( 'token' , { required : true } )
173
- const environment : string = getInput ( 'environment' , { required : true } )
174
- const onlyRemoveDeployments : string = getInput ( 'onlyRemoveDeployments' , { required : false } )
175
- const onlyDeactivateDeployments : string = getInput ( 'onlyDeactivateDeployments' , { required : false } )
176
- const delayTime : number = getNum ( getInput ( 'delay' , { required : false } ) || '500' )
177
- const limit : number = getNum ( getInput ( 'limit' , { required : false } ) || '100' )
178
- const ref : string = getInput ( 'ref' , { required : false } )
168
+ const { context } = github ;
169
+ const token : string = getInput ( 'token' , { required : true } ) ;
170
+ const environment : string = getInput ( 'environment' , { required : true } ) ;
171
+ const onlyRemoveDeployments : string = getInput ( 'onlyRemoveDeployments' , { required : false } ) ;
172
+ const onlyDeactivateDeployments : string = getInput ( 'onlyDeactivateDeployments' , { required : false } ) ;
173
+ const delayTime : number = getNum ( getInput ( 'delay' , { required : false } ) || '500' ) ;
174
+ const limit : number = getNum ( getInput ( 'limit' , { required : false } ) || '100' ) ;
175
+ const ref : string = getInput ( 'ref' , { required : false } ) ;
179
176
180
- info ( '\n' )
181
- info ( ` › 🛫 Starting Deployment Deletion action` )
177
+ info ( '\n' ) ;
178
+ info ( ` › 🛫 Starting Deployment Deletion action` ) ;
182
179
183
180
const client : Octokit = github . getOctokit ( token ,
184
181
{
185
182
throttle :
186
183
{
187
184
onRateLimit : ( retryAfter = 0 , options : any ) =>
188
185
{
189
- console . warn ( `Request quota exhausted for request ${ options . method } ${ options . url } ` )
186
+ console . warn ( `Request quota exhausted for request ${ options . method } ${ options . url } ` ) ;
190
187
if ( options . request . retryCount === 0 )
191
188
{
192
189
// only retries once
193
- console . log ( `Retrying after ${ retryAfter } seconds!` )
194
- return true
190
+ console . log ( `Retrying after ${ retryAfter } seconds!` ) ;
191
+ return true ;
195
192
}
196
193
} ,
197
194
onAbuseLimit : ( retryAfter = 0 , options : any ) =>
198
195
{
199
- console . warn ( `Abuse detected for request ${ options . method } ${ options . url } ` )
196
+ console . warn ( `Abuse detected for request ${ options . method } ${ options . url } ` ) ;
200
197
if ( options . request . retryCount === 0 )
201
198
{
202
199
// only retries once
203
- console . log ( `Retrying after ${ retryAfter } seconds!` )
204
- return true
200
+ console . log ( `Retrying after ${ retryAfter } seconds!` ) ;
201
+ return true ;
205
202
}
206
203
}
207
204
} ,
208
205
previews : [ 'ant-man' ]
209
- } )
206
+ } ) ;
210
207
211
208
if ( onlyDeactivateDeployments === 'true' )
212
209
{
213
- deleteDeployment = false
214
- deleteEnvironment = false
210
+ deleteDeployment = false ;
211
+ deleteEnvironment = false ;
215
212
}
216
213
else if ( onlyRemoveDeployments === 'true' )
217
214
{
218
- deleteEnvironment = false
215
+ deleteEnvironment = false ;
219
216
}
220
217
221
- info ( ` › 📋 Collect list of deployments` )
218
+ info ( ` › 📋 Collect list of deployments` ) ;
222
219
223
220
try
224
221
{
225
- const deploymentRefs = await listDeployments ( client , { ...context . repo , environment, ref, limit } )
222
+ const deploymentRefs = await listDeployments ( client , { ...context . repo , environment, ref, limit } ) ;
226
223
227
- info ( ` › 🔍 Found \x1b[38;5;32m${ deploymentRefs . length } deployments\x1b[0m for \x1b[38;5;13mref ${ ref } \x1b[0m` )
224
+ info ( ` › 🔍 Found \x1b[38;5;32m${ deploymentRefs . length } deployments\x1b[0m for \x1b[38;5;13mref ${ ref } \x1b[0m` ) ;
228
225
229
- let deploymentIds : number [ ]
230
- let deleteDeploymentMessage : string
231
- let deactivateDeploymentMessage : string
232
- let delayStart = 0
233
- const delayIncrement = delayTime
226
+ let deploymentIds : number [ ] ;
227
+ let deleteDeploymentMessage : string ;
228
+ let deactivateDeploymentMessage : string ;
229
+ let delayStart = 0 ;
230
+ const delayIncrement = delayTime ;
234
231
235
232
if ( ref . length > 0 )
236
233
{
237
- deleteDeploymentMessage = ` › 🗑️ Deleting deployment \x1b[38;5;13mref ${ ref } \x1b[0m in \x1b[38;5;9menv ${ environment } \x1b[0m`
238
- deactivateDeploymentMessage = ` › 🔴 Deactivating deployment \x1b[38;5;13mref ${ ref } \x1b[0m in \x1b[38;5;9menv ${ environment } \x1b[0m`
234
+ deleteDeploymentMessage = ` › 🗑️ Deleting deployment \x1b[38;5;13mref ${ ref } \x1b[0m in \x1b[38;5;9menv ${ environment } \x1b[0m` ;
235
+ deactivateDeploymentMessage = ` › 🔴 Deactivating deployment \x1b[38;5;13mref ${ ref } \x1b[0m in \x1b[38;5;9menv ${ environment } \x1b[0m` ;
239
236
deploymentIds = deploymentRefs
240
237
. filter ( ( deployment ) => deployment . ref === ref )
241
- . map ( ( deployment ) => deployment . deploymentId )
238
+ . map ( ( deployment ) => deployment . deploymentId ) ;
242
239
}
243
240
else
244
241
{
245
- deleteDeploymentMessage = ` › 🗑️ Deleting all ${ deploymentRefs . length } deployments in \x1b[38;5;9menv ${ environment } \x1b[0m`
246
- deactivateDeploymentMessage = ` › 🔴 Deactivating all ${ deploymentRefs . length } deployments in \x1b[38;5;9menv ${ environment } \x1b[0m`
242
+ deleteDeploymentMessage = ` › 🗑️ Deleting all ${ deploymentRefs . length } deployments in \x1b[38;5;9menv ${ environment } \x1b[0m` ;
243
+ deactivateDeploymentMessage = ` › 🔴 Deactivating all ${ deploymentRefs . length } deployments in \x1b[38;5;9menv ${ environment } \x1b[0m` ;
247
244
deploymentIds = deploymentRefs . map (
248
245
( deployment ) => deployment . deploymentId
249
- )
246
+ ) ;
250
247
}
251
248
252
- info ( deactivateDeploymentMessage )
249
+ info ( deactivateDeploymentMessage ) ;
253
250
254
251
/*
255
252
So that we don't hit the secondary rate limit, add a delay between each action in the promise
256
253
*/
257
254
258
255
const promiseInactive = deploymentIds . map ( ( deploymentId ) =>
259
256
{
260
- delayStart += delayIncrement
257
+ delayStart += delayIncrement ;
261
258
return new Promise ( ( resolve ) => setTimeout ( resolve , delayStart ) ) . then ( ( ) =>
262
- setDeploymentInactive ( client , { ...context . repo , deploymentId } ) )
263
- } )
259
+ setDeploymentInactive ( client , { ...context . repo , deploymentId } ) ) ;
260
+ } ) ;
264
261
265
- await Promise . all ( promiseInactive )
262
+ await Promise . all ( promiseInactive ) ;
266
263
267
264
/*
268
265
Action > Delete Deployment
269
266
*/
270
267
271
268
if ( deleteDeployment )
272
269
{
273
- info ( deleteDeploymentMessage )
270
+ info ( deleteDeploymentMessage ) ;
274
271
275
272
/*
276
273
So that we don't hit the secondary rate limit, add a delay between each action in the promise
277
274
*/
278
275
279
276
const promiseDelete = deploymentIds . map ( ( deploymentId ) =>
280
277
{
281
- delayStart += delayIncrement
278
+ delayStart += delayIncrement ;
282
279
return new Promise ( ( resolve ) => setTimeout ( resolve , delayStart ) ) . then ( ( ) =>
283
- deleteDeploymentById ( client , { ...context . repo , deploymentId } ) )
284
- } )
280
+ deleteDeploymentById ( client , { ...context . repo , deploymentId } ) ) ;
281
+ } ) ;
285
282
286
283
/*
287
284
Promise kept
288
285
*/
289
286
290
- await Promise . all ( promiseDelete )
287
+ await Promise . all ( promiseDelete ) ;
291
288
}
292
289
293
290
if ( deleteEnvironment )
294
291
{
295
- await deleteTheEnvironment ( client , environment , context . repo )
292
+ await deleteTheEnvironment ( client , environment , context . repo ) ;
296
293
}
297
294
298
- info ( ' › ✔️ Action completed successfully' )
299
-
295
+ info ( ' › ✔️ Action completed successfully' ) ;
300
296
}
301
297
catch ( err )
302
298
{
303
- setFailed ( ( err as RequestError ) . message )
299
+ setFailed ( ( err as RequestError ) . message ) ;
304
300
}
305
301
}
0 commit comments