-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
71 lines (61 loc) · 2.47 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
const core = require("@actions/core");
const JiraGetIssueAction = require('./common/net/jira/getissue/action');
const CloseIssueAction = require('./common/net/github/closeIssue/action');
const GetAllIssuesAction = require('./common/net/github/getAllIssues/action');
const GetFirstIssueCommentAction = require('./common/net/github/getFirstIssueComment/action');
async function run() {
try {
const inputs = {
jiraBaseUrl: core.getInput('jiraBaseUrl'),
jiraEmail: core.getInput('jiraEmail'),
jiraToken: core.getInput('jiraToken'),
token: core.getInput("token"),
owner: core.getInput("owner"),
repository: core.getInput("repository")
};
const base64token = Buffer.from(`${inputs.jiraEmail}:${inputs.jiraToken}`).toString('base64');
const repo = await getSanitizedRepo(inputs.repository)
const issues = await new GetAllIssuesAction(inputs.owner, repo, inputs.token).execute();
issues.data.forEach(async (issue) => {
const issueNumber = issue.number;
console.log(`Operating for issue: ${issueNumber}`);
await operateForIssue(inputs.owner, repo, issueNumber, inputs.token, inputs.jiraBaseUrl, base64token);
});
} catch (error) {
console.log(error);
process.exit(1);
}
}
async function getSanitizedRepo(rawRepo) {
const repository = rawRepo
? rawRepo
: process.env.GITHUB_REPOSITORY;
const repo = repository.split("/");
console.log(`repository: ${repo}`);
return repo;
}
async function operateForIssue(owner, repo, issue, token, jiraBaseUrl, jiraToken) {
const issueFirstComment = await new GetFirstIssueCommentAction(owner, repo, issue, token).execute();
if (!(/^Automatically created Jira issue: [A-Z]+-\d+/.test(issueFirstComment))) {
return;
}
const jiraIssueKey = issueFirstComment.split(' ').pop();
const jiraIssueStatus = await getJiraIssueStatus(jiraBaseUrl, jiraIssueKey, jiraToken);
console.log(jiraIssueStatus);
if (jiraIssueStatus === 'Done') {
await new CloseIssueAction(owner, repo, issue, token).execute();
}
}
async function getJiraIssueStatus(jiraBaseUrl, jiraIssue, jiraToken) {
const issue = await new JiraGetIssueAction(
jiraBaseUrl,
jiraIssue,
jiraToken
).execute()
console.log(`Jira issue ${jiraIssue} retrieved`);
//console.log(issue);
//console.log('\n');
const issueStatus = issue.fields.status.name;
return issueStatus;
}
run();