From dcd5fd746d53dd8de555c0f10bca6c35628be47a Mon Sep 17 00:00:00 2001 From: Peter Evans <18365890+peter-evans@users.noreply.github.com> Date: Tue, 14 Dec 2021 11:23:29 +0900 Subject: [PATCH] feat: add-paths input (#1010) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 Co-authored-by: Авдеев Дима --- .gitignore | 1 + README.md | 42 +++- __test__/create-or-update-branch.int.test.ts | 215 ++++++++++++++----- action.yml | 7 + dist/index.js | 12 +- docs/updating.md | 2 +- src/create-or-update-branch.ts | 10 +- src/create-pull-request.ts | 4 +- src/main.ts | 1 + 9 files changed, 229 insertions(+), 65 deletions(-) diff --git a/.gitignore b/.gitignore index d35224019..93a4a641b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ lib/ node_modules/ .DS_Store +.idea diff --git a/README.md b/README.md index da7493844..46cf30a76 100644 --- a/README.md +++ b/README.md @@ -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` | | `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` | | `committer` | The committer name and email address in the format `Display Name `. Defaults to the GitHub Actions bot user. | `GitHub ` | | `author` | The author name and email address in the format `Display Name `. 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` -### 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. 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 ``` -### 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 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. diff --git a/__test__/create-or-update-branch.int.test.ts b/__test__/create-or-update-branch.int.test.ts index ef8ac68e4..49db5bf7b 100644 --- a/__test__/create-or-update-branch.int.test.ts +++ b/__test__/create-or-update-branch.int.test.ts @@ -25,6 +25,9 @@ const BASE = DEFAULT_BRANCH const FORK_REMOTE_URL = 'git://127.0.0.1/test-fork.git' const FORK_REMOTE_NAME = 'fork' +const ADD_PATHS = ['-A'] +const ADD_PATHS_WILDCARD = ['*.txt'] + async function createFile(filename: string, content?: string): Promise { const _content = content ? content : uuidv4() const filepath = path.join(REPO_PATH, filename) @@ -220,7 +223,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('none') expect(await gitLogMatches([INIT_COMMIT_MESSAGE])).toBeTruthy() @@ -236,7 +240,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(trackedContent) @@ -263,7 +268,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -283,7 +289,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(UNTRACKED_FILE)).toEqual(untrackedContent) @@ -310,7 +317,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -332,7 +340,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -360,7 +369,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('not-updated') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -380,7 +390,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -416,7 +427,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -446,7 +458,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -473,7 +486,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeFalsy() @@ -493,7 +507,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -532,7 +547,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeFalsy() @@ -558,7 +574,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -600,7 +617,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeFalsy() @@ -621,7 +639,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(commits.changes.tracked) @@ -651,7 +670,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -676,7 +696,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -710,7 +731,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -737,7 +759,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -779,7 +802,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -805,7 +829,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, FORK_REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -833,7 +858,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, FORK_REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -854,7 +880,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - true + true, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -889,7 +916,8 @@ describe('create-or-update-branch tests', () => { '', BRANCH, REMOTE_NAME, - true + true, + ADD_PATHS ) expect(_result.action).toEqual('updated') 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) it('tests no changes resulting in no new branch being created (WBNB)', async () => { @@ -920,7 +1001,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('none') expect(await gitLogMatches([INIT_COMMIT_MESSAGE])).toBeTruthy() @@ -939,7 +1021,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(trackedContent) @@ -969,7 +1052,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -992,7 +1076,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(UNTRACKED_FILE)).toEqual(untrackedContent) @@ -1022,7 +1107,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -1047,7 +1133,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -1078,7 +1165,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('not-updated') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -1101,7 +1189,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -1140,7 +1229,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -1173,7 +1263,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -1203,7 +1294,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeFalsy() @@ -1228,7 +1320,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -1270,7 +1363,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeFalsy() @@ -1299,7 +1393,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -1344,7 +1439,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeFalsy() @@ -1368,7 +1464,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(commits.changes.tracked) @@ -1401,7 +1498,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -1429,7 +1527,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -1466,7 +1565,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -1496,7 +1596,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -1541,7 +1642,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -1570,7 +1672,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, FORK_REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -1601,7 +1704,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, FORK_REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -1629,7 +1733,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -1661,7 +1766,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -1686,7 +1792,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(result.action).toEqual('created') expect(await getFileContent(TRACKED_FILE)).toEqual(changes.tracked) @@ -1726,7 +1833,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) expect(_result.action).toEqual('updated') expect(_result.hasDiffWithBase).toBeTruthy() @@ -1757,7 +1865,8 @@ describe('create-or-update-branch tests', () => { BASE, BRANCH, REMOTE_NAME, - false + false, + ADD_PATHS ) // The action cannot successfully create the branch expect(result.action).toEqual('none') diff --git a/action.yml b/action.yml index 96fb5d1d7..512e658d8 100644 --- a/action.yml +++ b/action.yml @@ -8,6 +8,13 @@ inputs: description: > Relative path under $GITHUB_WORKSPACE to the repository. 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: description: 'The message to use when committing changes.' default: '[create-pull-request] automated change' diff --git a/dist/index.js b/dist/index.js index be6695e9d..f45ad8556 100644 --- a/dist/index.js +++ b/dist/index.js @@ -98,7 +98,7 @@ function splitLines(multilineString) { .map(s => s.trim()) .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* () { // Get the working 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 if (yield git.isDirty(true)) { 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]; if (signoff) { params.push('--signoff'); } 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 // Commits made during the workflow will be removed @@ -377,7 +382,7 @@ function createPullRequest(inputs) { core.endGroup(); // 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(); if (['created', 'updated'].includes(result.action)) { // The branch was created or updated @@ -1074,6 +1079,7 @@ function run() { const inputs = { token: core.getInput('token'), path: core.getInput('path'), + addPaths: utils.getInputAsArray('add-paths'), commitMessage: core.getInput('commit-message'), committer: core.getInput('committer'), author: core.getInput('author'), diff --git a/docs/updating.md b/docs/updating.md index f45322051..db64ed332 100644 --- a/docs/updating.md +++ b/docs/updating.md @@ -68,6 +68,6 @@ ### 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. - If an updated pull request no longer differs from its base it will automatically be closed and the pull request branch deleted. diff --git a/src/create-or-update-branch.ts b/src/create-or-update-branch.ts index f33051d1a..5dafc0d10 100644 --- a/src/create-or-update-branch.ts +++ b/src/create-or-update-branch.ts @@ -91,7 +91,8 @@ export async function createOrUpdateBranch( base: string, branch: string, branchRemoteName: string, - signoff: boolean + signoff: boolean, + addPaths: string[] ): Promise { // Get the working 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 if (await git.isDirty(true)) { 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] if (signoff) { params.push('--signoff') } 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 diff --git a/src/create-pull-request.ts b/src/create-pull-request.ts index 8b2c11e62..81caa8877 100644 --- a/src/create-pull-request.ts +++ b/src/create-pull-request.ts @@ -12,6 +12,7 @@ import * as utils from './utils' export interface Inputs { token: string path: string + addPaths: string[] commitMessage: string committer: string author: string @@ -173,7 +174,8 @@ export async function createPullRequest(inputs: Inputs): Promise { inputs.base, inputs.branch, branchRemoteName, - inputs.signoff + inputs.signoff, + inputs.addPaths ) core.endGroup() diff --git a/src/main.ts b/src/main.ts index bb7b7e23c..45a1ae85e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -8,6 +8,7 @@ async function run(): Promise { const inputs: Inputs = { token: core.getInput('token'), path: core.getInput('path'), + addPaths: utils.getInputAsArray('add-paths'), commitMessage: core.getInput('commit-message'), committer: core.getInput('committer'), author: core.getInput('author'),