name: Label issues on: issues: types: - reopened - opened jobs: label_issues: name: "Issue: add labels" if: ${{ github.event.action == 'opened' || github.event.action == 'reopened' }} runs-on: ubuntu-latest permissions: issues: write steps: - uses: actions/github-script@v8 with: github-token: ${{ secrets.GH_ACTIONS_PR_WRITE }} script: | // Get the issue body and title const body = context.payload.issue.body let title = context.payload.issue.title // Define the labels array let labels = [] // Check if the issue author is in the agentframework-developers team let isTeamMember = false try { const teamMembership = await github.rest.teams.getMembershipForUserInOrg({ org: context.repo.owner, team_slug: process.env.TEAM_NAME, username: context.payload.issue.user.login }) console.log("Team Membership Data:", teamMembership); isTeamMember = teamMembership.data.state === 'active' } catch (error) { // User is not in the team or team doesn't exist console.error("Error fetching team membership:", error); isTeamMember = false } // Only add triage label if the author is not in the team if (!isTeamMember) { labels.push("triage") } // Helper function to extract field value from issue form body // Issue forms format fields as: ### Field Name\n\nValue function getFormFieldValue(body, fieldName) { if (!body) return null const regex = new RegExp(`###\\s*${fieldName}\\s*\\n\\n([^\\n#]+)`, 'i') const match = body.match(regex) return match ? match[1].trim() : null } // Check for language from issue form dropdown first const languageField = getFormFieldValue(body, 'Language') let languageLabelAdded = false if (languageField) { if (languageField === 'Python') { labels.push("python") languageLabelAdded = true } else if (languageField === '.NET') { labels.push(".NET") languageLabelAdded = true } // 'None / Not Applicable' - don't add any language label } // Fallback: Check if the body or the title contains the word 'python' (case-insensitive) // Only if language wasn't already determined from the form field if (!languageLabelAdded) { if ((body != null && body.match(/python/i)) || (title != null && title.match(/python/i))) { // Add the 'python' label to the array labels.push("python") } // Check if the body or the title contains the words 'dotnet', '.net', 'c#' or 'csharp' (case-insensitive) if ((body != null && body.match(/\.net/i)) || (title != null && title.match(/\.net/i)) || (body != null && body.match(/dotnet/i)) || (title != null && title.match(/dotnet/i)) || (body != null && body.match(/C#/i)) || (title != null && title.match(/C#/i)) || (body != null && body.match(/csharp/i)) || (title != null && title.match(/csharp/i))) { // Add the '.NET' label to the array labels.push(".NET") } } // Check for issue type from issue form dropdown const issueTypeField = getFormFieldValue(body, 'Type of Issue') if (issueTypeField) { if (issueTypeField === 'Bug') { labels.push("bug") } else if (issueTypeField === 'Feature Request') { labels.push("enhancement") } else if (issueTypeField === 'Question') { labels.push("question") } } // Add the labels to the issue (only if there are labels to add) if (labels.length > 0) { github.rest.issues.addLabels({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, labels: labels }); } env: TEAM_NAME: ${{ secrets.DEVELOPER_TEAM }}