-
Notifications
You must be signed in to change notification settings - Fork 32
/
action.js
89 lines (71 loc) · 1.81 KB
/
action.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
const Jira = require('./common/net/Jira')
module.exports = class {
constructor ({ githubEvent, argv, config }) {
this.Jira = new Jira({
baseUrl: config.baseUrl,
token: config.token,
email: config.email,
})
this.config = config
this.argv = argv
this.githubEvent = githubEvent
}
async execute () {
const { argv } = this
const projectKey = argv.project
const issuetypeName = argv.issuetype
// 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 (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],
}))
}
}