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

Fix #4594 : Issue Triaging Action Added #5591

Open
wants to merge 15 commits into
base: develop
Choose a base branch
from
Open
Changes from 1 commit
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
91 changes: 91 additions & 0 deletions .github/workflows/issue_triage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: Issue Triage and Management

on:
issues:
types: [opened, labeled, assigned]
Copy link
Collaborator

Choose a reason for hiding this comment

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

I think it could be beneficial to trigger actions for label removal as well. This way, we can ensure that the needs-triage label is added as soon as any required label is missing, which will help us better track and manage such issues.


permissions:
issues: write

jobs:
triage-on-issue-open:
runs-on: ubuntu-latest
if: github.event.sender.login != 'github-actions'
steps:
- name: Reply to Issue
uses: peter-evans/issues-comment-action@v2
adhiamboperes marked this conversation as resolved.
Show resolved Hide resolved
with:
issue-number: ${{ github.event.issue.number }}
comment: >
Thanks for filing the issue! We’ll review it shortly and route it to the correct team.

- name: Check Labels for Proper Triaging
id: check-labels
uses: actions/github-script@v6
with:
script: |
const issue = await github.rest.issues.get({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number
});

const labels = issue.data.labels.map(label => label.name);
const requiredLabels = {
types: ['bug', 'enhancement', 'good first issue'],
impacts: ['Impact: High', 'Impact: Medium', 'Impact: Low'],
work: ['Work: High', 'Work: Medium', 'Work: Low'],
priorities: ['Priority: Essential', 'Priority: Important', 'Priority: Nice-to-have']
};

const hasTypeLabel = labels.some(label => requiredLabels.types.includes(label));
const hasImpactLabel = labels.some(label => requiredLabels.impacts.includes(label));
const hasWorkLabel = labels.some(label => requiredLabels.work.includes(label));
const hasPriorityLabel = labels.some(label => requiredLabels.priorities.includes(label));

const needsTriage = !(hasTypeLabel && hasImpactLabel && hasWorkLabel && hasPriorityLabel);

core.setOutput('needs-triage', needsTriage);

- name: Manage Needs Triage Label
uses: actions/github-script@v6
with:
script: |
const needsTriage = '${{ steps.check-labels.outputs.needs-triage }}' === 'true';
if (needsTriage) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

As per the issue requirements, two conditions must be met for triaging:

the workflow should verify that exactly one open project is assigned to the issue, and that exactly one of each type of these labels is assigned: issue type, work, and impact. If any of these criteria fail to be met, the issue should be automatically labeled with "needs triage." If all of them are met, "needs triage" should be removed.

  1. The issue should be assigned to exactly one project
  2. Exactly one label of each type must be assigned.

Both (all) conditions need to be satisfied to remove the needs-triage label. If either is missing, the issue should remain labeled as needs-triage. Therefore, please ensure along with label checks the project assignment condition is also verified to handle needs-triage correctly.

await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
labels: ['needs-triage']
});
} else {
try {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
name: 'needs-triage'
});
} catch (error) {
if (error.status !== 404) {
throw error;
}
}
}

- name: Verify Project Assignment
uses: actions/github-script@v6
with:
script: |
const projects = await github.rest.issues.listForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number
});

const openProjects = projects.data.filter(project => project.state === 'open');
adhiamboperes marked this conversation as resolved.
Show resolved Hide resolved
if (openProjects.length !== 1) {
throw new Error(Issue must be assigned to exactly one open project. Found: ${openProjects.length});
}
adhiamboperes marked this conversation as resolved.
Show resolved Hide resolved
console.log(Valid project assignment: ${openProjects[0].name});
adhiamboperes marked this conversation as resolved.
Show resolved Hide resolved
Loading