-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.js
61 lines (57 loc) · 2.26 KB
/
index.js
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
58
59
60
61
const core = require('@actions/core');
const github = require('@actions/github');
(async function() {
try {
const repository = core.getInput('repository');
core.info(`Listing deployments for ${repository}`);
const [owner, repo] = repository.split('/');
const authToken = core.getInput('token');
const octokit = github.getOctokit(authToken);
const output = [];
const seenEnvironments = [];
for await (const {data: deployments} of octokit.paginate.iterator(
octokit.repos.listDeployments,
{
owner,
repo,
}
)) {
for (const deployment of deployments) {
core.info(`Deployment: ${deployment.environment} (#${deployment.id})`);
if (seenEnvironments[deployment.environment]) {
continue;
}
const {data: statuses } = await octokit.repos.listDeploymentStatuses({
owner,
repo,
deployment_id: deployment.id
});
// Ignore deployments without statuses
if (statuses.length < 1) {
continue;
}
core.info(`Status: ${deployment.environment} (#${deployment.id}) ${statuses[0].state}`);
// The list of statuses is sorted on last to first.
// If it is not queued, this deployment has already been handled.
seenEnvironments[deployment.environment] = true;
if (statuses[0].state !== "queued") {
continue;
}
output.push({
environment: deployment.environment,
deployment_id: deployment.id,
deployment_url: deployment.url,
status: statuses[0].state,
ref: deployment.ref,
deployment: deployment,
deployment_status: statuses[0]
});
}
}
core.info(`Matrix: ${JSON.stringify(output)}`);
core.setOutput('deployments', {include: output});
} catch (error) {
core.debug(error);
core.setFailed(error.message);
}
})();