Skip to content

Commit 1d85761

Browse files
committed
initial commit
0 parents  commit 1d85761

File tree

5 files changed

+134
-0
lines changed

5 files changed

+134
-0
lines changed

Dockerfile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM cloudposse/github-status-updater:0.2.0-98
2+
# https://github.com/cloudposse/github-status-updater
3+
4+
RUN apk add bash jq git && rm -rf /var/cache/apk/*
5+
ADD update-status.sh /usr/bin/update-commit-status.sh
6+
7+
ENTRYPOINT [ "/usr/bin/update-commit-status.sh" ]

Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
.PHONY: build
2+
build:
3+
chmod +x update-status.sh
4+
docker build -t commit-status-updater .
5+
6+
.PHONY: shellcheck
7+
shellcheck:
8+
docker run --rm -v "$(CURDIR):/mnt" koalaman/shellcheck:stable update-status.sh

README.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# Github Action commit-status-updater
2+
3+
## Overview
4+
5+
A simple Github Action that allows us to update the status of a given commit.
6+
7+
GitHub does not update the status of a commit when running workflow and therefore tools that rely on the context/status of a given commit are not compatible with it.
8+
An example is [Prow](https://github.com/kubernetes/test-infra/tree/master/prow) which uses the Github Status API to read the status of a given commit.
9+
10+
## Integration with Prow
11+
12+
If using [Prow](https://github.com/kubernetes/test-infra/tree/master/prow) you can now add GitHub Workflows as required checks.
13+
14+
### Example with Branch Protection and Tide
15+
branch-protection:
16+
```
17+
branch-protection:
18+
orgs:
19+
{MY_ORG}:
20+
repos:
21+
{MY_REPO}:
22+
branches:
23+
master:
24+
protect: true # enable protection
25+
enforce_admins: true # rules apply to admins
26+
required_status_checks:
27+
contexts:
28+
- "GithubActions - {WORKFLOW_NAME}"
29+
restrictions: # restrict who can push to the repo
30+
users:
31+
- ouzibot
32+
```
33+
tide:
34+
```
35+
tide:
36+
context_options:
37+
from-branch-protection: true
38+
```
39+
40+
## Example action
41+
42+
```
43+
name: Test
44+
45+
on: [pull_request]
46+
47+
jobs:
48+
build:
49+
runs-on: ubuntu-latest
50+
steps:
51+
- uses: actions/checkout@v1
52+
- uses: ouzi-dev/github-action-commit-status-updater@master
53+
env:
54+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
55+
- name: Test
56+
run: |
57+
echo this should always pass after 2 minutes
58+
sleep 2m
59+
echo pass
60+
- if: success()
61+
- uses: ouzi-dev/github-action-commit-status-updater@master
62+
with:
63+
state: success
64+
env:
65+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
66+
- if: failure()
67+
- uses: ouzi-dev/github-action-commit-status-updater@master
68+
with:
69+
state: failure
70+
env:
71+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
72+
```

action.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
name: 'commit-status-updater'
2+
description: 'Updates the current commit status'
3+
4+
inputs:
5+
context:
6+
description: 'The context for the status. Default is GithubActions - ${GITHUB_WORKFLOW}'
7+
state:
8+
description: "Commit state. Possible values are 'pending', 'success', 'error' or 'failure'"
9+
default: 'pending'
10+
token:
11+
description: "The Github token"
12+
13+
runs:
14+
using: 'docker'
15+
image: 'Dockerfile'

update-status.sh

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/bin/bash
2+
set -eo pipefail
3+
4+
# Set Defaults if non provided
5+
INPUT_CONTEXT=${INPUT_CONTEXT:-GithubActions - ${GITHUB_WORKFLOW}}
6+
7+
# Chech all inputs have been provided
8+
[[ -z "${INPUT_STATE}" ]] && { echo "Error: INPUT_STATE not found"; exit 1; }
9+
[[ -z "${GITHUB_REPOSITORY}" ]] && { echo "Error: GITHUB_ORG not found"; exit 1; }
10+
[[ -z "${GITHUB_TOKEN}" ]] && { echo "Error: GITHUB_TOKEN not found"; exit 1; }
11+
12+
# Extract the org, repo and get the sha1
13+
GITHUB_ORG=$(echo "${GITHUB_REPOSITORY}" | awk -F/ '{print $1}')
14+
GITHUB_REPO=$(echo "${GITHUB_REPOSITORY}" | awk -F/ '{print $2}')
15+
LAST_COMMIT_SHA=$(git rev-list --no-merges -n 1 HEAD) # get latest non merge commit as github checks out refs/remotes/pull/X/merge instead of the branch
16+
17+
# Check that everything is as expected
18+
[[ -z "${GITHUB_ORG}" ]] && { echo "Error: GITHUB_ORG is empty"; exit 1; }
19+
[[ -z "${GITHUB_REPO}" ]] && { echo "Error: GITHUB_REPO is empty"; exit 1; }
20+
[[ -z "${LAST_COMMIT_SHA}" ]] && { echo "Error: LAST_COMMIT_SHA is empty"; exit 1; }
21+
22+
echo "** Setting status ${INPUT_STATE} for ${LAST_COMMIT_SHA} in ${GITHUB_ORG}/${GITHUB_REPO}"
23+
24+
# set the status
25+
# https://github.com/cloudposse/github-status-updater
26+
exec github-status-updater -action update_state \
27+
-context "${INPUT_CONTEXT}" \
28+
-owner "${GITHUB_ORG}" \
29+
-repo "${GITHUB_REPO}" \
30+
-state "${INPUT_STATE}" \
31+
-token "${GITHUB_TOKEN}" \
32+
-ref "${LAST_COMMIT_SHA}"

0 commit comments

Comments
 (0)