Files
awesome-copilot/skills/github-issues/references/labels.md
T

158 lines
4.9 KiB
Markdown

# Labels
Labels are repository-scoped objects with a name, a color, and an optional
description. Applying a label to an issue and creating a label are separate
operations, so list a repository's labels before using them rather than assuming
a name exists.
The `gh label` and `gh issue` commands act on the current repository; add
`--repo {owner}/{repo}` to target another one. `gh api` has no `--repo` flag: it
fills the `{owner}` and `{repo}` placeholders from the current repository, so set
`GH_REPO={owner}/{repo}` or write the values into the path when working elsewhere.
The GitHub MCP server's label tools require the non-default `labels` toolset and
cannot add or remove an individual label on an issue, so this reference uses the
`gh` CLI throughout.
## List Labels
`gh label list` returns only the first 30 labels. Always pass `--limit` when the
result decides whether a label exists, or the answer will be wrong on any
repository with a larger label set.
```bash
gh label list --limit 1000
```
Search names and descriptions, and return structured output:
```bash
gh label list --limit 1000 --search "triage"
gh label list --limit 1000 --json name,color,description --jq '.[] | "\(.name) (#\(.color))"'
```
Sort by name instead of creation order:
```bash
gh label list --limit 1000 --sort name --order asc
```
## Create Label
Only the name is required. Color is six hex characters **without** a leading `#`;
a random color is assigned when it is omitted. Description must be 100
characters or fewer.
```bash
gh label create "needs-triage" \
--color FBCA04 \
--description "Awaiting maintainer review"
```
Creating a label that already exists fails. Use `--force` to create it or update
its color and description if it is already there, which makes seeding a label set
repeatable:
```bash
gh label create "needs-triage" --color FBCA04 --force
```
## Rename or Recolor Label
Send only what changes. `--name` sets the new name.
```bash
gh label edit "needs-triage" --name "triage"
gh label edit "triage" --color D93F0B --description "Awaiting maintainer review"
```
## Delete Label
Deleting a label removes it from every issue and pull request that carries it.
`--yes` is required when running without a prompt. Delete a label only when
explicitly requested.
```bash
gh label delete "triage" --yes
```
## Copy Labels Between Repositories
Clones the source repository's labels into the current one, skipping names that
already exist. `--force` overwrites them instead.
```bash
gh label clone {owner}/{source-repo}
```
## View an Issue's Labels
```bash
gh issue view {issue_number} --json labels --jq '.labels[].name'
```
## Add Labels to an Issue
Adds to the labels already on the issue. Repeat the flag for several labels.
```bash
gh issue edit {issue_number} --add-label "bug" --add-label "needs-triage"
```
## Remove Labels from an Issue
```bash
gh issue edit {issue_number} --remove-label "needs-triage"
```
## Replace All Labels on an Issue
`gh issue edit` adds and removes but cannot replace the whole set. Use the API
endpoint for that: `PUT` drops the existing labels and sets the ones supplied.
```bash
gh api repos/{owner}/{repo}/issues/{issue_number}/labels \
-X PUT \
-f 'labels[]=bug'
```
## Remove All Labels from an Issue
```bash
gh api repos/{owner}/{repo}/issues/{issue_number}/labels -X DELETE
```
## Default Labels
GitHub creates these labels in a new repository:
`accessibility`, `bug`, `documentation`, `duplicate`, `enhancement`,
`good first issue`, `help wanted`, `invalid`, `question`, `wontfix`.
Maintainers can rename or delete any of them, so check rather than assume. The
`isDefault` field separates them from labels the repository added:
```bash
gh label list --limit 1000 --json name,isDefault --jq '.[] | select(.isDefault | not) | .name'
```
## Usage Rules
- List the repository's labels before applying them, so the names used match the
repository's existing taxonomy. Pass `--limit` when doing so; the default of 30
silently hides the rest.
- Create a label explicitly, with a color and description, rather than relying on
a name appearing as a side effect of labelling an issue.
- Color is six hexadecimal characters with no leading `#`.
- Description must be 100 characters or fewer.
- Use `--add-label` and `--remove-label` to change part of an issue's labels.
They leave the other labels intact.
- Replace an issue's whole label set only when replacement is explicitly
requested. Read the current labels first, and prefer add and remove otherwise:
`PUT` discards every label not named in the call.
- Label names are matched case-insensitively and stored with the case given.
- Quote label names that contain spaces.
- Pass `--yes` to `gh label delete` when running without a prompt, and ask before
deleting: the label disappears from every issue that carries it.
- Prefer issue types over labels for categorization when the organization has
issue types configured.