feat: add-paths input (#1010)

* add add-pattern-array argument

* ignore return code

* doc to add-pattern-array

* update README.md

* cleanup after success commit

* fix integration tests

* add test

* update naming and docs

* update readme

* fix missing await

* update docs

Co-authored-by: avdim <avdim@mail.ru>
Co-authored-by: Авдеев Дима <avdeev@tutu.tech>
This commit is contained in:
Peter Evans 2021-12-14 11:23:29 +09:00 committed by GitHub
parent 4b53b6fd1a
commit dcd5fd746d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 229 additions and 65 deletions

1
.gitignore vendored
View file

@ -2,3 +2,4 @@ lib/
node_modules/ node_modules/
.DS_Store .DS_Store
.idea

View file

@ -46,6 +46,7 @@ All inputs are **optional**. If not set, sensible defaults will be used.
| --- | --- | --- | | --- | --- | --- |
| `token` | `GITHUB_TOKEN` (`contents: write`, `pull-requests: write`) or a `repo` scoped [Personal Access Token (PAT)](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token). | `GITHUB_TOKEN` | | `token` | `GITHUB_TOKEN` (`contents: write`, `pull-requests: write`) or a `repo` scoped [Personal Access Token (PAT)](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token). | `GITHUB_TOKEN` |
| `path` | Relative path under `GITHUB_WORKSPACE` to the repository. | `GITHUB_WORKSPACE` | | `path` | Relative path under `GITHUB_WORKSPACE` to the repository. | `GITHUB_WORKSPACE` |
| `add-paths` | A comma or newline-separated list of file paths to commit. Paths should follow git's [pathspec](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec) syntax. Defaults to adding all new and modified files. See [Add specific paths](#add-specific-paths). | `-A` |
| `commit-message` | The message to use when committing changes. | `[create-pull-request] automated change` | | `commit-message` | The message to use when committing changes. | `[create-pull-request] automated change` |
| `committer` | The committer name and email address in the format `Display Name <email@address.com>`. Defaults to the GitHub Actions bot user. | `GitHub <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. | `GitHub <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 }}@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 }}@users.noreply.github.com>` |
@ -122,7 +123,42 @@ To use this strategy, set input `branch-suffix` with one of the following option
- `short-commit-hash` - Commits will be made to a branch suffixed with the short SHA1 commit hash. e.g. `create-pull-request/patch-fcdfb59`, `create-pull-request/patch-394710b` - `short-commit-hash` - Commits will be made to a branch suffixed with the short SHA1 commit hash. e.g. `create-pull-request/patch-fcdfb59`, `create-pull-request/patch-394710b`
### Controlling commits ### Controlling committed files
The action defaults to adding all new and modified files.
If there are files that should not be included in the pull request, you can use the following methods to control the committed content.
#### Remove files
The most straightforward way to handle unwanted files is simply to remove them in a step before the action runs.
```yml
- run: |
rm -rf temp-dir
rm temp-file.txt
```
#### Ignore files
If there are files or directories you want to ignore you can simply add them to a `.gitignore` file at the root of your repository. The action will respect this file.
#### Add specific paths
You can control which files are committed with the `add-paths` input.
Paths should follow git's [pathspec](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec) syntax.
Each path must resolve to a least one new or modified file to add.
All file changes that do not match one of the paths will be discarded.
```yml
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
add-paths: |
*.java
docs/*.md
```
#### Create your own commits
As well as relying on the action to handle uncommitted changes, you can additionally make your own commits before the action runs. As well as relying on the action to handle uncommitted changes, you can additionally make your own commits before the action runs.
Note that the repository must be checked out on a branch with a remote, it won't work for [events which checkout a commit](docs/concepts-guidelines.md#events-which-checkout-a-commit). Note that the repository must be checked out on a branch with a remote, it won't work for [events which checkout a commit](docs/concepts-guidelines.md#events-which-checkout-a-commit).
@ -145,10 +181,6 @@ Note that the repository must be checked out on a branch with a remote, it won't
uses: peter-evans/create-pull-request@v3 uses: peter-evans/create-pull-request@v3
``` ```
### Ignoring files
If there are files or directories you want to ignore you can simply add them to a `.gitignore` file at the root of your repository. The action will respect this file.
### Create a project card ### Create a project card
To create a project card for the pull request, pass the `pull-request-number` step output to [create-or-update-project-card](https://github.com/peter-evans/create-or-update-project-card) action. To create a project card for the pull request, pass the `pull-request-number` step output to [create-or-update-project-card](https://github.com/peter-evans/create-or-update-project-card) action.

View file

@ -25,6 +25,9 @@ const BASE = DEFAULT_BRANCH
const FORK_REMOTE_URL = 'git://127.0.0.1/test-fork.git' const FORK_REMOTE_URL = 'git://127.0.0.1/test-fork.git'
const FORK_REMOTE_NAME = 'fork' const FORK_REMOTE_NAME = 'fork'
const ADD_PATHS = ['-A']
const ADD_PATHS_WILDCARD = ['*.txt']
async function createFile(filename: string, content?: string): Promise<string> { async function createFile(filename: string, content?: string): Promise<string> {
const _content = content ? content : uuidv4() const _content = content ? content : uuidv4()
const filepath = path.join(REPO_PATH, filename) const filepath = path.join(REPO_PATH, filename)
@ -220,7 +223,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('none') expect(result.action).toEqual('none')
expect(await gitLogMatches([INIT_COMMIT_MESSAGE])).toBeTruthy() expect(await gitLogMatches([INIT_COMMIT_MESSAGE])).toBeTruthy()
@ -236,7 +240,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(trackedContent) expect(await getFileContent(TRACKED_FILE)).toEqual(trackedContent)
@ -263,7 +268,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -283,7 +289,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(UNTRACKED_FILE)).toEqual(untrackedContent) expect(await getFileContent(UNTRACKED_FILE)).toEqual(untrackedContent)
@ -310,7 +317,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -332,7 +340,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -360,7 +369,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('not-updated') expect(_result.action).toEqual('not-updated')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -380,7 +390,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -416,7 +427,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -446,7 +458,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -473,7 +486,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeFalsy() expect(_result.hasDiffWithBase).toBeFalsy()
@ -493,7 +507,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -532,7 +547,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeFalsy() expect(_result.hasDiffWithBase).toBeFalsy()
@ -558,7 +574,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -600,7 +617,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeFalsy() expect(_result.hasDiffWithBase).toBeFalsy()
@ -621,7 +639,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(commits.changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(commits.changes.tracked)
@ -651,7 +670,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -676,7 +696,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -710,7 +731,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -737,7 +759,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -779,7 +802,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -805,7 +829,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
FORK_REMOTE_NAME, FORK_REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -833,7 +858,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
FORK_REMOTE_NAME, FORK_REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -854,7 +880,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
true true,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -889,7 +916,8 @@ describe('create-or-update-branch tests', () => {
'', '',
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
true true,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -907,6 +935,59 @@ describe('create-or-update-branch tests', () => {
) )
}) })
it('tests create and update with wildcard add-paths', async () => {
// The pull request branch will not be updated
// Create tracked and untracked file changes
const changes = await createChanges()
const commitMessage = uuidv4()
const result = await createOrUpdateBranch(
git,
commitMessage,
'',
BRANCH,
REMOTE_NAME,
false,
ADD_PATHS_WILDCARD
)
expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
expect(await getFileContent(UNTRACKED_FILE)).toEqual(changes.untracked)
expect(
await gitLogMatches([commitMessage, INIT_COMMIT_MESSAGE])
).toBeTruthy()
// Push pull request branch to remote
await git.push([
'--force-with-lease',
REMOTE_NAME,
`HEAD:refs/heads/${BRANCH}`
])
await afterTest(false)
await beforeTest()
// Create tracked and untracked file changes
const _changes = await createChanges()
const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch(
git,
_commitMessage,
'',
BRANCH,
REMOTE_NAME,
false,
ADD_PATHS_WILDCARD
)
expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy()
expect(await getFileContent(TRACKED_FILE)).toEqual(_changes.tracked)
expect(await getFileContent(UNTRACKED_FILE)).toEqual(_changes.untracked)
expect(
await gitLogMatches([_commitMessage, INIT_COMMIT_MESSAGE])
).toBeTruthy()
})
// Working Base is Not Base (WBNB) // Working Base is Not Base (WBNB)
it('tests no changes resulting in no new branch being created (WBNB)', async () => { it('tests no changes resulting in no new branch being created (WBNB)', async () => {
@ -920,7 +1001,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('none') expect(result.action).toEqual('none')
expect(await gitLogMatches([INIT_COMMIT_MESSAGE])).toBeTruthy() expect(await gitLogMatches([INIT_COMMIT_MESSAGE])).toBeTruthy()
@ -939,7 +1021,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(trackedContent) expect(await getFileContent(TRACKED_FILE)).toEqual(trackedContent)
@ -969,7 +1052,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -992,7 +1076,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(UNTRACKED_FILE)).toEqual(untrackedContent) expect(await getFileContent(UNTRACKED_FILE)).toEqual(untrackedContent)
@ -1022,7 +1107,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -1047,7 +1133,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -1078,7 +1165,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('not-updated') expect(_result.action).toEqual('not-updated')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -1101,7 +1189,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -1140,7 +1229,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -1173,7 +1263,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -1203,7 +1294,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeFalsy() expect(_result.hasDiffWithBase).toBeFalsy()
@ -1228,7 +1320,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -1270,7 +1363,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeFalsy() expect(_result.hasDiffWithBase).toBeFalsy()
@ -1299,7 +1393,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -1344,7 +1439,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeFalsy() expect(_result.hasDiffWithBase).toBeFalsy()
@ -1368,7 +1464,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(commits.changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(commits.changes.tracked)
@ -1401,7 +1498,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -1429,7 +1527,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -1466,7 +1565,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -1496,7 +1596,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -1541,7 +1642,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -1570,7 +1672,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
FORK_REMOTE_NAME, FORK_REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -1601,7 +1704,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
FORK_REMOTE_NAME, FORK_REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -1629,7 +1733,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -1661,7 +1766,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -1686,7 +1792,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(result.action).toEqual('created') expect(result.action).toEqual('created')
expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked)
@ -1726,7 +1833,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
expect(_result.action).toEqual('updated') expect(_result.action).toEqual('updated')
expect(_result.hasDiffWithBase).toBeTruthy() expect(_result.hasDiffWithBase).toBeTruthy()
@ -1757,7 +1865,8 @@ describe('create-or-update-branch tests', () => {
BASE, BASE,
BRANCH, BRANCH,
REMOTE_NAME, REMOTE_NAME,
false false,
ADD_PATHS
) )
// The action cannot successfully create the branch // The action cannot successfully create the branch
expect(result.action).toEqual('none') expect(result.action).toEqual('none')

View file

@ -8,6 +8,13 @@ inputs:
description: > description: >
Relative path under $GITHUB_WORKSPACE to the repository. Relative path under $GITHUB_WORKSPACE to the repository.
Defaults to $GITHUB_WORKSPACE. Defaults to $GITHUB_WORKSPACE.
add-paths:
description: >
A comma or newline-separated list of file paths to commit.
Paths should follow git's pathspec syntax.
Defaults to adding all new and modified files.
default: |
-A
commit-message: commit-message:
description: 'The message to use when committing changes.' description: 'The message to use when committing changes.'
default: '[create-pull-request] automated change' default: '[create-pull-request] automated change'

12
dist/index.js vendored
View file

@ -98,7 +98,7 @@ function splitLines(multilineString) {
.map(s => s.trim()) .map(s => s.trim())
.filter(x => x !== ''); .filter(x => x !== '');
} }
function createOrUpdateBranch(git, commitMessage, base, branch, branchRemoteName, signoff) { function createOrUpdateBranch(git, commitMessage, base, branch, branchRemoteName, signoff, addPaths) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
// Get the working base. // Get the working base.
// When a ref, it may or may not be the actual base. // When a ref, it may or may not be the actual base.
@ -124,12 +124,17 @@ function createOrUpdateBranch(git, commitMessage, base, branch, branchRemoteName
// Commit any uncommitted changes // Commit any uncommitted changes
if (yield git.isDirty(true)) { if (yield git.isDirty(true)) {
core.info('Uncommitted changes found. Adding a commit.'); core.info('Uncommitted changes found. Adding a commit.');
yield git.exec(['add', '-A']); for (const path of addPaths) {
yield git.exec(['add', path], true);
}
const params = ['-m', commitMessage]; const params = ['-m', commitMessage];
if (signoff) { if (signoff) {
params.push('--signoff'); params.push('--signoff');
} }
yield git.commit(params); yield git.commit(params);
// Remove uncommitted tracked and untracked changes
yield git.exec(['reset', '--hard']);
yield git.exec(['clean', '-f']);
} }
// Perform fetch and reset the working base // Perform fetch and reset the working base
// Commits made during the workflow will be removed // Commits made during the workflow will be removed
@ -377,7 +382,7 @@ function createPullRequest(inputs) {
core.endGroup(); core.endGroup();
// Create or update the pull request branch // Create or update the pull request branch
core.startGroup('Create or update the pull request branch'); core.startGroup('Create or update the pull request branch');
const result = yield (0, create_or_update_branch_1.createOrUpdateBranch)(git, inputs.commitMessage, inputs.base, inputs.branch, branchRemoteName, inputs.signoff); const result = yield (0, create_or_update_branch_1.createOrUpdateBranch)(git, inputs.commitMessage, inputs.base, inputs.branch, branchRemoteName, inputs.signoff, inputs.addPaths);
core.endGroup(); core.endGroup();
if (['created', 'updated'].includes(result.action)) { if (['created', 'updated'].includes(result.action)) {
// The branch was created or updated // The branch was created or updated
@ -1074,6 +1079,7 @@ function run() {
const inputs = { const inputs = {
token: core.getInput('token'), token: core.getInput('token'),
path: core.getInput('path'), path: core.getInput('path'),
addPaths: utils.getInputAsArray('add-paths'),
commitMessage: core.getInput('commit-message'), commitMessage: core.getInput('commit-message'),
committer: core.getInput('committer'), committer: core.getInput('committer'),
author: core.getInput('author'), author: core.getInput('author'),

View file

@ -68,6 +68,6 @@
### New features ### New features
- Unpushed commits made during the workflow before the action runs will now be considered as changes to be raised in the pull request. See [Controlling commits](https://github.com/peter-evans/create-pull-request#controlling-commits) for details. - Unpushed commits made during the workflow before the action runs will now be considered as changes to be raised in the pull request. See [Create your own commits](https://github.com/peter-evans/create-pull-request#create-your-own-commits) for details.
- New commits made to the pull request base will now be taken into account when pull requests are updated. - New commits made to the pull request base will now be taken into account when pull requests are updated.
- If an updated pull request no longer differs from its base it will automatically be closed and the pull request branch deleted. - If an updated pull request no longer differs from its base it will automatically be closed and the pull request branch deleted.

View file

@ -91,7 +91,8 @@ export async function createOrUpdateBranch(
base: string, base: string,
branch: string, branch: string,
branchRemoteName: string, branchRemoteName: string,
signoff: boolean signoff: boolean,
addPaths: string[]
): Promise<CreateOrUpdateBranchResult> { ): Promise<CreateOrUpdateBranchResult> {
// Get the working base. // Get the working base.
// When a ref, it may or may not be the actual base. // When a ref, it may or may not be the actual base.
@ -120,12 +121,17 @@ export async function createOrUpdateBranch(
// Commit any uncommitted changes // Commit any uncommitted changes
if (await git.isDirty(true)) { if (await git.isDirty(true)) {
core.info('Uncommitted changes found. Adding a commit.') core.info('Uncommitted changes found. Adding a commit.')
await git.exec(['add', '-A']) for (const path of addPaths) {
await git.exec(['add', path], true)
}
const params = ['-m', commitMessage] const params = ['-m', commitMessage]
if (signoff) { if (signoff) {
params.push('--signoff') params.push('--signoff')
} }
await git.commit(params) await git.commit(params)
// Remove uncommitted tracked and untracked changes
await git.exec(['reset', '--hard'])
await git.exec(['clean', '-f'])
} }
// Perform fetch and reset the working base // Perform fetch and reset the working base

View file

@ -12,6 +12,7 @@ import * as utils from './utils'
export interface Inputs { export interface Inputs {
token: string token: string
path: string path: string
addPaths: string[]
commitMessage: string commitMessage: string
committer: string committer: string
author: string author: string
@ -173,7 +174,8 @@ export async function createPullRequest(inputs: Inputs): Promise<void> {
inputs.base, inputs.base,
inputs.branch, inputs.branch,
branchRemoteName, branchRemoteName,
inputs.signoff inputs.signoff,
inputs.addPaths
) )
core.endGroup() core.endGroup()

View file

@ -8,6 +8,7 @@ async function run(): Promise<void> {
const inputs: Inputs = { const inputs: Inputs = {
token: core.getInput('token'), token: core.getInput('token'),
path: core.getInput('path'), path: core.getInput('path'),
addPaths: utils.getInputAsArray('add-paths'),
commitMessage: core.getInput('commit-message'), commitMessage: core.getInput('commit-message'),
committer: core.getInput('committer'), committer: core.getInput('committer'),
author: core.getInput('author'), author: core.getInput('author'),