From 10a46551ee6855bec529aa45b494c1d5058235a1 Mon Sep 17 00:00:00 2001 From: Andrea Lamparelli Date: Thu, 27 Jul 2023 11:26:39 +0200 Subject: [PATCH] refactor: move backport data generation to configs parser --- dist/cli/index.js | 48 +++--- dist/gha/index.js | 48 +++--- src/service/configs/configs.types.ts | 4 +- .../configs/pullrequest/pr-configs-parser.ts | 25 ++- src/service/git/git-client.ts | 1 + src/service/git/git.types.ts | 7 +- src/service/git/gitlab/gitlab-client.ts | 1 - src/service/runner/runner.ts | 33 +--- .../github-pr-configs-parser.test.ts | 155 +++++------------- .../gitlab-pr-configs-parser.test.ts | 145 ++++++---------- test/service/git/gitlab/gitlab-client.test.ts | 41 +++++ test/service/runner/cli-github-runner.test.ts | 14 +- test/service/runner/cli-gitlab-runner.test.ts | 8 + test/service/runner/gha-github-runner.test.ts | 10 ++ test/service/runner/gha-gitlab-runner.test.ts | 8 + 15 files changed, 238 insertions(+), 310 deletions(-) diff --git a/dist/cli/index.js b/dist/cli/index.js index b39241d..4d4cb2b 100755 --- a/dist/cli/index.js +++ b/dist/cli/index.js @@ -336,16 +336,27 @@ class PullRequestConfigsParser extends configs_parser_1.default { if (args.inheritLabels) { labels.push(...originalPullRequest.labels); } + let backportBranch = args.bpBranchName; + if (backportBranch === undefined || backportBranch.trim() === "") { + // for each commit takes the first 7 chars that are enough to uniquely identify them in most of the projects + const concatenatedCommits = originalPullRequest.commits.map(c => c.slice(0, 7)).join("-"); + backportBranch = `bp-${args.targetBranch}-${concatenatedCommits}`; + } + if (backportBranch.length > 250) { + this.logger.warn(`Backport branch (length=${backportBranch.length}) exceeded the max length of 250 chars, branch name truncated!`); + backportBranch = backportBranch.slice(0, 250); + } return { - author: args.gitUser ?? this.gitClient.getDefaultGitUser(), + owner: originalPullRequest.targetRepo.owner, + repo: originalPullRequest.targetRepo.project, + head: backportBranch, + base: args.targetBranch, title: args.title ?? `[${args.targetBranch}] ${originalPullRequest.title}`, body: `${bodyPrefix}${body}`, reviewers: [...new Set(reviewers)], assignees: [...new Set(args.assignees)], labels: [...new Set(labels)], - targetRepo: originalPullRequest.targetRepo, - sourceRepo: originalPullRequest.targetRepo, - branchName: args.bpBranchName, + comments: [], // TODO fix comments }; } } @@ -1211,17 +1222,7 @@ class Runner { await git.clone(configs.originalPullRequest.targetRepo.cloneUrl, configs.folder, configs.targetBranch); // 5. create new branch from target one and checkout this.logger.debug("Creating local branch.."); - let backportBranch = backportPR.branchName; - if (backportBranch === undefined || backportBranch.trim() === "") { - // for each commit takes the first 7 chars that are enough to uniquely identify them in most of the projects - const concatenatedCommits = originalPR.commits.map(c => c.slice(0, 7)).join("-"); - backportBranch = `bp-${configs.targetBranch}-${concatenatedCommits}`; - } - if (backportBranch.length > 250) { - this.logger.warn(`Backport branch (length=${backportBranch.length}) exceeded the max length of 250 chars, branch name truncated!`); - backportBranch = backportBranch.slice(0, 250); - } - await git.createLocalBranch(configs.folder, backportBranch); + await git.createLocalBranch(configs.folder, backportPR.head); // 6. fetch pull request remote if source owner != target owner or pull request still open if (configs.originalPullRequest.sourceRepo.owner !== configs.originalPullRequest.targetRepo.owner || configs.originalPullRequest.state === "open") { @@ -1234,27 +1235,16 @@ class Runner { for (const sha of originalPR.commits) { await git.cherryPick(configs.folder, sha, configs.mergeStrategy, configs.mergeStrategyOption); } - const backport = { - owner: originalPR.targetRepo.owner, - repo: originalPR.targetRepo.project, - head: backportBranch, - base: configs.targetBranch, - title: backportPR.title, - body: backportPR.body, - reviewers: backportPR.reviewers, - assignees: backportPR.assignees, - labels: backportPR.labels, - }; if (!configs.dryRun) { // 8. push the new branch to origin - await git.push(configs.folder, backportBranch); + await git.push(configs.folder, backportPR.head); // 9. create pull request new branch -> target branch (using octokit) - const prUrl = await gitApi.createPullRequest(backport); + const prUrl = await gitApi.createPullRequest(backportPR); this.logger.info(`Pull request created: ${prUrl}`); } else { this.logger.warn("Pull request creation and remote push skipped"); - this.logger.info(`${JSON.stringify(backport, null, 2)}`); + this.logger.info(`${JSON.stringify(backportPR, null, 2)}`); } } } diff --git a/dist/gha/index.js b/dist/gha/index.js index cf28269..c89d340 100755 --- a/dist/gha/index.js +++ b/dist/gha/index.js @@ -307,16 +307,27 @@ class PullRequestConfigsParser extends configs_parser_1.default { if (args.inheritLabels) { labels.push(...originalPullRequest.labels); } + let backportBranch = args.bpBranchName; + if (backportBranch === undefined || backportBranch.trim() === "") { + // for each commit takes the first 7 chars that are enough to uniquely identify them in most of the projects + const concatenatedCommits = originalPullRequest.commits.map(c => c.slice(0, 7)).join("-"); + backportBranch = `bp-${args.targetBranch}-${concatenatedCommits}`; + } + if (backportBranch.length > 250) { + this.logger.warn(`Backport branch (length=${backportBranch.length}) exceeded the max length of 250 chars, branch name truncated!`); + backportBranch = backportBranch.slice(0, 250); + } return { - author: args.gitUser ?? this.gitClient.getDefaultGitUser(), + owner: originalPullRequest.targetRepo.owner, + repo: originalPullRequest.targetRepo.project, + head: backportBranch, + base: args.targetBranch, title: args.title ?? `[${args.targetBranch}] ${originalPullRequest.title}`, body: `${bodyPrefix}${body}`, reviewers: [...new Set(reviewers)], assignees: [...new Set(args.assignees)], labels: [...new Set(labels)], - targetRepo: originalPullRequest.targetRepo, - sourceRepo: originalPullRequest.targetRepo, - branchName: args.bpBranchName, + comments: [], // TODO fix comments }; } } @@ -1182,17 +1193,7 @@ class Runner { await git.clone(configs.originalPullRequest.targetRepo.cloneUrl, configs.folder, configs.targetBranch); // 5. create new branch from target one and checkout this.logger.debug("Creating local branch.."); - let backportBranch = backportPR.branchName; - if (backportBranch === undefined || backportBranch.trim() === "") { - // for each commit takes the first 7 chars that are enough to uniquely identify them in most of the projects - const concatenatedCommits = originalPR.commits.map(c => c.slice(0, 7)).join("-"); - backportBranch = `bp-${configs.targetBranch}-${concatenatedCommits}`; - } - if (backportBranch.length > 250) { - this.logger.warn(`Backport branch (length=${backportBranch.length}) exceeded the max length of 250 chars, branch name truncated!`); - backportBranch = backportBranch.slice(0, 250); - } - await git.createLocalBranch(configs.folder, backportBranch); + await git.createLocalBranch(configs.folder, backportPR.head); // 6. fetch pull request remote if source owner != target owner or pull request still open if (configs.originalPullRequest.sourceRepo.owner !== configs.originalPullRequest.targetRepo.owner || configs.originalPullRequest.state === "open") { @@ -1205,27 +1206,16 @@ class Runner { for (const sha of originalPR.commits) { await git.cherryPick(configs.folder, sha, configs.mergeStrategy, configs.mergeStrategyOption); } - const backport = { - owner: originalPR.targetRepo.owner, - repo: originalPR.targetRepo.project, - head: backportBranch, - base: configs.targetBranch, - title: backportPR.title, - body: backportPR.body, - reviewers: backportPR.reviewers, - assignees: backportPR.assignees, - labels: backportPR.labels, - }; if (!configs.dryRun) { // 8. push the new branch to origin - await git.push(configs.folder, backportBranch); + await git.push(configs.folder, backportPR.head); // 9. create pull request new branch -> target branch (using octokit) - const prUrl = await gitApi.createPullRequest(backport); + const prUrl = await gitApi.createPullRequest(backportPR); this.logger.info(`Pull request created: ${prUrl}`); } else { this.logger.warn("Pull request creation and remote push skipped"); - this.logger.info(`${JSON.stringify(backport, null, 2)}`); + this.logger.info(`${JSON.stringify(backportPR, null, 2)}`); } } } diff --git a/src/service/configs/configs.types.ts b/src/service/configs/configs.types.ts index 0f82cfc..be46157 100644 --- a/src/service/configs/configs.types.ts +++ b/src/service/configs/configs.types.ts @@ -1,6 +1,6 @@ -import { GitPullRequest } from "@bp/service/git/git.types"; +import { BackportPullRequest, GitPullRequest } from "@bp/service/git/git.types"; export interface LocalGit { user: string, // local git user @@ -19,6 +19,6 @@ export interface Configs { mergeStrategy?: string, // cherry-pick merge strategy mergeStrategyOption?: string, // cherry-pick merge strategy option originalPullRequest: GitPullRequest, - backportPullRequest: GitPullRequest, + backportPullRequest: BackportPullRequest, } diff --git a/src/service/configs/pullrequest/pr-configs-parser.ts b/src/service/configs/pullrequest/pr-configs-parser.ts index d83d9cd..4eb1111 100644 --- a/src/service/configs/pullrequest/pr-configs-parser.ts +++ b/src/service/configs/pullrequest/pr-configs-parser.ts @@ -3,7 +3,7 @@ import ConfigsParser from "@bp/service/configs/configs-parser"; import { Configs } from "@bp/service/configs/configs.types"; import GitClient from "@bp/service/git/git-client"; import GitClientFactory from "@bp/service/git/git-client-factory"; -import { GitPullRequest } from "@bp/service/git/git.types"; +import { BackportPullRequest, GitPullRequest } from "@bp/service/git/git.types"; export default class PullRequestConfigsParser extends ConfigsParser { @@ -52,7 +52,7 @@ export default class PullRequestConfigsParser extends ConfigsParser { * @param targetBranch target branch where the backport should be applied * @returns {GitPullRequest} */ - private getDefaultBackportPullRequest(originalPullRequest: GitPullRequest, args: Args): GitPullRequest { + private getDefaultBackportPullRequest(originalPullRequest: GitPullRequest, args: Args): BackportPullRequest { const reviewers = args.reviewers ?? []; if (reviewers.length == 0 && args.inheritReviewers) { // inherit only if args.reviewers is empty and args.inheritReviewers set to true @@ -70,16 +70,29 @@ export default class PullRequestConfigsParser extends ConfigsParser { labels.push(...originalPullRequest.labels); } + let backportBranch = args.bpBranchName; + if (backportBranch === undefined || backportBranch.trim() === "") { + // for each commit takes the first 7 chars that are enough to uniquely identify them in most of the projects + const concatenatedCommits: string = originalPullRequest.commits!.map(c => c.slice(0, 7)).join("-"); + backportBranch = `bp-${args.targetBranch}-${concatenatedCommits}`; + } + + if (backportBranch.length > 250) { + this.logger.warn(`Backport branch (length=${backportBranch.length}) exceeded the max length of 250 chars, branch name truncated!`); + backportBranch = backportBranch.slice(0, 250); + } + return { - author: args.gitUser ?? this.gitClient.getDefaultGitUser(), + owner: originalPullRequest.targetRepo.owner, + repo: originalPullRequest.targetRepo.project, + head: backportBranch, + base: args.targetBranch, title: args.title ?? `[${args.targetBranch}] ${originalPullRequest.title}`, body: `${bodyPrefix}${body}`, reviewers: [...new Set(reviewers)], assignees: [...new Set(args.assignees)], labels: [...new Set(labels)], - targetRepo: originalPullRequest.targetRepo, - sourceRepo: originalPullRequest.targetRepo, - branchName: args.bpBranchName, + comments: [], // TODO fix comments }; } } \ No newline at end of file diff --git a/src/service/git/git-client.ts b/src/service/git/git-client.ts index b14f603..7b98c1b 100644 --- a/src/service/git/git-client.ts +++ b/src/service/git/git-client.ts @@ -38,4 +38,5 @@ import { BackportPullRequest, GitPullRequest } from "@bp/service/git/git.types"; * @returns {Promise} the pull request url */ createPullRequest(backport: BackportPullRequest): Promise; + } \ No newline at end of file diff --git a/src/service/git/git.types.ts b/src/service/git/git.types.ts index 4ca5405..6370eee 100644 --- a/src/service/git/git.types.ts +++ b/src/service/git/git.types.ts @@ -13,8 +13,8 @@ export interface GitPullRequest { labels: string[], targetRepo: GitRepository, sourceRepo: GitRepository, - nCommits?: number, // number of commits in the pr - commits?: string[], // merge commit or last one + nCommits: number, // number of commits in the pr + commits: string[], // merge commit or last one branchName?: string, } @@ -34,7 +34,8 @@ export interface BackportPullRequest { reviewers: string[], // pr list of reviewers assignees: string[], // pr list of assignees labels: string[], // pr list of assigned labels - branchName?: string, + comments: string[], // pr list of additional comments + // branchName?: string, } export enum GitClientType { diff --git a/src/service/git/gitlab/gitlab-client.ts b/src/service/git/gitlab/gitlab-client.ts index 725eacb..af4c626 100644 --- a/src/service/git/gitlab/gitlab-client.ts +++ b/src/service/git/gitlab/gitlab-client.ts @@ -141,7 +141,6 @@ export default class GitLabClient implements GitClient { return mr.web_url; } - /** * Retrieve a gitlab user given its username * @param username diff --git a/src/service/runner/runner.ts b/src/service/runner/runner.ts index 2ad5364..e5d0db0 100644 --- a/src/service/runner/runner.ts +++ b/src/service/runner/runner.ts @@ -63,7 +63,7 @@ export default class Runner { this.logger.debug("Parsing configs.."); const configs: Configs = await new PullRequestConfigsParser().parseAndValidate(args); const originalPR: GitPullRequest = configs.originalPullRequest; - const backportPR: GitPullRequest = configs.backportPullRequest; + const backportPR: BackportPullRequest = configs.backportPullRequest; // start local git operations const git: GitCLIService = new GitCLIService(configs.auth, configs.git); @@ -74,19 +74,8 @@ export default class Runner { // 5. create new branch from target one and checkout this.logger.debug("Creating local branch.."); - let backportBranch = backportPR.branchName; - if (backportBranch === undefined || backportBranch.trim() === "") { - // for each commit takes the first 7 chars that are enough to uniquely identify them in most of the projects - const concatenatedCommits: string = originalPR.commits!.map(c => c.slice(0, 7)).join("-"); - backportBranch = `bp-${configs.targetBranch}-${concatenatedCommits}`; - } - if (backportBranch.length > 250) { - this.logger.warn(`Backport branch (length=${backportBranch.length}) exceeded the max length of 250 chars, branch name truncated!`); - backportBranch = backportBranch.slice(0, 250); - } - - await git.createLocalBranch(configs.folder, backportBranch); + await git.createLocalBranch(configs.folder, backportPR.head); // 6. fetch pull request remote if source owner != target owner or pull request still open if (configs.originalPullRequest.sourceRepo.owner !== configs.originalPullRequest.targetRepo.owner || @@ -102,29 +91,17 @@ export default class Runner { await git.cherryPick(configs.folder, sha, configs.mergeStrategy, configs.mergeStrategyOption); } - const backport: BackportPullRequest = { - owner: originalPR.targetRepo.owner, - repo: originalPR.targetRepo.project, - head: backportBranch, - base: configs.targetBranch, - title: backportPR.title, - body: backportPR.body, - reviewers: backportPR.reviewers, - assignees: backportPR.assignees, - labels: backportPR.labels, - }; - if (!configs.dryRun) { // 8. push the new branch to origin - await git.push(configs.folder, backportBranch); + await git.push(configs.folder, backportPR.head); // 9. create pull request new branch -> target branch (using octokit) - const prUrl = await gitApi.createPullRequest(backport); + const prUrl = await gitApi.createPullRequest(backportPR); this.logger.info(`Pull request created: ${prUrl}`); } else { this.logger.warn("Pull request creation and remote push skipped"); - this.logger.info(`${JSON.stringify(backport, null, 2)}`); + this.logger.info(`${JSON.stringify(backportPR, null, 2)}`); } } diff --git a/test/service/configs/pullrequest/github-pr-configs-parser.test.ts b/test/service/configs/pullrequest/github-pr-configs-parser.test.ts index 950c01f..ce432b9 100644 --- a/test/service/configs/pullrequest/github-pr-configs-parser.test.ts +++ b/test/service/configs/pullrequest/github-pr-configs-parser.test.ts @@ -129,25 +129,16 @@ describe("github pull request config parser", () => { commits: ["28f63db774185f4ec4b57cd9aaeb12dbfb4c9ecc"] }); expect(configs.backportPullRequest).toEqual({ - author: "GitHub", - url: undefined, - htmlUrl: undefined, - title: "[prod] PR Title", + owner: "owner", + repo: "reponame", + head: "bp-prod-28f63db", + base: "prod", + title: "[prod] PR Title", body: "**Backport:** https://github.com/owner/reponame/pull/2368\r\n\r\nPlease review and merge", reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], - targetRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - sourceRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -264,6 +255,7 @@ describe("github pull request config parser", () => { reviewers: [], assignees: [], inheritReviewers: true, + bpBranchName: "custom-branch" }; const configs: Configs = await configParser.parseAndValidate(args); @@ -309,25 +301,16 @@ describe("github pull request config parser", () => { commits: ["28f63db774185f4ec4b57cd9aaeb12dbfb4c9ecc"], }); expect(configs.backportPullRequest).toEqual({ - author: "Me", - url: undefined, - htmlUrl: undefined, + owner: "owner", + repo: "reponame", + head: "custom-branch", + base: "prod", title: "New Title", body: "New Body Prefix -New Body", reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], - targetRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - sourceRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -390,25 +373,16 @@ describe("github pull request config parser", () => { commits: ["28f63db774185f4ec4b57cd9aaeb12dbfb4c9ecc"], }); expect(configs.backportPullRequest).toEqual({ - author: "Me", - url: undefined, - htmlUrl: undefined, + owner: "owner", + repo: "reponame", + head: "bp-prod-28f63db", + base: "prod", title: "New Title", body: "New Body Prefix -New Body", reviewers: ["user1", "user2"], assignees: ["user3", "user4"], labels: [], - targetRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - sourceRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -471,25 +445,16 @@ describe("github pull request config parser", () => { commits: ["28f63db774185f4ec4b57cd9aaeb12dbfb4c9ecc"], }); expect(configs.backportPullRequest).toEqual({ - author: "Me", - url: undefined, - htmlUrl: undefined, + owner: "owner", + repo: "reponame", + head: "bp-prod-28f63db", + base: "prod", title: "New Title", body: "New Body Prefix -New Body", reviewers: [], assignees: ["user3", "user4"], labels: [], - targetRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - sourceRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -554,25 +519,16 @@ describe("github pull request config parser", () => { commits: ["28f63db774185f4ec4b57cd9aaeb12dbfb4c9ecc"], }); expect(configs.backportPullRequest).toEqual({ - author: "Me", - url: undefined, - htmlUrl: undefined, + owner: "owner", + repo: "reponame", + head: "bp-prod-28f63db", + base: "prod", title: "New Title", body: "New Body Prefix -New Body", reviewers: [], assignees: ["user3", "user4"], labels: ["custom-label", "original-label"], - targetRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - sourceRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -625,25 +581,16 @@ describe("github pull request config parser", () => { commits: ["28f63db774185f4ec4b57cd9aaeb12dbfb4c9ecc"] }); expect(configs.backportPullRequest).toEqual({ - author: "GitHub", - url: undefined, - htmlUrl: undefined, + owner: "owner", + repo: "reponame", + head: "bp-prod-28f63db", + base: "prod", title: "[prod] PR Title", body: "**Backport:** https://github.com/owner/reponame/pull/2368\r\n\r\nPlease review and merge", reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], - targetRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - sourceRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -697,25 +644,16 @@ describe("github pull request config parser", () => { commits: ["28f63db774185f4ec4b57cd9aaeb12dbfb4c9ecc"], }); expect(configs.backportPullRequest).toEqual({ - author: "Me", - url: undefined, - htmlUrl: undefined, + owner: "owner", + repo: "reponame", + head: "bp-prod-28f63db", + base: "prod", title: "New Title", body: "New Body Prefix -New Body", reviewers: ["user1", "user2"], assignees: ["user3", "user4"], labels: ["cherry-pick :cherries:", "original-label"], - targetRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - sourceRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -775,25 +713,16 @@ describe("github pull request config parser", () => { commits: ["0404fb922ab75c3a8aecad5c97d9af388df04695", "11da4e38aa3e577ffde6d546f1c52e53b04d3151"] }); expect(configs.backportPullRequest).toEqual({ - author: "GitHub", - url: undefined, - htmlUrl: undefined, + owner: "owner", + repo: "reponame", + head: "bp-prod-0404fb9-11da4e3", + base: "prod", title: "[prod] PR Title", body: "**Backport:** https://github.com/owner/reponame/pull/8632\r\n\r\nPlease review and merge", reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], - targetRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - sourceRepo: { - owner: "owner", - project: "reponame", - cloneUrl: "https://github.com/owner/reponame.git" - }, - bpBranchName: undefined, + comments: [], }); }); }); \ No newline at end of file diff --git a/test/service/configs/pullrequest/gitlab-pr-configs-parser.test.ts b/test/service/configs/pullrequest/gitlab-pr-configs-parser.test.ts index 8e10d17..8eb269b 100644 --- a/test/service/configs/pullrequest/gitlab-pr-configs-parser.test.ts +++ b/test/service/configs/pullrequest/gitlab-pr-configs-parser.test.ts @@ -129,25 +129,16 @@ describe("gitlab merge request config parser", () => { commits: ["ebb1eca696c42fd067658bd9b5267709f78ef38e"] }); expect(configs.backportPullRequest).toEqual({ - author: "Gitlab", - url: undefined, - htmlUrl: undefined, + owner: "superuser", + repo: "backporting-example", + head: "bp-prod-ebb1eca", + base: "prod", title: "[prod] Update test.txt", body: "**Backport:** https://my.gitlab.host.com/superuser/backporting-example/-/merge_requests/1\r\n\r\nThis is the body", reviewers: ["superuser"], assignees: [], labels: [], - targetRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - sourceRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -314,25 +305,16 @@ describe("gitlab merge request config parser", () => { commits: ["ebb1eca696c42fd067658bd9b5267709f78ef38e"] }); expect(configs.backportPullRequest).toEqual({ - author: "Me", - url: undefined, - htmlUrl: undefined, + owner: "superuser", + repo: "backporting-example", + head: "bp-prod-ebb1eca", + base: "prod", title: "New Title", body: "New Body Prefix -New Body", reviewers: ["superuser"], assignees: [], labels: [], - targetRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - sourceRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -394,25 +376,16 @@ describe("gitlab merge request config parser", () => { commits: ["ebb1eca696c42fd067658bd9b5267709f78ef38e"] }); expect(configs.backportPullRequest).toEqual({ - author: "Me", - url: undefined, - htmlUrl: undefined, + owner: "superuser", + repo: "backporting-example", + head: "bp-prod-ebb1eca", + base: "prod", title: "New Title", body: "New Body Prefix -New Body", reviewers: ["user1", "user2"], assignees: ["user3", "user4"], labels: [], - targetRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - sourceRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -474,25 +447,16 @@ describe("gitlab merge request config parser", () => { commits: ["ebb1eca696c42fd067658bd9b5267709f78ef38e"] }); expect(configs.backportPullRequest).toEqual({ - author: "Me", - url: undefined, - htmlUrl: undefined, + owner: "superuser", + repo: "backporting-example", + head: "bp-prod-ebb1eca", + base: "prod", title: "New Title", body: "New Body Prefix -New Body", reviewers: [], assignees: ["user3", "user4"], labels: [], - targetRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - sourceRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -556,25 +520,16 @@ describe("gitlab merge request config parser", () => { commits: ["ebb1eca696c42fd067658bd9b5267709f78ef38e"] }); expect(configs.backportPullRequest).toEqual({ - author: "Me", - url: undefined, - htmlUrl: undefined, + owner: "superuser", + repo: "backporting-example", + head: "bp-prod-ebb1eca", + base: "prod", title: "New Title", body: "New Body Prefix -New Body", reviewers: [], assignees: ["user3", "user4"], labels: ["custom-label", "gitlab-original-label"], - targetRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - sourceRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -626,25 +581,16 @@ describe("gitlab merge request config parser", () => { commits: ["ebb1eca696c42fd067658bd9b5267709f78ef38e"] }); expect(configs.backportPullRequest).toEqual({ - author: "Gitlab", - url: undefined, - htmlUrl: undefined, + owner: "superuser", + repo: "backporting-example", + head: "bp-prod-ebb1eca", + base: "prod", title: "[prod] Update test.txt", body: "**Backport:** https://my.gitlab.host.com/superuser/backporting-example/-/merge_requests/1\r\n\r\nThis is the body", reviewers: ["superuser"], assignees: [], labels: [], - targetRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - sourceRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -696,25 +642,16 @@ describe("gitlab merge request config parser", () => { commits: ["ebb1eca696c42fd067658bd9b5267709f78ef38e"] }); expect(configs.backportPullRequest).toEqual({ - author: "Me", - url: undefined, - htmlUrl: undefined, + owner: "superuser", + repo: "backporting-example", + head: "bp-prod-ebb1eca", + base: "prod", title: "New Title", body: "New Body Prefix -New Body", reviewers: [], assignees: ["user3", "user4"], labels: ["cherry-pick :cherries:", "gitlab-original-label"], - targetRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - sourceRepo: { - owner: "superuser", - project: "backporting-example", - cloneUrl: "https://my.gitlab.host.com/superuser/backporting-example.git" - }, - bpBranchName: undefined, + comments: [], }); }); @@ -773,5 +710,17 @@ describe("gitlab merge request config parser", () => { nCommits: 2, commits: ["e4dd336a4a20f394df6665994df382fb1d193a11", "974519f65c9e0ed65277cd71026657a09fca05e7"] }); + expect(configs.backportPullRequest).toEqual({ + owner: "superuser", + repo: "backporting-example", + head: "bp-prod-e4dd336-974519f", + base: "prod", + title: "[prod] Update test.txt opened", + body: "**Backport:** https://my.gitlab.host.com/superuser/backporting-example/-/merge_requests/2\r\n\r\nStill opened mr body", + reviewers: ["superuser"], + assignees: [], + labels: [], + comments: [], + }); }); }); \ No newline at end of file diff --git a/test/service/git/gitlab/gitlab-client.test.ts b/test/service/git/gitlab/gitlab-client.test.ts index affe096..c4f4816 100644 --- a/test/service/git/gitlab/gitlab-client.test.ts +++ b/test/service/git/gitlab/gitlab-client.test.ts @@ -89,6 +89,7 @@ describe("github service", () => { reviewers: [], assignees: [], labels: [], + comments: [], }; const url: string = await gitClient.createPullRequest(backport); @@ -119,6 +120,7 @@ describe("github service", () => { reviewers: ["superuser", "invalid"], assignees: [], labels: [], + comments: [], }; const url: string = await gitClient.createPullRequest(backport); @@ -154,6 +156,7 @@ describe("github service", () => { reviewers: [], assignees: ["superuser", "invalid"], labels: [], + comments: [], }; const url: string = await gitClient.createPullRequest(backport); @@ -189,6 +192,7 @@ describe("github service", () => { reviewers: ["superuser", "invalid"], assignees: [], labels: [], + comments: [], }; const url: string = await gitClient.createPullRequest(backport); @@ -224,6 +228,7 @@ describe("github service", () => { reviewers: [], assignees: ["superuser", "invalid"], labels: [], + comments: [], }; const url: string = await gitClient.createPullRequest(backport); @@ -259,6 +264,7 @@ describe("github service", () => { reviewers: [], assignees: [], labels: ["label1", "label2"], + comments: [], }; const url: string = await gitClient.createPullRequest(backport); @@ -280,4 +286,39 @@ describe("github service", () => { labels: "label1,label2", }); }); + + test("create backport pull request with post comments", async () => { + const backport: BackportPullRequest = { + title: "Backport Title", + body: "Backport Body", + owner: "superuser", + repo: "backporting-example", + base: "old/branch", + head: "bp-branch-2", + reviewers: [], + assignees: [], + labels: [], + comments: ["this is first comment", "this is second comment"], + }; + + const url: string = await gitClient.createPullRequest(backport); + expect(url).toStrictEqual("https://my.gitlab.host.com/superuser/backporting-example/-/merge_requests/" + SECOND_NEW_GITLAB_MR_ID); + + // check axios invocation + expect(axiosInstanceSpy.post).toBeCalledTimes(1); + expect(axiosInstanceSpy.post).toBeCalledWith("/projects/superuser%2Fbackporting-example/merge_requests", expect.objectContaining({ + source_branch: "bp-branch-2", + target_branch: "old/branch", + title: "Backport Title", + description: "Backport Body", + reviewer_ids: [], + assignee_ids: [], + })); + expect(axiosInstanceSpy.get).toBeCalledTimes(0); + // FIXME + // expect(axiosInstanceSpy.put).toBeCalledTimes(1); // just comments + // expect(axiosInstanceSpy.put).toBeCalledWith("/projects/superuser%2Fbackporting-example/merge_requests/" + SECOND_NEW_GITLAB_MR_ID, { + // labels: "label1,label2", + // }); + }); }); \ No newline at end of file diff --git a/test/service/runner/cli-github-runner.test.ts b/test/service/runner/cli-github-runner.test.ts index f70d446..3aa82ef 100644 --- a/test/service/runner/cli-github-runner.test.ts +++ b/test/service/runner/cli-github-runner.test.ts @@ -233,6 +233,7 @@ describe("cli runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], + comments: [], } ); }); @@ -277,6 +278,7 @@ describe("cli runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], + comments: [], } ); }); @@ -333,6 +335,7 @@ describe("cli runner", () => { reviewers: ["gh-user"], assignees: [], labels: [], + comments: [], } ); }); @@ -390,6 +393,7 @@ describe("cli runner", () => { reviewers: ["user1", "user2"], assignees: ["user3", "user4"], labels: [], + comments: [], } ); }); @@ -446,6 +450,7 @@ describe("cli runner", () => { reviewers: [], assignees: ["user3", "user4"], labels: [], + comments: [], } ); }); @@ -494,11 +499,12 @@ describe("cli runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: ["cherry-pick :cherries:", "original-label"], + comments: [], } ); }); - test("set custom lables without inheritance", async () => { + test("set custom labels without inheritance", async () => { addProcessArgs([ "-tb", "target", @@ -541,6 +547,7 @@ describe("cli runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: ["first-label", "second-label"], + comments: [], } ); }); @@ -584,6 +591,7 @@ describe("cli runner", () => { reviewers: [], assignees: ["user3", "user4"], labels: ["cli github cherry pick :cherries:", "original-label"], + comments: [], } ); }); @@ -630,6 +638,7 @@ describe("cli runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], + comments: [], } ); }); @@ -676,6 +685,7 @@ describe("cli runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], + comments: [], } ); }); @@ -728,6 +738,7 @@ describe("cli runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], + comments: [], } ); }); @@ -778,6 +789,7 @@ describe("cli runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], + comments: [], } ); }); diff --git a/test/service/runner/cli-gitlab-runner.test.ts b/test/service/runner/cli-gitlab-runner.test.ts index c13be27..ab6f72b 100644 --- a/test/service/runner/cli-gitlab-runner.test.ts +++ b/test/service/runner/cli-gitlab-runner.test.ts @@ -181,6 +181,7 @@ describe("cli runner", () => { reviewers: ["superuser"], assignees: [], labels: [], + comments: [], } ); }); @@ -238,6 +239,7 @@ describe("cli runner", () => { reviewers: ["superuser"], assignees: [], labels: [], + comments: [], } ); }); @@ -296,6 +298,7 @@ describe("cli runner", () => { reviewers: ["user1", "user2"], assignees: ["user3", "user4"], labels: [], + comments: [], } ); }); @@ -352,6 +355,7 @@ describe("cli runner", () => { reviewers: [], assignees: ["user3", "user4"], labels: [], + comments: [], } ); }); @@ -401,6 +405,7 @@ describe("cli runner", () => { reviewers: ["superuser"], assignees: [], labels: ["cherry-pick :cherries:", "another-label", "gitlab-original-label"], + comments: [], } ); }); @@ -449,6 +454,7 @@ describe("cli runner", () => { reviewers: ["superuser"], assignees: [], labels: ["cherry-pick :cherries:", "another-label"], + comments: [], } ); }); @@ -493,6 +499,7 @@ describe("cli runner", () => { reviewers: [], assignees: ["user3", "user4"], labels: ["cli gitlab cherry pick :cherries:", "gitlab-original-label"], + comments: [], } ); }); @@ -540,6 +547,7 @@ describe("cli runner", () => { reviewers: ["superuser"], assignees: [], labels: [], + comments: [], } ); }); diff --git a/test/service/runner/gha-github-runner.test.ts b/test/service/runner/gha-github-runner.test.ts index 69de6d0..1f412ba 100644 --- a/test/service/runner/gha-github-runner.test.ts +++ b/test/service/runner/gha-github-runner.test.ts @@ -125,6 +125,7 @@ describe("gha runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], + comments: [], } ); }); @@ -177,6 +178,7 @@ describe("gha runner", () => { reviewers: ["gh-user"], assignees: [], labels: [], + comments: [], } ); }); @@ -226,6 +228,7 @@ describe("gha runner", () => { reviewers: ["user1", "user2"], assignees: ["user3", "user4"], labels: [], + comments: [], } ); }); @@ -276,6 +279,7 @@ describe("gha runner", () => { reviewers: [], assignees: ["user3", "user4"], labels: [], + comments: [], } ); }); @@ -321,6 +325,7 @@ describe("gha runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: ["cherry-pick :cherries:", "another-label", "original-label"], + comments: [], } ); }); @@ -366,6 +371,7 @@ describe("gha runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: ["cherry-pick :cherries:", "another-label"], + comments: [], } ); }); @@ -408,6 +414,7 @@ describe("gha runner", () => { reviewers: [], assignees: ["user3", "user4"], labels: ["gha github cherry pick :cherries:", "original-label"], + comments: [], } ); }); @@ -452,6 +459,7 @@ describe("gha runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], + comments: [], } ); }); @@ -496,6 +504,7 @@ describe("gha runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], + comments: [], } ); }); @@ -541,6 +550,7 @@ describe("gha runner", () => { reviewers: ["gh-user", "that-s-a-user"], assignees: [], labels: [], + comments: [], } ); }); diff --git a/test/service/runner/gha-gitlab-runner.test.ts b/test/service/runner/gha-gitlab-runner.test.ts index 4610cee..8158818 100644 --- a/test/service/runner/gha-gitlab-runner.test.ts +++ b/test/service/runner/gha-gitlab-runner.test.ts @@ -136,6 +136,7 @@ describe("gha runner", () => { reviewers: ["superuser"], assignees: [], labels: [], + comments: [], } ); }); @@ -187,6 +188,7 @@ describe("gha runner", () => { reviewers: ["superuser"], assignees: [], labels: [], + comments: [], } ); }); @@ -236,6 +238,7 @@ describe("gha runner", () => { reviewers: ["user1", "user2"], assignees: ["user3", "user4"], labels: [], + comments: [], } ); }); @@ -286,6 +289,7 @@ describe("gha runner", () => { reviewers: [], assignees: ["user3", "user4"], labels: [], + comments: [], } ); }); @@ -330,6 +334,7 @@ describe("gha runner", () => { reviewers: ["superuser"], assignees: [], labels: ["cherry-pick :cherries:", "another-label", "gitlab-original-label"], + comments: [], } ); }); @@ -373,6 +378,7 @@ describe("gha runner", () => { reviewers: ["superuser"], assignees: [], labels: ["cherry-pick :cherries:", "another-label"], + comments: [], } ); }); @@ -416,6 +422,7 @@ describe("gha runner", () => { reviewers: [], assignees: ["user3", "user4"], labels: ["gha gitlab cherry pick :cherries:", "gitlab-original-label"], + comments: [], } ); }); @@ -461,6 +468,7 @@ describe("gha runner", () => { reviewers: ["superuser"], assignees: [], labels: [], + comments: [], } ); });