Skip to content

Use gitStream for Automatic Code Review Assignment

Automatically assign code reviews based on changed resources, code expertise, branch, and more.

Assign Code Experts

When someone applies a suggest-reviewers label to a PR, use codeExperts to assign recommended reviewers and post a comment with the explainCodeExperts automation action.

Assign Code Experts

Configuration Description

Conditions (all must be true):

  • The PR has a suggest-reviewers label attached to it.

Automation Actions:

  • Use codeExperts to assign recommended reviewers.
  • Use explainCodeExperts to post a comment that lists the top code experts for the PR.

Assign Code Experts

# -*- mode: yaml -*-  manifest:  version: 1.0  automations:  assign_code_experts:  # Triggered when someone applies a suggest-reviewer label to a PR.  if:   - {{ pr.labels | match(term='suggest-reviewer') | some }}  # More info about code experts  # https://docs.gitstream.cm/filter-functions/#codeexperts  run:  - action: add-reviewers@v1  args:  reviewers: {{ repo | codeExperts(gt=10) }}  - action: explain-code-experts@v1   args:  gt: 10  

Branch-Based Review Policies

Automatically route and manage PRs based on the target or destination branch.

Branch-Based Review Policies

Configuration Description

Conditions (all must be true):

  • The target or source branch name contains a specified prefix.

Automation Actions:

  • Implement custom review policies for the branch.

Review Target Branch

# -*- mode: yaml -*- manifest:  version: 1.0 automations:  {% for item in branches %}  review_target_branch_{{ item.name }}:   if:   - {{ pr.target| match(regex=item.prefix) }}  run:  - action: set-required-approvals@v1  args:  approvals: {{ item.reviews }}  - action: add-comment@v1  args:   comment: |   PRs to the {{ item.name }} branch require {{ item.reviews }} review(s).  - action: add-reviewers@v1  args:  reviewers: [{{ item.reviewers }}]  {% endfor %}  branches:  - name: Release  prefix: r/^release/  reviewers: org/release-team  reviews: 4  - name: Experimental  prefix: r/^experimental-/  reviewers: org/experiment-team  reviews: 1 

Review Source Branch

# -*- mode: yaml -*- manifest:  version: 1.0 automations:  {% for item in branches %}  review_source_branch{{ item.name }}:   if:   - {{ branch.name | match(regex=item.prefix) }}  run:  - action: set-required-approvals@v1  args:  approvals: {{ item.reviews }}  - action: add-comment@v1  args:   comment: |   Reviewers from the {{ item.name }} team have automatically been assigned to this PR.  - action: add-reviewers@v1  args:  reviewers: [{{ item.reviewers }}]  {% endfor %}  branches:  - name: ABC  prefix: r/^ABC/  reviewers: org/a-team  - name: XYZ  prefix: r/^XYZ-/  reviewers: org/x-team 

Review Sensitive Files

Compare the changed files to a pre-defined list of files and directories in. If any files match, require a review from the team my-organization/security.

Review Sensitive Files

Configuration Description

Conditions (all must be true):

  • Any files match the files or directories listed in the sensitive_files custom expression. Customize this list for your project.

Automation Actions:

  • Assign my-organization/security to review the PR. Customize this value to match your organization.
  • Require 2 approvals.
  • Post a comment that explains the automation.

Review Sensitive Files

# -*- mode: yaml -*- manifest:  version: 1.0  automations:  # Assign special teams to review sensitive files.   # This requires the `sensitive` custom expression found at the bottom of this file.  review_sensitive_files:  # For all files listed in the sensitive custom expression.  if:  - {{ files | match(list=sensitive_files) | some }}  run:  # Add reviewers from the dev-leads team, and require two approvals  # Modify `my-organization/security` to match your organization.  - action: add-reviewers@v1  args:  reviewers: [my-organization/security]  - action: set-required-approvals@v1  args:  approvals: 2  - action: add-comment@v1  args:  comment: |  This PR affects one or more sensitive files and requires review from the security team.  # The `sensitive_file_review` automation requires this custom expression. # Modify this list to suit your security needs. sensitive_files:  - src/app/auth/  - src/app/routing/  - src/app/resources/ 

Custom Team Review Policies

Automatically assign the PR author's team to review PRs.

Assign the Author's Team for Review

Configuration Description

Conditions (all must be true):

  • The PR author is a member of one of the teams specified in the teams custom expression.

Automation Actions:

  • Assign that team to review the PR.

Assign the Author's Team for Review

# -*- mode: yaml -*- manifest:  version: 1.0  automations:  {% for item in teams %}  review_team_{{ item.name }}:   if:   - {{ pr.author_teams | match(regex=item.regex) }}  run:  - action: add-reviewers@v1  args:  reviewers: [{{ item.team }}]   - action: add-comment@v1  args:   comment: |   This {{ item.name }} team has been automatically assigned to review this PR.  {% endfor %}  teams:  - regex: r/ui-team/  name: UI Team  team: org/ui-team  - regex: r/mobile-team/  name: Mobile  team: org/mobile-team 

Distribute Code Reviews to Share Knowledge

Require the reviewer as a previous contributor with code expertise between set thresholds when PR contains Share Knowledge label.

Knowledge Share

Configuration Description

Conditions (all must be true):

  • A Share Knowledge label has been applied to the PR

Automation Actions:

  • Choose a previous contributor between specified expertise thresholds and assign them as a reviewer.
  • Post a comment explaining why this action was taken.

Knowledge Share

# -*- mode: yaml -*-  manifest:  version: 1.0  automations:  share_knowledge:  if:  - {{ pr.labels | match(term='Share Knowledge') | some }}  run:  - action: add-reviewers@v1  args:  reviewers: {{ repo | codeExperts(gt=30, lt=60) | random }}  - action: add-comment@v1  args:  comment: |  gitStream has assigned a reviewer to increase knowledge sharing on this PR. 

Notify Watcher

Automatically notify code reviewers based on a resource watchlist.

Notify Watchlist

Configuration Description

Conditions (all must be true):

  • The PR modifies any files listed under the watchers custom expression.

Automation Actions:

  • Post a comment that notifies the responsible team or individual of the changes.

Notify Watcher

# -*- mode: yaml -*-  manifest:  version: 1.0  ## change orgName to match your git organization name. orgName: company  automations:  {% for item in watchers %}  notify_watcher_{{ item.owner if item.owner else item.team }}:  if:  - {{ (files | match(list=item.files) | some) or (source.diff.files | match(attr="diff", list=item.diffs) | some) }}  run:  - action: add-comment@v1  args:  comment: |  @{{ item.owner if item.owner else (["{{ orgName }}/", item.team] | join) }} - this PR has changes you're watching   {% if files | match(list=item.files) | some -%}  files:  {%- for file in files | filter(list=item.files) %}  - {{ file }}  {%- endfor -%}  {%- endif %}   {% if source.diff.files | match(attr="diff", list=item.diffs) | some -%}  diffs:  {%- for diff in item.diffs -%}  {%- if source.diff.files | match(attr="diff", list=diff) | some %}  - {{ diff }}  {%- for file in source.diff.files | filter(attr="diff", list=diff) | map(attr="new_file") %}  - {{ file }}  {%- endfor -%}  {%- endif -%}  {%- endfor -%}  {%- endif %}  - action: add-reviewers@v1  args:  reviewers: {{ item.owner }}  team_reviewers: {{ item.team }}  {% endfor %}    watchers:  - owner: juliaspencer  files:  - src/auth  - team: release  files:  - package.json  - yarn.lock