|
3 | 3 | Manages GitHub issue comments. Sends Slack notifications and GitHub bot replies. |
4 | 4 |
|
5 | 5 | | Contributor type | Issue type | Comment type | #support-dev | #support-dev-notifications | GitHub bot | GitHub bot message | |
6 | | -|------------------|------------|--------------|--------------|---------------------------|------------------|-------------| |
| 6 | +|------------------|------------|--------------|--------------|---------------------------|------------|-------------------| |
7 | 7 | | **Core team** | Any | Any | No | No | No | - | |
8 | | -| **Close contributor** | Any | Any | **Yes** | No | No | - | |
9 | | -| **Issue creator** | `help-wanted` | Any | **Yes** | No | No | - | |
10 | | -| **Issue creator** | Private | Any | No | Yes | No | - | |
11 | | -| **Other** | Private | Regular | No | Yes | No | - | |
12 | | -| **Other** | Private | Assignment request | No | Yes | Yes`*` | `BOT_MESSAGE_ISSUE_NOT_OPEN` | |
13 | | -| **Other** | Unassigned `help-wanted` | Any | **Yes** | No | No | - | |
14 | | -| **Other** | `help-wanted` assigned to the comment author | Any | **Yes** | No | No | - | |
15 | | -| **Other** | `help-wanted` assigned to someone else | Regular | No | Yes | No | - | |
16 | | -| **Other** | `help-wanted` assigned to someone else | Assignment request | No | Yes | Yes`*` | `BOT_MESSAGE_ALREADY_ASSIGNED` | |
| 8 | +| **Close contributor** | Any | regular, [assign keyword](https://github.com/learningequality/.github/blob/main/scripts/constants.js#L44) | **Yes** | No | No | - | |
| 9 | +| **Issue creator** | `help-wanted` | regular, [assign keyword](https://github.com/learningequality/.github/blob/main/scripts/constants.js#L44) | **Yes** | No | No | - | |
| 10 | +| **Issue creator** | Private | regular, [assign keyword](https://github.com/learningequality/.github/blob/main/scripts/constants.js#L44) | No | Yes | No | - | |
| 11 | +| **Other** | Private | regular | No | Yes | No | - | |
| 12 | +| **Other** | Private | [assign keyword](https://github.com/learningequality/.github/blob/main/scripts/constants.js#L44) | No | Yes | Yes`*` | `BOT_MESSAGE_ISSUE_NOT_OPEN` | |
| 13 | +| **Other** | Unassigned `help-wanted` (not good first issue) | regular, [assign keyword](https://github.com/learningequality/.github/blob/main/scripts/constants.js#L44) | **Yes** | No | No | - | |
| 14 | +| **Other** | Unassigned `help-wanted` + good first issue | regular | **Yes** | No | No | - | |
| 15 | +| **Other** | Unassigned `help-wanted` + good first issue | [assign keyword](https://github.com/learningequality/.github/blob/main/scripts/constants.js#L44) | **Yes** | No | Yes`*` | `BOT_MESSAGE_KEYWORD_GOOD_FIRST_ISSUE` | |
| 16 | +| **Other** | `help-wanted` assigned to commenter | regular, [assign keyword](https://github.com/learningequality/.github/blob/main/scripts/constants.js#L44) | **Yes** | No | No | - | |
| 17 | +| **Other** | `help-wanted` assigned to someone else | regular | No | Yes | No | - | |
| 18 | +| **Other** | `help-wanted` assigned to someone else | [assign keyword](https://github.com/learningequality/.github/blob/main/scripts/constants.js#L44) | No | Yes | Yes`*` | `BOT_MESSAGE_ALREADY_ASSIGNED` | |
| 19 | +| **Close contributor** | Private | `/assign` command | No | Yes | Yes | `BOT_MESSAGE_ISSUE_NOT_OPEN` | |
| 20 | +| **Close contributor** | `help-wanted` assigned to commenter | `/assign` command | No | No | No | - (silent no-op) | |
| 21 | +| **Close contributor** | `help-wanted` assigned to someone else | `/assign` command | No | Yes | Yes | `BOT_MESSAGE_ALREADY_ASSIGNED` | |
| 22 | +| **Close contributor** | Unassigned `help-wanted` (not good first issue) | `/assign` command | No | Yes | Yes | `BOT_MESSAGE_ASSIGN_NOT_GOOD_FIRST_ISSUE` | |
| 23 | +| **Close contributor** | Unassigned `help-wanted` + good first issue, under limit | `/assign` command | No | Yes | Yes | `BOT_MESSAGE_ASSIGN_SUCCESS` | |
| 24 | +| **Close contributor** | Unassigned `help-wanted` + good first issue, at limit | `/assign` command | No | Yes | Yes | Dynamic at-limit message | |
| 25 | +| **Issue creator** | Private | `/assign` command | No | Yes | Yes | `BOT_MESSAGE_ISSUE_NOT_OPEN` | |
| 26 | +| **Issue creator** | `help-wanted` assigned to commenter | `/assign` command | No | No | No | - (silent no-op) | |
| 27 | +| **Issue creator** | `help-wanted` assigned to someone else | `/assign` command | No | Yes | Yes | `BOT_MESSAGE_ALREADY_ASSIGNED` | |
| 28 | +| **Issue creator** | Unassigned `help-wanted` (not good first issue) | `/assign` command | No | Yes | Yes | `BOT_MESSAGE_ASSIGN_NOT_GOOD_FIRST_ISSUE` | |
| 29 | +| **Issue creator** | Unassigned `help-wanted` + good first issue, under limit | `/assign` command | No | Yes | Yes | `BOT_MESSAGE_ASSIGN_SUCCESS` | |
| 30 | +| **Issue creator** | Unassigned `help-wanted` + good first issue, at limit | `/assign` command | No | Yes | Yes | Dynamic at-limit message | |
| 31 | +| **Other** | Private | `/assign` command | No | Yes | Yes | `BOT_MESSAGE_ISSUE_NOT_OPEN` | |
| 32 | +| **Other** | `help-wanted` assigned to commenter | `/assign` command | No | No | No | - (silent no-op) | |
| 33 | +| **Other** | `help-wanted` assigned to someone else | `/assign` command | No | Yes | Yes | `BOT_MESSAGE_ALREADY_ASSIGNED` | |
| 34 | +| **Other** | Unassigned `help-wanted` (not good first issue) | `/assign` command | No | Yes | Yes | `BOT_MESSAGE_ASSIGN_NOT_GOOD_FIRST_ISSUE` | |
| 35 | +| **Other** | Unassigned `help-wanted` + good first issue, under limit | `/assign` command | No | Yes | Yes | `BOT_MESSAGE_ASSIGN_SUCCESS` | |
| 36 | +| **Other** | Unassigned `help-wanted` + good first issue, at limit | `/assign` command | No | Yes | Yes | Dynamic at-limit message | |
17 | 37 |
|
18 | 38 | `*` There is an additional optimization that prevents more than one bot message per hour to not overwhelm issue comment section |
19 | 39 |
|
20 | | -In `scripts/contants.js` set: |
| 40 | +**`/assign` command** applies to all external contributors (close contributors, issue creators). Detected when the comment contains `/assign` as a standalone word (`/assign me` matches, `/assignee` does not). All `/assign` Slack activity goes to `#support-dev-notifications` only. |
| 41 | + |
| 42 | +**`/assign` cross-repo limit:** Contributors can have up to 2 assigned issues across all community repos (`COMMUNITY_REPOS`). Issues unassigned within the last 7 days count toward the limit (`currentAssignments + recentUnassignments >= MAX_ASSIGNED_ISSUES`). |
| 43 | + |
| 44 | +In `scripts/constants.js` set: |
21 | 45 | - `BOT_MESSAGE_ISSUE_NOT_OPEN`: _Issue not open for contribution_ message text |
22 | 46 | - `BOT_MESSAGE_ALREADY_ASSIGNED`: _Issue already assigned_ message text |
| 47 | +- `BOT_MESSAGE_ASSIGN_SUCCESS`: Assignment confirmation message |
| 48 | +- `BOT_MESSAGE_ASSIGN_NOT_GOOD_FIRST_ISSUE`: Decline message for non-good-first-issue issues |
| 49 | +- `BOT_MESSAGE_KEYWORD_GOOD_FIRST_ISSUE`: Keyword reply with `/assign` guidance |
| 50 | + |
| 51 | +# `good-first-issue-comment` |
| 52 | + |
| 53 | +Posts a guidance comment when the `good first issue` label is applied to an issue (triggered via the `issue-label` workflow). Explains the `/assign` command, issue limits, cooldown, and links to contributing guidelines. |
| 54 | + |
| 55 | +- Only posts if the issue also has `help wanted` label |
| 56 | +- Deletes any previous guidance comment from the bot before posting a new one |
| 57 | +- Identified by the `<!-- ASSIGN_GUIDANCE -->` HTML comment marker |
| 58 | + |
| 59 | +In `scripts/constants.js` set: |
| 60 | +- `BOT_MESSAGE_GOOD_FIRST_ISSUE_GUIDANCE`: Guidance message text |
23 | 61 |
|
24 | 62 | # `contributor-pr-reply` |
25 | 63 |
|
|
0 commit comments