diff --git a/dist/cli/index.js b/dist/cli/index.js index 6940f30..aac84c4 100755 --- a/dist/cli/index.js +++ b/dist/cli/index.js @@ -665,45 +665,32 @@ class GitHubClient { if (!data) { throw new Error("Pull request creation failed"); } + const promises = []; if (backport.labels.length > 0) { - try { - await this.octokit.issues.addLabels({ - owner: backport.owner, - repo: backport.repo, - issue_number: data.number, - labels: backport.labels, - }); - } - catch (error) { - this.logger.error(`Error setting labels: ${error}`); - } + promises.push(this.octokit.issues.addLabels({ + owner: backport.owner, + repo: backport.repo, + issue_number: data.number, + labels: backport.labels, + }).catch(error => this.logger.error(`Error setting labels: ${error}`))); } if (backport.reviewers.length > 0) { - try { - await this.octokit.pulls.requestReviewers({ - owner: backport.owner, - repo: backport.repo, - pull_number: data.number, - reviewers: backport.reviewers, - }); - } - catch (error) { - this.logger.error(`Error requesting reviewers: ${error}`); - } + promises.push(this.octokit.pulls.requestReviewers({ + owner: backport.owner, + repo: backport.repo, + pull_number: data.number, + reviewers: backport.reviewers, + }).catch(error => this.logger.error(`Error requesting reviewers: ${error}`))); } if (backport.assignees.length > 0) { - try { - await this.octokit.issues.addAssignees({ - owner: backport.owner, - repo: backport.repo, - issue_number: data.number, - assignees: backport.assignees, - }); - } - catch (error) { - this.logger.error(`Error setting assignees: ${error}`); - } + promises.push(this.octokit.issues.addAssignees({ + owner: backport.owner, + repo: backport.repo, + issue_number: data.number, + assignees: backport.assignees, + }).catch(error => this.logger.error(`Error setting assignees: ${error}`))); } + await Promise.all(promises); return data.html_url; } // UTILS @@ -892,64 +879,43 @@ class GitLabClient { assignee_ids: [], }); const mr = data; + const promises = []; // labels if (backport.labels.length > 0) { - try { - this.logger.info("Setting labels: " + backport.labels); - await this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { - labels: backport.labels.join(","), - }); - } - catch (error) { - this.logger.warn("Failure trying to update labels. " + error); - } + this.logger.info("Setting labels: " + backport.labels); + promises.push(this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { + labels: backport.labels.join(","), + }).catch(error => this.logger.warn("Failure trying to update labels. " + error))); } // reviewers - const reviewerIds = []; - for (const r of backport.reviewers) { - try { - this.logger.debug("Retrieving user: " + r); - const user = await this.getUser(r); - reviewerIds.push(user.id); - } - catch (error) { + const reviewerIds = await Promise.all(backport.reviewers.map(async (r) => { + this.logger.debug("Retrieving user: " + r); + return this.getUser(r).then(user => user.id).catch(() => { this.logger.warn(`Failed to retrieve reviewer ${r}`); - } - } + return undefined; + }); + })); if (reviewerIds.length > 0) { - try { - this.logger.info("Setting reviewers: " + reviewerIds); - await this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { - reviewer_ids: reviewerIds.filter(r => r !== undefined), - }); - } - catch (error) { - this.logger.warn("Failure trying to update reviewers. " + error); - } + this.logger.info("Setting reviewers: " + reviewerIds); + promises.push(this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { + reviewer_ids: reviewerIds.filter(r => r !== undefined), + }).catch(error => this.logger.warn("Failure trying to update reviewers. " + error))); } // assignees - const assigneeIds = []; - for (const a of backport.assignees) { - try { - this.logger.debug("Retrieving user: " + a); - const user = await this.getUser(a); - assigneeIds.push(user.id); - } - catch (error) { + const assigneeIds = await Promise.all(backport.assignees.map(async (a) => { + this.logger.debug("Retrieving user: " + a); + return this.getUser(a).then(user => user.id).catch(() => { this.logger.warn(`Failed to retrieve assignee ${a}`); - } - } + return undefined; + }); + })); if (assigneeIds.length > 0) { - try { - this.logger.info("Setting assignees: " + assigneeIds); - await this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { - assignee_ids: assigneeIds.filter(a => a !== undefined), - }); - } - catch (error) { - this.logger.warn("Failure trying to update assignees. " + error); - } + this.logger.info("Setting assignees: " + assigneeIds); + promises.push(this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { + assignee_ids: assigneeIds.filter(a => a !== undefined), + }).catch(error => this.logger.warn("Failure trying to update assignees. " + error))); } + await Promise.all(promises); return mr.web_url; } /** diff --git a/dist/gha/index.js b/dist/gha/index.js index aa36c9c..b57156b 100755 --- a/dist/gha/index.js +++ b/dist/gha/index.js @@ -638,45 +638,32 @@ class GitHubClient { if (!data) { throw new Error("Pull request creation failed"); } + const promises = []; if (backport.labels.length > 0) { - try { - await this.octokit.issues.addLabels({ - owner: backport.owner, - repo: backport.repo, - issue_number: data.number, - labels: backport.labels, - }); - } - catch (error) { - this.logger.error(`Error setting labels: ${error}`); - } + promises.push(this.octokit.issues.addLabels({ + owner: backport.owner, + repo: backport.repo, + issue_number: data.number, + labels: backport.labels, + }).catch(error => this.logger.error(`Error setting labels: ${error}`))); } if (backport.reviewers.length > 0) { - try { - await this.octokit.pulls.requestReviewers({ - owner: backport.owner, - repo: backport.repo, - pull_number: data.number, - reviewers: backport.reviewers, - }); - } - catch (error) { - this.logger.error(`Error requesting reviewers: ${error}`); - } + promises.push(this.octokit.pulls.requestReviewers({ + owner: backport.owner, + repo: backport.repo, + pull_number: data.number, + reviewers: backport.reviewers, + }).catch(error => this.logger.error(`Error requesting reviewers: ${error}`))); } if (backport.assignees.length > 0) { - try { - await this.octokit.issues.addAssignees({ - owner: backport.owner, - repo: backport.repo, - issue_number: data.number, - assignees: backport.assignees, - }); - } - catch (error) { - this.logger.error(`Error setting assignees: ${error}`); - } + promises.push(this.octokit.issues.addAssignees({ + owner: backport.owner, + repo: backport.repo, + issue_number: data.number, + assignees: backport.assignees, + }).catch(error => this.logger.error(`Error setting assignees: ${error}`))); } + await Promise.all(promises); return data.html_url; } // UTILS @@ -865,64 +852,43 @@ class GitLabClient { assignee_ids: [], }); const mr = data; + const promises = []; // labels if (backport.labels.length > 0) { - try { - this.logger.info("Setting labels: " + backport.labels); - await this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { - labels: backport.labels.join(","), - }); - } - catch (error) { - this.logger.warn("Failure trying to update labels. " + error); - } + this.logger.info("Setting labels: " + backport.labels); + promises.push(this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { + labels: backport.labels.join(","), + }).catch(error => this.logger.warn("Failure trying to update labels. " + error))); } // reviewers - const reviewerIds = []; - for (const r of backport.reviewers) { - try { - this.logger.debug("Retrieving user: " + r); - const user = await this.getUser(r); - reviewerIds.push(user.id); - } - catch (error) { + const reviewerIds = await Promise.all(backport.reviewers.map(async (r) => { + this.logger.debug("Retrieving user: " + r); + return this.getUser(r).then(user => user.id).catch(() => { this.logger.warn(`Failed to retrieve reviewer ${r}`); - } - } + return undefined; + }); + })); if (reviewerIds.length > 0) { - try { - this.logger.info("Setting reviewers: " + reviewerIds); - await this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { - reviewer_ids: reviewerIds.filter(r => r !== undefined), - }); - } - catch (error) { - this.logger.warn("Failure trying to update reviewers. " + error); - } + this.logger.info("Setting reviewers: " + reviewerIds); + promises.push(this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { + reviewer_ids: reviewerIds.filter(r => r !== undefined), + }).catch(error => this.logger.warn("Failure trying to update reviewers. " + error))); } // assignees - const assigneeIds = []; - for (const a of backport.assignees) { - try { - this.logger.debug("Retrieving user: " + a); - const user = await this.getUser(a); - assigneeIds.push(user.id); - } - catch (error) { + const assigneeIds = await Promise.all(backport.assignees.map(async (a) => { + this.logger.debug("Retrieving user: " + a); + return this.getUser(a).then(user => user.id).catch(() => { this.logger.warn(`Failed to retrieve assignee ${a}`); - } - } + return undefined; + }); + })); if (assigneeIds.length > 0) { - try { - this.logger.info("Setting assignees: " + assigneeIds); - await this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { - assignee_ids: assigneeIds.filter(a => a !== undefined), - }); - } - catch (error) { - this.logger.warn("Failure trying to update assignees. " + error); - } + this.logger.info("Setting assignees: " + assigneeIds); + promises.push(this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { + assignee_ids: assigneeIds.filter(a => a !== undefined), + }).catch(error => this.logger.warn("Failure trying to update assignees. " + error))); } + await Promise.all(promises); return mr.web_url; } /** diff --git a/src/service/git/github/github-client.ts b/src/service/git/github/github-client.ts index af60837..012736b 100644 --- a/src/service/git/github/github-client.ts +++ b/src/service/git/github/github-client.ts @@ -82,45 +82,43 @@ export default class GitHubClient implements GitClient { throw new Error("Pull request creation failed"); } + const promises = []; + if (backport.labels.length > 0) { - try { - await this.octokit.issues.addLabels({ + promises.push( + this.octokit.issues.addLabels({ owner: backport.owner, repo: backport.repo, issue_number: (data as PullRequest).number, labels: backport.labels, - }); - } catch (error) { - this.logger.error(`Error setting labels: ${error}`); - } + }).catch(error => this.logger.error(`Error setting labels: ${error}`)) + ); } if (backport.reviewers.length > 0) { - try { - await this.octokit.pulls.requestReviewers({ + promises.push( + this.octokit.pulls.requestReviewers({ owner: backport.owner, repo: backport.repo, pull_number: (data as PullRequest).number, reviewers: backport.reviewers, - }); - } catch (error) { - this.logger.error(`Error requesting reviewers: ${error}`); - } + }).catch(error => this.logger.error(`Error requesting reviewers: ${error}`)) + ); } if (backport.assignees.length > 0) { - try { - await this.octokit.issues.addAssignees({ + promises.push( + this.octokit.issues.addAssignees({ owner: backport.owner, repo: backport.repo, issue_number: (data as PullRequest).number, assignees: backport.assignees, - }); - } catch (error) { - this.logger.error(`Error setting assignees: ${error}`); - } + }).catch(error => this.logger.error(`Error setting assignees: ${error}`)) + ); } + await Promise.all(promises); + return data.html_url; } diff --git a/src/service/git/gitlab/gitlab-client.ts b/src/service/git/gitlab/gitlab-client.ts index af091ba..3607c45 100644 --- a/src/service/git/gitlab/gitlab-client.ts +++ b/src/service/git/gitlab/gitlab-client.ts @@ -84,65 +84,60 @@ export default class GitLabClient implements GitClient { }); const mr = data as MergeRequestSchema; + const promises = []; // labels if (backport.labels.length > 0) { - try { - this.logger.info("Setting labels: " + backport.labels); - await this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { + this.logger.info("Setting labels: " + backport.labels); + promises.push( + this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { labels: backport.labels.join(","), - }); - } catch(error) { - this.logger.warn("Failure trying to update labels. " + error); - } + }).catch(error => this.logger.warn("Failure trying to update labels. " + error)) + ); } // reviewers - const reviewerIds: number[] = []; - for(const r of backport.reviewers) { - try { - this.logger.debug("Retrieving user: " + r); - const user = await this.getUser(r); - reviewerIds.push(user.id); - } catch(error) { - this.logger.warn(`Failed to retrieve reviewer ${r}`); - } - } + const reviewerIds = await Promise.all(backport.reviewers.map(async r => { + this.logger.debug("Retrieving user: " + r); + return this.getUser(r).then(user => user.id).catch( + () => { + this.logger.warn(`Failed to retrieve reviewer ${r}`); + return undefined; + } + ); + })); if (reviewerIds.length > 0) { - try { - this.logger.info("Setting reviewers: " + reviewerIds); - await this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { + this.logger.info("Setting reviewers: " + reviewerIds); + promises.push( + this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { reviewer_ids: reviewerIds.filter(r => r !== undefined), - }); - } catch(error) { - this.logger.warn("Failure trying to update reviewers. " + error); - } + }).catch(error => this.logger.warn("Failure trying to update reviewers. " + error)) + ); } // assignees - const assigneeIds: number[] = []; - for(const a of backport.assignees) { - try { - this.logger.debug("Retrieving user: " + a); - const user = await this.getUser(a); - assigneeIds.push(user.id); - } catch(error) { - this.logger.warn(`Failed to retrieve assignee ${a}`); - } - } + const assigneeIds = await Promise.all(backport.assignees.map(async a => { + this.logger.debug("Retrieving user: " + a); + return this.getUser(a).then(user => user.id).catch( + () => { + this.logger.warn(`Failed to retrieve assignee ${a}`); + return undefined; + } + ); + })); if (assigneeIds.length > 0) { - try { - this.logger.info("Setting assignees: " + assigneeIds); - await this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { + this.logger.info("Setting assignees: " + assigneeIds); + promises.push( + this.client.put(`/projects/${projectId}/merge_requests/${mr.iid}`, { assignee_ids: assigneeIds.filter(a => a !== undefined), - }); - } catch(error) { - this.logger.warn("Failure trying to update assignees. " + error); - } + }).catch(error => this.logger.warn("Failure trying to update assignees. " + error)) + ); } + await Promise.all(promises); + return mr.web_url; } diff --git a/test/service/runner/cli-gitlab-runner.test.ts b/test/service/runner/cli-gitlab-runner.test.ts index 7f9ea43..08a36b9 100644 --- a/test/service/runner/cli-gitlab-runner.test.ts +++ b/test/service/runner/cli-gitlab-runner.test.ts @@ -36,7 +36,7 @@ jest.mock("axios", () => { iid: 1, // FIXME: I am not testing this atm } }), - put: jest.fn(), + put: async () => undefined, }), }; }); diff --git a/test/service/runner/gha-gitlab-runner.test.ts b/test/service/runner/gha-gitlab-runner.test.ts index 6f766c3..113b5a4 100644 --- a/test/service/runner/gha-gitlab-runner.test.ts +++ b/test/service/runner/gha-gitlab-runner.test.ts @@ -36,7 +36,7 @@ jest.mock("axios", () => { iid: 1, // FIXME: I am not testing this atm } }), - put: jest.fn(), + put: async () => undefined, // make it async so that .catch doesn't throw an error }), }; }); diff --git a/test/support/mock/git-client-mock-support.ts b/test/support/mock/git-client-mock-support.ts index 040429d..6a3b4a8 100644 --- a/test/support/mock/git-client-mock-support.ts +++ b/test/support/mock/git-client-mock-support.ts @@ -59,7 +59,7 @@ export const postAxiosMocked = (_url: string, data?: {source_branch: string,}) = }; }; -export const putAxiosMocked = (url: string, _data?: unknown) => { +export const putAxiosMocked = async (url: string, _data?: unknown) => { const responseData = undefined; // gitlab