diff --git a/src/plugins/publish/__init__.py b/src/plugins/publish/__init__.py index 52f9effe..c7f30627 100644 --- a/src/plugins/publish/__init__.py +++ b/src/plugins/publish/__init__.py @@ -29,8 +29,10 @@ commit_and_push, create_pull_request, ensure_issue_content, + ensure_issue_test_button, resolve_conflict_pull_requests, run_shell_command, + should_skip_plugin_publish, should_skip_plugin_test, trigger_registry_update, update_file, @@ -177,6 +179,8 @@ async def handle_publish_plugin_check( if issue.state != "open": logger.info("议题未开启,已跳过") await publish_check_matcher.finish() + if should_skip_plugin_publish(issue): + logger.info("测试按钮已勾选,跳过插件发布检查") # 是否需要跳过插件测试 plugin_config.skip_plugin_test = await should_skip_plugin_test( @@ -235,7 +239,7 @@ async def handle_publish_plugin_check( **repo_info.model_dump(), issue_number=issue_number, title=title ) logger.info(f"议题标题已修改为 {title}") - + await ensure_issue_test_button(bot, repo_info, issue_number, issue.body or "") await comment_issue(bot, repo_info, issue_number, result) diff --git a/src/plugins/publish/constants.py b/src/plugins/publish/constants.py index e1d95576..8e3de3db 100644 --- a/src/plugins/publish/constants.py +++ b/src/plugins/publish/constants.py @@ -38,6 +38,9 @@ PLUGIN_TYPE_STRING = "插件类型" PLUGIN_TYPE_PATTERN = re.compile(ISSUE_PATTERN.format(PLUGIN_TYPE_STRING)) PLUGIN_CONFIG_PATTERN = re.compile(r"### 插件配置项\s+```(?:\w+)?\s?([\s\S]*?)```") +PLUGIN_TEST_STRING = "插件测试" +PLUGIN_TEST_BUTTON_STRING = "- [x] 单击左侧按钮重新测试,完成时勾选框将被选中" +PLUGIN_TEST_BUTTON_PATTERN = re.compile(r"- \[(.)\] 单击左侧按钮重新测试") PLUGIN_SUPPORTED_ADAPTERS_STRING = "插件支持的适配器" PLUGIN_SUPPORTED_ADAPTERS_PATTERN = re.compile( ISSUE_PATTERN.format(PLUGIN_SUPPORTED_ADAPTERS_STRING) diff --git a/src/plugins/publish/render.py b/src/plugins/publish/render.py index 359406aa..8e787572 100644 --- a/src/plugins/publish/render.py +++ b/src/plugins/publish/render.py @@ -4,7 +4,6 @@ import jinja2 from src.utils.validation.models import PublishType -from src.utils.store_test.models import Tag from .config import plugin_config from .constants import LOC_NAME_MAP diff --git a/src/plugins/publish/utils.py b/src/plugins/publish/utils.py index b6ae65f2..c4475f3c 100644 --- a/src/plugins/publish/utils.py +++ b/src/plugins/publish/utils.py @@ -40,6 +40,9 @@ PLUGIN_NAME_PATTERN, PLUGIN_STRING_LIST, PLUGIN_SUPPORTED_ADAPTERS_PATTERN, + PLUGIN_TEST_BUTTON_STRING, + PLUGIN_TEST_BUTTON_PATTERN, + PLUGIN_TEST_STRING, PLUGIN_TYPE_PATTERN, PROJECT_LINK_PATTERN, SKIP_PLUGIN_TEST_COMMENT, @@ -539,6 +542,32 @@ async def ensure_issue_content( logger.info("检测到议题内容缺失,已更新") +async def ensure_issue_test_button( + bot: Bot, repo_info: RepoInfo, issue_number: int, issue_body: str +): + """确保议题内容中包含插件重测按钮""" + search_result = PLUGIN_TEST_BUTTON_PATTERN.search(issue_body) + if not search_result: + new_content = f"{PLUGIN_TEST_STRING}\n\n{PLUGIN_TEST_BUTTON_STRING}" + await bot.rest.issues.async_update( + **repo_info.model_dump(), + issue_number=issue_number, + body=f"{issue_body}\n\n{new_content}", + ) + logger.info("为议题添加插件测试按钮。") + + +async def should_skip_plugin_publish( + issue: "Issue", +) -> bool: + """判断是否跳过插件测试""" + body = issue.body if issue.body else "" + search_result = PLUGIN_TEST_BUTTON_PATTERN.search(body) + if search_result: + return search_result.group(1) == "x" + return False + + async def trigger_registry_update( bot: GitHubBot, repo_info: RepoInfo, publish_type: PublishType, issue: "Issue" ):