Move from JavaScript to TypeScript #2
10
src/index.ts
10
src/index.ts
@ -29,12 +29,8 @@ fetch(url).then((res) => {
|
|||||||
_.forEach(data, (ticket) => {
|
_.forEach(data, (ticket) => {
|
||||||
const issue = Issue.fromGitea(ticket, CONFIG['repository-default']);
|
const issue = Issue.fromGitea(ticket, CONFIG['repository-default']);
|
||||||
database.push(issue);
|
database.push(issue);
|
||||||
|
|
||||||
console.log(issue);
|
|
||||||
|
|
||||||
console.log(issue.toJira(uGiteaToJira, SECRETS['jira-project']));
|
|
||||||
// Now, search Jira issues to make sure this isn't already duplicated
|
// Now, search Jira issues to make sure this isn't already duplicated
|
||||||
const jiraIssueSearch = `project = "AAA" and summary ~ "${issue.title_jira}"\nORDER BY created DESC`
|
const jiraIssueSearch = `project = "${SECRETS['jira-project']}" and summary ~ "${issue.title_jira}"\nORDER BY created DESC`
|
||||||
|
|
||||||
jiraFetch(`issue/picker?currentJQL=${jiraIssueSearch}`, 'GET').then((jiraSearch) => {
|
jiraFetch(`issue/picker?currentJQL=${jiraIssueSearch}`, 'GET').then((jiraSearch) => {
|
||||||
jiraSearch.json().then((searchJSON) => {
|
jiraSearch.json().then((searchJSON) => {
|
||||||
@ -55,9 +51,11 @@ fetch(url).then((res) => {
|
|||||||
jiraFetch('issue', 'POST', issue.toJira(uGiteaToJira, SECRETS['jira-project'])).then((res) => {
|
jiraFetch('issue', 'POST', issue.toJira(uGiteaToJira, SECRETS['jira-project'])).then((res) => {
|
||||||
res.json().then((createdIssue) => {
|
res.json().then((createdIssue) => {
|
||||||
console.log(createdIssue);
|
console.log(createdIssue);
|
||||||
issue.id_jira = createdIssue['id'];
|
issue.id_jira = createdIssue['key'];
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
console.log(`Issue "${issue.title_jira}" already existed, skipping`);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
16
src/issue.ts
16
src/issue.ts
@ -26,7 +26,7 @@ class Issue {
|
|||||||
const labels: string[] = [];
|
const labels: string[] = [];
|
||||||
|
|
||||||
_.forEach(obj['labels'], (label: any) => {
|
_.forEach(obj['labels'], (label: any) => {
|
||||||
labels.push(label['id'])
|
labels.push(label['name'])
|
||||||
});
|
});
|
||||||
|
|
||||||
// Fetch assignees
|
// Fetch assignees
|
||||||
@ -60,7 +60,7 @@ class Issue {
|
|||||||
* @summary Converts this to a Jira JSoN object
|
* @summary Converts this to a Jira JSoN object
|
||||||
* https://developer.atlassian.com/server/jira/platform/jira-rest-api-examples/#creating-an-issue-examples
|
* https://developer.atlassian.com/server/jira/platform/jira-rest-api-examples/#creating-an-issue-examples
|
||||||
*/
|
*/
|
||||||
public toJira(remap: any, parent: string): any {
|
public toJira(remap: any, projectKey: string): any {
|
||||||
const obj: any = {
|
const obj: any = {
|
||||||
"labels": this.labels,
|
"labels": this.labels,
|
||||||
"summary": this.title_jira,
|
"summary": this.title_jira,
|
||||||
@ -82,19 +82,23 @@ class Issue {
|
|||||||
"reporter": {
|
"reporter": {
|
||||||
"id": remap[this.reporter]
|
"id": remap[this.reporter]
|
||||||
},
|
},
|
||||||
"parent": {
|
"project": {
|
||||||
"key": parent
|
"key": projectKey
|
||||||
},
|
},
|
||||||
|
"issuetype": {
|
||||||
|
// If there is a bug inside the labels, count the issue as a bug, else it's a task
|
||||||
|
"name": this.labels.includes('Bug') ? 'Bug' : 'Task'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.assignees.length > 0) {
|
if (this.assignees.length > 0) {
|
||||||
obj['assignee'] = remap[this.assignees[0]];
|
obj['assignee'] = remap[this.assignees[0]];
|
||||||
}
|
}
|
||||||
if (this.dueDate !== '') {
|
if (this.dueDate !== '') {
|
||||||
obj['duedate'] = this.dueDate.slice(0, this.dueDate.indexOf('T'));
|
// obj['duedate'] = this.dueDate.slice(0, this.dueDate.indexOf('T'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return {"fields": obj, "update": {}};
|
return {"fields": obj};
|
||||||
}
|
}
|
||||||
|
|
||||||
public get title_jira(): string {
|
public get title_jira(): string {
|
||||||
|
@ -6,19 +6,20 @@ const OAUTH_JIRA = `${SECRETS['jira-email']}:${SECRETS['jira-token']}`;
|
|||||||
const OAUTH_GITEA = `token=${SECRETS['gitea-token']}`;
|
const OAUTH_GITEA = `token=${SECRETS['gitea-token']}`;
|
||||||
|
|
||||||
function jiraFetch(protocol: string, method: string = 'POST', body: any = null) {
|
function jiraFetch(protocol: string, method: string = 'POST', body: any = null) {
|
||||||
const options: any = {
|
const options: RequestInit = {
|
||||||
method: method,
|
method: method,
|
||||||
headers: {
|
headers: {
|
||||||
'Authorization': `Basic ${Buffer.from(OAUTH_JIRA).toString('base64')}`,
|
'Authorization': `Basic ${Buffer.from(OAUTH_JIRA).toString('base64')}`,
|
||||||
'Accept': 'application/json'
|
'Accept': 'application/json',
|
||||||
}
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
if (body !== null) {
|
if (body !== null) {
|
||||||
options['body'] = JSON.stringify(body);
|
options.body = JSON.stringify(body);
|
||||||
}
|
}
|
||||||
|
|
||||||
return fetch(`https://${SECRETS['jira-site']}.atlassian.net/rest/api/3/${protocol}`, options);
|
return fetch(`https://${SECRETS['jira-site']}.atlassian.net/rest/api/3/${protocol}`, <any>options);
|
||||||
}
|
}
|
||||||
|
|
||||||
export { jiraFetch };
|
export { jiraFetch };
|
||||||
|
Loading…
Reference in New Issue
Block a user