forked from atlassian/gajira-create
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaction.js
More file actions
114 lines (95 loc) · 2.09 KB
/
action.js
File metadata and controls
114 lines (95 loc) · 2.09 KB
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
const Jira = require("./common/net/Jira");
const AgileClient = require("./common/net/AgileClient");
module.exports = class {
constructor({ githubEvent, argv, config }) {
this.Jira = new Jira({
baseUrl: config.baseUrl,
token: config.token,
email: config.email,
});
this.agileClient = new AgileClient(
config.baseUrl,
config.token,
config.email
);
this.config = config;
this.argv = argv;
this.githubEvent = githubEvent;
}
async execute() {
const { argv } = this;
const projectKey = argv.project;
const issuetypeName = argv.issuetype;
const activeSprint =
argv.boardId && (await this.agileClient.getActiveSprint(argv.boardId));
// map custom fields
const { projects } = await this.Jira.getCreateMeta({
expand: "projects.issuetypes.fields",
projectKeys: projectKey,
issuetypeNames: issuetypeName,
});
if (projects.length === 0) {
console.error(`project '${projectKey}' not found`);
return;
}
const [project] = projects;
if (project.issuetypes.length === 0) {
console.error(`issuetype '${issuetypeName}' not found`);
return;
}
let providedFields = [
{
key: "project",
value: {
key: projectKey,
},
},
{
key: "issuetype",
value: {
name: issuetypeName,
},
},
{
key: "summary",
value: argv.summary,
},
];
if (activeSprint) {
providedFields.push({
key: "customfield_10020",
value: activeSprint.id,
});
}
if (argv.description) {
providedFields.push({
key: "description",
value: argv.description,
});
}
if (argv.fields) {
providedFields = [
...providedFields,
...this.transformFields(argv.fields),
];
}
const payload = providedFields.reduce(
(acc, field) => {
acc.fields[field.key] = field.value;
return acc;
},
{
fields: {},
}
);
const issue = await this.Jira.createIssue(payload);
return { issue: issue.key };
}
transformFields(fieldsString) {
const fields = JSON.parse(fieldsString);
return Object.keys(fields).map((fieldKey) => ({
key: fieldKey,
value: fields[fieldKey],
}));
}
};