5 Commits

Author SHA1 Message Date
Vanessa Sochat
51b1329c52 fixing up GitHub action to work with yaml syntax
Signed-off-by: Vanessa Sochat <vsochat@stanford.edu>
2019-10-19 09:35:46 -04:00
Vanessa Sochat
9c31bb936c adding quotes
Signed-off-by: Vanessa Sochat <vsochat@stanford.edu>
2019-05-20 19:18:03 -04:00
Benjamin Cooper
1e2916c992 Add ability to create draft PRs with env var (#5)
* initial effort to add draft PRs

Document how to use draft PR feature

* make PRs draft anytime env var is explicitly declared

* change draft PR env var name

Signed-off-by: Ben Cooper <bencooper222@gmail.com>

* document new draft env var name

* consolidate draft PR logging block

* actually remove draft pr logging
2019-05-17 17:33:39 -07:00
Vanessasaurus
820608e5d2 Merge pull request #3 from vsoch/add/title-body
adding title and body
2019-03-20 08:31:46 -07:00
Vanessa Sochat
6251c0a094 adding title and body 2019-03-20 10:05:38 -04:00
2 changed files with 62 additions and 28 deletions

View File

@@ -5,31 +5,40 @@ whenever a branch with some prefix is pushed to. The idea is that you can
set up some workflow that pushes content to branches of the repostory,
and you would then want this push reviewed for merge to master.
Here is an example of what to put in your `.github/main.workflow` file to
Here is an example of what to put in your `.github/workflows/pull-request.yml` file to
trigger the action.
```
workflow "Create Pull Request" {
on = "push"
resolves = "Create New Pull Request"
}
action "Create New Pull Request" {
uses = "vsoch/pull-request-action@master"
secrets = [
"GITHUB_TOKEN"
]
env = {
BRANCH_PREFIX = "update/"
PULL_REQUEST_BRANCH = "master"
}
}
```yaml
name: Pull Request on Branch Push
on:
push:
branches-ignore:
- staging
- launchpad
- production
jobs:
auto-pull-request:
name: PullRequestAction
runs-on: ubuntu-latest
steps:
- name: pull-request-action
uses: vsoch/pull-request-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_PREFIX: "update/"
PULL_REQUEST_BRANCH: "master"
```
Environment variables include:
- **BRANCH_PREFIX**: the prefix to filter to. If the branch doesn't start with the prefix, it will be ignored
- **PULL_REQUEST_BRANCH**: the branch to issue the pull request to. Defaults to master.
- **PULL_REQUEST_BODY**: the body for the pull request (optional)
- **PULL_REQUEST_TITLE**: the title for the pull request (optional)
- **PULL_REQUEST_DRAFT**: should the pull request be a draft PR? (optional; unset defaults to `false`)
The `GITHUB_TOKEN` secret is required to interact and authenticate with the GitHub API to open
the pull request.
## Example use Case: Update Registry
@@ -42,4 +51,6 @@ registry to update it.
- the container collection metadata is pushed to a new branch on the registry repository, with namespace matching the GitHub repository, meaning that each GitHub repository always has a unique branch for its content.
- pushing this branch that starts with the prefix (update/<namespace>) triggers the GitHub actions to open the pull request.
If the branch is already open for PR, it updates it.
If the branch is already open for PR, it updates it. Take a look at [this example](https://github.com/singularityhub/registry-org/pull/8)
for the pull request opened when we updated the previous GitHub syntax to the new yaml syntax. Although this
doesn't describe the workflow above, it works equivalently in terms of the triggers.

View File

@@ -12,7 +12,7 @@ API_VERSION=v3
BASE=https://api.github.com
AUTH_HEADER="Authorization: token ${GITHUB_TOKEN}"
HEADER="Accept: application/vnd.github.${API_VERSION}+json"
HEADER="${HEADER}; application/vnd.github.antiope-preview+json"
HEADER="${HEADER}; application/vnd.github.antiope-preview+json; application/vnd.github.shadow-cat-preview+json"
# URLs
REPO_URL="${BASE}/repos/${GITHUB_REPOSITORY}"
@@ -44,12 +44,15 @@ check_events_json() {
create_pull_request() {
SOURCE=${1} # from this branch
TARGET=${2} # pull request TO this target
SOURCE="${1}" # from this branch
TARGET="${2}" # pull request TO this target
BODY="${3}" # this is the content of the message
TITLE="${4}" # pull request title
DRAFT="${5}" # if PRs are draft
# Check if the branch already has a pull request open
DATA="{\"base\":\"${TARGET}\", \"head\":\"${SOURCE}\"}"
DATA="{\"base\":\"${TARGET}\", \"head\":\"${SOURCE}\", \"body\":\"${BODY}\"}"
RESPONSE=$(curl -sSL -H "${AUTH_HEADER}" -H "${HEADER}" --user "${GITHUB_ACTOR}" -X GET --data "${DATA}" ${PULLS_URL})
PR=$(echo "${RESPONSE}" | jq --raw-output '.[] | .head.ref')
echo "Response ref: ${PR}"
@@ -60,11 +63,8 @@ create_pull_request() {
# Option 2: Open a new pull request
else
TITLE="Update container ${SOURCE}"
BODY="This is an automated pull request to update the container collection ${SOURCE}"
# Post the pull request
DATA="{\"title\":\"${TITLE}\", \"base\":\"${TARGET}\", \"head\":\"${SOURCE}\"}"
DATA="{\"title\":\"${TITLE}\", \"base\":\"${TARGET}\", \"head\":\"${SOURCE}\", \"draft\":\"${DRAFT}\"}"
echo "curl --user ${GITHUB_ACTOR} -X POST --data ${DATA} ${PULLS_URL}"
curl -sSL -H "${AUTH_HEADER}" -H "${HEADER}" --user "${GITHUB_ACTOR}" -X POST --data "${DATA}" ${PULLS_URL}
echo $?
@@ -91,6 +91,14 @@ main () {
fi
echo "Pull requests will go to ${PULL_REQUEST_BRANCH}"
if [ -z "${PULL_REQUEST_DRAFT}" ]; then
echo "No explicit preference for draft PR: created PRs will be normal PRs."
PULL_REQUEST_DRAFT="false"
else
echo "Environment variable PULL_REQUEST_DRAFT set to a value: created PRs will be draft PRs."
PULL_REQUEST_DRAFT="true"
fi
# Get the name of the action that was triggered
BRANCH=$(jq --raw-output .ref "${GITHUB_EVENT_PATH}");
BRANCH=$(echo "${BRANCH/refs\/heads\//}")
@@ -106,7 +114,22 @@ main () {
# Ensure we have a GitHub token
check_credentials
create_pull_request $BRANCH $PULL_REQUEST_BRANCH
# Pull request body (optional)
if [ -z "${PULL_REQUEST_BODY}" ]; then
echo "No pull request body is set, will use default."
PULL_REQUEST_BODY="This is an automated pull request to update the container collection ${BRANCH}"
echo "Pull request body is ${PULL_REQUEST_BODY}"
fi
# Pull request title (optional)
if [ -z "${PULL_REQUEST_TITLE}" ]; then
echo "No pull request title is set, will use default."
PULL_REQUEST_TITLE="Update container ${BRANCH}"
echo "Pull request title is ${PULL_REQUEST_TITLE}"
fi
create_pull_request $BRANCH $PULL_REQUEST_BRANCH $PULL_REQUEST_BODY $PULL_REQUEST_TITLE $PULL_REQUEST_DRAFT
fi