Files
wechat-selkies/.github/workflows/issue-validation.yml
2025-10-29 12:59:16 +08:00

189 lines
8.0 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: Issue Validation
on:
issues:
types: [opened, edited]
jobs:
validate-issue:
runs-on: ubuntu-latest
steps:
- name: Check Issue Title Length
uses: actions/github-script@v6
with:
script: |
const issue = context.payload.issue;
const title = issue.title.trim();
const minTitleLength = 10;
const maxTitleLength = 120;
console.log(`Issue title: "${title}"`);
console.log(`Title length: ${title.length}`);
// 去除模板前缀进行长度检查
const cleanTitle = title.replace(/^\[(Bug|Feature|General)\]:\s*/i, '').trim();
if (cleanTitle.length < minTitleLength) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
body: `⚠️ **标题过短**\n\n您的issue标题内容太短了当前有效内容${cleanTitle.length}个字符,最少需要${minTitleLength}个字符)。请提供一个更具描述性的标题,以便我们更好地理解问题。\n\n**示例:**\n- ✅ "[Bug]: 微信无法启动显示黑屏"\n- ❌ "[Bug]: 有问题"\n\n请编辑issue标题提供更多详细信息。`
});
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
labels: ['needs-more-info']
});
} else if (title.length > maxTitleLength) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
body: `⚠️ **标题过长**\n\n您的issue标题太长了当前${title.length}个字符,建议不超过${maxTitleLength}个字符)。请简化标题,将详细信息移至描述部分。`
});
}
- name: Check Issue Body Length
uses: actions/github-script@v6
with:
script: |
const issue = context.payload.issue;
const body = issue.body ? issue.body.trim() : '';
const minBodyLength = 50;
console.log(`Issue body length: ${body.length}`);
if (body.length < minBodyLength) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
body: `⚠️ **描述过短**\n\n您的issue描述太简短了当前${body.length}个字符,最少需要${minBodyLength}个字符)。为了帮助我们更好地理解和解决问题,请提供以下信息:\n\n- 详细的问题描述\n- 重现步骤\n- 预期行为\n- 实际行为\n- 环境信息操作系统、浏览器、Docker版本等\n- 相关日志或错误信息\n\n请编辑issue描述添加更多详细信息。`
});
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
labels: ['needs-more-info']
});
}
- name: Check for Template Usage
uses: actions/github-script@v6
with:
script: |
const issue = context.payload.issue;
const body = issue.body || '';
// 检查是否包含模板中的占位符文本(表明用户没有填写完整)
const templatePlaceholders = [
'例如:',
'placeholder',
'...',
'请描述',
'请填写',
'请提供'
];
const hasPlaceholders = templatePlaceholders.some(placeholder =>
body.toLowerCase().includes(placeholder)
);
if (hasPlaceholders) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
body: `⚠️ **模板未完整填写**\n\n看起来您可能没有完全填写issue模板。请确保\n\n- 删除所有占位符文本和示例\n- 填写所有必需的字段\n- 提供真实的、具体的信息\n\n这将帮助我们更快地理解和解决您的问题。`
});
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
labels: ['needs-more-info']
});
}
- name: Auto-assign Labels Based on Content
uses: actions/github-script@v6
with:
script: |
const issue = context.payload.issue;
const title = issue.title.toLowerCase();
const body = (issue.body || '').toLowerCase();
const content = title + ' ' + body;
const labelRules = [
{
keywords: ['docker', 'dockerfile', 'compose', '容器'],
label: 'docker'
},
{
keywords: ['微信', 'wechat', '登录', 'login'],
label: 'wechat'
},
{
keywords: ['网络', 'network', 'proxy', '代理', 'ssl', 'https'],
label: 'network'
},
{
keywords: ['性能', 'performance', 'slow', '慢', 'memory', '内存'],
label: 'performance'
},
{
keywords: ['音频', 'audio', '声音', 'sound'],
label: 'audio'
},
{
keywords: ['视频', 'video', '显示', 'display'],
label: 'video'
},
{
keywords: ['文档', 'documentation', 'readme', 'doc'],
label: 'documentation'
}
];
const labelsToAdd = [];
for (const rule of labelRules) {
if (rule.keywords.some(keyword => content.includes(keyword))) {
labelsToAdd.push(rule.label);
}
}
if (labelsToAdd.length > 0) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
labels: labelsToAdd
});
}
- name: Welcome First Time Contributors
uses: actions/github-script@v6
with:
script: |
const issue = context.payload.issue;
// 检查是否是首次提交issue的用户
const { data: issues } = await github.rest.issues.listForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
creator: issue.user.login,
state: 'all'
});
if (issues.length === 1) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
body: `🎉 **欢迎首次贡献!**\n\n感谢您提交第一个issue我们很高兴您选择使用并改进这个项目。\n\n**接下来会发生什么:**\n- 维护者将审查您的issue\n- 如果需要更多信息,我们会在评论中询问\n- 我们会尽快回复并提供帮助\n\n**有用的资源:**\n- [项目文档](https://github.com/${context.repo.owner}/${context.repo.repo}/blob/master/README.md)\n- [讨论区](https://github.com/${context.repo.owner}/${context.repo.repo}/discussions)\n\n再次感谢您的贡献 🙏`
});
}