feat(pr): allow branch name derivation from base branch
This commit is contained in:
parent
0edc001d28
commit
22f70bb44c
48
README.md
48
README.md
@ -58,7 +58,7 @@ All inputs are **optional**. If not set, sensible defaults will be used.
|
|||||||
| `committer` | The committer name and email address in the format `Display Name <email@address.com>`. Defaults to the GitHub Actions bot user on github.com. | `github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>` |
|
| `committer` | The committer name and email address in the format `Display Name <email@address.com>`. Defaults to the GitHub Actions bot user on github.com. | `github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>` |
|
||||||
| `author` | The author name and email address in the format `Display Name <email@address.com>`. Defaults to the user who triggered the workflow run. | `${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>` |
|
| `author` | The author name and email address in the format `Display Name <email@address.com>`. Defaults to the user who triggered the workflow run. | `${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>` |
|
||||||
| `signoff` | Add [`Signed-off-by`](https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---signoff) line by the committer at the end of the commit log message. | `false` |
|
| `signoff` | Add [`Signed-off-by`](https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---signoff) line by the committer at the end of the commit log message. | `false` |
|
||||||
| `branch` | The pull request branch name. | `create-pull-request/patch` |
|
| `branch` | The pull request branch name. Supports `${base}` placeholder. See [branch](#branch). | `create-pull-request/patch` |
|
||||||
| `delete-branch` | Delete the `branch` if it doesn't have an active pull request associated with it. See [delete-branch](#delete-branch). | `false` |
|
| `delete-branch` | Delete the `branch` if it doesn't have an active pull request associated with it. See [delete-branch](#delete-branch). | `false` |
|
||||||
| `branch-suffix` | The branch suffix type when using the alternative branching strategy. Valid values are `random`, `timestamp` and `short-commit-hash`. See [Alternative strategy](#alternative-strategy---always-create-a-new-pull-request-branch) for details. | |
|
| `branch-suffix` | The branch suffix type when using the alternative branching strategy. Valid values are `random`, `timestamp` and `short-commit-hash`. See [Alternative strategy](#alternative-strategy---always-create-a-new-pull-request-branch) for details. | |
|
||||||
| `base` | Sets the pull request base branch. | Defaults to the branch checked out in the workflow. |
|
| `base` | Sets the pull request base branch. | Defaults to the branch checked out in the workflow. |
|
||||||
@ -102,6 +102,52 @@ The action first creates a branch, and then creates a pull request for the branc
|
|||||||
For some rare use cases it can be useful, or even necessary, to use different tokens for these operations.
|
For some rare use cases it can be useful, or even necessary, to use different tokens for these operations.
|
||||||
It is not advisable to use this input unless you know you need to.
|
It is not advisable to use this input unless you know you need to.
|
||||||
|
|
||||||
|
#### branch
|
||||||
|
|
||||||
|
The `branch` input supports a placeholder `${base}` that will be replaced with the base branch name. This is useful for "namespacing" pull requests to the branch they target.
|
||||||
|
|
||||||
|
For example, if you want to create separate pull request branches for different base branches:
|
||||||
|
|
||||||
|
```yml
|
||||||
|
- name: Create Pull Request
|
||||||
|
uses: peter-evans/create-pull-request@v7
|
||||||
|
with:
|
||||||
|
branch: ${base}/create-pull-request/patch
|
||||||
|
```
|
||||||
|
|
||||||
|
When the base branch is `main`, the pull request branch will be `main/create-pull-request/patch`.
|
||||||
|
When the base branch is `develop`, the pull request branch will be `develop/create-pull-request/patch`.
|
||||||
|
|
||||||
|
This is particularly useful for code generation workflows that run on multiple branches:
|
||||||
|
|
||||||
|
```yml
|
||||||
|
name: Code Generation
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- develop
|
||||||
|
- 'feature/**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
generate:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Run code generation
|
||||||
|
run: npm run generate
|
||||||
|
|
||||||
|
- name: Create Pull Request
|
||||||
|
uses: peter-evans/create-pull-request@v7
|
||||||
|
with:
|
||||||
|
branch: ${base}/codegen
|
||||||
|
title: '[Codegen] Update generated code for ${base}'
|
||||||
|
body: Automated code generation for the ${base} branch
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note:** If the base branch name contains forward slashes (e.g., `feature/new-feature`), they will be replaced with hyphens in the branch name (e.g., `feature-new-feature/codegen`) to avoid issues with nested directory structures.
|
||||||
|
|
||||||
#### commit-message
|
#### commit-message
|
||||||
|
|
||||||
In addition to a message, the `commit-message` input can also be used to populate the commit description. Leave a single blank line between the message and description.
|
In addition to a message, the `commit-message` input can also be used to populate the commit description. Leave a single blank line between the message and description.
|
||||||
|
|||||||
@ -34,7 +34,10 @@ inputs:
|
|||||||
description: 'Add `Signed-off-by` line by the committer at the end of the commit log message.'
|
description: 'Add `Signed-off-by` line by the committer at the end of the commit log message.'
|
||||||
default: false
|
default: false
|
||||||
branch:
|
branch:
|
||||||
description: 'The pull request branch name.'
|
description: >
|
||||||
|
The pull request branch name.
|
||||||
|
Supports the placeholder `${base}` which will be replaced with the base branch name.
|
||||||
|
For example, `${base}/patch` becomes `main/patch` when base is `main`.
|
||||||
default: 'create-pull-request/patch'
|
default: 'create-pull-request/patch'
|
||||||
delete-branch:
|
delete-branch:
|
||||||
description: >
|
description: >
|
||||||
|
|||||||
8
dist/index.js
vendored
8
dist/index.js
vendored
@ -446,6 +446,14 @@ function createPullRequest(inputs) {
|
|||||||
}
|
}
|
||||||
// If the base is not specified it is assumed to be the working base.
|
// If the base is not specified it is assumed to be the working base.
|
||||||
const base = inputs.base ? inputs.base : workingBase;
|
const base = inputs.base ? inputs.base : workingBase;
|
||||||
|
// Substitute ${base} placeholder in branch name
|
||||||
|
if (inputs.branch.includes('${base}')) {
|
||||||
|
// Sanitize base branch name for use in branch name
|
||||||
|
// Replace forward slashes with hyphens to avoid nested directory issues
|
||||||
|
const sanitizedBase = base.replace(/\//g, '-');
|
||||||
|
inputs.branch = inputs.branch.replace(/\$\{base\}/g, sanitizedBase);
|
||||||
|
core.info(`Branch name derived from base: '${inputs.branch}'`);
|
||||||
|
}
|
||||||
// Throw an error if the base and branch are not different branches
|
// Throw an error if the base and branch are not different branches
|
||||||
// of the 'origin' remote. An identically named branch in the `fork`
|
// of the 'origin' remote. An identically named branch in the `fork`
|
||||||
// remote is perfectly fine.
|
// remote is perfectly fine.
|
||||||
|
|||||||
@ -113,6 +113,16 @@ export async function createPullRequest(inputs: Inputs): Promise<void> {
|
|||||||
}
|
}
|
||||||
// If the base is not specified it is assumed to be the working base.
|
// If the base is not specified it is assumed to be the working base.
|
||||||
const base = inputs.base ? inputs.base : workingBase
|
const base = inputs.base ? inputs.base : workingBase
|
||||||
|
|
||||||
|
// Substitute ${base} placeholder in branch name
|
||||||
|
if (inputs.branch.includes('${base}')) {
|
||||||
|
// Sanitize base branch name for use in branch name
|
||||||
|
// Replace forward slashes with hyphens to avoid nested directory issues
|
||||||
|
const sanitizedBase = base.replace(/\//g, '-')
|
||||||
|
inputs.branch = inputs.branch.replace(/\$\{base\}/g, sanitizedBase)
|
||||||
|
core.info(`Branch name derived from base: '${inputs.branch}'`)
|
||||||
|
}
|
||||||
|
|
||||||
// Throw an error if the base and branch are not different branches
|
// Throw an error if the base and branch are not different branches
|
||||||
// of the 'origin' remote. An identically named branch in the `fork`
|
// of the 'origin' remote. An identically named branch in the `fork`
|
||||||
// remote is perfectly fine.
|
// remote is perfectly fine.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user