PR Label Management with gitStream
Use YAML to automate label management on your git repo with gitStream.
Enforce Required Labels
Automatically enforce the use of required PR labels.
Configuration Description
Conditions (all must be true):
- The PR lacks one or more labels from a list of required labels.
Automation Actions:
- Apply a
Missing Required Labels
label. - Post a comment explaining why the label was applied and which labels are required.
Enforce Required Labels
manifest:
version: 1.0
automations:
enforce_required_labels:
if:
- {{ pr.labels | match(list=['Core', 'Mobile', 'UI']) | nope }}
run:
- action: request-changes@v1
args:
comment: Please ensure that your PR is labeled with either 'Core', 'Mobile', or 'UI'. These labels help us to better track and manage your contribution. Thank you.
Label Modified Resources
Apply a label to all PRs that indicates what percentage of new lines of code modify one or more specified resources.
Configuration Description
Conditions (all must be true):
- A PR modifies resources listed in one or more specified locations.
Automation Actions:
- Apply labels that indicate what percentage of new code lines modify the specified resources.
Label Changed Resources By Percent
# -*- mode: yaml -*-
manifest:
version: 1.0
automations:
{% for item in labels %}
label_resource_percent_{{ item.name }}:
if:
- {{ files | match(list=item.resources) | some }}
run:
- action: add-label@v1
args:
label: '{{ item.additions | round }}% {{ item.name }}'
{% endfor %}
resources:
core:
- src/app
- src/core
mobile:
- src/android
- src/ios
docs:
- docs/
labels:
- name: Core
resources: {{ resources.core }}
additions: {{ branch.diff.files_metadata | filter(attr='file', list=resources.core ) | map(attr='additions') | sum / total.additions * 100 }}
- name: Mobile
resources: {{ resources.mobile }}
additions: {{ branch.diff.files_metadata | filter(attr='file', list=resources.mobile ) | map(attr='additions') | sum / total.additions * 100 }}
- name: Docs
resources: {{ resources.docs }}
additions: {{ branch.diff.files_metadata | filter(attr='file', list=resources.docs ) | map(attr='additions') | sum / total.additions * 100 }}
total:
additions: {{ branch.diff.files_metadata | map(attr='additions') | sum }}
Label PRs by Language
Automatically detect which programming languages are contained in PRs and automatically label the PRs appropriately.
Configuration Description
Conditions (all must be true):
- A PR is created or updated.
Automation Actions:
- Label the PR for each programming language that is included.
Label PRs by Language
# -*- mode: yaml -*-
manifest:
version: 1.0
automations:
{% for item in labels %}
label_{{ item.name }}_pr:
if:
- {{ files | match(regex=item.resources) | some }}
run:
- action: add-label@v1
args:
label: '{{ item.name }}'
{% endfor %}
labels:
- name: Java
resources: r/.java$/
- name: Rust
resources: r/.rs$/
- name: HTML
resources: r/.html$/
- name: JavaScript
resources: r/.js$/
- name: Python
resources: r/.py$/
- name: Golang
resources: r/.go$/
- name: Ruby
resources: r/.rb$/
- name: CSS
resources: r/.css/
Label the Number of Unresolved Code Review Threads
Automatically label PRs when there are unresolved code review comments.
Configuration Description
Conditions (all must be true):
- The PR has one or more unresolved code review comments.
Automation Actions:
- Apply a label that indicates how many unresolved comments the PR has.
Automatically Recommend Labels for New PRs
Automatically suggest labels to apply to new PRs.
Configuration Description
Conditions (all must be true):
- A PR is created or updated that has no labels.
Automation Actions:
- Post a comment that suggest labels the author can apply to the PR.
Suggest Labels
# -*- mode: yaml -*-
manifest:
version: 1.0
automations:
suggest_labels:
if:
- {{ pr.labels | length == 0}}
run:
- action: add-comment@v1
args:
comment: |
All PRs must contain labels that indicate which CI/CD systems must be run. PLease update your PR to include one of the following labels: `Build: Mobile`, `Build: UI`, `Build: All`, `Build: None`
Additionally, Here are some labels you can apply to this PR that may be helpful:
* Suggest Reviewer - Use this if you aren't sure who to assign as the reviewer.
* WIP - Indicate this is a work in progress that shouldn't be merged.
Label PRs with the Number of Approvals
Automatically label PRs with the number of completed reviews that approve the PR.
Configuration Description
Conditions (all must be true):
- A PR is created or updated.
Automation Actions:
- Apply or update a label that indicates how many merge approvals have been granted.
Additional Resources
gitStream is a workflow automation tool that enables you to use YAML configuration files to optimize your code review process. Add context to PRs, find code experts for reviews, and automate the merge process to maximize developer productivity.
Learn More about how gitStream Works.
Related Automations:
- Estimate the amount of time it would require someone to complete a PR review.
- Flag missing Jira ticket information
- Label PRs that delete files.
- Label PRs that lack tests
- Provide information about what percent of a PR is new code.
- Request PR authors to provide screenshots in relevant PRs.
More Automations can be found on the Automation Library and Integrations pages.
Special thanks to Boemo W Mmopelwa for help with these examples.