Compare commits

..

9 Commits

Author SHA1 Message Date
20dac2ed48 build: update distribution (#1208)
Co-authored-by: peter-evans <peter-evans@users.noreply.github.com>
2022-08-17 12:37:21 +09:00
8557470a68 feat: support no_proxy environment variable (#1205)
Co-authored-by: TGANSTE <till.ganster@mercedes-benz.com>
2022-08-17 12:25:36 +09:00
10db75894f docs: add info about workflow permissions 2022-06-08 17:57:28 +09:00
5a6b15373e docs: clearer description of update behaviour 2022-06-08 17:30:26 +09:00
923ad837f1 force tryFetch (#1189) 2022-06-03 17:30:50 +09:00
f094b77505 fix: avoid issue with case sensitivity of repo names (#1179)
* fix: avoid issue with case sensitivity in condition

* chore: upgrade jest to v28
2022-05-08 17:37:36 +09:00
af7c021bb9 docs: shorten quote 2022-04-22 14:27:14 +09:00
97872c4843 docs: update GA quote/ref in concepts-guidelines.md (#1169)
* Update GA quote/ref in concepts-guidelines.md

The current quote and reference link appear to be out of date

* Change "Triggering further workflow runs" excerpt
2022-04-14 08:39:38 +09:00
bd72e1b792 fix: use full name for head branch to allow for repo renaming (#1164) 2022-04-08 21:38:55 +09:00
9 changed files with 3979 additions and 1717 deletions

View File

@ -36,6 +36,13 @@ Create Pull Request action will:
You can also pin to a [specific release](https://github.com/peter-evans/create-pull-request/releases) version in the format `@v4.x.x`
### Workflow permissions
For this action to work you must explicitly allow GitHub Actions to create pull requests.
This setting can be found in a repository's settings under Actions > General > Workflow permissions.
For repositories belonging to an organization, this setting can be managed by admins in organization settings under Actions > General > Workflow permissions.
### Action inputs
All inputs are **optional**. If not set, sensible defaults will be used.
@ -106,7 +113,7 @@ How the action behaves:
- If there are changes (i.e. a diff exists with the checked-out base branch), the changes will be pushed to a new `branch` and a pull request created.
- If there are no changes (i.e. no diff exists with the checked-out base branch), no pull request will be created and the action exits silently.
- If a pull request already exists and there are no further changes (i.e. no diff with the current pull request branch) then the action exits silently.
- If a pull request already exists it will be updated if necessary. Local changes in the Actions workspace, or changes on the base branch, can cause an update. If no update is required the action exits silently.
- If a pull request exists and new changes on the base branch make the pull request unnecessary (i.e. there is no longer a diff between the pull request branch and the base), the pull request is automatically closed. Additionally, if `delete-branch` is set to `true` the `branch` will be deleted.
For further details about how the action works and usage guidelines, see [Concepts, guidelines and advanced usage](docs/concepts-guidelines.md).

View File

@ -10,7 +10,7 @@ if [[ "$(docker images -q $IMAGE 2> /dev/null)" == "" || $ARG1 == "build" ]]; th
cat > Dockerfile << EOF
FROM node:12-alpine
RUN apk --no-cache add git git-daemon
RUN npm install jest --global
RUN npm install jest jest-environment-jsdom --global
WORKDIR /cpr
COPY __test__/entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

27
dist/index.js vendored
View File

@ -62,7 +62,9 @@ exports.getWorkingBaseAndType = getWorkingBaseAndType;
function tryFetch(git, remote, branch) {
return __awaiter(this, void 0, void 0, function* () {
try {
yield git.fetch([`${branch}:refs/remotes/${remote}/${branch}`], remote);
yield git.fetch([`${branch}:refs/remotes/${remote}/${branch}`], remote, [
'--force'
]);
return true;
}
catch (_a) {
@ -950,8 +952,11 @@ class GitHubHelper {
repo: repo
};
}
createOrUpdate(inputs, baseRepository, headBranch) {
createOrUpdate(inputs, baseRepository, headRepository) {
return __awaiter(this, void 0, void 0, function* () {
const [headOwner] = headRepository.split('/');
const headBranch = `${headOwner}:${inputs.branch}`;
const headBranchFull = `${headRepository}:${inputs.branch}`;
// Try to create the pull request
try {
core.info(`Attempting creation of pull request`);
@ -965,7 +970,7 @@ class GitHubHelper {
}
catch (e) {
if (e.message &&
e.message.includes(`A pull request already exists for ${headBranch}`)) {
e.message.includes(`A pull request already exists for`)) {
core.info(`A pull request already exists for ${headBranch}`);
}
else {
@ -974,7 +979,7 @@ class GitHubHelper {
}
// Update the pull request that exists for this branch and base
core.info(`Fetching existing pull request`);
const { data: pulls } = yield this.octokit.rest.pulls.list(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { state: 'open', head: headBranch, base: inputs.base }));
const { data: pulls } = yield this.octokit.rest.pulls.list(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { state: 'open', head: headBranchFull, base: inputs.base }));
core.info(`Attempting update of pull request`);
const { data: pull } = yield this.octokit.rest.pulls.update(Object.assign(Object.assign({}, this.parseRepository(baseRepository)), { pull_number: pulls[0].number, title: inputs.title, body: inputs.body }));
core.info(`Updated pull request #${pull.number} (${headBranch} => ${inputs.base})`);
@ -996,10 +1001,8 @@ class GitHubHelper {
}
createOrUpdatePullRequest(inputs, baseRepository, headRepository) {
return __awaiter(this, void 0, void 0, function* () {
const [headOwner] = headRepository.split('/');
const headBranch = `${headOwner}:${inputs.branch}`;
// Create or update the pull request
const pull = yield this.createOrUpdate(inputs, baseRepository, headBranch);
const pull = yield this.createOrUpdate(inputs, baseRepository, headRepository);
// Apply milestone
if (inputs.milestone) {
core.info(`Applying milestone '${inputs.milestone}'`);
@ -1135,13 +1138,21 @@ const plugin_paginate_rest_1 = __nccwpck_require__(4193);
const plugin_rest_endpoint_methods_1 = __nccwpck_require__(3044);
const https_proxy_agent_1 = __nccwpck_require__(7219);
exports.Octokit = core_1.Octokit.plugin(plugin_paginate_rest_1.paginateRest, plugin_rest_endpoint_methods_1.restEndpointMethods, autoProxyAgent);
// Octokit plugin to support the https_proxy environment variable
// Octokit plugin to support the https_proxy and no_proxy environment variable
function autoProxyAgent(octokit) {
const proxy = process.env.https_proxy || process.env.HTTPS_PROXY;
const noProxy = process.env.no_proxy || process.env.NO_PROXY;
let noProxyArray = [];
if (noProxy) {
noProxyArray = noProxy.split(',');
}
if (!proxy)
return;
const agent = new https_proxy_agent_1.HttpsProxyAgent(proxy);
octokit.hook.before('request', options => {
if (noProxyArray.includes(options.request.hostname)) {
return;
}
options.request.agent = agent;
});
}

View File

@ -136,9 +136,9 @@ For further reading regarding the security of pull requests, see this GitHub blo
Pull requests created by the action using the default `GITHUB_TOKEN` cannot trigger other workflows. If you have `on: pull_request` or `on: push` workflows acting as checks on pull requests, they will not run.
> When you use the repository's GITHUB_TOKEN to perform tasks on behalf of the GitHub Actions app, events triggered by the GITHUB_TOKEN will not create a new workflow run.
> When you use the repository's `GITHUB_TOKEN` to perform tasks, events triggered by the `GITHUB_TOKEN` will not create a new workflow run. This prevents you from accidentally creating recursive workflow runs. For example, if a workflow run pushes code using the repository's `GITHUB_TOKEN`, a new workflow will not run even when the repository contains a workflow configured to run when `push` events occur.
[GitHub Actions: Events that trigger workflows](https://docs.github.com/en/actions/reference/events-that-trigger-workflows#triggering-new-workflows-using-a-personal-access-token)
[GitHub Actions: Triggering a workflow from a workflow](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#triggering-a-workflow-from-a-workflow)
#### Workarounds to trigger further workflow runs

5608
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -38,7 +38,7 @@
"uuid": "^8.3.2"
},
"devDependencies": {
"@types/jest": "^27.0.3",
"@types/jest": "^27.5.0",
"@types/node": "^16.11.11",
"@typescript-eslint/parser": "^5.5.0",
"@vercel/ncc": "^0.32.0",
@ -46,12 +46,13 @@
"eslint-import-resolver-typescript": "^2.5.0",
"eslint-plugin-github": "^4.3.5",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-jest": "^25.3.0",
"jest": "^27.4.3",
"jest-circus": "^27.4.2",
"eslint-plugin-jest": "^26.1.5",
"jest": "^28.1.0",
"jest-circus": "^28.1.0",
"jest-environment-jsdom": "^28.1.0",
"js-yaml": "^4.1.0",
"prettier": "^2.5.0",
"ts-jest": "^27.0.7",
"ts-jest": "^28.0.2",
"typescript": "^4.5.2"
}
}

View File

@ -33,7 +33,9 @@ export async function tryFetch(
branch: string
): Promise<boolean> {
try {
await git.fetch([`${branch}:refs/remotes/${remote}/${branch}`], remote)
await git.fetch([`${branch}:refs/remotes/${remote}/${branch}`], remote, [
'--force'
])
return true
} catch {
return false

View File

@ -39,8 +39,12 @@ export class GitHubHelper {
private async createOrUpdate(
inputs: Inputs,
baseRepository: string,
headBranch: string
headRepository: string
): Promise<Pull> {
const [headOwner] = headRepository.split('/')
const headBranch = `${headOwner}:${inputs.branch}`
const headBranchFull = `${headRepository}:${inputs.branch}`
// Try to create the pull request
try {
core.info(`Attempting creation of pull request`)
@ -63,7 +67,7 @@ export class GitHubHelper {
} catch (e: any) {
if (
e.message &&
e.message.includes(`A pull request already exists for ${headBranch}`)
e.message.includes(`A pull request already exists for`)
) {
core.info(`A pull request already exists for ${headBranch}`)
} else {
@ -76,7 +80,7 @@ export class GitHubHelper {
const {data: pulls} = await this.octokit.rest.pulls.list({
...this.parseRepository(baseRepository),
state: 'open',
head: headBranch,
head: headBranchFull,
base: inputs.base
})
core.info(`Attempting update of pull request`)
@ -113,11 +117,12 @@ export class GitHubHelper {
baseRepository: string,
headRepository: string
): Promise<Pull> {
const [headOwner] = headRepository.split('/')
const headBranch = `${headOwner}:${inputs.branch}`
// Create or update the pull request
const pull = await this.createOrUpdate(inputs, baseRepository, headBranch)
const pull = await this.createOrUpdate(
inputs,
baseRepository,
headRepository
)
// Apply milestone
if (inputs.milestone) {

View File

@ -11,13 +11,23 @@ export const Octokit = Core.plugin(
autoProxyAgent
)
// Octokit plugin to support the https_proxy environment variable
// Octokit plugin to support the https_proxy and no_proxy environment variable
function autoProxyAgent(octokit: Core) {
const proxy = process.env.https_proxy || process.env.HTTPS_PROXY
const noProxy = process.env.no_proxy || process.env.NO_PROXY
let noProxyArray: string[] = []
if (noProxy) {
noProxyArray = noProxy.split(',')
}
if (!proxy) return
const agent = new HttpsProxyAgent(proxy)
octokit.hook.before('request', options => {
if (noProxyArray.includes(options.request.hostname)) {
return
}
options.request.agent = agent
})
}