Compare commits

...

49 Commits

Author SHA1 Message Date
18f7dc018c feat: revert update action runtime to node 16 2022-02-28 21:17:05 +09:00
89265e8d24 feat: update action runtime to node 16 (#1074)
* fix: prefer getMultilineInput and getBooleanInput from actions/core

* build: update distribution

* feat: update action runtime to node 16

* ci: update setup-node and cache npm dependencies

* revert: getMultilineInput to getInputAsArray

* build: update distribution
2022-02-28 13:55:51 +09:00
a7bb76508d fix: remove unused draft param from pull update (#1065) 2022-02-23 15:34:53 +09:00
357cebe268 Document that draft status changes are not reflected (#1064)
The github pull request update API does not accept changing
draft status - the only way to do it appears to be through
the web UI.
2022-02-23 15:18:03 +09:00
f22a7da129 fix: add '--' to checkout command to avoid ambiguity (#1051)
* fix: add '--' to checkout command to avoid ambiguity

Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp>

* Update src/git-command-manager.ts

Co-authored-by: Peter Evans <18365890+peter-evans@users.noreply.github.com>

Co-authored-by: Peter Evans <18365890+peter-evans@users.noreply.github.com>
2022-01-31 09:49:59 +09:00
3f60247108 ci: remove workflow (#1046) 2022-01-28 11:42:48 +09:00
dcd5fd746d 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>
2021-12-14 11:23:29 +09:00
4b53b6fd1a Merge pull request #967 from peter-evans/update-dependencies
Update dependencies
2021-12-02 12:02:05 +09:00
10a1849302 chore: update dist 2021-12-02 11:19:12 +09:00
c209d72428 chore: update package lock 2021-12-02 11:18:20 +09:00
ef9e028216 fix: resolving path to module 2021-12-02 11:17:26 +09:00
f8f85df783 chore: update dependencies 2021-12-02 01:25:39 +00:00
b9117f2e0c Merge pull request #992 from MichaelCurrin/patch-1
docs: update marketplace logo
2021-12-02 08:56:24 +09:00
598ffcd35c docs: update marketplace logo 2021-12-01 12:59:42 +02:00
d8e8e547cc Merge pull request #986 from irphilli/docs/github-app-permissions
docs: Update to include app permissions needed to add teams as reviewers
2021-11-15 09:14:49 +09:00
507420e035 docs: Update to include app permissions needed to add teams as reviewers 2021-11-12 12:26:36 -06:00
67df31e08a fix: add head sha output to action.yml 2021-11-04 11:13:50 +09:00
f530141cd3 Merge pull request #981 from peter-evans/update-distribution
Update distribution
2021-11-04 11:07:54 +09:00
a5a72ba246 build: update distribution 2021-11-04 02:07:25 +00:00
a6c8b3814a Merge pull request #976 from peter-evans/output-sha
feat: add output for head sha
2021-11-04 11:04:47 +09:00
c0a9598b0e feat: add output for head sha 2021-11-04 10:42:17 +09:00
3c3d696d5b Merge pull request #955 from peter-evans/dependabot/npm_and_yarn/ansi-regex-5.0.1
build(deps): bump ansi-regex from 5.0.0 to 5.0.1
2021-10-07 11:09:44 +09:00
bd0f84d69c Merge pull request #958 from peter-evans/update-distribution
Update distribution
2021-10-07 10:50:19 +09:00
ad71e1f128 build: update distribution 2021-10-07 01:48:29 +00:00
368c9da6f6 build(deps): bump ansi-regex from 5.0.0 to 5.0.1
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 5.0.0 to 5.0.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v5.0.0...v5.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-07 01:46:56 +00:00
d8a389d1fa Merge pull request #932 from peter-evans/update-dependencies
Update dependencies
2021-10-07 10:46:28 +09:00
225cf628aa chore: update dependencies 2021-10-07 01:25:48 +00:00
d7a8d0affc ci: revert test of new scd version
This reverts commit 2dc79e58de.
2021-09-17 09:59:51 +09:00
2dc79e58de ci: test new scd version 2021-09-16 14:56:26 +09:00
95767e7d51 Merge pull request #894 from peter-evans/update-dependencies
Update dependencies
2021-09-02 14:10:28 +09:00
3263596ac4 fix: set error types to any 2021-09-02 13:59:32 +09:00
3e21ec0c82 chore: update package-lock 2021-09-02 13:54:47 +09:00
5050a372c9 chore: update dependencies 2021-09-02 01:24:01 +00:00
7380612b49 Merge pull request #915 from peter-evans/missing-outputs
fix: add missing outputs
2021-08-23 12:59:53 +09:00
771ad1b5f4 fix: add missing outputs 2021-08-23 12:51:26 +09:00
093c191148 Merge pull request #903 from peter-evans/failure-mode-test
test: add test for detached head failure mode
2021-08-13 11:47:40 +09:00
00cb0abb4d build: update package lock version 2021-08-13 11:35:07 +09:00
fa0950476f test: add test for detached head failure mode 2021-08-13 11:34:19 +09:00
b90b9c1e20 Merge pull request #890 from peter-evans/update-distribution
Update distribution
2021-07-22 11:05:37 +09:00
028a63020c build: update distribution 2021-07-22 02:05:00 +00:00
9d59234a82 Merge pull request #864 from peter-evans/update-dependencies
Update dependencies
2021-07-22 11:02:56 +09:00
210f7aab2c chore: update dependencies 2021-07-22 01:26:10 +00:00
6bb7394339 Merge pull request #850 from peter-evans/update-distribution
Update distribution
2021-05-27 13:22:56 +09:00
a518698c07 build: update distribution 2021-05-27 04:20:57 +00:00
8be395fdd3 Merge pull request #834 from peter-evans/update-dependencies
Update dependencies
2021-05-27 13:18:59 +09:00
36d063872e chore: update dependencies 2021-05-27 01:32:21 +00:00
9825ae65b1 Merge pull request #837 from peter-evans/proxy-support
feat: add support for https_proxy env var
2021-05-24 15:11:36 +09:00
243251cf92 docs: update readme 2021-05-24 15:06:55 +09:00
28beef91aa feat: add support for https_proxy env var 2021-05-22 09:32:10 +09:00
21 changed files with 10099 additions and 7999 deletions

View File

@ -14,5 +14,10 @@
"plugins": ["@typescript-eslint"], "plugins": ["@typescript-eslint"],
"rules": { "rules": {
"@typescript-eslint/camelcase": "off" "@typescript-eslint/camelcase": "off"
},
"settings": {
"import/resolver": {
"typescript": {}
}
} }
} }

View File

@ -1,31 +0,0 @@
name: Update Dependencies
on:
schedule:
- cron: '0 1 * * 4'
jobs:
update-dep:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: Update dependencies
run: |
npx -p npm-check-updates ncu -u
npm install
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
token: ${{ secrets.ACTIONS_BOT_TOKEN }}
commit-message: 'chore: update dependencies'
committer: GitHub <noreply@github.com>
author: actions-bot <actions-bot@users.noreply.github.com>
title: Update dependencies
body: |
- Dependency updates
Auto-generated by [create-pull-request][1]
[1]: https://github.com/peter-evans/create-pull-request
branch: update-dependencies

1
.gitignore vendored
View File

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

View File

@ -1,6 +1,6 @@
# <img width="24" height="24" src="docs/assets/logo.svg"> Create Pull Request # <img width="24" height="24" src="docs/assets/logo.svg"> Create Pull Request
[![CI](https://github.com/peter-evans/create-pull-request/workflows/CI/badge.svg)](https://github.com/peter-evans/create-pull-request/actions?query=workflow%3ACI) [![CI](https://github.com/peter-evans/create-pull-request/workflows/CI/badge.svg)](https://github.com/peter-evans/create-pull-request/actions?query=workflow%3ACI)
[![GitHub Marketplace](https://img.shields.io/badge/Marketplace-Create%20Pull%20Request-blue.svg?colorA=24292e&colorB=0366d6&style=flat&longCache=true&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAM6wAADOsB5dZE0gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAERSURBVCiRhZG/SsMxFEZPfsVJ61jbxaF0cRQRcRJ9hlYn30IHN/+9iquDCOIsblIrOjqKgy5aKoJQj4O3EEtbPwhJbr6Te28CmdSKeqzeqr0YbfVIrTBKakvtOl5dtTkK+v4HfA9PEyBFCY9AGVgCBLaBp1jPAyfAJ/AAdIEG0dNAiyP7+K1qIfMdonZic6+WJoBJvQlvuwDqcXadUuqPA1NKAlexbRTAIMvMOCjTbMwl1LtI/6KWJ5Q6rT6Ht1MA58AX8Apcqqt5r2qhrgAXQC3CZ6i1+KMd9TRu3MvA3aH/fFPnBodb6oe6HM8+lYHrGdRXW8M9bMZtPXUji69lmf5Cmamq7quNLFZXD9Rq7v0Bpc1o/tp0fisAAAAASUVORK5CYII=)](https://github.com/marketplace/actions/create-pull-request) [![GitHub Marketplace](https://img.shields.io/badge/Marketplace-Create%20Pull%20Request-blue.svg?colorA=24292e&colorB=0366d6&style=flat&longCache=true&logo=github)](https://github.com/marketplace/actions/create-pull-request)
A GitHub action to create a pull request for changes to your repository in the actions workspace. A GitHub action to create a pull request for changes to your repository in the actions workspace.
@ -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>` |
@ -60,9 +61,17 @@ All inputs are **optional**. If not set, sensible defaults will be used.
| `labels` | A comma or newline-separated list of labels. | | | `labels` | A comma or newline-separated list of labels. | |
| `assignees` | A comma or newline-separated list of assignees (GitHub usernames). | | | `assignees` | A comma or newline-separated list of assignees (GitHub usernames). | |
| `reviewers` | A comma or newline-separated list of reviewers (GitHub usernames) to request a review from. | | | `reviewers` | A comma or newline-separated list of reviewers (GitHub usernames) to request a review from. | |
| `team-reviewers` | A comma or newline-separated list of GitHub teams to request a review from. Note that a `repo` scoped [PAT](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) may be required. See [this issue](https://github.com/peter-evans/create-pull-request/issues/155). | | | `team-reviewers` | A comma or newline-separated list of GitHub teams to request a review from. Note that a `repo` scoped [PAT](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) may be required. See [this issue](https://github.com/peter-evans/create-pull-request/issues/155). If using a GitHub App, refer to [Authenticating with GitHub App generated tokens](docs/concepts-guidelines.md#authenticating-with-github-app-generated-tokens) for the proper permissions. | |
| `milestone` | The number of the milestone to associate this pull request with. | | | `milestone` | The number of the milestone to associate this pull request with. | |
| `draft` | Create a [draft pull request](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests#draft-pull-requests). | `false` | | `draft` | Create a [draft pull request](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests#draft-pull-requests). It is not possible to change draft status after creation except through the web interface. | `false` |
For self-hosted runners behind a corporate proxy set the `https_proxy` environment variable.
```yml
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
env:
https_proxy: http://<proxy_address>:<port>
```
### Action outputs ### Action outputs
@ -71,6 +80,7 @@ The following outputs can be used by subsequent workflow steps.
- `pull-request-number` - The pull request number. - `pull-request-number` - The pull request number.
- `pull-request-url` - The URL of the pull request. - `pull-request-url` - The URL of the pull request.
- `pull-request-operation` - The pull request operation performed by the action, `created`, `updated` or `closed`. - `pull-request-operation` - The pull request operation performed by the action, `created`, `updated` or `closed`.
- `pull-request-head-sha` - The commit SHA of the pull request branch.
Step outputs can be accessed as in the following example. Step outputs can be accessed as in the following example.
Note that in order to read the step outputs the action step must have an id. Note that in order to read the step outputs the action step must have an id.
@ -113,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).
@ -136,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.
@ -207,11 +248,6 @@ jobs:
maintainers maintainers
milestone: 1 milestone: 1
draft: false draft: false
- name: Check outputs
run: |
echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
``` ```
An example based on the above reference configuration creates pull requests that look like this: An example based on the above reference configuration creates pull requests that look like this:

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()
@ -1740,4 +1848,27 @@ describe('create-or-update-branch tests', () => {
]) ])
).toBeTruthy() ).toBeTruthy()
}) })
// This failure mode is a limitation of the action. Controlling your own commits cannot be used in detached HEAD state.
// https://github.com/peter-evans/create-pull-request/issues/902
it('tests failure to create with commits on the working base (during the workflow) in detached HEAD state (WBNR)', async () => {
// Checkout the HEAD commit SHA
const headSha = await git.revParse('HEAD')
await git.checkout(headSha)
// Create commits on the working base
const commits = await createCommits(git)
const commitMessage = uuidv4()
const result = await createOrUpdateBranch(
git,
commitMessage,
BASE,
BRANCH,
REMOTE_NAME,
false,
ADD_PATHS
)
// The action cannot successfully create the branch
expect(result.action).toEqual('none')
})
}) })

View File

@ -16,7 +16,7 @@ COPY __test__/entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"] ENTRYPOINT ["/entrypoint.sh"]
EOF EOF
docker build -t $IMAGE . docker build --no-cache -t $IMAGE .
rm Dockerfile rm Dockerfile
fi fi

View File

@ -58,7 +58,7 @@ describe('utils tests', () => {
utils.getRemoteDetail(remoteUrl) utils.getRemoteDetail(remoteUrl)
// Fail the test if an error wasn't thrown // Fail the test if an error wasn't thrown
expect(true).toEqual(false) expect(true).toEqual(false)
} catch (e) { } catch (e: any) {
expect(e.message).toEqual( expect(e.message).toEqual(
`The format of '${remoteUrl}' is not a valid GitHub repository URL` `The format of '${remoteUrl}' is not a valid GitHub repository URL`
) )
@ -104,7 +104,7 @@ describe('utils tests', () => {
utils.parseDisplayNameEmail(displayNameEmail1) utils.parseDisplayNameEmail(displayNameEmail1)
// Fail the test if an error wasn't thrown // Fail the test if an error wasn't thrown
expect(true).toEqual(false) expect(true).toEqual(false)
} catch (e) { } catch (e: any) {
expect(e.message).toEqual( expect(e.message).toEqual(
`The format of '${displayNameEmail1}' is not a valid email address with display name` `The format of '${displayNameEmail1}' is not a valid email address with display name`
) )
@ -115,7 +115,7 @@ describe('utils tests', () => {
utils.parseDisplayNameEmail(displayNameEmail2) utils.parseDisplayNameEmail(displayNameEmail2)
// Fail the test if an error wasn't thrown // Fail the test if an error wasn't thrown
expect(true).toEqual(false) expect(true).toEqual(false)
} catch (e) { } catch (e: any) {
expect(e.message).toEqual( expect(e.message).toEqual(
`The format of '${displayNameEmail2}' is not a valid email address with display name` `The format of '${displayNameEmail2}' is not a valid email address with display name`
) )

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'
@ -62,11 +69,17 @@ inputs:
milestone: milestone:
description: 'The number of the milestone to associate the pull request with.' description: 'The number of the milestone to associate the pull request with.'
draft: draft:
description: 'Create a draft pull request' description: 'Create a draft pull request. It is not possible to change draft status after creation except through the web interface'
default: false default: false
outputs: outputs:
pull-request-number: pull-request-number:
description: 'The pull request number' description: 'The pull request number'
pull-request-url:
description: 'The URL of the pull request.'
pull-request-operation:
description: 'The pull request operation performed by the action, `created`, `updated` or `closed`.'
pull-request-head-sha:
description: 'The commit SHA of the pull request branch.'
runs: runs:
using: 'node12' using: 'node12'
main: 'dist/index.js' main: 'dist/index.js'

6742
dist/index.js vendored

File diff suppressed because it is too large Load Diff

View File

@ -248,6 +248,8 @@ GitHub App generated tokens are more secure than using a PAT because GitHub App
- Uncheck `Active` under `Webhook`. You do not need to enter a `Webhook URL`. - Uncheck `Active` under `Webhook`. You do not need to enter a `Webhook URL`.
- Under `Repository permissions: Contents` select `Access: Read & write`. - Under `Repository permissions: Contents` select `Access: Read & write`.
- Under `Repository permissions: Pull requests` select `Access: Read & write`. - Under `Repository permissions: Pull requests` select `Access: Read & write`.
- Under `Organization permissions: Members` select `Access: Read-only`.
- **NOTE**: Only needed if you would like add teams as reviewers to PRs.
2. Create a Private key from the App settings page and store it securely. 2. Create a Private key from the App settings page and store it securely.

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.

10896
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -29,26 +29,29 @@
}, },
"homepage": "https://github.com/peter-evans/create-pull-request", "homepage": "https://github.com/peter-evans/create-pull-request",
"dependencies": { "dependencies": {
"@actions/core": "1.2.7", "@actions/core": "^1.6.0",
"@actions/exec": "1.0.4", "@actions/exec": "^1.1.0",
"@octokit/core": "3.4.0", "@octokit/core": "^3.5.1",
"@octokit/plugin-paginate-rest": "2.13.3", "@octokit/plugin-paginate-rest": "^2.17.0",
"@octokit/plugin-rest-endpoint-methods": "5.1.1", "@octokit/plugin-rest-endpoint-methods": "^5.13.0",
"uuid": "8.3.2" "https-proxy-agent": "^5.0.0",
"uuid": "^8.3.2"
}, },
"devDependencies": { "devDependencies": {
"@types/jest": "26.0.23", "@types/jest": "^27.0.3",
"@types/node": "15.0.3", "@types/node": "^16.11.11",
"@typescript-eslint/parser": "4.23.0", "@typescript-eslint/parser": "^5.5.0",
"@vercel/ncc": "0.28.5", "@vercel/ncc": "^0.32.0",
"eslint": "7.26.0", "eslint": "^8.3.0",
"eslint-plugin-github": "4.1.3", "eslint-import-resolver-typescript": "^2.5.0",
"eslint-plugin-jest": "24.3.6", "eslint-plugin-github": "^4.3.5",
"jest": "26.6.3", "eslint-plugin-import": "^2.25.3",
"jest-circus": "26.6.3", "eslint-plugin-jest": "^25.3.0",
"js-yaml": "4.1.0", "jest": "^27.4.3",
"prettier": "2.3.0", "jest-circus": "^27.4.2",
"ts-jest": "26.5.6", "js-yaml": "^4.1.0",
"typescript": "4.2.4" "prettier": "^2.5.0",
"ts-jest": "^27.0.7",
"typescript": "^4.5.2"
} }
} }

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.
@ -110,7 +111,8 @@ export async function createOrUpdateBranch(
const result: CreateOrUpdateBranchResult = { const result: CreateOrUpdateBranchResult = {
action: 'none', action: 'none',
base: base, base: base,
hasDiffWithBase: false hasDiffWithBase: false,
headSha: ''
} }
// Save the working base changes to a temporary branch // Save the working base changes to a temporary branch
@ -119,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
@ -231,6 +238,9 @@ export async function createOrUpdateBranch(
result.hasDiffWithBase = await isAhead(git, base, branch) result.hasDiffWithBase = await isAhead(git, base, branch)
} }
// Get the pull request branch SHA
result.headSha = await git.revParse('HEAD')
// Delete the temporary branch // Delete the temporary branch
await git.exec(['branch', '--delete', '--force', tempBranch]) await git.exec(['branch', '--delete', '--force', tempBranch])
@ -241,4 +251,5 @@ interface CreateOrUpdateBranchResult {
action: string action: string
base: string base: string
hasDiffWithBase: boolean hasDiffWithBase: boolean
headSha: string
} }

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()
@ -212,6 +214,7 @@ export async function createPullRequest(inputs: Inputs): Promise<void> {
} else if (result.action == 'updated') { } else if (result.action == 'updated') {
core.setOutput('pull-request-operation', 'updated') core.setOutput('pull-request-operation', 'updated')
} }
core.setOutput('pull-request-head-sha', result.headSha)
// Deprecated // Deprecated
core.exportVariable('PULL_REQUEST_NUMBER', pull.number) core.exportVariable('PULL_REQUEST_NUMBER', pull.number)
core.endGroup() core.endGroup()
@ -237,7 +240,7 @@ export async function createPullRequest(inputs: Inputs): Promise<void> {
} }
} }
} }
} catch (error) { } catch (error: any) {
core.setFailed(error.message) core.setFailed(error.message)
} finally { } finally {
// Remove auth and restore persisted auth config if it existed // Remove auth and restore persisted auth config if it existed

View File

@ -33,7 +33,7 @@ export class GitAuthHelper {
try { try {
await this.setExtraheaderConfig(this.persistedExtraheaderConfigValue) await this.setExtraheaderConfig(this.persistedExtraheaderConfigValue)
core.info('Persisted git credentials restored') core.info('Persisted git credentials restored')
} catch (e) { } catch (e: any) {
core.warning(e) core.warning(e)
} }
} }

View File

@ -32,6 +32,8 @@ export class GitCommandManager {
} else { } else {
args.push(ref) args.push(ref)
} }
// https://github.com/git/git/commit/a047fafc7866cc4087201e284dc1f53e8f9a32d5
args.push('--')
await this.exec(args) await this.exec(args)
} }

View File

@ -60,7 +60,7 @@ export class GitHubHelper {
html_url: pull.html_url, html_url: pull.html_url,
created: true created: true
} }
} catch (e) { } catch (e: any) {
if ( if (
e.message && e.message &&
e.message.includes(`A pull request already exists for ${headBranch}`) e.message.includes(`A pull request already exists for ${headBranch}`)
@ -84,8 +84,7 @@ export class GitHubHelper {
...this.parseRepository(baseRepository), ...this.parseRepository(baseRepository),
pull_number: pulls[0].number, pull_number: pulls[0].number,
title: inputs.title, title: inputs.title,
body: inputs.body, body: inputs.body
draft: inputs.draft
}) })
core.info( core.info(
`Updated pull request #${pull.number} (${headBranch} => ${inputs.base})` `Updated pull request #${pull.number} (${headBranch} => ${inputs.base})`
@ -165,7 +164,7 @@ export class GitHubHelper {
pull_number: pull.number, pull_number: pull.number,
...requestReviewersParams ...requestReviewersParams
}) })
} catch (e) { } catch (e: any) {
if (e.message && e.message.includes(ERROR_PR_REVIEW_FROM_AUTHOR)) { if (e.message && e.message.includes(ERROR_PR_REVIEW_FROM_AUTHOR)) {
core.warning(ERROR_PR_REVIEW_FROM_AUTHOR) core.warning(ERROR_PR_REVIEW_FROM_AUTHOR)
} else { } else {

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'),
@ -29,7 +30,7 @@ async function run(): Promise<void> {
core.debug(`Inputs: ${inspect(inputs)}`) core.debug(`Inputs: ${inspect(inputs)}`)
await createPullRequest(inputs) await createPullRequest(inputs)
} catch (error) { } catch (error: any) {
core.setFailed(error.message) core.setFailed(error.message)
} }
} }

View File

@ -1,7 +1,23 @@
import {Octokit as Core} from '@octokit/core' import {Octokit as Core} from '@octokit/core'
import {paginateRest} from '@octokit/plugin-paginate-rest' import {paginateRest} from '@octokit/plugin-paginate-rest'
import {restEndpointMethods} from '@octokit/plugin-rest-endpoint-methods' import {restEndpointMethods} from '@octokit/plugin-rest-endpoint-methods'
import {HttpsProxyAgent} from 'https-proxy-agent'
export {RestEndpointMethodTypes} from '@octokit/plugin-rest-endpoint-methods' export {RestEndpointMethodTypes} from '@octokit/plugin-rest-endpoint-methods'
export {OctokitOptions} from '@octokit/core/dist-types/types' export {OctokitOptions} from '@octokit/core/dist-types/types'
export const Octokit = Core.plugin(paginateRest, restEndpointMethods) export const Octokit = Core.plugin(
paginateRest,
restEndpointMethods,
autoProxyAgent
)
// Octokit plugin to support the https_proxy environment variable
function autoProxyAgent(octokit: Core) {
const proxy = process.env.https_proxy || process.env.HTTPS_PROXY
if (!proxy) return
const agent = new HttpsProxyAgent(proxy)
octokit.hook.before('request', options => {
options.request.agent = agent
})
}

View File

@ -134,7 +134,7 @@ export function fileExistsSync(path: string): boolean {
let stats: fs.Stats let stats: fs.Stats
try { try {
stats = fs.statSync(path) stats = fs.statSync(path)
} catch (error) { } catch (error: any) {
if (error.code === 'ENOENT') { if (error.code === 'ENOENT') {
return false return false
} }