From a15303a891d58a25f68b4813d71e3fc0938663b4 Mon Sep 17 00:00:00 2001 From: molanp <104612722+molanp@users.noreply.github.com> Date: Thu, 19 Dec 2024 09:15:39 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E6=8F=92=E4=BB=B6=E5=95=86?= =?UTF-8?q?=E5=BA=97=E6=9B=B4=E6=96=B0=E9=80=BB=E8=BE=91&=E5=BD=BB?= =?UTF-8?q?=E5=BA=95=E4=BF=AE=E5=A4=8D=E5=B7=A5=E4=BD=9C=E6=B5=81=20(#1782?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修复bot-check工作流 * Update bot_check.yml * 修复依赖问题 * 修复戳一戳自检鉴权 * :rotating_light: auto fix by pre-commit hooks * 优化工作流执行顺序 * 更新插件测试 * 更新插件商店 * :rotating_light: auto fix by pre-commit hooks * Update bot_check.yml * Update bot_check.yml * Update bot_check.yml * 请求 @ThelevenFD 修复测试 * :rotating_light: auto fix by pre-commit hooks * Update zhenxun/builtin_plugins/plugin_store/data_source.py Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com> * 修复代码过长的问题 * :rotating_light: auto fix by pre-commit hooks * 同步check.py * Update test_check.py * :rotating_light: auto fix by pre-commit hooks --------- Co-authored-by: ThelevenFD <104363913+ThelevenFD@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com> --- .github/workflows/bot_check.yml | 8 +- tests/builtin_plugins/check/test_check.py | 8 +- .../plugin_store/test_update_all_plugin.py | 4 +- .../plugin_store/data_source.py | 76 ++++++++++++------- 4 files changed, 59 insertions(+), 37 deletions(-) diff --git a/.github/workflows/bot_check.yml b/.github/workflows/bot_check.yml index 1a5ed8cf..3731ded8 100644 --- a/.github/workflows/bot_check.yml +++ b/.github/workflows/bot_check.yml @@ -6,12 +6,14 @@ on: paths: - zhenxun/** - tests/** + - .github/workflows/bot_check.yml - bot.py pull_request: branches: ["main"] paths: - zhenxun/** - tests/** + - .github/workflows/bot_check.yml - bot.py jobs: @@ -57,15 +59,15 @@ jobs: rm -rf poetry.lock poetry source remove aliyun poetry install --no-root - + - name: Install playwright if: steps.cache-playwright.outputs.cache-hit != 'true' run: | poetry run sudo apt-get update poetry run sudo apt-get install -y libgstreamer-plugins-base1.0-0 libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-libav flite x264 libx264-dev - poetry run sudo playwright install-deps poetry run pip install playwright - poetry run sudo playwright install + poetry run playwright install-deps + poetry run playwright install - name: Run tests run: poetry run pytest --cov=zhenxun --cov-report xml diff --git a/tests/builtin_plugins/check/test_check.py b/tests/builtin_plugins/check/test_check.py index 41180b68..370e6ad6 100644 --- a/tests/builtin_plugins/check/test_check.py +++ b/tests/builtin_plugins/check/test_check.py @@ -67,7 +67,7 @@ async def test_check( """ 测试自检 """ - from zhenxun.builtin_plugins.check import _matcher + from zhenxun.builtin_plugins.check import _self_check_matcher from zhenxun.builtin_plugins.check.data_source import __get_version from zhenxun.configs.config import BotConfig @@ -81,7 +81,7 @@ async def test_check( mock_build_message_return, mock_template_path_new, ) = init_mocker(mocker, tmp_path) - async with app.test_matcher(_matcher) as ctx: + async with app.test_matcher(_self_check_matcher) as ctx: bot = create_bot(ctx) bot: Bot = cast(Bot, bot) raw_message = "自检" @@ -137,7 +137,7 @@ async def test_check_arm( """ 测试自检(arm) """ - from zhenxun.builtin_plugins.check import _matcher + from zhenxun.builtin_plugins.check import _self_check_matcher from zhenxun.builtin_plugins.check.data_source import __get_version from zhenxun.configs.config import BotConfig @@ -171,7 +171,7 @@ async def test_check_arm( mock_cpuinfo.get_cpu_info.return_value = {} mock_psutil.cpu_freq.return_value = {} - async with app.test_matcher(_matcher) as ctx: + async with app.test_matcher(_self_check_matcher) as ctx: bot = create_bot(ctx) bot: Bot = cast(Bot, bot) raw_message = "自检" diff --git a/tests/builtin_plugins/plugin_store/test_update_all_plugin.py b/tests/builtin_plugins/plugin_store/test_update_all_plugin.py index 640391c8..7fc3b588 100644 --- a/tests/builtin_plugins/plugin_store/test_update_all_plugin.py +++ b/tests/builtin_plugins/plugin_store/test_update_all_plugin.py @@ -57,7 +57,9 @@ async def test_update_all_plugin_basic_need_update( ) ctx.should_call_send( event=event, - message=Message(message="已更新插件 识图\n共计1个插件! 重启后生效"), + message=Message( + message="--已更新1个插件 0个失败 1个成功--\n* 以下插件更新成功:\n\t- 识图\n重启后生效" # noqa: E501 + ), result=None, bot=bot, ) diff --git a/zhenxun/builtin_plugins/plugin_store/data_source.py b/zhenxun/builtin_plugins/plugin_store/data_source.py index 818fb53f..21c977aa 100644 --- a/zhenxun/builtin_plugins/plugin_store/data_source.py +++ b/zhenxun/builtin_plugins/plugin_store/data_source.py @@ -256,12 +256,11 @@ class ShopManage: result = await AsyncHttpx.gather_download_file( req_download_urls, req_paths ) - for _id, success in enumerate(result): + for success in result: if not success: raise Exception("插件依赖文件下载失败") - else: - logger.debug(f"插件依赖文件列表: {req_paths}", "插件管理") - install_requirement(plugin_path) + logger.debug(f"插件依赖文件列表: {req_paths}", "插件管理") + install_requirement(plugin_path) return True raise Exception("插件下载失败") @@ -389,34 +388,53 @@ class ShopManage: """ data: dict[str, StorePluginInfo] = await cls.get_data() plugin_list = list(data.keys()) - update_list = [] + update_failed_list = [] + update_success_list = [] + result = "--已更新{}个插件 {}个失败 {}个成功--" logger.info(f"尝试更新全部插件 {plugin_list}", "插件管理") for plugin_key in plugin_list: - plugin_info = data[plugin_key] - plugin_list = await cls.get_loaded_plugins("module", "version") - suc_plugin = {p[0]: (p[1] or "Unknown") for p in plugin_list} - if plugin_info.module not in [p[0] for p in plugin_list]: - logger.debug(f"插件 {plugin_key} 未安装,跳过", "插件管理") - continue - if cls.check_version_is_new(plugin_info, suc_plugin): - logger.debug(f"插件 {plugin_key} 已是最新版本,跳过", "插件管理") - continue - logger.info(f"正在更新插件 {plugin_key}", "插件管理") - is_external = True - if plugin_info.github_url is None: - plugin_info.github_url = DEFAULT_GITHUB_URL - is_external = False - await cls.install_plugin_with_repo( - plugin_info.github_url, - plugin_info.module_path, - plugin_info.is_dir, - is_external, - ) - update_list.append(plugin_key) - if len(update_list) == 0: + try: + plugin_info = data[plugin_key] + plugin_list = await cls.get_loaded_plugins("module", "version") + suc_plugin = {p[0]: (p[1] or "Unknown") for p in plugin_list} + if plugin_info.module not in [p[0] for p in plugin_list]: + logger.debug(f"插件 {plugin_key} 未安装,跳过", "插件管理") + continue + if cls.check_version_is_new(plugin_info, suc_plugin): + logger.debug(f"插件 {plugin_key} 已是最新版本,跳过", "插件管理") + continue + logger.info(f"正在更新插件 {plugin_key}", "插件管理") + is_external = True + if plugin_info.github_url is None: + plugin_info.github_url = DEFAULT_GITHUB_URL + is_external = False + await cls.install_plugin_with_repo( + plugin_info.github_url, + plugin_info.module_path, + plugin_info.is_dir, + is_external, + ) + update_success_list.append(plugin_key) + except Exception as e: + logger.error(f"更新插件 {plugin_key} 失败: {e}", "插件管理") + update_failed_list.append(plugin_key) + if not update_success_list and not update_failed_list: return "全部插件已是最新版本" - return "已更新插件 {}\n共计{}个插件! 重启后生效".format( - "\n- ".join(update_list), len(update_list) + if update_success_list: + result += "\n* 以下插件更新成功:\n\t- {}".format( + "\n\t- ".join(update_success_list) + ) + if update_failed_list: + result += "\n* 以下插件更新失败:\n\t- {}".format( + "\n\t- ".join(update_failed_list) + ) + return ( + result.format( + len(update_success_list) + len(update_failed_list), + len(update_failed_list), + len(update_success_list), + ) + + "\n重启后生效" ) @classmethod