Skip to content

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.

Enforce Required 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

Automatically label PRs to indicate what resources are being changed. This works as a direct replacement for the PR Labeler GitHub Action.

Label Modified Resources

Configuration Description

Conditions (all must be true):

  • A PR is created or updated.

Automation Actions:

  • Apply labels based on the branch name or modified resources.

Label Modified Resources

# -*- mode: yaml -*-
manifest:
  version: 1.0

automations:
  {% for item in labels %}
  label_resource_{{ item.name }}:
      if:
        -{{ branch.name | includes(regex=item.branch) or files | match(list=item.resources) }}
      run:
        - action: add-label@v1
          args:
            label: {{ item.name }}
  {% endfor %}

labels:
  - name: Core
    resources:
    - src/app
    branch: r/^core-/
  - name: mobile
    resources:
    - src/android
    - src/ios
    branch: r/^mobile-/

Percent-Based Labels for Modified Resources

Apply a label to all PRs that indicates what percentage of new lines of code modify one or more specified resources.

Label Changed Resources By Percent

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 the Number of Unresolved Code Review Threads

Automatically label PRs when there are unresolved code review comments.

Label Unresolved Review Threads

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.

Label Unresolved Review Threads

# -*- mode: yaml -*-
manifest:
  version: 1.0
automations:
  label_unresolved_threads:  
    if:  
      - {{ pr.unresolved_threads }}
    run:
      - action: add-label@v1
        args:
          label: {{ pr.unresolved_threads }} Unresolved Thread(s)
          color: {{ colors.yellow }}

colors:
  yellow: 'fbca04'

Automatically Recommend Labels for New PRs

Automatically suggest labels to apply to new PRs.

Suggest Labels

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.

Label the Number of Approvals

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.

Label the Number of Approvals

# -*- mode: yaml -*-
manifest:
  version: 1.0
automations:
  label_approvals: 
    if:  
      - {{ pr.approvals | length > 0 }}
    run:
      - action: add-label@v1
        args:
          label: {{ pr.approvals | length }} Approved Review(s)

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:

More Automations can be found on the Automation Library and Integrations pages.

Special thanks to Boemo W Mmopelwa for help with these examples.