mirror of
https://github.com/jbranchaud/til
synced 2026-01-05 08:08:02 +00:00
Add Use Labels To Block PR Merge as a GitHub Actions PR
This commit is contained in:
@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
|
|||||||
|
|
||||||
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
||||||
|
|
||||||
_1581 TILs and counting..._
|
_1582 TILs and counting..._
|
||||||
|
|
||||||
See some of the other learning resources I work on:
|
See some of the other learning resources I work on:
|
||||||
- [Ruby Operator Lookup](https://www.visualmode.dev/ruby-operators)
|
- [Ruby Operator Lookup](https://www.visualmode.dev/ruby-operators)
|
||||||
@@ -407,6 +407,7 @@ See some of the other learning resources I work on:
|
|||||||
- [Disable A Workflow With The gh CLI](github-actions/disable-a-workflow-with-the-gh-cli.md)
|
- [Disable A Workflow With The gh CLI](github-actions/disable-a-workflow-with-the-gh-cli.md)
|
||||||
- [Reference An Encrypted Secret In An Action](github-actions/reference-an-encrypted-secret-in-an-action.md)
|
- [Reference An Encrypted Secret In An Action](github-actions/reference-an-encrypted-secret-in-an-action.md)
|
||||||
- [Trigger A Workflow Via An API Call](github-actions/trigger-a-workflow-via-an-api-call.md)
|
- [Trigger A Workflow Via An API Call](github-actions/trigger-a-workflow-via-an-api-call.md)
|
||||||
|
- [Use Labels To Block PR Merge](github-actions/use-labels-to-block-pr-merge.md)
|
||||||
|
|
||||||
### Go
|
### Go
|
||||||
|
|
||||||
|
|||||||
41
github-actions/use-labels-to-block-pr-merge.md
Normal file
41
github-actions/use-labels-to-block-pr-merge.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Use Labels To Block PR Merge
|
||||||
|
|
||||||
|
Let's say our GitHub project has custom tags for both `no merge` and `wip`
|
||||||
|
(_work in progress_). Whenever either of those labels has been applied to a PR,
|
||||||
|
we want there to be a failed check so as to block the merge. This is useful to
|
||||||
|
ensure automated tools (as well as someone not looking closely enough) don't
|
||||||
|
merge a PR that isn't _ready to go_.
|
||||||
|
|
||||||
|
This can be achieved with a basic GitHub Actions workflow that requires no
|
||||||
|
3rd-party actions. We can add the following as
|
||||||
|
`.github/workflows/block-labeled-prs.yml` in our project.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
name: Block Labeled PR Merges
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [labeled, unlabeled, opened, edited, synchronize]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
prevent-merge:
|
||||||
|
if: ${{ contains(github.event.*.labels.*.name, 'no merge') || contains(github.event.*.labels.*.name, 'wip') }}
|
||||||
|
name: Prevent Merging
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check for label
|
||||||
|
run: |
|
||||||
|
echo "Pull request label prevents merging."
|
||||||
|
echo "Labels: ${{ join(github.event.*.labels.*.name, ', ') }}"
|
||||||
|
echo "Remove the blocking label(s) to skip this check."
|
||||||
|
exit 1
|
||||||
|
```
|
||||||
|
|
||||||
|
This workflow is run when a pull request is opened, when it is edited or
|
||||||
|
synchronized, and when a label change is made. The job `prevent-merge` sees if
|
||||||
|
any of the label names match `no merge` or `wip`. If so, we echo out some
|
||||||
|
details in the ubuntu container and then `exit 1` to fail the check.
|
||||||
|
|
||||||
|
Shoutout to [Jesse Squire's
|
||||||
|
implementation](https://www.jessesquires.com/blog/2021/08/24/useful-label-based-github-actions-workflows/#updated-21-march-2022)
|
||||||
|
which I've heavily borrowed from here.
|
||||||
Reference in New Issue
Block a user