Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Reverted] GitHub Actions to add/remove label "stale" and comment #7950

Merged
merged 1 commit into from
Sep 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions .github/workflows/label-add-conflict.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Auto Add Label "stale" & Comment Conflicts

on:
push:
branches:
- develop
- '4.*'
paulbalandan marked this conversation as resolved.
Show resolved Hide resolved
pull_request:
branches:
- develop
- '4.*'

jobs:
auto-label-comment-conflict:

permissions:
contents: read
pull-requests: write

runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Get PR List
id: PR-list
run: echo "pr_list=$(gh pr list -L 100 --json mergeable,url,labels,author)" >> $GITHUB_OUTPUT
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: 'Add label "stale" and comment'
env:
PR_LIST: ${{ steps.PR-list.outputs.pr_list }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |

IFS=$'\n' # Set Internal Field Separator to newline to handle array elements

# Iterate through the PRs in PR_LIST
for pr in $(echo "$PR_LIST" | jq -c '.[]'); do
mergeable=$(echo "$pr" | jq -r '.mergeable')
author=$(echo "$pr" | jq -r '.author.login')
labels=$(echo "$pr" | jq -c '.labels[].name' | tr -d '[]"')
url=$(echo "$pr" | jq -r '.url')

if [ "$mergeable" != "MERGEABLE" ] && [[ ! "$labels" == *"stale"* ]]; then
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kenjis I believe the outcome of $mergeable yields an "UNKNOWN" result. Upon investigation, I discovered that $mergeable can result in three potential outcomes: "MERGEABLE," "CONFLICTING," or "UNKNOWN."

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps we could organize it in a way where "CONFLICTING" results take precedence.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But if it is "UNKNOWN", we cannot put a label.

At least, I can see the outcomes:

$ gh pr list -L 100 --json mergeable,url 
[
  {
    "mergeable": "CONFLICTING",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7951"
  },
  {
    "mergeable": "MERGEABLE",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7947"
  },
  {
    "mergeable": "MERGEABLE",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7946"
  },
  {
    "mergeable": "MERGEABLE",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7944"
  },
  {
    "mergeable": "MERGEABLE",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7933"
  },
  {
    "mergeable": "MERGEABLE",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7925"
  },
  {
    "mergeable": "MERGEABLE",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7924"
  },
  {
    "mergeable": "MERGEABLE",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7846"
  },
  {
    "mergeable": "MERGEABLE",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7732"
  },
  {
    "mergeable": "CONFLICTING",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7724"
  },
  {
    "mergeable": "CONFLICTING",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7718"
  },
  {
    "mergeable": "MERGEABLE",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7717"
  },
  {
    "mergeable": "MERGEABLE",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7491"
  },
  {
    "mergeable": "CONFLICTING",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/7404"
  },
  {
    "mergeable": "MERGEABLE",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/6877"
  },
  {
    "mergeable": "CONFLICTING",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/6845"
  },
  {
    "mergeable": "CONFLICTING",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/6284"
  },
  {
    "mergeable": "MERGEABLE",
    "url": "https://github.com/codeigniter4/CodeIgniter4/pull/1797"
  }
]

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it can be changed like this?

if [ "$mergeable" == "CONFLICTING" ] &&[[ ! "$labels" == *"stale"* ]]; then
    ...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, it is safe.

Copy link
Contributor Author

@totoprayogo1916 totoprayogo1916 Sep 20, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The team point out that the merge state needs to be recalculated when the base branch changes. Since the codeignitier PR is based on their develop branch (https://github.com/codeigniter4/CodeIgniter4/tree/develop), it would make sense that there are periods of time where a PR mergeable field is UNKNOWN.

I hope this answers your question 🙏

got the answer, why UNKNOWN on $mergeable
cli/cli#8020 (reply in thread)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. Can you send another PR with "$mergeable" == "CONFLICTING"?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

created #7957

# Add "stale" label
gh pr edit $url --add-label "stale"

# Add a comment
gh pr comment $url --body ":wave: Hi, @$author!<br><br>We detected conflicts in your PR against the base branch :speak_no_evil:<br>You may want to sync :arrows_counterclockwise: your branch with upstream!<br><br>Ref: [Syncing Your Branch](https://github.com/codeigniter4/CodeIgniter4/blob/develop/contributing/workflow.md#pushing-your-branch)"
fi
done
33 changes: 0 additions & 33 deletions .github/workflows/label-conflict.yml

This file was deleted.

36 changes: 36 additions & 0 deletions .github/workflows/label-remove-conflict.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Auto Remove "stale" label

on:
pull_request:
branches:
- develop
- '4.*'

jobs:
check-conflict:
runs-on: ubuntu-22.04
permissions:
contents: read
pull-requests: write

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Get PR Detail
id: PR-detail
run: echo "detail=$(gh pr view $PR_URL --json mergeable,url,labels,author)" >> $GITHUB_OUTPUT
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_URL: ${{ github.event.pull_request.html_url }}

- name: 'Remove label "stale"'
env:
PR_DETAIL: ${{ steps.PR-detail.outputs.detail }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_URL: ${{ github.event.pull_request.html_url }}
run: |
if [ "$(echo $PR_DETAIL | jq -r '.mergeable')" == "MERGEABLE" ] && \
[ "$(echo $PR_DETAIL | jq -r '.labels[] | select(.name == "stale")')" != "" ]; then
gh pr edit $PR_URL --remove-label "stale"
fi