如何通过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"
关键注意事项
- GitHub个人访问令牌需要具备
repo权限,才能调用API创建Issue - 确保
body参数的内容是标准Markdown格式,而非模板的JSON/YAML结构 - 使用
ConvertTo-Json时需指定-Depth参数,避免嵌套结构被截断
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

