24 Commits

Author SHA1 Message Date
Vanessasaurus
882391869b Merge pull request #102 from vsoch/test-envar-files
Testing to see if envar files environment variables are set (or not)
2024-03-14 11:09:59 -06:00
Vanessasaurus
8f0f9ee92b Update pull-request.py 2024-03-11 17:27:24 -06:00
Vanessasaurus
0969c26295 Merge pull request #100 from vsoch/update-container-base
fix bug with docker build
2023-12-07 19:40:22 -07:00
vsoch
d2ea9c206b fix bug with docker build
the alpine image no longer allows installing to system python
the fix is to target a virtual environment python3.

Signed-off-by: vsoch <vsoch@users.noreply.github.com>
2023-12-07 19:35:49 -07:00
Vanessasaurus
81b48d94ab Add LICENSE 2023-09-21 12:20:03 -06:00
Vanessasaurus
f9e7f419d6 Merge pull request #94 from vsoch/check-for-branch
Check for PR branch
2023-01-11 12:39:17 -07:00
Vanessasaurus
dcba08c9c2 Check for PR branch
before using the API so we hopefully save a call.
2023-01-06 20:03:27 -07:00
Yoshihisa Mochihara
c8e84cea4c fix GITHUB_OUTPUT bug (#92)
* fix GITHUB_OUTPUT bug
* Update CHANGELOG.md
2022-11-23 14:02:13 -07:00
Vanessasaurus
50f22f6d14 Update/set output (#90)
* updating set-output to echo to $GITHUB_OUTPUT instead

Signed-off-by: vsoch <vsoch@users.noreply.github.com>
2022-10-25 21:00:21 -06:00
Yunqi(Alice)
d703f40f3a Update the list_pull_request 401 case (#89)
* Update the list_pull_request 401 case
Hi, I find this http request is also missing the 401 case.
* Update CHANGELOG.md
2022-09-28 10:03:05 -06:00
Vanessasaurus
415544869c Merge pull request #88 from ohenak/fix/ghe-get-401-error
[Chore] Provide token when getting 401 error
2022-09-22 03:59:00 -06:00
Kane Ho
667293445b [Chore] Provide token when getting 401 error
Issue #87

In GHE, token is necessary when querying the repo API,
When it fails, it returns 401 error. Will need to specify the token in
this case.
2022-09-21 23:44:03 -07:00
Felix Breidenstein
e64deeba68 Fix example in README (#85) 2022-03-18 08:44:13 -06:00
Vanessasaurus
58a078aed9 Update CHANGELOG.md 2022-02-03 06:00:46 -07:00
Sviatoslav Sydorenko
408336c607 Fix emitting LF-separated GHA environment vars (#84)
Fixes #83 (hopefully)
2022-02-03 05:59:59 -07:00
Vanessasaurus
d99aa3ed71 Adding quick option to be able to specify a GitHub enterprise url (#80)
* adding quick option to be able to specify a GitHub enterprise url
Signed-off-by: vsoch <vsoch@users.noreply.github.com>
* Use GITHUB_API_URL instead
Co-authored-by: Tobias <github@tobiasgabriel.de>

* Update README.md
* Update pull-request.py

Co-authored-by: vsoch <vsoch@users.noreply.github.com>
Co-authored-by: Tobias <github@tobiasgabriel.de>
2021-10-02 22:40:48 -06:00
Vanessasaurus
a48b660567 Merge pull request #81 from vsoch/add/open-source-halloween-2021
adding open source halloween!
2021-10-02 18:26:20 -06:00
vsoch
4b09070b0a adding open source halloween!
Signed-off-by: vsoch <vsoch@users.noreply.github.com>
2021-10-02 18:25:26 -06:00
Vanessasaurus
29dbfc0acd Merge pull request #75 from Kong/feat/discover-default-branch
Use repo's default branch if no branch specified
2021-06-21 10:10:40 -06:00
Danny Sauer
c0bf76830b Use repo's default branch if no branch specified 2021-06-21 11:04:52 -05:00
Yi Zhang
1cb1956a68 Support to open pull request to another repo (#70)
* support custom token and repo
* print post url if there's error
* update as comments
* Update README.md

Co-authored-by: Vanessasaurus <814322+vsoch@users.noreply.github.com>
2021-04-27 06:04:20 -06:00
vsoch
2ca266185d updating changelog preparing for release
Signed-off-by: vsoch <vsoch@users.noreply.github.com>
2021-04-18 19:54:26 -06:00
Max Anderson
e2a437cdbd Prevent unhandled exception when running via schedule (#69)
* Prevent unhandled exception when running via schedule
2021-04-18 19:53:12 -06:00
Vanessasaurus
2d5c80f215 dont use version for examples, stick to master (#67)
* dont use version for examples, stick to master
* add note about it being important to use stable release in README.md

Signed-off-by: vsoch <vsoch@users.noreply.github.com>
2021-03-27 19:08:35 -06:00
13 changed files with 200 additions and 145 deletions

View File

@@ -14,7 +14,12 @@ represented by the pull requests that fixed them. Critical items to know are:
Versions correspond with GitHub releases that can be referenced with @ using actions.
## [master](https://github.com/vsoch/pull-request-action/tree/master) (master)
- forgot to add assignees (1.0.15)
- output and environment variables for PR number and return codes (1.0.5)
- added support for reviewer (individual and team) assignments (1.0.4)
- added support for maintainer can modify and assignees (1.0.3)
- alpine cannot install to system python anymore (1.1.0)
- bugfix of missing output values (1.0.23)
- bugfix of token handling if 401 error received (missing 401 case) (1.0.21)
- bugfix of writing to environment file (missing newline) (1.0.19)
- bugfix of missing from branch with scheduled run (1.0.16)
- forgot to add assignees (1.0.15)
- output and environment variables for PR number and return codes (1.0.5)
- added support for reviewer (individual and team) assignments (1.0.4)
- added support for maintainer can modify and assignees (1.0.3)

View File

@@ -7,9 +7,11 @@ LABEL "com.github.actions.description"="Create a pull request when a branch is c
LABEL "com.github.actions.icon"="activity"
LABEL "com.github.actions.color"="yellow"
RUN apk --no-cache add python3 py3-pip git bash && \
pip3 install requests
# Newer alpine we are not allowed to install to system python
RUN apk --no-cache add python3 py3-pip py3-virtualenv git bash && \
python3 -m venv /opt/env && \
/opt/env/bin/pip3 install requests
COPY pull-request.py /pull-request.py
RUN chmod u+x /pull-request.py
ENTRYPOINT ["python3", "/pull-request.py"]
ENTRYPOINT ["/opt/env/bin/python3", "/pull-request.py"]

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019-2023 Vanessa Sochat
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -22,13 +22,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: pull-request-action
uses: vsoch/pull-request-action@1.0.6
uses: vsoch/pull-request-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_PREFIX: "update/"
PULL_REQUEST_BRANCH: "master"
```
**Important**: Make sure to use a stable [release](https://github.com/vsoch/pull-request-action/releases) instead of a branch for your workflow.
## Environment Variable Inputs
Unlike standard actions, this action just uses variables from the environment.
@@ -36,6 +39,8 @@ Unlike standard actions, this action just uses variables from the environment.
| Name | Description | Required | Default |
|------|-------------|----------|---------|
| BRANCH_PREFIX | the prefix to filter to. If the branch doesn't start with the prefix, it will be ignored | false | "" |
| PULL_REQUEST_REPOSITORY | Choose another repository instead of default GITHUB_REPOSITORY for the PR | false | |
| PULL_REQUEST_TOKEN | [Personal Access Token(PAT)](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) only if you define a different repository with PULL_REQUEST_REPOSITORY | false | |
| PULL_REQUEST_BRANCH | open pull request against this branch | false | master |
| PULL_REQUEST_FROM_BRANCH | if a branch isn't found in your GitHub payload, use this branch | false | |
| PULL_REQUEST_BODY | the body for the pull request | false | |
@@ -45,10 +50,10 @@ Unlike standard actions, this action just uses variables from the environment.
| PULL_REQUEST_ASSIGNEES | A list (string with spaces) of users to assign | false | unset |
| PULL_REQUEST_REVIEWERS | A list (string with spaces) of users to assign review | false | unset |
| PULL_REQUEST_TEAM_REVIEWERS | A list (string with spaces) of teams to assign review | false | unset |
| PASS_ON_ERROR | Instead of failing on an error response, pass | unset |
| PASS_IF_EXISTS | Instead of failing if the pull request already exists, pass | unset |
| PULL_REQUEST_UPDATE | If the pull request already exists, update it | unset |
| PULL_REQUEST_STATE | If `PULL_REQUEST_UPDATE` is true, update to this state (open, closed) | open |
| PASS_ON_ERROR | Instead of failing on an error response, pass | false | unset |
| PASS_IF_EXISTS | Instead of failing if the pull request already exists, pass | false | unset |
| PULL_REQUEST_UPDATE | If the pull request already exists, update it | false | unset |
| PULL_REQUEST_STATE | If `PULL_REQUEST_UPDATE` is true, update to this state (open, closed) | false |open |
For `PULL_REQUEST_DRAFT`, `PASS_ON_ERROR`, `PASS_IF_EXISTS`, and `MAINTAINER_CANT_MODIFY`, these are
treated as environment booleans. If they are defined in the environment, they trigger the
@@ -68,6 +73,8 @@ an issue or PR, they are ignored otherwise.
The `GITHUB_TOKEN` secret is required to interact and authenticate with the GitHub API to open
the pull request. The example is [deployed here](https://github.com/vsoch/pull-request-action-example) with an example opened (and merged) [pull request here](https://github.com/vsoch/pull-request-action-example/pull/1) if needed.
If you want to create a pull request to another repository, for example, a pull request to the upstream repository, you need to define PULL_REQUEST_REPOSITORY and PULL_REQUEST_TOKEN. The PULL_REQUEST_TOKEN is one [Personal Access Token(PAT)](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token), which can be save in the [encrypted secrets](https://docs.github.com/en/actions/reference/encrypted-secrets#creating-encrypted-secrets-for-a-repository)
## Outputs
The action sets a few useful output and environment variables. An output can
@@ -93,7 +100,9 @@ The screenshot below shows the example in action to interact with outputs in sev
## Examples
Example workflows are provided in [examples](examples), and please contribute any
examples that you might have to help other users! We will walk through a basic
examples that you might have to help other users! You can get the same commit hashes
and commented tags if you use the [action-updater](https://github.com/vsoch/action-updater)
also maintained by @vsoch. We will walk through a basic
example here for a niche case. Let's say that we are opening a pull request on the release event. This would mean
that the payload's branch variable would be null. We would need to define `PULL_REQUEST_FROM`. How would
we do that? We can [set environment variables](https://github.com/actions/toolkit/blob/main/docs/commands.md#environment-files) for next steps. Here is an example:
@@ -112,9 +121,9 @@ jobs:
run: |
# do custom parsing of your code / date to derive a branch from
PR_BRANCH_FROM=release-v$(cat VERSION)
export "PULL_REQUEST_FROM_BRANCH=${PR_BRANCH_FROM}" >> $GITHUB_ENV
echo "PULL_REQUEST_FROM_BRANCH=${PR_BRANCH_FROM}" >> $GITHUB_ENV
- name: pull-request-action
uses: vsoch/pull-request-action@1.0.6
uses: vsoch/pull-request-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PULL_REQUEST_BRANCH: "master"

View File

@@ -2,16 +2,16 @@ name: Pull Request on Branch Push
on:
push:
branches-ignore:
- devel
- devel
jobs:
auto-pull-request:
name: PullRequestAction
runs-on: ubuntu-latest
steps:
- name: pull-request-action
uses: vsoch/pull-request-action@1.0.3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_PREFIX: "update/"
PULL_REQUEST_BRANCH: "master"
PULL_REQUEST_ASSIGNEES: vsoch
- name: pull-request-action
uses: vsoch/pull-request-action@d703f40f3af5ae294f9816395ddf2e3d2d3feafa # 1.0.21
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_PREFIX: update/
PULL_REQUEST_BRANCH: master
PULL_REQUEST_ASSIGNEES: vsoch

View File

@@ -1,24 +1,23 @@
name: derive-branch-from-environment
on:
schedule:
# Weekly
- cron: 0 0 * * 0
schedule: -
cron: 0 0 * * 0
jobs:
DoSomeUpdate:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v1
uses: actions/checkout@v3
- name: Install or Do Something to Change repository
run: |
echo "This is a new file." >> newfile.txt
echo "This is a new file." >> newfile.txt
- name: Checkout New Branch
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_AGAINST: "master"
BRANCH_AGAINST: master
run: |
printf "GitHub Actor: ${GITHUB_ACTOR}\n"
export BRANCH_FROM="update/newfile-$(date '+%Y-%m-%d')"
@@ -43,7 +42,7 @@ jobs:
echo "PULL_REQUEST_FROM_BRANCH=${BRANCH_FROM}" >> $GITHUB_ENV
- name: Open Pull Request
uses: vsoch/pull-request-action@1.0.6
uses: vsoch/pull-request-action@d703f40f3af5ae294f9816395ddf2e3d2d3feafa # 1.0.21
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PULL_REQUEST_BRANCH: "master"
PULL_REQUEST_BRANCH: master

View File

@@ -2,8 +2,8 @@ name: Hotfix Branch Pull Request
on:
push:
branches-ignore:
- master
- production
- master
- production
# See https://github.com/vsoch/pull-request-action/issues/47#issuecomment-707109132
@@ -12,44 +12,44 @@ jobs:
name: PullRequestAction
runs-on: ubuntu-latest
steps:
- name: Generate branch name
uses: actions/github-script@v3
id: set-branch-name
with:
script: |
const capitalize = (name) => name.charAt(0).toUpperCase() + name.slice(1);
const emoji = context.payload.ref.startsWith("refs/heads/feature")
? "✨ "
: context.payload.ref.startsWith("refs/heads/hotfix")
? "🚑 "
: "";
return `${emoji}${capitalize(
context.payload.ref
.replace("refs/heads/", "")
.replace(/-/g, " ")
.replace("feature ", "")
.replace("hotfix ", "")
)}`;
result-encoding: string
- name: Set branch name
run: echo "PULL_REQUEST_TITLE=${{steps.set-branch-name.outputs.result}}" >> $GITHUB_ENV
- name: Generate PR body
uses: actions/github-script@v3
id: set-pr-body
with:
script: |
return `I'm opening this pull request for this branch, pushed by @${
context.payload.head_commit.author.username
} with ${context.payload.commits.length} commit${
context.payload.commits.length === 1 ? "" : "s"
}.`;
result-encoding: string
- name: Set PR body
run: echo "PULL_REQUEST_BODY=${{steps.set-pr-body.outputs.result}}" >> $GITHUB_ENV
- name: pull-request-action
uses: vsoch/pull-request-action@1.0.10
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_PREFIX: "hotfix-"
PULL_REQUEST_BRANCH: "production"
PULL_REQUEST_REVIEWERS: "AnandChowdhary"
- name: Generate branch name
uses: actions/github-script@v6
id: set-branch-name
with:
script: |
const capitalize = (name) => name.charAt(0).toUpperCase() + name.slice(1);
const emoji = context.payload.ref.startsWith("refs/heads/feature")
? "✨ "
: context.payload.ref.startsWith("refs/heads/hotfix")
? "🚑 "
: "";
return `${emoji}${capitalize(
context.payload.ref
.replace("refs/heads/", "")
.replace(/-/g, " ")
.replace("feature ", "")
.replace("hotfix ", "")
)}`;
result-encoding: string
- name: Set branch name
run: echo "PULL_REQUEST_TITLE=${{steps.set-branch-name.outputs.result}}" >> $GITHUB_ENV
- name: Generate PR body
uses: actions/github-script@v6
id: set-pr-body
with:
script: |
return `I'm opening this pull request for this branch, pushed by @${
context.payload.head_commit.author.username
} with ${context.payload.commits.length} commit${
context.payload.commits.length === 1 ? "" : "s"
}.`;
result-encoding: string
- name: Set PR body
run: echo "PULL_REQUEST_BODY=${{steps.set-pr-body.outputs.result}}" >> $GITHUB_ENV
- name: pull-request-action
uses: vsoch/pull-request-action@d703f40f3af5ae294f9816395ddf2e3d2d3feafa # 1.0.21
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_PREFIX: hotfix-
PULL_REQUEST_BRANCH: production
PULL_REQUEST_REVIEWERS: AnandChowdhary

View File

@@ -2,27 +2,27 @@ name: Pull Request on Branch Push
on:
push:
branches-ignore:
- devel
- devel
jobs:
auto-pull-request:
name: PullRequestAction
runs-on: ubuntu-latest
steps:
- name: pull-request-action
id: pull_request
uses: vsoch/pull-request-action@1.0.6
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_PREFIX: "update/"
PULL_REQUEST_BRANCH: "master"
PULL_REQUEST_REVIEWERS: vsoch
- name: Test outputs
env:
pull_request_number_output: ${{ steps.pull_request.outputs.pull_request_number }}
pull_request_url_output: ${{ steps.pull_request.outputs.pull_request_url }}
run: |
echo "Pull request number from output: ${pull_request_number_output}"
echo "Pull request url from output: ${pull_request_url_output}"
echo "Pull request number from environment: ${PULL_REQUEST_NUMBER}"
echo "Pull request url from environment: ${PULL_REQUEST_URL}"
echo "Another way to specify from output ${{ steps.pull_request.outputs.pull_request_number }}"
- name: pull-request-action
id: pull_request
uses: vsoch/pull-request-action@d703f40f3af5ae294f9816395ddf2e3d2d3feafa # 1.0.21
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_PREFIX: update/
PULL_REQUEST_BRANCH: master
PULL_REQUEST_REVIEWERS: vsoch
- name: Test outputs
env:
pull_request_number_output: ${{ steps.pull_request.outputs.pull_request_number }}
pull_request_url_output: ${{ steps.pull_request.outputs.pull_request_url }}
run: |
echo "Pull request number from output: ${pull_request_number_output}"
echo "Pull request url from output: ${pull_request_url_output}"
echo "Pull request number from environment: ${PULL_REQUEST_NUMBER}"
echo "Pull request url from environment: ${PULL_REQUEST_URL}"
echo "Another way to specify from output ${{ steps.pull_request.outputs.pull_request_number }}"

View File

@@ -2,17 +2,17 @@ name: Pull Request on Branch Push
on:
push:
branches-ignore:
- staging
- launchpad
- production
- staging
- launchpad
- production
jobs:
auto-pull-request:
name: PullRequestAction
runs-on: ubuntu-latest
steps:
- name: pull-request-action
uses: vsoch/pull-request-action@add/support-null-branch
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_PREFIX: "update/"
PULL_REQUEST_BRANCH: "master"
- name: pull-request-action
uses: vsoch/pull-request-action@d703f40f3af5ae294f9816395ddf2e3d2d3feafa # 1.0.21
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_PREFIX: update/
PULL_REQUEST_BRANCH: master

View File

@@ -1,7 +1,7 @@
on:
release:
types:
- published
- published
jobs:
persist-new-suite-yml:
@@ -18,31 +18,27 @@ jobs:
version=$(echo "$tag_name" | sed 's/^v//')
echo "Version: $version"
echo "::set-output name=suite_version::${version}"
echo "::set-output name=suite_update_branch::suite_${version}"
echo "suite_version=${version}" >> $GITHUB_OUTPUT
echo "suite_update_branch=suite_${version}" >> $GITHUB_OUTPUT
id: data
- name: Permanently save the new suite release
run: |
mkdir -p releases
new_suite_version_yml="releases/suite_${{ steps.data.outputs.suite_version }}.yml"
echo "Suite target file: $new_suite_version_yml"
cp suite.yml "${new_suite_version_yml}"
git add "${new_suite_version_yml}"
git commit -m "Suite v${{ steps.data.outputs.suite_version }} auto-commit of new release files"
- name: Push files
run: |
git push --force "https://${{ github.actor }}:${{secrets.GITHUB_TOKEN}}@github.com/${{ github.repository }}.git" "HEAD:${{ steps.data.outputs.suite_update_branch }}"
run: git push --force "https://${{ github.actor }}:${{secrets.GITHUB_TOKEN}}@github.com/${{ github.repository }}.git" "HEAD:${{ steps.data.outputs.suite_update_branch }}"
- name: Open a PR to the default branch
uses: vsoch/pull-request-action@1.0.2
uses: vsoch/pull-request-action@d703f40f3af5ae294f9816395ddf2e3d2d3feafa # 1.0.21
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PULL_REQUEST_FROM_BRANCH: "${{ steps.data.outputs.suite_update_branch }}"
PULL_REQUEST_FROM_BRANCH: ${{ steps.data.outputs.suite_update_branch }}
PULL_REQUEST_BRANCH: master
PULL_REQUEST_TITLE: "Action: Update suite release file for v${{ steps.data.outputs.suite_version }}"
PULL_REQUEST_BODY: "Auto-generated PR!"
PULL_REQUEST_TITLE: 'Action: Update suite release file for v${{ steps.data.outputs.suite_version }}'
PULL_REQUEST_BODY: Auto-generated PR!

View File

@@ -2,16 +2,16 @@ name: Pull Request on Branch Push
on:
push:
branches-ignore:
- devel
- devel
jobs:
auto-pull-request:
name: PullRequestAction
runs-on: ubuntu-latest
steps:
- name: pull-request-action
uses: vsoch/pull-request-action@1.0.4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_PREFIX: "update/"
PULL_REQUEST_BRANCH: "master"
PULL_REQUEST_REVIEWERS: vsoch
- name: pull-request-action
uses: vsoch/pull-request-action@d703f40f3af5ae294f9816395ddf2e3d2d3feafa # 1.0.21
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_PREFIX: update/
PULL_REQUEST_BRANCH: master
PULL_REQUEST_REVIEWERS: vsoch

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -69,17 +69,22 @@ def parse_into_list(values):
return [x.strip() for x in values.split(" ")]
def set_env(name, value):
def set_env_and_output(name, value):
"""helper function to echo a key/value pair to the environement file
Parameters:
name (str) : the name of the environment variable
value (str) : the value to write to file
"""
environment_file_path = os.environ.get("GITHUB_ENV")
for env_var in ("GITHUB_ENV", "GITHUB_OUTPUT"):
environment_file_path = os.environ.get(env_var)
if not environment_file_path:
print(f"Warning: {env_var} is unset, skipping.")
continue
print("Writing %s=%s to %s" % (name, value, env_var))
with open(environment_file_path, "a") as environment_file:
environment_file.write("%s=%s" % (name, value))
with open(environment_file_path, "a") as environment_file:
environment_file.write("%s=%s\n" % (name, value))
def open_pull_request(title, body, target, source, is_draft=False, can_modify=True):
@@ -108,6 +113,7 @@ def open_pull_request(title, body, target, source, is_draft=False, can_modify=Tr
print("Data for opening pull request: %s" % data)
response = requests.post(PULLS_URL, json=data, headers=HEADERS)
if response.status_code != 201:
print(f"pull request url is {PULLS_URL}")
abort_if_fail(response, "Unable to create pull request")
return response
@@ -158,12 +164,9 @@ def set_pull_request_groups(response):
number = response.get("number")
html_url = response.get("html_url")
print("Number opened for PR is %s" % number)
set_env("PULL_REQUEST_NUMBER", number)
print("::set-output name=pull_request_number::%s" % number)
set_env("PULL_REQUEST_RETURN_CODE", pull_request_return_code)
print("::set-output name=pull_request_return_code::%s" % pull_request_return_code)
set_env("PULL_REQUEST_URL", html_url)
print("::set-output name=pull_request_url::%s" % html_url)
set_env_and_output("PULL_REQUEST_NUMBER", number)
set_env_and_output("PULL_REQUEST_RETURN_CODE", pull_request_return_code)
set_env_and_output("PULL_REQUEST_URL", html_url)
def list_pull_requests(target, source):
@@ -179,8 +182,8 @@ def list_pull_requests(target, source):
print("Params for checking if pull request exists: %s" % params)
response = requests.get(PULLS_URL, params=params)
# Case 1: 404 might warrant needing a token
if response.status_code == 404:
# Case 1: 401, 404 might warrant needing a token
if response.status_code in [401, 404]:
response = requests.get(PULLS_URL, params=params, headers=HEADERS)
if response.status_code != 200:
abort_if_fail(response, "Unable to retrieve information about pull requests")
@@ -214,8 +217,7 @@ def add_assignees(entry, assignees):
print("::group::github assignees response")
print(response.json())
print("::endgroup::github assignees response")
set_env("ASSIGNEES_RETURN_CODE", assignees_return_code)
print("::set-output name=assignees_return_code::%s" % assignees_return_code)
set_env_and_output("ASSIGNEES_RETURN_CODE", assignees_return_code)
def find_pull_request(listing, source):
@@ -233,6 +235,21 @@ def find_pull_request(listing, source):
return entry
def find_default_branch():
"""Find default branch for a repo (only called if branch not provided)"""
response = requests.get(REPO_URL)
# Case 1: 401, 404 might need a token
if response.status_code in [401, 404]:
response = requests.get(REPO_URL, headers=HEADERS)
if response.status_code != 200:
abort_if_fail(response, "Unable to retrieve default branch")
default_branch = response.json()["default_branch"]
print("Found default branch: %s" % default_branch)
return default_branch
def add_reviewers(entry, reviewers, team_reviewers):
"""Given regular or team reviewers, add them to a PR.
@@ -256,9 +273,7 @@ def add_reviewers(entry, reviewers, team_reviewers):
print("::group::github reviewers response")
print(response.json())
print("::endgroup::github reviewers response")
set_env("REVIEWERS_RETURN_CODE", reviewers_return_code)
print("::set-output name=reviewers_return_code::%s" % reviewers_return_code)
print("Add reviewers return code: %s" % reviewers_return_code)
set_env_and_output("REVIEWERS_RETURN_CODE", reviewers_return_code)
################################################################################
@@ -266,16 +281,21 @@ def add_reviewers(entry, reviewers, team_reviewers):
################################################################################
API_VERSION = "v3"
BASE = "https://api.github.com"
# Allow for a GitHub enterprise URL
BASE = os.environ.get("GITHUB_API_URL") or "https://api.github.com"
PR_TOKEN = os.environ.get("PULL_REQUEST_TOKEN") or get_envar("GITHUB_TOKEN")
PR_REPO = os.environ.get("PULL_REQUEST_REPOSITORY") or get_envar("GITHUB_REPOSITORY")
HEADERS = {
"Authorization": "token %s" % get_envar("GITHUB_TOKEN"),
"Authorization": "token %s" % PR_TOKEN,
"Accept": "application/vnd.github.%s+json;application/vnd.github.antiope-preview+json;application/vnd.github.shadow-cat-preview+json"
% API_VERSION,
}
# URLs
REPO_URL = "%s/repos/%s" % (BASE, get_envar("GITHUB_REPOSITORY"))
REPO_URL = "%s/repos/%s" % (BASE, PR_REPO)
ISSUE_URL = "%s/issues" % REPO_URL
PULLS_URL = "%s/pulls" % REPO_URL
@@ -339,8 +359,11 @@ def main():
if not branch_prefix:
print("No branch prefix is set, all branches will be used.")
# Default to master to support older, will eventually change to main
pull_request_branch = os.environ.get("PULL_REQUEST_BRANCH", "master")
# Default to project default branch if none provided
pull_request_branch = os.environ.get("PULL_REQUEST_BRANCH")
if not pull_request_branch:
pull_request_branch = find_default_branch()
print("Pull requests will go to %s" % pull_request_branch)
# Pull request draft
@@ -394,7 +417,7 @@ def main():
if not from_branch:
print("PULL_REQUEST_FROM_BRANCH is not set, checking branch in payload.")
with open(check_events_json(), "r") as fd:
from_branch = json.loads(fd.read()).get("ref")
from_branch = json.loads(fd.read()).get("ref", "")
from_branch = from_branch.replace("refs/heads/", "").strip("/")
else:
print("PULL_REQUEST_FROM_BRANCH is set.")