linear-b / gitstream

/:\ gitStream - Workflow automation for your git repo. Use YAML to auto-assign reviewers, auto-merge PRs, automatic PR labeler, and more.
https://gitstream.cm
Apache License 2.0
256 stars 30 forks source link

Approve gets re-requested occasionally #403

Open vojvodics opened 8 months ago

vojvodics commented 8 months ago

Describe the bug

I'm unsure if this is a bug with our config, or in gitstream. We have a rule to require multiple approves if the PR is > than some estimated time. And also a rule that automatically assigns a review for a person based on the files changed and who created a PR:

  complex_review:
    if:
      - {{ calc.etr >= 5 }}
    run:
      - action: set-required-approvals@v1
        args:
          approvals: {{ 3 if (calc.etr >= 10) else 2 }}

  {% for item in teams %}
  assign_reviewer_files_{{ loop.index }}:
    if:
      - {{ files | match(list=item.files) | some }}
      - {{ item.team_members | reject(term=pr.author) | reject(list=pr.reviewers) | length >= 1 }}
    run:
      - action: add-reviewers@v1
        args:
          reviewers: {{ item.team_members | reject(term=pr.author) | reject(list=pr.reviewers) }}
  {% endfor %}

  {% for item in teams %}
  assign_team_reviewer_{{ loop.index }}:
    if:
      - {{ item.team_members | includes(term=pr.author) }}
      - {{ item.team_members | reject(term=pr.author) | reject(list=pr.reviewers) | length >= 1 }}
    run:
      - action: add-reviewers@v1
        args:
          reviewers: {{ item.team_members | reject(term=pr.author) | reject(list=pr.reviewers) }}
  {% endfor %}

// reject is added because gitstream would fail if it required a review from a person that created a PR and also codeowners who github adds automatically.

The issue doesn't occur on every PR, but sometimes if the PR is >= 10min, gitstream bot re-requests a review from the last person that approved the PR:

image

image

This causes the approve to never be accepted and an infinite loop.

To Reproduce

Provided above, not sure if I can create a reproduction as it requires a bit more complex setup than usual

Expected behavior

Approve shouldn't be re-requested

vim-zz commented 8 months ago

Hi, I'm still looking at this issue, but just from a quick look, you can also use fail_on_error: false in add-reviewers, and then you probably don't need the reject filter on the action itself.

vojvodics commented 8 months ago

@vim-zz thanks. Would gitstream still request a review from others? E.g. I have 3 people in the array, one of which is a codeowner - would the other 2 get a request for a review or would it skip everything?

vim-zz commented 8 months ago

It shouls still assign the other 2