From 41f5ed50b0841e13d6f5ae4a520adefdcae3ccaa Mon Sep 17 00:00:00 2001 From: uy/sun Date: Sat, 23 Nov 2024 14:13:38 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E5=90=8E=20registry=5Fupdate=20=E4=B8=AD=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=E4=B8=BA=E9=BB=98=E8=AE=A4=E5=80=BC=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20(#289)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 插件发布流程没有填写 version 字段,现在直接删掉了默认值 --- CHANGELOG.md | 4 +++ .../github/plugins/publish/validation.py | 5 ++- src/providers/store_test/store.py | 5 +-- src/providers/store_test/utils.py | 35 +------------------ src/providers/store_test/validation.py | 4 +-- src/providers/utils.py | 29 +++++++++++++++ src/providers/validation/models.py | 2 +- tests/conftest.py | 2 +- .../process/test_publish_pull_request.py | 5 +-- ..._publish_resolve_conflict_pull_requests.py | 1 + .../utils/test_trigger_registry_update.py | 15 +++++--- tests/utils/store_test/test_utils.py | 2 +- 12 files changed, 58 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c4094ce..03af34ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/lang/zh-CN/ ## [Unreleased] +### Fixed + +- 修复发布后 registry_update 中版本号为默认值的问题 + ## [4.0.10] - 2024-11-21 ### Fixed diff --git a/src/plugins/github/plugins/publish/validation.py b/src/plugins/github/plugins/publish/validation.py index 04b6d9e2..48b21854 100644 --- a/src/plugins/github/plugins/publish/validation.py +++ b/src/plugins/github/plugins/publish/validation.py @@ -9,7 +9,7 @@ from src.plugins.github.models.issue import IssueHandler from src.plugins.github.utils import extract_issue_info_from_issue from src.providers.docker_test import DockerPluginTest, Metadata -from src.providers.utils import load_json_from_file +from src.providers.utils import get_latest_version, load_json_from_file from src.providers.validation import PublishType, ValidationDict, validate_info from .constants import ( @@ -100,6 +100,8 @@ async def validate_plugin_info_from_issue( ) raw_data.update(metadata) + # 跳过测试的时候只能从 pypi 获取版本号 + raw_data["version"] = get_latest_version(project_link) raw_data["load"] = False raw_data["test_output"] = "插件未进行测试" raw_data["metadata"] = bool(metadata) @@ -116,6 +118,7 @@ async def validate_plugin_info_from_issue( # 从插件测试结果中获得元数据 raw_data.update(metadata) + raw_data["version"] = test_result.version raw_data["load"] = test_result.load raw_data["test_output"] = test_output raw_data["metadata"] = bool(metadata) diff --git a/src/providers/store_test/store.py b/src/providers/store_test/store.py index 69f15847..6a471248 100644 --- a/src/providers/store_test/store.py +++ b/src/providers/store_test/store.py @@ -26,7 +26,7 @@ StorePlugin, StoreTestResult, ) -from src.providers.utils import dump_json, load_json_from_web +from src.providers.utils import dump_json, get_latest_version, load_json_from_web from src.providers.validation.utils import get_author_name from .constants import ( @@ -37,11 +37,8 @@ PLUGINS_PATH, RESULTS_PATH, ) -from .utils import get_latest_version from .validation import validate_plugin -print = click.echo - class StoreTest: """商店测试""" diff --git a/src/providers/store_test/utils.py b/src/providers/store_test/utils.py index 972458d3..6187003d 100644 --- a/src/providers/store_test/utils.py +++ b/src/providers/store_test/utils.py @@ -1,37 +1,4 @@ -from functools import cache -from typing import Any - -import httpx - -from src.providers.utils import load_json, load_json_from_web - - -@cache -def get_pypi_data(project_link: str) -> dict[str, Any]: - """获取 PyPI 数据""" - headers = { - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36" - } - url = f"https://pypi.org/pypi/{project_link}/json" - try: - r = httpx.get(url, headers=headers) - except Exception as e: - raise ValueError(f"获取 PyPI 数据失败:{e}") - if r.status_code != 200: - raise ValueError(f"获取 PyPI 数据失败:{r.text}") - return load_json(r.text) - - -def get_latest_version(project_link: str) -> str: - """获取插件的最新版本号""" - data = get_pypi_data(project_link) - return data["info"]["version"] - - -def get_upload_time(project_link: str) -> str: - """获取插件的上传时间""" - data = get_pypi_data(project_link) - return data["urls"][0]["upload_time_iso_8601"] +from src.providers.utils import load_json_from_web def get_user_id(name: str) -> int: diff --git a/src/providers/store_test/validation.py b/src/providers/store_test/validation.py index a3fd647e..ed8d01e0 100644 --- a/src/providers/store_test/validation.py +++ b/src/providers/store_test/validation.py @@ -12,9 +12,7 @@ ValidationDict, validate_info, ) -from src.providers.validation.utils import get_author_name - -from .utils import get_upload_time +from src.providers.validation.utils import get_author_name, get_upload_time async def validate_plugin( diff --git a/src/providers/utils.py b/src/providers/utils.py index f9b0ddb6..01c537c7 100644 --- a/src/providers/utils.py +++ b/src/providers/utils.py @@ -1,4 +1,5 @@ import json +from functools import cache from pathlib import Path from typing import Any @@ -62,3 +63,31 @@ def dump_json5(path: Path, data: Any) -> None: with open(path, "w", encoding="utf-8") as f: f.write(content) + + +@cache +def get_pypi_data(project_link: str) -> dict[str, Any]: + """获取 PyPI 数据""" + headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36" + } + url = f"https://pypi.org/pypi/{project_link}/json" + try: + r = httpx.get(url, headers=headers) + except Exception as e: + raise ValueError(f"获取 PyPI 数据失败:{e}") + if r.status_code != 200: + raise ValueError(f"获取 PyPI 数据失败:{r.text}") + return load_json(r.text) + + +def get_latest_version(project_link: str) -> str: + """获取插件的最新版本号""" + data = get_pypi_data(project_link) + return data["info"]["version"] + + +def get_upload_time(project_link: str) -> str: + """获取插件的上传时间""" + data = get_pypi_data(project_link) + return data["urls"][0]["upload_time_iso_8601"] diff --git a/src/providers/validation/models.py b/src/providers/validation/models.py index 6f81357c..ebcf7d12 100644 --- a/src/providers/validation/models.py +++ b/src/providers/validation/models.py @@ -209,7 +209,7 @@ class PluginPublishInfo(PublishInfo, PyPIMixin): """插件测试元数据""" skip_test: bool """是否跳过插件测试""" - version: str = "0.0.1" + version: str """插件版本号 从 PyPI 获取或者测试中获取 diff --git a/tests/conftest.py b/tests/conftest.py index 4e79b8cb..0d281775 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -101,7 +101,7 @@ async def app(app: App, tmp_path: Path, mocker: MockerFixture): yield app - from src.providers.store_test.utils import get_pypi_data + from src.providers.utils import get_pypi_data get_pypi_data.cache_clear() diff --git a/tests/github/publish/process/test_publish_pull_request.py b/tests/github/publish/process/test_publish_pull_request.py index 8e5bb9b1..261889c0 100644 --- a/tests/github/publish/process/test_publish_pull_request.py +++ b/tests/github/publish/process/test_publish_pull_request.py @@ -53,6 +53,7 @@ async def test_process_pull_request( supported_adapters=["~onebot.v11"], ) mock_test_result.load = True + mock_test_result.version = "1.0.0" mock_docker = mocker.patch("src.providers.docker_test.DockerPluginTest.run") mock_docker.return_value = mock_test_result @@ -100,13 +101,13 @@ async def test_process_pull_request( "supported_adapters": ["nonebot.adapters.onebot.v11"], "valid": True, "time": "2023-09-01T00:00:00+00:00Z", - "version": "0.0.1", + "version": "1.0.0", "skip_test": False, }, "result": { "time": "2023-09-01T00:00:00+00:00Z", "config": "log_level=DEBUG", - "version": "0.0.1", + "version": "1.0.0", "test_env": {"python==3.12": True}, "results": { "validation": True, diff --git a/tests/github/publish/utils/test_publish_resolve_conflict_pull_requests.py b/tests/github/publish/utils/test_publish_resolve_conflict_pull_requests.py index 4614bdb1..755cf5c2 100644 --- a/tests/github/publish/utils/test_publish_resolve_conflict_pull_requests.py +++ b/tests/github/publish/utils/test_publish_resolve_conflict_pull_requests.py @@ -319,6 +319,7 @@ async def test_resolve_conflict_pull_requests_plugin( type="application", supported_adapters=["~onebot.v11"], ) + mock_test_result.version = "1.0.0" mock_docker = mocker.patch("src.providers.docker_test.DockerPluginTest.run") mock_docker.return_value = mock_test_result diff --git a/tests/github/publish/utils/test_trigger_registry_update.py b/tests/github/publish/utils/test_trigger_registry_update.py index 0d152011..bfc23b7a 100644 --- a/tests/github/publish/utils/test_trigger_registry_update.py +++ b/tests/github/publish/utils/test_trigger_registry_update.py @@ -44,6 +44,7 @@ async def test_trigger_registry_update( supported_adapters=["~onebot.v11"], ) mock_test_result.load = True + mock_test_result.version = "1.0.0" mock_docker = mocker.patch("src.providers.docker_test.DockerPluginTest.run") mock_docker.return_value = mock_test_result @@ -77,13 +78,13 @@ async def test_trigger_registry_update( "supported_adapters": ["nonebot.adapters.onebot.v11"], "valid": True, "time": "2023-09-01T00:00:00+00:00Z", - "version": "0.0.1", + "version": "1.0.0", "skip_test": False, }, "result": { "time": "2023-09-01T00:00:00+00:00Z", "config": "log_level=DEBUG", - "version": "0.0.1", + "version": "1.0.0", "test_env": {"python==3.12": True}, "results": { "validation": True, @@ -216,7 +217,9 @@ async def test_trigger_registry_update_skip_test( await trigger_registry_update(handler, PublishType.PLUGIN) -async def test_trigger_registry_update_bot(app: App, mocker: MockerFixture): +async def test_trigger_registry_update_bot( + app: App, mocker: MockerFixture, mocked_api: MockRouter +): """机器人发布的情况 已经有相同机器人的时候,registry_update 不会影响到机器人的测试 @@ -265,9 +268,11 @@ async def test_trigger_registry_update_bot(app: App, mocker: MockerFixture): await trigger_registry_update(handler, PublishType.BOT) + assert mocked_api["homepage_v2"].called + async def test_trigger_registry_update_plugins_issue_body_info_missing( - app: App, mocker: MockerFixture + app: App, mocker: MockerFixture, mocked_api: MockRouter ): """如果议题信息不全,应该不会触发更新""" from githubkit.rest import Issue @@ -322,6 +327,8 @@ async def test_trigger_registry_update_plugins_issue_body_info_missing( await trigger_registry_update(handler, PublishType.PLUGIN) + assert mocked_api["homepage"].called + async def test_trigger_registry_update_validation_failed( app: App, mocker: MockerFixture, mocked_api: MockRouter diff --git a/tests/utils/store_test/test_utils.py b/tests/utils/store_test/test_utils.py index 5e74706c..c10f4930 100644 --- a/tests/utils/store_test/test_utils.py +++ b/tests/utils/store_test/test_utils.py @@ -16,7 +16,7 @@ async def test_load_json_failed(mocked_api: MockRouter): async def test_get_pypi_data_failed(mocked_api: MockRouter): """获取 PyPI 数据失败""" - from src.providers.store_test.utils import get_pypi_data + from src.providers.utils import get_pypi_data with pytest.raises(ValueError, match="获取 PyPI 数据失败:"): get_pypi_data("project_link_failed") From 8d287a7c7b8b4deff83ac48047d1a2c6a6ad374a Mon Sep 17 00:00:00 2001 From: uy_sun Date: Sat, 23 Nov 2024 16:21:36 +0800 Subject: [PATCH 2/2] chore(release): 4.0.11 --- CHANGELOG.md | 5 ++++- pyproject.toml | 4 ++-- uv.lock | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03af34ec..dc4e3e22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/lang/zh-CN/ ## [Unreleased] +## [4.0.11] - 2024-11-23 + ### Fixed - 修复发布后 registry_update 中版本号为默认值的问题 @@ -532,7 +534,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/lang/zh-CN/ - 最初的版本 -[Unreleased]: https://github.com/nonebot/noneflow/compare/v4.0.10...HEAD +[Unreleased]: https://github.com/nonebot/noneflow/compare/v4.0.11...HEAD +[4.0.11]: https://github.com/nonebot/noneflow/compare/v4.0.10...v4.0.11 [4.0.10]: https://github.com/nonebot/noneflow/compare/v4.0.9...v4.0.10 [4.0.9]: https://github.com/nonebot/noneflow/compare/v4.0.8...v4.0.9 [4.0.8]: https://github.com/nonebot/noneflow/compare/v4.0.7...v4.0.8 diff --git a/pyproject.toml b/pyproject.toml index c6a6af8b..42dfc65b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "noneflow" -version = "4.0.10" +version = "4.0.11" description = "Manage publish related issues in nonebot2 project" authors = [{ name = "uy_sun", email = "hmy0119@gmail.com" }] readme = "README.md" @@ -100,7 +100,7 @@ adapters = [{ name = "GitHub", module_name = "nonebot.adapters.github" }] plugin_dirs = ["src/plugins"] [tool.bumpversion] -current_version = "4.0.10" +current_version = "4.0.11" commit = true message = "chore(release): {new_version}" diff --git a/uv.lock b/uv.lock index d1912d4b..2087ea79 100644 --- a/uv.lock +++ b/uv.lock @@ -654,7 +654,7 @@ wheels = [ [[package]] name = "noneflow" -version = "4.0.10" +version = "4.0.11" source = { virtual = "." } dependencies = [ { name = "docker" },