Compare commits

..

No commits in common. "main" and "v7.0.10" have entirely different histories.

18 changed files with 1526 additions and 1575 deletions

View file

@ -22,18 +22,18 @@ jobs:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
- uses: actions/setup-node@v6 - uses: actions/setup-node@v6
with: with:
node-version-file: package.json node-version: 20.x
cache: npm cache: npm
- run: npm ci - run: npm ci
- run: npm run build - run: npm run build
- run: npm run format-check - run: npm run format-check
- run: npm run lint - run: npm run lint
- run: npm run test - run: npm run test
- uses: actions/upload-artifact@v7 - uses: actions/upload-artifact@v5
with: with:
name: dist name: dist
path: dist path: dist
- uses: actions/upload-artifact@v7 - uses: actions/upload-artifact@v5
with: with:
name: action.yml name: action.yml
path: action.yml path: action.yml
@ -50,12 +50,12 @@ jobs:
with: with:
ref: main ref: main
- if: matrix.target == 'built' || github.event_name == 'pull_request' - if: matrix.target == 'built' || github.event_name == 'pull_request'
uses: actions/download-artifact@v8 uses: actions/download-artifact@v6
with: with:
name: dist name: dist
path: dist path: dist
- if: matrix.target == 'built' || github.event_name == 'pull_request' - if: matrix.target == 'built' || github.event_name == 'pull_request'
uses: actions/download-artifact@v8 uses: actions/download-artifact@v6
with: with:
name: action.yml name: action.yml
path: . path: .
@ -119,12 +119,12 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
- uses: actions/download-artifact@v8 - uses: actions/download-artifact@v6
with: with:
name: dist name: dist
path: dist path: dist
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
token: ${{ secrets.ACTIONS_BOT_TOKEN }} token: ${{ secrets.ACTIONS_BOT_TOKEN }}
commit-message: 'build: update distribution' commit-message: 'build: update distribution'

View file

@ -11,8 +11,8 @@ on:
type: choice type: choice
description: The major version tag to update description: The major version tag to update
options: options:
- v6
- v7 - v7
- v8
jobs: jobs:
tag: tag:

View file

@ -21,21 +21,21 @@ Create Pull Request action will:
- [Concepts, guidelines and advanced usage](docs/concepts-guidelines.md) - [Concepts, guidelines and advanced usage](docs/concepts-guidelines.md)
- [Examples](docs/examples.md) - [Examples](docs/examples.md)
- [Updating between versions](docs/updating.md) - [Updating to v7](docs/updating.md)
- [Common issues](docs/common-issues.md) - [Common issues](docs/common-issues.md)
## Usage ## Usage
```yml ```yml
- uses: actions/checkout@v6 - uses: actions/checkout@v4
# Make changes to pull request here # Make changes to pull request here
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
``` ```
You can also pin to a [specific release](https://github.com/peter-evans/create-pull-request/releases) version in the format `@v8.x.x` You can also pin to a [specific release](https://github.com/peter-evans/create-pull-request/releases) version in the format `@v7.x.x`
### Workflow permissions ### Workflow permissions
@ -131,7 +131,7 @@ If you want branches to be deleted immediately on merge then you should use GitH
For self-hosted runners behind a corporate proxy set the `https_proxy` environment variable. For self-hosted runners behind a corporate proxy set the `https_proxy` environment variable.
```yml ```yml
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
env: env:
https_proxy: http://<proxy_address>:<port> https_proxy: http://<proxy_address>:<port>
``` ```
@ -153,7 +153,7 @@ Note that in order to read the step outputs the action step must have an id.
```yml ```yml
- name: Create Pull Request - name: Create Pull Request
id: cpr id: cpr
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
- name: Check outputs - name: Check outputs
if: ${{ steps.cpr.outputs.pull-request-number }} if: ${{ steps.cpr.outputs.pull-request-number }}
run: | run: |
@ -216,7 +216,7 @@ File changes that do not match one of the paths will be stashed and restored aft
```yml ```yml
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
add-paths: | add-paths: |
*.java *.java
@ -230,7 +230,7 @@ Note that the repository must be checked out on a branch with a remote, it won't
```yml ```yml
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
- name: Create commits - name: Create commits
run: | run: |
git config user.name 'Peter Evans' git config user.name 'Peter Evans'
@ -243,7 +243,7 @@ Note that the repository must be checked out on a branch with a remote, it won't
- name: Uncommitted change - name: Uncommitted change
run: date +%s > report.txt run: date +%s > report.txt
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
``` ```
### Auto-merge ### Auto-merge
@ -263,14 +263,14 @@ jobs:
createPullRequest: createPullRequest:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
- name: Make changes to pull request - name: Make changes to pull request
run: date +%s > report.txt run: date +%s > report.txt
- name: Create Pull Request - name: Create Pull Request
id: cpr id: cpr
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
token: ${{ secrets.PAT }} token: ${{ secrets.PAT }}
commit-message: Update report commit-message: Update report

View file

@ -4,10 +4,10 @@ import {
getWorkingBaseAndType, getWorkingBaseAndType,
buildBranchCommits buildBranchCommits
} from '../lib/create-or-update-branch' } from '../lib/create-or-update-branch'
import {randomUUID} from 'crypto'
import * as fs from 'fs' import * as fs from 'fs'
import {GitCommandManager} from '../lib/git-command-manager' import {GitCommandManager} from '../lib/git-command-manager'
import * as path from 'path' import * as path from 'path'
import {v4 as uuidv4} from 'uuid'
const REPO_PATH = '/git/local/repos/test-base' const REPO_PATH = '/git/local/repos/test-base'
const REMOTE_NAME = 'origin' const REMOTE_NAME = 'origin'
@ -31,7 +31,7 @@ const ADD_PATHS_MULTI = ['a', 'b']
const ADD_PATHS_WILDCARD = ['a/*.txt', 'b/*.txt'] const ADD_PATHS_WILDCARD = ['a/*.txt', 'b/*.txt']
async function createFile(filename: string, content?: string): Promise<string> { async function createFile(filename: string, content?: string): Promise<string> {
const _content = content ? content : randomUUID() const _content = content ? content : uuidv4()
const filepath = path.join(REPO_PATH, filename) const filepath = path.join(REPO_PATH, filename)
await fs.promises.mkdir(path.dirname(filepath), {recursive: true}) await fs.promises.mkdir(path.dirname(filepath), {recursive: true})
await fs.promises.writeFile(filepath, _content, {encoding: 'utf8'}) await fs.promises.writeFile(filepath, _content, {encoding: 'utf8'})
@ -82,7 +82,7 @@ async function createCommits(
} else { } else {
result.changes = await createChanges() result.changes = await createChanges()
} }
const commitMessage = randomUUID() const commitMessage = uuidv4()
await git.exec(['add', '-A']) await git.exec(['add', '-A'])
await git.commit(['-m', commitMessage]) await git.commit(['-m', commitMessage])
result.commitMsgs.unshift(commitMessage) result.commitMsgs.unshift(commitMessage)
@ -313,7 +313,7 @@ describe('create-or-update-branch tests', () => {
}) })
it('tests no changes resulting in no new branch being created', async () => { it('tests no changes resulting in no new branch being created', async () => {
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -330,7 +330,7 @@ describe('create-or-update-branch tests', () => {
it('tests create and update with a tracked file change', async () => { it('tests create and update with a tracked file change', async () => {
// Create a tracked file change // Create a tracked file change
const trackedContent = await createFile(TRACKED_FILE) const trackedContent = await createFile(TRACKED_FILE)
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -359,7 +359,7 @@ describe('create-or-update-branch tests', () => {
// Create a tracked file change // Create a tracked file change
const _trackedContent = await createFile(TRACKED_FILE) const _trackedContent = await createFile(TRACKED_FILE)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -381,7 +381,7 @@ describe('create-or-update-branch tests', () => {
it('tests create and update with an untracked file change', async () => { it('tests create and update with an untracked file change', async () => {
// Create an untracked file change // Create an untracked file change
const untrackedContent = await createFile(UNTRACKED_FILE) const untrackedContent = await createFile(UNTRACKED_FILE)
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -410,7 +410,7 @@ describe('create-or-update-branch tests', () => {
// Create an untracked file change // Create an untracked file change
const _untrackedContent = await createFile(UNTRACKED_FILE) const _untrackedContent = await createFile(UNTRACKED_FILE)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -434,7 +434,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -464,7 +464,7 @@ describe('create-or-update-branch tests', () => {
// Create identical tracked and untracked file changes // Create identical tracked and untracked file changes
await createChanges(changes.tracked, changes.untracked) await createChanges(changes.tracked, changes.untracked)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -486,7 +486,7 @@ describe('create-or-update-branch tests', () => {
it('tests create and update with commits on the base inbetween', async () => { it('tests create and update with commits on the base inbetween', async () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -524,7 +524,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const _changes = await createChanges() const _changes = await createChanges()
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -556,7 +556,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -585,7 +585,7 @@ describe('create-or-update-branch tests', () => {
await beforeTest() await beforeTest()
// Running with no update effectively reverts the branch back to match the base // Running with no update effectively reverts the branch back to match the base
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -607,7 +607,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -648,7 +648,7 @@ describe('create-or-update-branch tests', () => {
commits.changes.tracked, commits.changes.tracked,
commits.changes.untracked commits.changes.untracked
) )
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -673,7 +673,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -703,7 +703,7 @@ describe('create-or-update-branch tests', () => {
// Create a commit on the base with a partial merge of the changes // Create a commit on the base with a partial merge of the changes
await createFile(TRACKED_FILE, changes.tracked) await createFile(TRACKED_FILE, changes.tracked)
const baseCommitMessage = randomUUID() const baseCommitMessage = uuidv4()
await git.exec(['add', '-A']) await git.exec(['add', '-A'])
await git.commit(['-m', baseCommitMessage]) await git.commit(['-m', baseCommitMessage])
await git.push([ await git.push([
@ -714,7 +714,7 @@ describe('create-or-update-branch tests', () => {
// Create the same tracked and untracked file changes // Create the same tracked and untracked file changes
const _changes = await createChanges(changes.tracked, changes.untracked) const _changes = await createChanges(changes.tracked, changes.untracked)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -746,7 +746,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -790,7 +790,7 @@ describe('create-or-update-branch tests', () => {
// Create the same tracked and untracked file changes (no change on update) // Create the same tracked and untracked file changes (no change on update)
const _changes = await createChanges(changes.tracked, changes.untracked) const _changes = await createChanges(changes.tracked, changes.untracked)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -816,7 +816,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -845,7 +845,7 @@ describe('create-or-update-branch tests', () => {
await beforeTest() await beforeTest()
// Force push the base branch to a different commit // Force push the base branch to a different commit
const amendedCommitMessage = randomUUID() const amendedCommitMessage = uuidv4()
await git.commit(['--amend', '-m', amendedCommitMessage]) await git.commit(['--amend', '-m', amendedCommitMessage])
await git.push([ await git.push([
'--force', '--force',
@ -855,7 +855,7 @@ describe('create-or-update-branch tests', () => {
// Create the same tracked and untracked file changes (no change on update) // Create the same tracked and untracked file changes (no change on update)
const _changes = await createChanges(changes.tracked, changes.untracked) const _changes = await createChanges(changes.tracked, changes.untracked)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -878,7 +878,7 @@ describe('create-or-update-branch tests', () => {
it('tests create and update with commits on the working base (during the workflow)', async () => { it('tests create and update with commits on the working base (during the workflow)', async () => {
// Create commits on the working base // Create commits on the working base
const commits = await createCommits(git) const commits = await createCommits(git)
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -910,7 +910,7 @@ describe('create-or-update-branch tests', () => {
// Create commits on the working base // Create commits on the working base
const _commits = await createCommits(git) const _commits = await createCommits(git)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -937,7 +937,7 @@ describe('create-or-update-branch tests', () => {
const commits = await createCommits(git) const commits = await createCommits(git)
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -973,7 +973,7 @@ describe('create-or-update-branch tests', () => {
const _commits = await createCommits(git) const _commits = await createCommits(git)
// Create tracked and untracked file changes // Create tracked and untracked file changes
const _changes = await createChanges() const _changes = await createChanges()
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1002,7 +1002,7 @@ describe('create-or-update-branch tests', () => {
const commits = await createCommits(git) const commits = await createCommits(git)
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1046,7 +1046,7 @@ describe('create-or-update-branch tests', () => {
const _commits = await createCommits(git) const _commits = await createCommits(git)
// Create tracked and untracked file changes // Create tracked and untracked file changes
const _changes = await createChanges() const _changes = await createChanges()
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1074,7 +1074,7 @@ describe('create-or-update-branch tests', () => {
it('tests create and update using a different remote from the base', async () => { it('tests create and update using a different remote from the base', async () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1104,7 +1104,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const _changes = await createChanges() const _changes = await createChanges()
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1127,7 +1127,7 @@ describe('create-or-update-branch tests', () => {
it('tests create and update with signoff on commit', async () => { it('tests create and update with signoff on commit', async () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1164,7 +1164,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const _changes = await createChanges() const _changes = await createChanges()
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1194,7 +1194,7 @@ describe('create-or-update-branch tests', () => {
it('tests create and update with multiple add-paths', async () => { it('tests create and update with multiple add-paths', async () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1224,7 +1224,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const _changes = await createChanges() const _changes = await createChanges()
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1247,7 +1247,7 @@ describe('create-or-update-branch tests', () => {
it('tests create and update with wildcard add-paths', async () => { it('tests create and update with wildcard add-paths', async () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1277,7 +1277,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const _changes = await createChanges() const _changes = await createChanges()
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1300,7 +1300,7 @@ describe('create-or-update-branch tests', () => {
it('tests create with add-paths resolving to no changes when other changes exist', async () => { it('tests create with add-paths resolving to no changes when other changes exist', async () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
await createChanges() await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1321,7 +1321,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const resultA = await createOrUpdateBranch( const resultA = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1365,7 +1365,7 @@ describe('create-or-update-branch tests', () => {
// Set the working base to a branch that is not the pull request base // Set the working base to a branch that is not the pull request base
await git.checkout(NOT_BASE_BRANCH) await git.checkout(NOT_BASE_BRANCH)
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1386,7 +1386,7 @@ describe('create-or-update-branch tests', () => {
// Create a tracked file change // Create a tracked file change
const trackedContent = await createFile(TRACKED_FILE) const trackedContent = await createFile(TRACKED_FILE)
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1418,7 +1418,7 @@ describe('create-or-update-branch tests', () => {
// Create a tracked file change // Create a tracked file change
const _trackedContent = await createFile(TRACKED_FILE) const _trackedContent = await createFile(TRACKED_FILE)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1443,7 +1443,7 @@ describe('create-or-update-branch tests', () => {
// Create an untracked file change // Create an untracked file change
const untrackedContent = await createFile(UNTRACKED_FILE) const untrackedContent = await createFile(UNTRACKED_FILE)
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1475,7 +1475,7 @@ describe('create-or-update-branch tests', () => {
// Create an untracked file change // Create an untracked file change
const _untrackedContent = await createFile(UNTRACKED_FILE) const _untrackedContent = await createFile(UNTRACKED_FILE)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1502,7 +1502,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1535,7 +1535,7 @@ describe('create-or-update-branch tests', () => {
// Create identical tracked and untracked file changes // Create identical tracked and untracked file changes
await createChanges(changes.tracked, changes.untracked) await createChanges(changes.tracked, changes.untracked)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1560,7 +1560,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1601,7 +1601,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const _changes = await createChanges() const _changes = await createChanges()
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1635,7 +1635,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1667,7 +1667,7 @@ describe('create-or-update-branch tests', () => {
await git.checkout(NOT_BASE_BRANCH) await git.checkout(NOT_BASE_BRANCH)
// Running with no update effectively reverts the branch back to match the base // Running with no update effectively reverts the branch back to match the base
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1694,7 +1694,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1738,7 +1738,7 @@ describe('create-or-update-branch tests', () => {
commits.changes.tracked, commits.changes.tracked,
commits.changes.untracked commits.changes.untracked
) )
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1768,7 +1768,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1798,7 +1798,7 @@ describe('create-or-update-branch tests', () => {
// Create a commit on the base with a partial merge of the changes // Create a commit on the base with a partial merge of the changes
await createFile(TRACKED_FILE, changes.tracked) await createFile(TRACKED_FILE, changes.tracked)
const baseCommitMessage = randomUUID() const baseCommitMessage = uuidv4()
await git.exec(['add', '-A']) await git.exec(['add', '-A'])
await git.commit(['-m', baseCommitMessage]) await git.commit(['-m', baseCommitMessage])
await git.push([ await git.push([
@ -1812,7 +1812,7 @@ describe('create-or-update-branch tests', () => {
// Create the same tracked and untracked file changes // Create the same tracked and untracked file changes
const _changes = await createChanges(changes.tracked, changes.untracked) const _changes = await createChanges(changes.tracked, changes.untracked)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1846,7 +1846,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1893,7 +1893,7 @@ describe('create-or-update-branch tests', () => {
// Create the same tracked and untracked file changes (no change on update) // Create the same tracked and untracked file changes (no change on update)
const _changes = await createChanges(changes.tracked, changes.untracked) const _changes = await createChanges(changes.tracked, changes.untracked)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1924,7 +1924,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -1953,7 +1953,7 @@ describe('create-or-update-branch tests', () => {
await beforeTest() await beforeTest()
// Force push the base branch to a different commit // Force push the base branch to a different commit
const amendedCommitMessage = randomUUID() const amendedCommitMessage = uuidv4()
await git.commit(['--amend', '-m', amendedCommitMessage]) await git.commit(['--amend', '-m', amendedCommitMessage])
await git.push([ await git.push([
'--force', '--force',
@ -1966,7 +1966,7 @@ describe('create-or-update-branch tests', () => {
// Create the same tracked and untracked file changes (no change on update) // Create the same tracked and untracked file changes (no change on update)
const _changes = await createChanges(changes.tracked, changes.untracked) const _changes = await createChanges(changes.tracked, changes.untracked)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -1992,7 +1992,7 @@ describe('create-or-update-branch tests', () => {
// Create commits on the working base // Create commits on the working base
const commits = await createCommits(git) const commits = await createCommits(git)
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -2027,7 +2027,7 @@ describe('create-or-update-branch tests', () => {
// Create commits on the working base // Create commits on the working base
const _commits = await createCommits(git) const _commits = await createCommits(git)
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -2057,7 +2057,7 @@ describe('create-or-update-branch tests', () => {
const commits = await createCommits(git) const commits = await createCommits(git)
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -2096,7 +2096,7 @@ describe('create-or-update-branch tests', () => {
const _commits = await createCommits(git) const _commits = await createCommits(git)
// Create tracked and untracked file changes // Create tracked and untracked file changes
const _changes = await createChanges() const _changes = await createChanges()
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -2128,7 +2128,7 @@ describe('create-or-update-branch tests', () => {
const commits = await createCommits(git) const commits = await createCommits(git)
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -2175,7 +2175,7 @@ describe('create-or-update-branch tests', () => {
const _commits = await createCommits(git) const _commits = await createCommits(git)
// Create tracked and untracked file changes // Create tracked and untracked file changes
const _changes = await createChanges() const _changes = await createChanges()
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -2205,7 +2205,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -2238,7 +2238,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const _changes = await createChanges() const _changes = await createChanges()
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -2268,7 +2268,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -2302,7 +2302,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const _changes = await createChanges() const _changes = await createChanges()
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -2329,7 +2329,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -2371,7 +2371,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const _changes = await createChanges() const _changes = await createChanges()
const _commitMessage = randomUUID() const _commitMessage = uuidv4()
const _result = await createOrUpdateBranch( const _result = await createOrUpdateBranch(
git, git,
_commitMessage, _commitMessage,
@ -2403,7 +2403,7 @@ describe('create-or-update-branch tests', () => {
// Create commits on the working base // Create commits on the working base
const commits = await createCommits(git) const commits = await createCommits(git)
const commitMessage = randomUUID() const commitMessage = uuidv4()
const result = await createOrUpdateBranch( const result = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,
@ -2428,7 +2428,7 @@ describe('create-or-update-branch tests', () => {
// Create tracked and untracked file changes // Create tracked and untracked file changes
const changes = await createChanges() const changes = await createChanges()
const commitMessage = randomUUID() const commitMessage = uuidv4()
const resultA = await createOrUpdateBranch( const resultA = await createOrUpdateBranch(
git, git,
commitMessage, commitMessage,

View file

@ -118,71 +118,3 @@ describe('utils tests', () => {
} }
}) })
}) })
describe('retryWithBackoff', () => {
const makeConsistencyError = () => {
const error = new Error(
'Validation Failed: "Could not resolve to a node with the global id of \'PR_abc123\'."'
)
;(error as any).status = 422
return error
}
const shouldRetry = (e: unknown): boolean =>
e instanceof Error &&
(e as any).status === 422 &&
e.message.includes('Could not resolve to a node')
test('succeeds on first attempt without retrying', async () => {
const fn = jest.fn().mockResolvedValue('success')
const result = await utils.retryWithBackoff(fn, shouldRetry, 2, 1)
expect(result).toBe('success')
expect(fn).toHaveBeenCalledTimes(1)
})
test('retries on eventual consistency 422 and succeeds', async () => {
const fn = jest
.fn()
.mockRejectedValueOnce(makeConsistencyError())
.mockResolvedValue('success')
const result = await utils.retryWithBackoff(fn, shouldRetry, 2, 1)
expect(result).toBe('success')
expect(fn).toHaveBeenCalledTimes(2)
})
test('exhausts retries on persistent 422 and throws', async () => {
const fn = jest.fn().mockRejectedValue(makeConsistencyError())
await expect(utils.retryWithBackoff(fn, shouldRetry, 2, 1)).rejects.toThrow(
'Could not resolve to a node'
)
expect(fn).toHaveBeenCalledTimes(3) // 1 initial + 2 retries
})
test('does not retry on non-422 errors', async () => {
const error = new Error('Forbidden')
;(error as any).status = 403
const fn = jest.fn().mockRejectedValue(error)
await expect(utils.retryWithBackoff(fn, shouldRetry, 2, 1)).rejects.toThrow(
'Forbidden'
)
expect(fn).toHaveBeenCalledTimes(1)
})
test('does not retry on 422 without the consistency error message', async () => {
const error = new Error('Validation Failed: invalid label')
;(error as any).status = 422
const fn = jest.fn().mockRejectedValue(error)
await expect(utils.retryWithBackoff(fn, shouldRetry, 2, 1)).rejects.toThrow(
'Validation Failed: invalid label'
)
expect(fn).toHaveBeenCalledTimes(1)
})
test('does not retry on plain Error objects', async () => {
const fn = jest.fn().mockRejectedValue(new Error('Something broke'))
await expect(utils.retryWithBackoff(fn, shouldRetry, 2, 1)).rejects.toThrow(
'Something broke'
)
expect(fn).toHaveBeenCalledTimes(1)
})
})

View file

@ -94,7 +94,7 @@ outputs:
pull-request-branch: pull-request-branch:
description: 'The pull request branch name' description: 'The pull request branch name'
runs: runs:
using: 'node24' using: 'node20'
main: 'dist/index.js' main: 'dist/index.js'
branding: branding:
icon: 'git-pull-request' icon: 'git-pull-request'

1055
dist/index.js vendored

File diff suppressed because it is too large Load diff

View file

@ -37,7 +37,7 @@ So the straightforward solution is to just not install them during the workflow
- If hooks are automatically enabled by a framework, use an option provided by the framework to disable them. For example, for Husky users, they can be disabled with the `--ignore-scripts` flag, or by setting the `HUSKY` environment variable when the action runs. - If hooks are automatically enabled by a framework, use an option provided by the framework to disable them. For example, for Husky users, they can be disabled with the `--ignore-scripts` flag, or by setting the `HUSKY` environment variable when the action runs.
```yml ```yml
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
env: env:
HUSKY: '0' HUSKY: '0'
``` ```

View file

@ -40,7 +40,7 @@ For each [event type](https://docs.github.com/en/actions/reference/events-that-t
The default can be overridden by specifying a `ref` on checkout. The default can be overridden by specifying a `ref` on checkout.
```yml ```yml
- uses: actions/checkout@v6 - uses: actions/checkout@v4
with: with:
ref: develop ref: develop
``` ```
@ -77,7 +77,7 @@ jobs:
example: example:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
``` ```
There may be use cases where it makes sense to execute the workflow on a branch that is not the base of the pull request. In these cases, the base branch can be specified with the `base` action input. The action will attempt to rebase changes made during the workflow on to the actual base. There may be use cases where it makes sense to execute the workflow on a branch that is not the base of the pull request. In these cases, the base branch can be specified with the `base` action input. The action will attempt to rebase changes made during the workflow on to the actual base.
@ -92,7 +92,7 @@ In these cases, you *must supply* the `base` input so the action can rebase chan
Workflows triggered by [`pull_request`](https://docs.github.com/en/actions/reference/events-that-trigger-workflows#pull_request) events will by default check out a merge commit. Set the `base` input as follows to base the new pull request on the current pull request's branch. Workflows triggered by [`pull_request`](https://docs.github.com/en/actions/reference/events-that-trigger-workflows#pull_request) events will by default check out a merge commit. Set the `base` input as follows to base the new pull request on the current pull request's branch.
```yml ```yml
- uses: peter-evans/create-pull-request@v8 - uses: peter-evans/create-pull-request@v7
with: with:
base: ${{ github.head_ref }} base: ${{ github.head_ref }}
``` ```
@ -100,7 +100,7 @@ Workflows triggered by [`pull_request`](https://docs.github.com/en/actions/refer
Workflows triggered by [`release`](https://docs.github.com/en/actions/reference/events-that-trigger-workflows#release) events will by default check out a tag. For most use cases, you will need to set the `base` input to the branch name of the tagged commit. Workflows triggered by [`release`](https://docs.github.com/en/actions/reference/events-that-trigger-workflows#release) events will by default check out a tag. For most use cases, you will need to set the `base` input to the branch name of the tagged commit.
```yml ```yml
- uses: peter-evans/create-pull-request@v8 - uses: peter-evans/create-pull-request@v7
with: with:
base: main base: main
``` ```
@ -179,14 +179,14 @@ This action uses [ncc](https://github.com/vercel/ncc) to compile the Node.js cod
Checking out a branch from a different repository from where the workflow is executing will make *that repository* the target for the created pull request. In this case, the `GITHUB_TOKEN` will not work and one of the other [token options](../README.md#token) must be used. Checking out a branch from a different repository from where the workflow is executing will make *that repository* the target for the created pull request. In this case, the `GITHUB_TOKEN` will not work and one of the other [token options](../README.md#token) must be used.
```yml ```yml
- uses: actions/checkout@v6 - uses: actions/checkout@v4
with: with:
token: ${{ secrets.PAT }} token: ${{ secrets.PAT }}
repository: owner/repo repository: owner/repo
# Make changes to pull request here # Make changes to pull request here
- uses: peter-evans/create-pull-request@v8 - uses: peter-evans/create-pull-request@v7
with: with:
token: ${{ secrets.PAT }} token: ${{ secrets.PAT }}
``` ```
@ -210,14 +210,14 @@ How to use SSH (deploy keys) with create-pull-request action:
```yml ```yml
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
with: with:
ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}
# Make changes to pull request here # Make changes to pull request here
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
``` ```
### Push pull request branches to a fork ### Push pull request branches to a fork
@ -238,11 +238,11 @@ It will use their own fork to push code and create the pull request.
6. As shown in the following example workflow, set the `push-to-fork` input to the full repository name of the fork. 6. As shown in the following example workflow, set the `push-to-fork` input to the full repository name of the fork.
```yaml ```yaml
- uses: actions/checkout@v6 - uses: actions/checkout@v4
# Make changes to pull request here # Make changes to pull request here
- uses: peter-evans/create-pull-request@v8 - uses: peter-evans/create-pull-request@v7
with: with:
token: ${{ secrets.MACHINE_USER_PAT }} token: ${{ secrets.MACHINE_USER_PAT }}
push-to-fork: machine-user/fork-of-repository push-to-fork: machine-user/fork-of-repository
@ -280,12 +280,12 @@ The following is an example of pushing to a fork using GitHub App tokens.
owner: owner owner: owner
repositories: fork-of-repo repositories: fork-of-repo
- uses: actions/checkout@v6 - uses: actions/checkout@v4
# Make changes to pull request here # Make changes to pull request here
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
branch-token: ${{ steps.generate-token.outputs.token }} branch-token: ${{ steps.generate-token.outputs.token }}
push-to-fork: owner/fork-of-repo push-to-fork: owner/fork-of-repo
@ -325,12 +325,12 @@ GitHub App generated tokens can be configured with fine-grained permissions and
app-id: ${{ secrets.APP_ID }} app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }} private-key: ${{ secrets.APP_PRIVATE_KEY }}
- uses: actions/checkout@v6 - uses: actions/checkout@v4
# Make changes to pull request here # Make changes to pull request here
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
token: ${{ steps.generate-token.outputs.token }} token: ${{ steps.generate-token.outputs.token }}
``` ```
@ -350,7 +350,7 @@ In the following example, a pull request is being created in remote repo `owner/
owner: owner owner: owner
repositories: repo repositories: repo
- uses: actions/checkout@v6 - uses: actions/checkout@v4
with: with:
token: ${{ steps.generate-token.outputs.token }} # necessary if the repo is private token: ${{ steps.generate-token.outputs.token }} # necessary if the repo is private
repository: owner/repo repository: owner/repo
@ -358,7 +358,7 @@ In the following example, a pull request is being created in remote repo `owner/
# Make changes to pull request here # Make changes to pull request here
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
token: ${{ steps.generate-token.outputs.token }} token: ${{ steps.generate-token.outputs.token }}
``` ```
@ -382,12 +382,12 @@ The action can sign commits as `github-actions[bot]` when using the repository's
In this example the `token` input is not supplied, so the action will use the repository's default `GITHUB_TOKEN`. This will sign commits as `github-actions[bot]`. In this example the `token` input is not supplied, so the action will use the repository's default `GITHUB_TOKEN`. This will sign commits as `github-actions[bot]`.
```yaml ```yaml
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
# Make changes to pull request here # Make changes to pull request here
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
sign-commits: true sign-commits: true
``` ```
@ -395,7 +395,7 @@ In this example the `token` input is not supplied, so the action will use the re
In this example, the `token` input is generated using a GitHub App. This will sign commits as `<application-name>[bot]`. In this example, the `token` input is generated using a GitHub App. This will sign commits as `<application-name>[bot]`.
```yaml ```yaml
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
- uses: actions/create-github-app-token@v2 - uses: actions/create-github-app-token@v2
id: generate-token id: generate-token
@ -406,7 +406,7 @@ In this example, the `token` input is generated using a GitHub App. This will si
# Make changes to pull request here # Make changes to pull request here
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
token: ${{ steps.generate-token.outputs.token }} token: ${{ steps.generate-token.outputs.token }}
sign-commits: true sign-commits: true
@ -437,7 +437,7 @@ The action can use GPG to sign commits with a GPG key that you generate yourself
```yaml ```yaml
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
- uses: crazy-max/ghaction-import-gpg@v5 - uses: crazy-max/ghaction-import-gpg@v5
with: with:
@ -449,7 +449,7 @@ The action can use GPG to sign commits with a GPG key that you generate yourself
# Make changes to pull request here # Make changes to pull request here
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
token: ${{ secrets.PAT }} token: ${{ secrets.PAT }}
committer: example <email@example.com> committer: example <email@example.com>
@ -474,12 +474,12 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: apk --no-cache add git run: apk --no-cache add git
- uses: actions/checkout@v6 - uses: actions/checkout@v4
# Make changes to pull request here # Make changes to pull request here
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
``` ```
**Ubuntu container example:** **Ubuntu container example:**
@ -497,10 +497,10 @@ jobs:
add-apt-repository -y ppa:git-core/ppa add-apt-repository -y ppa:git-core/ppa
apt-get install -y git apt-get install -y git
- uses: actions/checkout@v6 - uses: actions/checkout@v4
# Make changes to pull request here # Make changes to pull request here
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
``` ```

View file

@ -42,14 +42,14 @@ jobs:
updateAuthors: updateAuthors:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Update AUTHORS - name: Update AUTHORS
run: | run: |
git log --format='%aN <%aE>%n%cN <%cE>' | sort -u > AUTHORS git log --format='%aN <%aE>%n%cN <%cE>' | sort -u > AUTHORS
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
commit-message: update authors commit-message: update authors
title: Update AUTHORS title: Update AUTHORS
@ -73,7 +73,7 @@ jobs:
productionPromotion: productionPromotion:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
with: with:
ref: production ref: production
- name: Reset promotion branch - name: Reset promotion branch
@ -81,7 +81,7 @@ jobs:
git fetch origin main:main git fetch origin main:main
git reset --hard main git reset --hard main
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
branch: production-promotion branch: production-promotion
``` ```
@ -106,7 +106,7 @@ jobs:
updateChangelog: updateChangelog:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Update Changelog - name: Update Changelog
@ -116,7 +116,7 @@ jobs:
./git-chglog -o CHANGELOG.md ./git-chglog -o CHANGELOG.md
rm git-chglog rm git-chglog
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
commit-message: update changelog commit-message: update changelog
title: Update Changelog title: Update Changelog
@ -144,7 +144,7 @@ jobs:
update-dep: update-dep:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v3
with: with:
node-version: '16.x' node-version: '16.x'
@ -153,7 +153,7 @@ jobs:
npx -p npm-check-updates ncu -u npx -p npm-check-updates ncu -u
npm install npm install
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
token: ${{ secrets.PAT }} token: ${{ secrets.PAT }}
commit-message: Update dependencies commit-message: Update dependencies
@ -180,7 +180,7 @@ jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
- uses: actions/setup-node@v3 - uses: actions/setup-node@v3
with: with:
node-version: 16.x node-version: 16.x
@ -204,7 +204,7 @@ jobs:
update-dep: update-dep:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
- uses: actions/setup-java@v2 - uses: actions/setup-java@v2
with: with:
distribution: 'temurin' distribution: 'temurin'
@ -214,7 +214,7 @@ jobs:
- name: Perform dependency resolution and write new lockfiles - name: Perform dependency resolution and write new lockfiles
run: ./gradlew dependencies --write-locks run: ./gradlew dependencies --write-locks
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
token: ${{ secrets.PAT }} token: ${{ secrets.PAT }}
commit-message: Update dependencies commit-message: Update dependencies
@ -242,14 +242,14 @@ jobs:
update-dep: update-dep:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
- name: Update dependencies - name: Update dependencies
run: | run: |
cargo install cargo-edit cargo install cargo-edit
cargo update cargo update
cargo upgrade --to-lockfile cargo upgrade --to-lockfile
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
token: ${{ secrets.PAT }} token: ${{ secrets.PAT }}
commit-message: Update dependencies commit-message: Update dependencies
@ -277,7 +277,7 @@ jobs:
updateSwagger: updateSwagger:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
- name: Get Latest Swagger UI Release - name: Get Latest Swagger UI Release
id: swagger-ui id: swagger-ui
run: | run: |
@ -307,7 +307,7 @@ jobs:
# Update current release # Update current release
echo ${{ steps.swagger-ui.outputs.release_tag }} > swagger-ui.version echo ${{ steps.swagger-ui.outputs.release_tag }} > swagger-ui.version
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
commit-message: Update swagger-ui to ${{ steps.swagger-ui.outputs.release_tag }} commit-message: Update swagger-ui to ${{ steps.swagger-ui.outputs.release_tag }}
title: Update SwaggerUI to ${{ steps.swagger-ui.outputs.release_tag }} title: Update SwaggerUI to ${{ steps.swagger-ui.outputs.release_tag }}
@ -342,7 +342,7 @@ jobs:
updateFork: updateFork:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
with: with:
repository: fork-owner/repo repository: fork-owner/repo
- name: Reset the default branch with upstream changes - name: Reset the default branch with upstream changes
@ -351,7 +351,7 @@ jobs:
git fetch upstream main:upstream-main git fetch upstream main:upstream-main
git reset --hard upstream-main git reset --hard upstream-main
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
token: ${{ secrets.PAT }} token: ${{ secrets.PAT }}
branch: upstream-changes branch: upstream-changes
@ -370,7 +370,7 @@ jobs:
format: format:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
- name: Download website - name: Download website
run: | run: |
wget \ wget \
@ -384,7 +384,7 @@ jobs:
--domains quotes.toscrape.com \ --domains quotes.toscrape.com \
http://quotes.toscrape.com/ http://quotes.toscrape.com/
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
commit-message: update local website copy commit-message: update local website copy
title: Automated Updates to Local Website Copy title: Automated Updates to Local Website Copy
@ -466,7 +466,7 @@ jobs:
if: startsWith(github.head_ref, 'autopep8-patches') == false && github.event.pull_request.head.repo.full_name == github.repository if: startsWith(github.head_ref, 'autopep8-patches') == false && github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
with: with:
ref: ${{ github.head_ref }} ref: ${{ github.head_ref }}
- name: autopep8 - name: autopep8
@ -481,7 +481,7 @@ jobs:
echo "branch-name=$branch-name" >> $GITHUB_OUTPUT echo "branch-name=$branch-name" >> $GITHUB_OUTPUT
- name: Create Pull Request - name: Create Pull Request
if: steps.autopep8.outputs.exit-code == 2 if: steps.autopep8.outputs.exit-code == 2
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
commit-message: autopep8 action fixes commit-message: autopep8 action fixes
title: Fixes by autopep8 action title: Fixes by autopep8 action
@ -515,13 +515,13 @@ jobs:
if: startsWith(github.ref, 'refs/heads/') if: startsWith(github.ref, 'refs/heads/')
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
... ...
someOtherJob: someOtherJob:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
... ...
``` ```
@ -540,7 +540,7 @@ Note that the step where output variables are defined must have an id.
echo "pr_title=$pr_title" >> $GITHUB_OUTPUT echo "pr_title=$pr_title" >> $GITHUB_OUTPUT
echo "pr_body=$pr_body" >> $GITHUB_OUTPUT echo "pr_body=$pr_body" >> $GITHUB_OUTPUT
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
title: ${{ steps.vars.outputs.pr_title }} title: ${{ steps.vars.outputs.pr_title }}
body: ${{ steps.vars.outputs.pr_body }} body: ${{ steps.vars.outputs.pr_body }}
@ -566,7 +566,7 @@ The template is rendered using the [render-template](https://github.com/chuhlomi
bar: that bar: that
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
with: with:
body: ${{ steps.template.outputs.result }} body: ${{ steps.template.outputs.result }}
``` ```
@ -622,7 +622,7 @@ For example:
```yml ```yml
- name: Create Pull Request - name: Create Pull Request
id: cpr id: cpr
uses: peter-evans/create-pull-request@v8 uses: peter-evans/create-pull-request@v7
- name: Show message for created Pull Request - name: Show message for created Pull Request
if: ${{ steps.cpr.outputs.pull-request-url && steps.cpr.outputs.pull-request-operation != 'none' }} if: ${{ steps.cpr.outputs.pull-request-url && steps.cpr.outputs.pull-request-operation != 'none' }}

View file

@ -1,14 +1,3 @@
## Updating from `v7` to `v8`
### Behaviour changes
- If using self-hosted runners or GitHub Enterprise Server, there are minimum requirements for `v8` to run. See "What's new" below for details.
### What's new
- Updated runtime to Node.js 24
- The action now requires a minimum version of [v2.327.1](https://github.com/actions/runner/releases/tag/v2.327.1) for the Actions runner. Update self-hosted runners to v2.327.1 or later to ensure compatibility.
## Updating from `v6` to `v7` ## Updating from `v6` to `v7`
### Behaviour changes ### Behaviour changes

1533
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,12 +1,9 @@
{ {
"name": "create-pull-request", "name": "create-pull-request",
"version": "8.0.0", "version": "7.0.0",
"private": true, "private": true,
"description": "Creates a pull request for changes to your repository in the actions workspace", "description": "Creates a pull request for changes to your repository in the actions workspace",
"main": "lib/main.js", "main": "lib/main.js",
"engines": {
"node": ">=24.4.0"
},
"scripts": { "scripts": {
"build": "tsc && ncc build", "build": "tsc && ncc build",
"format": "prettier --write '**/*.ts'", "format": "prettier --write '**/*.ts'",
@ -37,11 +34,10 @@
"@octokit/core": "^6.1.6", "@octokit/core": "^6.1.6",
"@octokit/plugin-paginate-rest": "^11.6.0", "@octokit/plugin-paginate-rest": "^11.6.0",
"@octokit/plugin-rest-endpoint-methods": "^13.5.0", "@octokit/plugin-rest-endpoint-methods": "^13.5.0",
"@octokit/plugin-retry": "^7.2.1",
"@octokit/plugin-throttling": "^9.6.1", "@octokit/plugin-throttling": "^9.6.1",
"@octokit/request-error": "^6.1.8",
"node-fetch-native": "^1.6.7", "node-fetch-native": "^1.6.7",
"p-limit": "^6.2.0" "p-limit": "^6.2.0",
"uuid": "^9.0.1"
}, },
"devDependencies": { "devDependencies": {
"@types/jest": "^29.5.14", "@types/jest": "^29.5.14",
@ -54,14 +50,14 @@
"eslint-plugin-github": "^4.10.2", "eslint-plugin-github": "^4.10.2",
"eslint-plugin-import": "^2.32.0", "eslint-plugin-import": "^2.32.0",
"eslint-plugin-jest": "^27.9.0", "eslint-plugin-jest": "^27.9.0",
"eslint-plugin-prettier": "^5.5.5", "eslint-plugin-prettier": "^5.5.4",
"jest": "^29.7.0", "jest": "^29.7.0",
"jest-circus": "^29.7.0", "jest-circus": "^29.7.0",
"jest-environment-jsdom": "^30.3.0", "jest-environment-jsdom": "^29.7.0",
"js-yaml": "^4.1.1", "js-yaml": "^4.1.1",
"prettier": "^3.8.3", "prettier": "^3.7.3",
"ts-jest": "^29.4.9", "ts-jest": "^29.4.5",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"undici": "^6.25.0" "undici": "^6.22.0"
} }
} }

View file

@ -1,6 +1,6 @@
import * as core from '@actions/core' import * as core from '@actions/core'
import {randomUUID} from 'crypto'
import {GitCommandManager, Commit} from './git-command-manager' import {GitCommandManager, Commit} from './git-command-manager'
import {v4 as uuidv4} from 'uuid'
import * as utils from './utils' import * as utils from './utils'
const CHERRYPICK_EMPTY = const CHERRYPICK_EMPTY =
@ -189,7 +189,7 @@ export async function createOrUpdateBranch(
const baseRemote = 'origin' const baseRemote = 'origin'
// Save the working base changes to a temporary branch // Save the working base changes to a temporary branch
const tempBranch = randomUUID() const tempBranch = uuidv4()
await git.checkout(tempBranch, 'HEAD') await git.checkout(tempBranch, 'HEAD')
// Commit any uncommitted changes // Commit any uncommitted changes
if (await git.isDirty(true, addPaths)) { if (await git.isDirty(true, addPaths)) {

View file

@ -121,20 +121,12 @@ export async function createPullRequest(inputs: Inputs): Promise<void> {
`The 'base' and 'branch' for a pull request must be different branches. Unable to continue.` `The 'base' and 'branch' for a pull request must be different branches. Unable to continue.`
) )
} }
if (utils.isSelfHosted()) { // For self-hosted runners the repository state persists between runs.
// For self-hosted runners the repository state persists between runs. // This command prunes the stale remote ref when the pull request branch was
// This command prunes the stale remote ref when the pull request branch was // deleted after being merged or closed. Without this the push using
// deleted after being merged or closed. Without this the push using // '--force-with-lease' fails due to "stale info."
// '--force-with-lease' fails due to "stale info." // https://github.com/peter-evans/create-pull-request/issues/633
// https://github.com/peter-evans/create-pull-request/issues/633 await git.exec(['remote', 'prune', branchRemoteName])
try {
await git.exec(['remote', 'prune', branchRemoteName])
} catch (error) {
core.warning(
`Failed to prune remote '${branchRemoteName}': ${(error as Error).message}`
)
}
}
core.endGroup() core.endGroup()
// Apply the branch suffix if set // Apply the branch suffix if set

View file

@ -1,13 +1,7 @@
import * as core from '@actions/core' import * as core from '@actions/core'
import {RequestError} from '@octokit/request-error'
import {Inputs} from './create-pull-request' import {Inputs} from './create-pull-request'
import {Commit, GitCommandManager} from './git-command-manager' import {Commit, GitCommandManager} from './git-command-manager'
import { import {Octokit, OctokitOptions, throttleOptions} from './octokit-client'
Octokit,
OctokitOptions,
retryOptions,
throttleOptions
} from './octokit-client'
import pLimit from 'p-limit' import pLimit from 'p-limit'
import * as utils from './utils' import * as utils from './utils'
@ -58,7 +52,6 @@ export class GitHubHelper {
options.baseUrl = 'https://api.github.com' options.baseUrl = 'https://api.github.com'
} }
options.throttle = throttleOptions options.throttle = throttleOptions
options.retry = retryOptions
this.octokit = new Octokit(options) this.octokit = new Octokit(options)
} }
@ -210,51 +203,32 @@ export class GitHubHelper {
headRepository headRepository
) )
// After creating a new PR, follow-up API calls can fail with a 422
// "Could not resolve to a node" error due to GitHub API eventual
// consistency. Wrap post-creation calls with targeted retry logic.
// See: https://github.com/peter-evans/create-pull-request/issues/4321
const isEventualConsistencyError = (e: unknown): boolean =>
e instanceof RequestError &&
e.status === 422 &&
e.message.includes('Could not resolve to a node')
const withRetryForNewPr = <T>(fn: () => Promise<T>): Promise<T> =>
pull.created
? utils.retryWithBackoff(fn, isEventualConsistencyError)
: fn()
// Apply milestone // Apply milestone
if (inputs.milestone) { if (inputs.milestone) {
core.info(`Applying milestone '${inputs.milestone}'`) core.info(`Applying milestone '${inputs.milestone}'`)
await withRetryForNewPr(() => await this.octokit.rest.issues.update({
this.octokit.rest.issues.update({ ...this.parseRepository(baseRepository),
...this.parseRepository(baseRepository), issue_number: pull.number,
issue_number: pull.number, milestone: inputs.milestone
milestone: inputs.milestone })
})
)
} }
// Apply labels // Apply labels
if (inputs.labels.length > 0) { if (inputs.labels.length > 0) {
core.info(`Applying labels '${inputs.labels}'`) core.info(`Applying labels '${inputs.labels}'`)
await withRetryForNewPr(() => await this.octokit.rest.issues.addLabels({
this.octokit.rest.issues.addLabels({ ...this.parseRepository(baseRepository),
...this.parseRepository(baseRepository), issue_number: pull.number,
issue_number: pull.number, labels: inputs.labels
labels: inputs.labels })
})
)
} }
// Apply assignees // Apply assignees
if (inputs.assignees.length > 0) { if (inputs.assignees.length > 0) {
core.info(`Applying assignees '${inputs.assignees}'`) core.info(`Applying assignees '${inputs.assignees}'`)
await withRetryForNewPr(() => await this.octokit.rest.issues.addAssignees({
this.octokit.rest.issues.addAssignees({ ...this.parseRepository(baseRepository),
...this.parseRepository(baseRepository), issue_number: pull.number,
issue_number: pull.number, assignees: inputs.assignees
assignees: inputs.assignees })
})
)
} }
// Request reviewers and team reviewers // Request reviewers and team reviewers
@ -270,13 +244,11 @@ export class GitHubHelper {
} }
if (Object.keys(requestReviewersParams).length > 0) { if (Object.keys(requestReviewersParams).length > 0) {
try { try {
await withRetryForNewPr(() => await this.octokit.rest.pulls.requestReviewers({
this.octokit.rest.pulls.requestReviewers({ ...this.parseRepository(baseRepository),
...this.parseRepository(baseRepository), pull_number: pull.number,
pull_number: pull.number, ...requestReviewersParams
...requestReviewersParams })
})
)
} catch (e) { } catch (e) {
if (utils.getErrorMessage(e).includes(ERROR_PR_REVIEW_TOKEN_SCOPE)) { if (utils.getErrorMessage(e).includes(ERROR_PR_REVIEW_TOKEN_SCOPE)) {
core.error( core.error(

View file

@ -2,7 +2,6 @@ import * as core from '@actions/core'
import {Octokit as OctokitCore} from '@octokit/core' import {Octokit as OctokitCore} 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 {retry} from '@octokit/plugin-retry'
import {throttling} from '@octokit/plugin-throttling' import {throttling} from '@octokit/plugin-throttling'
import {fetch} from 'node-fetch-native/proxy' import {fetch} from 'node-fetch-native/proxy'
export {RestEndpointMethodTypes} from '@octokit/plugin-rest-endpoint-methods' export {RestEndpointMethodTypes} from '@octokit/plugin-rest-endpoint-methods'
@ -12,7 +11,6 @@ export {OctokitOptions} from '@octokit/core/dist-types/types'
export const Octokit = OctokitCore.plugin( export const Octokit = OctokitCore.plugin(
paginateRest, paginateRest,
restEndpointMethods, restEndpointMethods,
retry,
throttling, throttling,
autoProxyAgent autoProxyAgent
) )
@ -34,11 +32,6 @@ export const throttleOptions = {
} }
} }
export const retryOptions = {
// 429 is handled by the throttling plugin, so we exclude it from retry
doNotRetry: [400, 401, 403, 404, 410, 422, 429, 451]
}
// Octokit plugin to support the standard environment variables http_proxy, https_proxy and no_proxy // Octokit plugin to support the standard environment variables http_proxy, https_proxy and no_proxy
function autoProxyAgent(octokit: OctokitCore) { function autoProxyAgent(octokit: OctokitCore) {
octokit.hook.before('request', options => { octokit.hook.before('request', options => {

View file

@ -135,32 +135,3 @@ export function getErrorMessage(error: unknown) {
if (error instanceof Error) return error.message if (error instanceof Error) return error.message
return String(error) return String(error)
} }
export const isSelfHosted = (): boolean =>
process.env['RUNNER_ENVIRONMENT'] !== 'github-hosted' &&
(process.env['AGENT_ISSELFHOSTED'] === '1' ||
process.env['AGENT_ISSELFHOSTED'] === undefined)
export async function retryWithBackoff<T>(
fn: () => Promise<T>,
shouldRetry: (error: unknown) => boolean,
maxRetries = 2,
delayMs = 1000
): Promise<T> {
for (let attempt = 0; attempt <= maxRetries; attempt++) {
try {
return await fn()
} catch (e) {
if (attempt < maxRetries && shouldRetry(e)) {
const delay = delayMs * Math.pow(2, attempt)
core.info(
`Request failed (attempt ${attempt + 1}/${maxRetries + 1}), retrying in ${delay}ms...`
)
await new Promise(resolve => setTimeout(resolve, delay))
} else {
throw e
}
}
}
throw new Error('Unexpected: retry loop exited without return or throw')
}