feat(issue-41): set and inherit labels (#48)

fix https://github.com/kiegroup/git-backporting/issues/41
This commit is contained in:
Andrea Lamparelli 2023-07-10 08:49:11 +02:00 committed by GitHub
parent f923f7f4c2
commit fcc01673f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
28 changed files with 962 additions and 140 deletions

View file

@ -10,6 +10,7 @@ export interface GitPullRequest {
body: string,
reviewers: string[],
assignees: string[],
labels: string[],
targetRepo: GitRepository,
sourceRepo: GitRepository,
nCommits?: number, // number of commits in the pr
@ -32,6 +33,7 @@ export interface BackportPullRequest {
body: string, // pr body
reviewers: string[], // pr list of reviewers
assignees: string[], // pr list of assignees
labels: string[], // pr list of assigned labels
branchName?: string,
}

View file

@ -59,13 +59,26 @@ export default class GitHubClient implements GitClient {
head: backport.head,
base: backport.base,
title: backport.title,
body: backport.body
body: backport.body,
});
if (!data) {
throw new Error("Pull request creation failed");
}
if (backport.labels.length > 0) {
try {
await 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}`);
}
}
if (backport.reviewers.length > 0) {
try {
await this.octokit.pulls.requestReviewers({

View file

@ -26,6 +26,7 @@ export default class GitHubMapper implements GitResponseMapper<PullRequest, "ope
mergedBy: pr.merged_by?.login,
reviewers: pr.requested_reviewers.filter(r => "login" in r).map((r => (r as User)?.login)),
assignees: pr.assignees.filter(r => "login" in r).map(r => r.login),
labels: pr.labels.map(l => l.name),
sourceRepo: await this.mapSourceRepo(pr),
targetRepo: await this.mapTargetRepo(pr),
nCommits: pr.commits,

View file

@ -72,6 +72,18 @@ export default class GitLabClient implements GitClient {
const mr = data as MergeRequestSchema;
// 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);
}
}
// reviewers
const reviewerIds: number[] = [];
for(const r of backport.reviewers) {

View file

@ -25,7 +25,6 @@ export default class GitLabMapper implements GitResponseMapper<MergeRequestSchem
}
async mapPullRequest(mr: MergeRequestSchema): Promise<GitPullRequest> {
// throw new Error("Method not implemented.");
return {
number: mr.iid,
author: mr.author.username,
@ -38,6 +37,7 @@ export default class GitLabMapper implements GitResponseMapper<MergeRequestSchem
mergedBy: mr.merged_by?.username,
reviewers: mr.reviewers?.map((r => r.username)) ?? [],
assignees: mr.assignees?.map((r => r.username)) ?? [],
labels: mr.labels ?? [],
sourceRepo: await this.mapSourceRepo(mr),
targetRepo: await this.mapTargetRepo(mr),
nCommits: 1, // info not present on mr