Skip to content

Commit

Permalink
feat: Add ability to define PR title (#125)
Browse files Browse the repository at this point in the history
  • Loading branch information
cjskillingstad authored and sorenlouv committed May 9, 2019
1 parent 0c79a2a commit 040156d
Show file tree
Hide file tree
Showing 14 changed files with 48 additions and 5 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ The above commands will start an interactive prompt. You can use the `arrow keys
| --labels | Pull request labels | string |
| --multiple | Backport multiple commits and/or branches | boolean |
| --prDescription | Description to be added to pull request | string |
| --prTitle | Title for the pull request | string |
| --sha | Commit sha to backport | string |
| --upstream | Name of repository | string |
| --username | Github username | string |
Expand Down
11 changes: 11 additions & 0 deletions docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,17 @@ Example: `["backport", "apm-team"]`

CLI: `--labels myLabel --labels myOtherLabel`

#### `prTitle`

Text that will be the pull request title. Note: You can access the base branch (`baseBranch`) and commit message (`commitMessages`) strings by wrapping them in curly braces (See Example).
If there are multiple commits the commit messages will be concatenated and separated by pipes.

Example: `"{commitMessages} backport for {baseBranch}"`

Default: `"[{baseBranch}] {commitMessages}"`

CLI: `--prTitle "My PR Title"`

#### `prDescription`

Text that will be added to the pull request body.
Expand Down
6 changes: 6 additions & 0 deletions src/options/cliArgs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ export function getOptionsFromCliArgs(
description: 'Backport to multiple branches',
type: 'boolean'
})
.option('prTitle', {
default: configOptions.prTitle,
description: 'Title of pull request',
type: 'string'
})
.option('prDescription', {
default: configOptions.prDescription,
description: 'Description to be added to pull request',
Expand Down Expand Up @@ -79,6 +84,7 @@ export function getOptionsFromCliArgs(
multiple: cliArgs.multiple,
multipleBranches: cliArgs.multipleBranches || cliArgs.multiple,
multipleCommits: cliArgs.multipleCommits || cliArgs.multiple,
prTitle: cliArgs.prTitle,
prDescription: cliArgs.prDescription,
sha: cliArgs.sha,
upstream: cliArgs.upstream,
Expand Down
1 change: 1 addition & 0 deletions src/options/config/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export async function getOptionsFromConfigFiles() {
multipleBranches: true,
all: false,
labels: [] as string[],
prTitle: '[{baseBranch}] {commitMessages}',

// options from config files
...globalConfig,
Expand Down
1 change: 1 addition & 0 deletions src/options/config/globalConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { getGlobalConfigPath, getReposPath } from '../../services/env';
interface GlobalConfig {
username?: string;
accessToken?: string;
prTitle?: string;
prDescription?: string;

// the following are overwritable by project config:
Expand Down
2 changes: 2 additions & 0 deletions src/options/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ export function validateOptions({
multiple,
multipleBranches,
multipleCommits,
prTitle,
prDescription,
sha,
upstream,
Expand Down Expand Up @@ -84,6 +85,7 @@ export function validateOptions({
multiple,
multipleBranches,
multipleCommits,
prTitle,
prDescription,
sha,
upstream,
Expand Down
18 changes: 15 additions & 3 deletions src/steps/doBackportVersions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export function doBackportVersions(
branches: string[],
username: string,
labels: string[],
prTitle: string,
prDescription: string | undefined
) {
return sequentially(branches, async branch => {
Expand All @@ -35,6 +36,7 @@ export function doBackportVersions(
branch,
username,
labels,
prTitle,
prDescription
);
log(`View pull request: ${pullRequest.html_url}`);
Expand All @@ -56,6 +58,7 @@ export async function doBackportVersion(
baseBranch: string,
username: string,
labels: string[] = [],
prTitle: string,
prDescription: string | undefined
) {
const featureBranch = getFeatureBranchName(baseBranch, commits);
Expand Down Expand Up @@ -92,6 +95,7 @@ export async function doBackportVersion(
baseBranch,
commits,
username,
prTitle,
prDescription
);
const pullRequest = await createPullRequest(owner, repoName, payload);
Expand Down Expand Up @@ -171,19 +175,27 @@ async function resolveConflictsOrAbort(owner: string, repoName: string) {
}
}

function getPullRequestTitle(baseBranch: string, commits: Commit[]) {
function getPullRequestTitle(
baseBranch: string,
commits: Commit[],
prTitle: string
) {
const commitMessages = commits
.map(commit => commit.message)
.join(' | ')
.slice(0, 200);

return `[${baseBranch}] ${commitMessages}`;
// prTitle could include baseBranch or commitMessages in template literal
return prTitle
.replace('{baseBranch}', baseBranch)
.replace('{commitMessages}', commitMessages);
}

export function getPullRequestPayload(
baseBranch: string,
commits: Commit[],
username: string,
prTitle: string,
prDescription: string | undefined
) {
const featureBranch = getFeatureBranchName(baseBranch, commits);
Expand All @@ -197,7 +209,7 @@ export function getPullRequestPayload(
const bodySuffix = prDescription ? `\n\n${prDescription}` : '';

return {
title: getPullRequestTitle(baseBranch, commits),
title: getPullRequestTitle(baseBranch, commits, prTitle),
body: `Backports the following commits to ${baseBranch}:\n${commitRefs}${bodySuffix}`,
head: `${username}:${featureBranch}`,
base: `${baseBranch}`
Expand Down
1 change: 1 addition & 0 deletions src/steps/steps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ export async function initSteps(options: BackportOptions) {
branches,
options.username,
options.labels,
options.prTitle,
options.prDescription
);
}
2 changes: 2 additions & 0 deletions test/options/cliArgs.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ describe('getOptionsFromCliArgs', () => {
multiple: false,
multipleBranches: true,
multipleCommits: false,
prTitle: 'myPrTitle',
upstream: 'elastic/kibana',
username: 'sqren'
};
Expand Down Expand Up @@ -43,6 +44,7 @@ describe('getOptionsFromCliArgs', () => {
multiple: false,
multipleBranches: true,
multipleCommits: false,
prTitle: 'myPrTitle',
sha: undefined,
upstream: 'sqren/backport-demo',
username: 'sqren'
Expand Down
1 change: 1 addition & 0 deletions test/options/config/config.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ describe('getOptionsFromConfigFiles', () => {
multiple: false,
multipleBranches: true,
multipleCommits: false,
prTitle: '[{baseBranch}] {commitMessages}',
upstream: 'elastic/kibana',
username: 'sqren'
});
Expand Down
1 change: 1 addition & 0 deletions test/options/options.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const validOptions = {
multiple: false,
multipleBranches: true,
multipleCommits: false,
prTitle: 'myPrTitle',
prDescription: undefined,
sha: undefined,
upstream: 'elastic/kibana',
Expand Down
2 changes: 1 addition & 1 deletion test/steps/__snapshots__/steps.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ Object {
"patch": Array [],
"post": Array [
Object {
"data": "{\\"title\\":\\"[6.2] myCommitMessage\\",\\"body\\":\\"Backports the following commits to 6.2:\\\\n - myCommitMessage (#myPullRequestNumber)\\\\n\\\\nmyPrDescription\\",\\"head\\":\\"sqren:backport/6.2/pr-myPullRequestNumber\\",\\"base\\":\\"6.2\\"}",
"data": "{\\"title\\":\\"myPrTitle\\",\\"body\\":\\"Backports the following commits to 6.2:\\\\n - myCommitMessage (#myPullRequestNumber)\\\\n\\\\nmyPrDescription\\",\\"head\\":\\"sqren:backport/6.2/pr-myPullRequestNumber\\",\\"base\\":\\"6.2\\"}",
"headers": Object {
"Accept": "application/json, text/plain, */*",
"Content-Type": "application/json;charset=utf-8",
Expand Down
3 changes: 3 additions & 0 deletions test/steps/doBackportVersions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ describe('doBackportVersion', () => {
'6.x',
'sqren',
['backport'],
'[{baseBranch}] {commitMessages}',
'myPrSuffix'
);
});
Expand Down Expand Up @@ -107,6 +108,7 @@ describe('doBackportVersion', () => {
'6.x',
'sqren',
['backport'],
'[{baseBranch}] {commitMessages}',
undefined
);
});
Expand Down Expand Up @@ -168,6 +170,7 @@ describe('doBackportVersion', () => {
'6.x',
'sqren',
['backport'],
'myPrTitle',
undefined
);

Expand Down
3 changes: 2 additions & 1 deletion test/steps/steps.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@ describe('run through steps', () => {
multiple: false,
multipleBranches: false,
multipleCommits: false,
prTitle: 'myPrTitle',
prDescription: 'myPrDescription',
sha: undefined,
upstream,
Expand All @@ -201,7 +202,7 @@ describe('run through steps', () => {
base: '6.2',
body: `Backports the following commits to 6.2:\n - myCommitMessage (#myPullRequestNumber)\n\nmyPrDescription`,
head: 'sqren:backport/6.2/pr-myPullRequestNumber',
title: '[6.2] myCommitMessage'
title: 'myPrTitle'
});
});

Expand Down

0 comments on commit 040156d

Please sign in to comment.