forked from HighwayThree/jira-upload-deployment-info
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
114 lines (114 loc) · 4.87 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const core = require('@actions/core');
const github = require('@actions/github');
const request = require('request-promise-native');
const dateFormat = require('dateformat');
async function submitDeploymentInfo(accessToken) {
const cloudInstanceBaseUrl = core.getInput('cloud-instance-base-url');
let cloudId = await request(cloudInstanceBaseUrl + '/_edge/tenant_info');
cloudId = JSON.parse(cloudId);
cloudId = cloudId.cloudId;
const deploymentSequenceNumber = core.getInput('deployment-sequence-number');
const updateSequenceNumber = core.getInput('update-sequence-number');
const issueKeys = core.getInput('issue-keys');
const displayName = core.getInput('display-name');
const url = core.getInput('url');
const description = core.getInput('description');
let lastUpdated = core.getInput('last-updated');
const label = core.getInput('label');
const state = core.getInput('state');
const pipelineId = core.getInput('pipeline-id');
const pipelineDisplayName = core.getInput('pipeline-display-name');
const pipelineUrl = core.getInput('pipeline-url');
const environmentId = core.getInput('environment-id');
const environmentDisplayName = core.getInput('environment-display-name');
const environmentType = core.getInput('environment-type');
console.log("lastUpdated: " + lastUpdated);
lastUpdated = dateFormat(lastUpdated, "yyyy-mm-dd'T'HH:MM:ss'Z'");
const deployment = {
schemaVersion: "1.0",
deploymentSequenceNumber: deploymentSequenceNumber || process.env['GITHUB_RUN_ID'],
updateSequenceNumber: updateSequenceNumber || process.env['GITHUB_RUN_ID'],
issueKeys: issueKeys.split(',') || [],
displayName: displayName || '',
url: url || `${github.context.payload.repository.url}/actions/runs/${process.env['GITHUB_RUN_ID']}`,
description: description || '',
lastUpdated: lastUpdated || '',
label: label || '',
state: state || '',
pipeline: {
id: pipelineId || `${github.context.payload.repository.full_name} ${github.context.workflow}`,
displayName: pipelineDisplayName || `Workflow: ${github.context.workflow} (#${process.env['GITHUB_RUN_NUMBER']})`,
url: pipelineUrl || `${github.context.payload.repository.url}/actions/runs/${process.env['GITHUB_RUN_ID']}`,
},
environment: {
id: environmentId || '',
displayName: environmentDisplayName || '',
type: environmentType || '',
}
};
let bodyData = {
deployments: [deployment],
};
bodyData = JSON.stringify(bodyData);
const options = {
method: 'POST',
url: "https://api.atlassian.com/jira/deployments/0.1/cloud/" + cloudId + "/bulk",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
Authorization: "Bearer " + accessToken
},
body: bodyData
};
let responseJson = await request(options);
console.log("responseJson: " + responseJson);
let response = JSON.parse(responseJson);
if (response.rejectedDeployments && response.rejectedDeployments.length > 0) {
const rejectedDeployment = response.rejectedDeployments[0];
console.log("errors: ", rejectedDeployment.errors);
let errors = rejectedDeployment.errors.map((error) => error.message).join(',');
errors.substr(0, errors.length - 1);
console.log("joined errors: ", errors);
core.setFailed(errors);
}
core.setOutput("response", responseJson);
}
exports.submitDeploymentInfo = submitDeploymentInfo;
async function getAccessToken() {
const clientId = core.getInput('client-id');
const clientSecret = core.getInput('client-secret');
var tokenBodyData = {
"audience": "api.atlassian.com",
"grant_type": "client_credentials",
"client_id": clientId,
"client_secret": clientSecret
};
tokenBodyData = JSON.stringify(tokenBodyData);
const tokenOptions = {
method: 'POST',
url: 'https://api.atlassian.com/oauth/token',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: tokenBodyData,
};
console.log("tokenOptions: ", tokenOptions);
const response = await request(tokenOptions);
console.log("getAccessToken response: ", response);
return JSON.parse(response);
}
exports.getAccessToken = getAccessToken;
(async function () {
try {
const accessTokenResponse = await getAccessToken();
console.log("accessTokenResponse: ", accessTokenResponse);
await submitDeploymentInfo(accessTokenResponse.access_token);
console.log("finished submitting deployment info");
}
catch (error) {
core.setFailed(error.message);
}
})();