adding first test

This commit is contained in:
Vanessa Sochat
2019-01-31 18:56:56 -05:00
commit 230b0cfb1e
3 changed files with 159 additions and 0 deletions

13
Dockerfile Normal file
View File

@@ -0,0 +1,13 @@
FROM debian:jessie-slim
# docker build -t vanessa/pull-request-action
LABEL "com.github.actions.name"="Pull Request on Branch Push"
LABEL "com.github.actions.description"="Create a pull request when a branch is created or updated"
LABEL "com.github.actions.icon"="activity"
LABEL "com.github.actions.color"="yellow"
COPY pull-request.sh /pull-request.sh
RUN chmod u+x /pull-request.sh
ENTRYPOINT ["/pull-request"]

38
README.md Normal file
View File

@@ -0,0 +1,38 @@
# Automated Branch Pull Requests
This action will open a pull request to master branch (or otherwise specified)
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
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"
env = {
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.
## Example use Case: Update Registry
As an example, I created this action to be intended for an [organizational static registry](https://www.github.com/singularityhub/registry-org) for container builds. Specifically, you
have modular repositories building container recipes, and then opening pull requests to the
registry to update it.
- the container collection pull request should be generated from a separate GitHub repository, including the folder structure (manifests, tags, collection README) that are expected.
- pushing a branch that starts with update/<namespace> should open a pull request, if it doens't exist. If the branch is already open for PR, it updates it.

108
pull-request.sh Executable file
View File

@@ -0,0 +1,108 @@
#!/bin/bash
# Suggested by Github actions to be strict
set -e
set -o pipefail
################################################################################
# Global Variables (we can't use GITHUB_ prefix)
################################################################################
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"
# URLs
REPO_URL="${BASE}/repos/${GITHUB_REPOSITORY}"
PULLS_URL=$REPO_URL/pulls
################################################################################
# Helper Functions
################################################################################
get_url() {
RESPONSE=$(curl -sSL -H "${AUTH_HEADER}" -H "${HEADER}" "${1:-}")
echo ${RESPONSE}
}
check_credentials() {
if [[ -z "${GITHUB_TOKEN}" ]]; then
echo "You must include the GITHUB_TOKEN as an environment variable."
exit 1
fi
}
check_events_json() {
if [[ ! -f "${GITHUB_EVENT_PATH}" ]]; then
echo "Cannot find Github events file at ${GITHUB_EVENT_PATH}";
exit 1;
fi
echo "Found ${GITHUB_EVENT_PATH}";
cat "${GITHUB_EVENT_PATH}"
}
create_pull_request() {
SOURCE=${1} # from this branch
TARGET=${2} # pull request TO this target
TITLE="Update container ${SOURCE}"
BODY="This is an automated pull request to update the container collection ${SOURCE}"
# Post the pull request
curl -d "{\"title\":\"${TITLE}\", \"body\":\"${BODY}\", \"head\":\"${SOURCE}\", \"base\":\"${TARGET}\"}" -H "Content-Type: application/json" -H "\"${HEADER}\"" -H \""${AUTH_HEADER}"\" -X POST ${PULLS_URL};
echo $?
}
main () {
# path to file that contains the POST response of the event
# Example: https://github.com/actions/bin/tree/master/debug
# Value: /github/workflow/event.json
check_events_json;
# User specified branch to PR to, and check
if [ -z "${BRANCH_PREFIX}" ]; then
echo "No branch prefix is set, all branches will be used."
BRANCH_PREFIX=""
fi
if [ -z "${PULL_REQUEST_BRANCH}" ]; then
PULL_REQUEST_BRANCH=master
fi
echo "Pull requests will go to ${PULL_REQUEST_BRANCH}"
# Get the name of the action that was triggered
BRANCH=$(jq --raw-output .ref "${GITHUB_EVENT_PATH}");
echo "Found branch $BRANCH"
# If it's to the target branch, ignore it
if [[ "${BRANCH}" == "${PULL_REQUEST_BRANCH}" ]]
echo "Target and current branch are identical (${BRANCH}), skipping."
else
# If the prefix for the branch matches
if [[ $BRANCH == ${BRANCH_PREFIX}* ]]; then
# Ensure we have a GitHub token
check_credentials
create_pull_request $BRANCH $PULL_REQUEST_BRANCH
fi
fi
}
echo "==========================================================================
START: Running Pull Request on Branch Update Action!";
main;
echo "==========================================================================
END: Finished";