You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell创建带预设值的GitHub Issue并匹配模板格式?

解决方案

问题根源在于你直接把Issue模板的JSON/YAML结构传给了GitHub API的body参数,但GitHub API需要的是渲染后的Markdown格式内容,而非模板的原始结构。以下是具体解决步骤:

核心思路

将Issue模板里的输入项(标签、预设值、用户输入值)转换成Markdown格式的文本,作为body参数传给API,就能实现和手动填写模板一致的展示效果。


方案一:手动拼接Markdown内容

如果模板结构固定,直接手动拼接符合模板格式的Markdown正文:

# 定义Issue的核心信息
$issueData = @{
    title = "[Bug] 登录功能无响应"
    labels = @("bug", "high-priority")
    body = @"
## Environment
Windows 11 22H2 - 企业版

## App Version
v1.0.0

## Reproduction Steps
1. 打开登录页面
2. 输入正确账号密码
3. 点击登录按钮

## Expected Behavior
成功跳转到用户首页

## Actual Behavior
页面卡顿无响应,浏览器控制台返回500错误
"@
}

# 转换为API要求的JSON格式
$jsonBody = $issueData | ConvertTo-Json -Depth 10

# 调用GitHub API创建Issue
$apiUrl = "https://api.github.com/repos/你的用户名/目标仓库名/issues"
$headers = @{
    "Authorization" = "token 你的GitHub个人访问令牌"
    "Accept" = "application/vnd.github.v3+json"
}

Invoke-RestMethod -Uri $apiUrl -Method Post -Headers $headers -Body $jsonBody -ContentType "application/json"

方案二:动态读取模板生成Markdown

如果需要适配模板变更,可读取本地的Issue模板YAML文件,自动生成对应的Markdown内容(需先安装powershell-yaml模块:Install-Module -Name powershell-yaml):

# 读取本地的Issue模板文件
$templatePath = ".github/ISSUE_TEMPLATE/bug-report.yml"
$template = Get-Content -Path $templatePath -Raw | ConvertFrom-Yaml

# 定义用户输入的内容(键对应模板里的input名称)
$userInputs = @{
    environment = "$env:USERDOMAIN - Windows 11 22H2"
    version = "v1.0.0"
    steps = @"
1. 打开登录页面
2. 输入正确账号密码
3. 点击登录按钮
"@
    expected = "成功跳转到用户首页"
    actual = "页面卡顿无响应,浏览器控制台返回500错误"
}

# 动态生成Markdown格式的body
$bodyContent = @()
foreach ($inputKey in $template.inputs.Keys) {
    $inputConfig = $template.inputs[$inputKey]
    # 添加输入项标题
    $bodyContent += "## $($inputConfig.label)"
    # 优先使用用户输入,无输入则用模板预设值
    $inputValue = $userInputs[$inputKey] ?? $inputConfig.default
    $bodyContent += $inputValue
    $bodyContent += "" # 空行分隔不同输入项
}
$finalBody = $bodyContent -join "`n"

# 组装Issue数据并调用API
$issueData = @{
    title = "$($template.title)登录功能无响应"
    labels = $template.labels
    body = $finalBody
}

$jsonBody = $issueData | ConvertTo-Json -Depth 10
$apiUrl = "https://api.github.com/repos/你的用户名/目标仓库名/issues"
$headers = @{
    "Authorization" = "token 你的GitHub个人访问令牌"
    "Accept" = "application/vnd.github.v3+json"
}

Invoke-RestMethod -Uri $apiUrl -Method Post -Headers $headers -Body $jsonBody -ContentType "application/json"

关键注意事项

  1. GitHub个人访问令牌需要具备repo权限,才能调用API创建Issue
  2. 确保body参数的内容是标准Markdown格式,而非模板的JSON/YAML结构
  3. 使用ConvertTo-Json时需指定-Depth参数,避免嵌套结构被截断

内容的提问来源于stack exchange,提问作者Ashar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:02:40