mirror of
https://code.forgejo.org/actions/git-backporting.git
synced 2025-02-23 02:55:43 -05:00
perf: use concurrent promises instead of awaiting them one by one (#59)
This commit is contained in:
parent
8c010b43e4
commit
49a7350406
7 changed files with 147 additions and 222 deletions
94
dist/cli/index.js
vendored
94
dist/cli/index.js
vendored
|
@ -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({
|
||||
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}`);
|
||||
}
|
||||
}).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.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.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;
|
||||
}
|
||||
// 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}`, {
|
||||
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 = [];
|
||||
for (const r of backport.reviewers) {
|
||||
try {
|
||||
const reviewerIds = await Promise.all(backport.reviewers.map(async (r) => {
|
||||
this.logger.debug("Retrieving user: " + r);
|
||||
const user = await this.getUser(r);
|
||||
reviewerIds.push(user.id);
|
||||
}
|
||||
catch (error) {
|
||||
return this.getUser(r).then(user => user.id).catch(() => {
|
||||
this.logger.warn(`Failed to retrieve reviewer ${r}`);
|
||||
}
|
||||
}
|
||||
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),
|
||||
return undefined;
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
this.logger.warn("Failure trying to update reviewers. " + error);
|
||||
}
|
||||
}));
|
||||
if (reviewerIds.length > 0) {
|
||||
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 {
|
||||
const assigneeIds = await Promise.all(backport.assignees.map(async (a) => {
|
||||
this.logger.debug("Retrieving user: " + a);
|
||||
const user = await this.getUser(a);
|
||||
assigneeIds.push(user.id);
|
||||
}
|
||||
catch (error) {
|
||||
return this.getUser(a).then(user => user.id).catch(() => {
|
||||
this.logger.warn(`Failed to retrieve assignee ${a}`);
|
||||
}
|
||||
}
|
||||
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),
|
||||
return undefined;
|
||||
});
|
||||
}));
|
||||
if (assigneeIds.length > 0) {
|
||||
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;
|
||||
}
|
||||
/**
|
||||
|
|
94
dist/gha/index.js
vendored
94
dist/gha/index.js
vendored
|
@ -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({
|
||||
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}`);
|
||||
}
|
||||
}).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.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.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;
|
||||
}
|
||||
// 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}`, {
|
||||
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 = [];
|
||||
for (const r of backport.reviewers) {
|
||||
try {
|
||||
const reviewerIds = await Promise.all(backport.reviewers.map(async (r) => {
|
||||
this.logger.debug("Retrieving user: " + r);
|
||||
const user = await this.getUser(r);
|
||||
reviewerIds.push(user.id);
|
||||
}
|
||||
catch (error) {
|
||||
return this.getUser(r).then(user => user.id).catch(() => {
|
||||
this.logger.warn(`Failed to retrieve reviewer ${r}`);
|
||||
}
|
||||
}
|
||||
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),
|
||||
return undefined;
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
this.logger.warn("Failure trying to update reviewers. " + error);
|
||||
}
|
||||
}));
|
||||
if (reviewerIds.length > 0) {
|
||||
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 {
|
||||
const assigneeIds = await Promise.all(backport.assignees.map(async (a) => {
|
||||
this.logger.debug("Retrieving user: " + a);
|
||||
const user = await this.getUser(a);
|
||||
assigneeIds.push(user.id);
|
||||
}
|
||||
catch (error) {
|
||||
return this.getUser(a).then(user => user.id).catch(() => {
|
||||
this.logger.warn(`Failed to retrieve assignee ${a}`);
|
||||
}
|
||||
}
|
||||
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),
|
||||
return undefined;
|
||||
});
|
||||
}));
|
||||
if (assigneeIds.length > 0) {
|
||||
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;
|
||||
}
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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}`, {
|
||||
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 {
|
||||
const reviewerIds = await Promise.all(backport.reviewers.map(async r => {
|
||||
this.logger.debug("Retrieving user: " + r);
|
||||
const user = await this.getUser(r);
|
||||
reviewerIds.push(user.id);
|
||||
} catch(error) {
|
||||
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}`, {
|
||||
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 {
|
||||
const assigneeIds = await Promise.all(backport.assignees.map(async a => {
|
||||
this.logger.debug("Retrieving user: " + a);
|
||||
const user = await this.getUser(a);
|
||||
assigneeIds.push(user.id);
|
||||
} catch(error) {
|
||||
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}`, {
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ jest.mock("axios", () => {
|
|||
iid: 1, // FIXME: I am not testing this atm
|
||||
}
|
||||
}),
|
||||
put: jest.fn(),
|
||||
put: async () => undefined,
|
||||
}),
|
||||
};
|
||||
});
|
||||
|
|
|
@ -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
|
||||
}),
|
||||
};
|
||||
});
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue