Create GitHub Issue

Action ID: github:issues:create
NPM Package:

@backstage/plugin-scaffolder-backend-module-github

Description

Creates an issue on GitHub.

Input Schema

PropertyTypeDescriptionRequired
bodystringThe contents of the issue
titlestringThe title of the issue
tokenstringThe `GITHUB_TOKEN` to use for authorization to GitHub
labelsarrayLabels to associate with this issue. NOTE: Only users with push access can set labels for new issues. Labels are silently dropped otherwise.
repoUrlstringAccepts the format `github.com?repo=reponame&owner=owner` where `reponame` is the repository name and `owner` is an organization or username
assigneesarrayLogins for Users to assign to this issue. NOTE: Only users with push access can set assignees for new issues. Assignees are silently dropped otherwise.
milestoneanyThe number of the milestone to associate this issue with. NOTE: Only users with push access can set the milestone for new issues. The milestone is silently dropped otherwise.

Output Schema

PropertyTypeDescriptionRequired
issueUrlstringThe URL of the created issue
issueNumbernumberThe number of the created issue

Usage Examples

Create a basic tracking issue after repository creation

Creates a minimal issue to track initial setup tasks in the new repo. Use this when you want a single post-scaffold reminder.

Copy
steps:
  - id: fetch-skeleton
    action: fetch:template
    input:
      url: ./skeleton
      targetPath: .
      values:
        name: ${{ parameters.name }}

  - id: create-tracking-issue
    action: github:issues:create
    input:
      repoUrl: github.com?repo=${{ parameters.repoName }}&owner=${{ parameters.owner }}
      title: Initial project setup

Open a detailed bug report with labels and assignees

Creates a bug report with a structured body, adds labels, and assigns owners. Use this to capture production incidents or QA findings.

Copy
steps:
  - id: fetch-base
    action: fetch:template
    input:
      url: ./template
      targetPath: .
      values:
        service: ${{ parameters.service }}

  - id: create-bug-issue
    action: github:issues:create
    input:
      repoUrl: github.com?repo=payments-service&owner=acme-inc
      title: ${{ parameters.bugTitle }}
      body: |-
        Steps to reproduce:
        1. Open checkout page
        2. Submit card ending with 4242
        3. Observe 500 error

        Expected
        - Payment is authorized and order is created

        Actual
        - 500 Internal Server Error on POST /payments

        Environment
        - prod
        - region us-east-1
      labels:
        - bug
        - high-priority
      assignees:
        - jsanchez
        - mperez

Create a feature request linked to a milestone

Creates an enhancement issue and associates it with a milestone to plan delivery. Use this for roadmap items.

Copy
steps:
  - id: fetch-skeleton
    action: fetch:template
    input:
      url: ./service-template
      targetPath: .
      values:
        owner: ${{ parameters.owner }}
        repo: ${{ parameters.repo }}

  - id: create-feature-issue
    action: github:issues:create
    input:
      repoUrl: github.com?repo=${{ parameters.repo }}&owner=${{ parameters.owner }}
      title: Implement rate limiting for public APIs
      body: |-
        Summary
        Add token bucket rate limiting for all /v1/public endpoints.

        Acceptance Criteria
        - 429 returned when client exceeds configured RPS
        - Configurable per-tenant limits
        - Dashboards and alerts for throttling events
      milestone: 12
      labels:
        - enhancement
        - api
      assignees:
        - samlee

Create an issue using a service token

Uses an explicit GitHub token to create an issue, useful when the scaffolder runs non-interactively. Apply this when a service account should file issues.

Copy
steps:
  - id: fetch-assets
    action: fetch:template
    input:
      url: ./assets
      targetPath: .
      values:
        repoName: ${{ parameters.repoName }}

  - id: create-compliance-issue
    action: github:issues:create
    input:
      repoUrl: github.com?repo=${{ parameters.repoName }}&owner=${{ parameters.owner }}
      title: Add CODEOWNERS and security policy
      body: |-
        Please add:
        - CODEOWNERS covering all directories
        - SECURITY.md with triage contacts
        - Dependabot configuration for GitHub Actions and npm

        This is required before first release.
      labels:
        - compliance
        - documentation
      token: ${{ secrets.githubToken }}

Generate an onboarding checklist with dynamic labels

Creates a checklist issue populated from template parameters and applies labels passed in by the user. Use this to standardize new service onboarding.

Copy
steps:
  - id: fetch-template
    action: fetch:template
    input:
      url: ./service
      targetPath: .
      values:
        name: ${{ parameters.name }}
        owner: ${{ parameters.owner }}

  - id: create-onboarding-issue
    action: github:issues:create
    input:
      repoUrl: github.com?repo=${{ parameters.name }}&owner=${{ parameters.owner }}
      title: Onboarding checklist for ${{ parameters.name }}
      body: |-
        Onboarding tasks
        - [ ] Create staging environment
        - [ ] Configure CI workflow
        - [ ] Set up alerts and dashboards
        - [ ] Register service in the catalog
        - [ ] Define SLOs and error budget

        Team
        - Tech lead: ${{ parameters.techLead }}
        - Slack channel: ${{ parameters.slackChannel }}
      labels: ${{ parameters.issueLabels }}
      assignees:
        - ${{ parameters.techLeadGithub }}