{"id":48375763,"url":"https://github.com/desktop/gh-cli-and-desktop-shared-workflows","last_synced_at":"2026-04-05T18:30:56.727Z","repository":{"id":337827066,"uuid":"1155402216","full_name":"desktop/gh-cli-and-desktop-shared-workflows","owner":"desktop","description":"A home for GH CLI and Desktop shared action workflows","archived":false,"fork":false,"pushed_at":"2026-03-10T15:38:23.000Z","size":104,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-10T19:52:31.783Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/desktop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-11T13:27:18.000Z","updated_at":"2026-03-10T15:38:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/desktop/gh-cli-and-desktop-shared-workflows","commit_stats":null,"previous_names":["desktop/gh-cli-and-desktop-shared-workflows"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/desktop/gh-cli-and-desktop-shared-workflows","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desktop%2Fgh-cli-and-desktop-shared-workflows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desktop%2Fgh-cli-and-desktop-shared-workflows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desktop%2Fgh-cli-and-desktop-shared-workflows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desktop%2Fgh-cli-and-desktop-shared-workflows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/desktop","download_url":"https://codeload.github.com/desktop/gh-cli-and-desktop-shared-workflows/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desktop%2Fgh-cli-and-desktop-shared-workflows/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31446523,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T15:22:31.103Z","status":"ssl_error","status_checked_at":"2026-04-05T15:22:00.205Z","response_time":75,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-05T18:30:51.381Z","updated_at":"2026-04-05T18:30:56.715Z","avatar_url":"https://github.com/desktop.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# GH CLI and Desktop Shared Workflows\n\nShared GitHub Actions workflows for issue and PR triaging, used by the GH CLI and GitHub Desktop teams.\n\n## Available Workflows\n\n| Workflow | Description | Trigger |\n|----------|-------------|---------|\n| [`triage-label-incoming.yml`](.github/workflows/triage-label-incoming.yml) | Adds `needs-triage` label to new/reopened issues | `issues: [opened, reopened, unlabeled]` |\n| [`triage-close-invalid.yml`](.github/workflows/triage-close-invalid.yml) | Closes issues/PRs labeled `invalid` | `issues/pull_request_target: [labeled]` |\n| [`triage-close-single-word-issues.yml`](.github/workflows/triage-close-single-word-issues.yml) | Closes issues with single-word titles | `issues: [opened]` |\n| [`triage-close-off-topic.yml`](.github/workflows/triage-close-off-topic.yml) | Comments and closes `off-topic` issues | `issues: [labeled]` |\n| [`triage-enhancement-comment.yml`](.github/workflows/triage-enhancement-comment.yml) | Posts backlog comment on `enhancement` label | `issues: [labeled]` |\n| [`triage-unable-to-reproduce-comment.yml`](.github/workflows/triage-unable-to-reproduce-comment.yml) | Requests more info on `unable-to-reproduce` label | `issues: [labeled]` |\n| [`triage-remove-needs-triage.yml`](.github/workflows/triage-remove-needs-triage.yml) | Removes `needs-triage` when end-state labels are added | `issues: [labeled]` |\n| [`triage-on-issue-close.yml`](.github/workflows/triage-on-issue-close.yml) | Removes `needs-triage` on issue close | `issues: [closed]` |\n| [`triage-no-response-close.yml`](.github/workflows/triage-no-response-close.yml) | Closes `more-info-needed` issues after 14 days | `issue_comment` + `schedule` |\n| [`triage-stale-issues.yml`](.github/workflows/triage-stale-issues.yml) | Marks stale issues after inactivity | `schedule` |\n| [`triage-label-external-pr.yml`](.github/workflows/triage-label-external-pr.yml) | Labels PRs from external contributors | `pull_request_target: [opened, reopened]` |\n| [`triage-close-from-default-branch.yml`](.github/workflows/triage-close-from-default-branch.yml) | Closes accidental PRs from default branch | `pull_request_target: [opened]` |\n| [`triage-pr-requirements.yml`](.github/workflows/triage-pr-requirements.yml) | Checks external PRs for body + `help-wanted` issue | `pull_request_target: [opened, reopened, edited]` + `schedule` |\n| [`triage-close-no-help-wanted.yml`](.github/workflows/triage-close-no-help-wanted.yml) | Closes PRs without a `help-wanted` issue | `pull_request_target: [labeled]` |\n| [`triage-ready-for-review.yml`](.github/workflows/triage-ready-for-review.yml) | Removes `needs-triage` label when PR is ready for review | `pull_request_target: [labeled]` |\n| [`triage-contributor-input-needed.yml`](.github/workflows/triage-contributor-input-needed.yml) | Auto-labels PRs with changes requested, warns after inactivity, auto-closes | `pull_request_target: [synchronize]` + `issue_comment` + `schedule` |\n| [`triage-discuss.yml`](.github/workflows/triage-discuss.yml) | Creates linked discussion in internal repo | `issues/pull_request_target: [labeled]` |\n| [`triage-detect-spam.yml`](.github/workflows/triage-detect-spam.yml) | AI-powered spam detection on new issues | `issues: [opened]` |\n| [`triage-close-suspected-spam.yml`](.github/workflows/triage-close-suspected-spam.yml) | Comments and closes `suspected-spam` issues | `issues: [labeled]` |\n\n## Required Labels\n\nRepositories using these workflows need the following labels:\n\n| Label | Used by | Purpose |\n|-------|---------|---------|\n| `needs-triage` | label-incoming, remove-needs-triage, on-issue-close, label-external-pr, ready-for-review, pr-requirements, stale-issues | Main triage tracking label |\n| `invalid` | close-invalid | Marks issues/PRs as invalid; auto-closes |\n| `suspected-spam` | close-suspected-spam, detect-spam | Marks suspected spam; auto-comments and closes |\n| `enhancement` | enhancement-comment, remove-needs-triage | Triggers backlog comment; end-state label |\n| `more-info-needed` | unable-to-reproduce-comment, no-response-close | Requests more info; auto-closes after 14 days |\n| `unable-to-reproduce` | unable-to-reproduce-comment | Triggers reproduction request comment |\n| `off-topic` | close-off-topic | Auto-closes with explanation |\n| `external` | label-external-pr, pr-requirements | Applied to PRs from non-org contributors |\n| `help-wanted` | pr-requirements | Must be on issues linked by external PRs |\n| `no-help-wanted-issue` | close-no-help-wanted | Auto-closes PRs without help-wanted issue |\n| `ready-for-review` | ready-for-review, remove-needs-triage | Marks triaged PRs ready for review |\n| `contributor-input-needed` | contributor-input-needed | Applied when changes are requested; auto-warns and closes after inactivity |\n| `unmet-requirements` | pr-requirements | PRs that don't meet minimum requirements |\n| `stale` | stale-issues | Applied to inactive issues |\n| `discuss` | discuss | Triggers linked internal discussion |\n| `priority-1` | remove-needs-triage | End-state label; removes needs-triage |\n| `priority-2` | remove-needs-triage | End-state label; removes needs-triage |\n| `priority-3` | remove-needs-triage | End-state label; removes needs-triage |\n\n## Usage\n\nTo use these workflows, create thin workflow files in your repository's `.github/workflows/` directory that reference these shared workflows via `workflow_call`.\n\nWe recommend splitting into separate files by trigger type:\n\n| File | Triggers | Purpose |\n|------|----------|---------|\n| `triage-issues.yml` | `issues` | All issue triage workflows |\n| `triage-prs.yml` | `pull_request_target` | All PR workflows (isolated permissions) |\n| `triage-scheduled-tasks.yml` | `schedule` + `issue_comment` | No-response close, PR requirements check, stale issues |\n| `detect-spam.yml` | `issues: [opened]` | AI spam detection (requires secrets) |\n\n**See [`example-usage/`](example-usage/) for ready-to-use workflow files** — copy them to your repo's `.github/workflows/` directory and customize inputs as needed.\n\n### Configurable Inputs\n\nEach workflow accepts optional inputs to customize behavior (labels, timeframes, messages, etc.). Click through to any workflow file above to see its available inputs and defaults.\n\nKey inputs that differ between repositories:\n\n| Input | Description | Example values |\n|-------|-------------|----------------|\n| `help_wanted_url` | URL to help-wanted label | `https://github.com/your-org/your-repo/labels/help%20wanted` |\n| `repository_org` | Org name for external PR detection | `cli`, `desktop` |\n| `additional_context` | App-specific info for reproduce comment | Log file paths, debug steps |\n| `default_branch` | Default branch name | `main`, `trunk`, `development` |\n| `target_repo` | Internal repo for discuss workflow | `your-org/internal-repo` |\n| `project_context` | Project description for spam detection | Free text |\n| `exclude_repo_admins` | Skip labeling issues from repo admins | `true`, `false` |\n\n### Version Pinning\n\nThe examples use `@main` for the latest version. For production, consider pinning to a specific SHA:\n\n```yaml\nuses: desktop/gh-cli-and-desktop-shared-workflows/.github/workflows/triage-close-invalid.yml@abc123\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdesktop%2Fgh-cli-and-desktop-shared-workflows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdesktop%2Fgh-cli-and-desktop-shared-workflows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdesktop%2Fgh-cli-and-desktop-shared-workflows/lists"}