~
This commit is contained in:
@@ -52,15 +52,14 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from .conditions import (
|
||||
BuiltinConditions,
|
||||
Constants,
|
||||
Condition,
|
||||
IS_LINUX,
|
||||
IS_MACOS,
|
||||
IS_POSIX,
|
||||
IS_WINDOWS,
|
||||
BuiltinConditions,
|
||||
Condition,
|
||||
Constants,
|
||||
)
|
||||
from .cli import CliExitCode, CliRunner
|
||||
from .context import Context, build_call_args, describe_injection
|
||||
from .errors import (
|
||||
CycleError,
|
||||
@@ -75,6 +74,7 @@ from .errors import (
|
||||
from .executors import run
|
||||
from .graph import Graph
|
||||
from .report import RunReport
|
||||
from .runner import CliExitCode, CliRunner
|
||||
from .storage import JSONBackend, MemoryBackend, StateBackend
|
||||
from .task import TaskCmd, TaskEvent, TaskResult, TaskSpec, TaskStatus
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
from .runner import CliExitCode, CliRunner
|
||||
|
||||
__all__ = ["CliRunner", "CliExitCode"]
|
||||
+238
-280
@@ -82,312 +82,270 @@ def _build_graphs() -> dict[str, px.Graph]:
|
||||
return {
|
||||
# === 构建命令 ===
|
||||
# 构建 Python 包
|
||||
"b": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"uv_build",
|
||||
cmd=conf.BUILD_COMMAND,
|
||||
conditions=(_UV_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]
|
||||
),
|
||||
"b": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"uv_build",
|
||||
cmd=conf.BUILD_COMMAND,
|
||||
conditions=(_UV_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]),
|
||||
# 构建 Rust 核心模块
|
||||
"bc": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"maturin_build",
|
||||
cmd=_get_maturin_build_command(),
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]
|
||||
),
|
||||
"bc": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"maturin_build",
|
||||
cmd=_get_maturin_build_command(),
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]),
|
||||
# 构建双包(先 Rust 后 Python)
|
||||
"ba": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"maturin_build",
|
||||
cmd=_get_maturin_build_command(),
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
px.TaskSpec(
|
||||
"uv_build",
|
||||
cmd=conf.BUILD_COMMAND,
|
||||
conditions=(_UV_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
depends_on=("maturin_build",),
|
||||
),
|
||||
]
|
||||
),
|
||||
"ba": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"maturin_build",
|
||||
cmd=_get_maturin_build_command(),
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
px.TaskSpec(
|
||||
"uv_build",
|
||||
cmd=conf.BUILD_COMMAND,
|
||||
conditions=(_UV_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
depends_on=("maturin_build",),
|
||||
),
|
||||
]),
|
||||
# === 安装命令(开发模式) ===
|
||||
# 安装 Rust 核心模块
|
||||
"ic": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"maturin_dev",
|
||||
cmd=conf.MATURIN_DEV_COMMAND,
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
),
|
||||
]
|
||||
),
|
||||
"ic": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"maturin_dev",
|
||||
cmd=conf.MATURIN_DEV_COMMAND,
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
),
|
||||
]),
|
||||
# 安装 Python 主包
|
||||
"ip": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"uv_install",
|
||||
cmd=["uv", "pip", "install", "-e", "."],
|
||||
conditions=(_UV_CONDITION,),
|
||||
),
|
||||
]
|
||||
),
|
||||
"ip": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"uv_install",
|
||||
cmd=["uv", "pip", "install", "-e", "."],
|
||||
conditions=(_UV_CONDITION,),
|
||||
),
|
||||
]),
|
||||
# 安装双包(开发模式)
|
||||
"ia": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"maturin_dev",
|
||||
cmd=conf.MATURIN_DEV_COMMAND,
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
),
|
||||
px.TaskSpec(
|
||||
"uv_install",
|
||||
cmd=["uv", "pip", "install", "-e", "."],
|
||||
conditions=(_UV_CONDITION,),
|
||||
depends_on=("maturin_dev",),
|
||||
),
|
||||
]
|
||||
),
|
||||
"ia": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"maturin_dev",
|
||||
cmd=conf.MATURIN_DEV_COMMAND,
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
),
|
||||
px.TaskSpec(
|
||||
"uv_install",
|
||||
cmd=["uv", "pip", "install", "-e", "."],
|
||||
conditions=(_UV_CONDITION,),
|
||||
depends_on=("maturin_dev",),
|
||||
),
|
||||
]),
|
||||
# === 清理命令 ===
|
||||
# 清理 Python 构建产物
|
||||
"cp": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"git_clean_python",
|
||||
cmd=["git", "clean", "-xfd", "-e", *conf.DIRS_TO_IGNORE],
|
||||
conditions=(_GIT_CONDITION,),
|
||||
),
|
||||
]
|
||||
),
|
||||
"cp": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"git_clean_python",
|
||||
cmd=["git", "clean", "-xfd", "-e", *conf.DIRS_TO_IGNORE],
|
||||
conditions=(_GIT_CONDITION,),
|
||||
),
|
||||
]),
|
||||
# 清理 Rust 构建产物
|
||||
"cc": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"cargo_clean",
|
||||
cmd=["cargo", "clean"],
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
),
|
||||
]
|
||||
),
|
||||
"cc": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"cargo_clean",
|
||||
cmd=["cargo", "clean"],
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
),
|
||||
]),
|
||||
# 清理所有构建产物
|
||||
"ca": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"cargo_clean",
|
||||
cmd=["cargo", "clean"],
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
),
|
||||
px.TaskSpec(
|
||||
"git_clean",
|
||||
cmd=["git", "clean", "-xfd", "-e", *conf.DIRS_TO_IGNORE],
|
||||
conditions=(_GIT_CONDITION,),
|
||||
),
|
||||
]
|
||||
),
|
||||
"ca": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"cargo_clean",
|
||||
cmd=["cargo", "clean"],
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
),
|
||||
px.TaskSpec(
|
||||
"git_clean",
|
||||
cmd=["git", "clean", "-xfd", "-e", *conf.DIRS_TO_IGNORE],
|
||||
conditions=(_GIT_CONDITION,),
|
||||
),
|
||||
]),
|
||||
# === 开发工具 ===
|
||||
# 运行测试, 跳过 slow, 并行模式
|
||||
"t": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"t": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"pytest",
|
||||
cmd=[
|
||||
"pytest",
|
||||
cmd=[
|
||||
"pytest",
|
||||
"-m",
|
||||
"not slow",
|
||||
"-n",
|
||||
"8",
|
||||
"--dist",
|
||||
"loadfile",
|
||||
"--color=yes",
|
||||
"--durations=10",
|
||||
],
|
||||
conditions=(_PYTEST_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]
|
||||
),
|
||||
"-m",
|
||||
"not slow",
|
||||
"-n",
|
||||
"8",
|
||||
"--dist",
|
||||
"loadfile",
|
||||
"--color=yes",
|
||||
"--durations=10",
|
||||
],
|
||||
conditions=(_PYTEST_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]),
|
||||
# 运行测试, 非并行模式
|
||||
"tf": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"tf": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"pytest",
|
||||
cmd=[
|
||||
"pytest",
|
||||
cmd=[
|
||||
"pytest",
|
||||
"-m",
|
||||
"not slow",
|
||||
"--dist",
|
||||
"loadfile",
|
||||
"--color=yes",
|
||||
"--durations=10",
|
||||
],
|
||||
conditions=(_PYTEST_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]
|
||||
),
|
||||
"-m",
|
||||
"not slow",
|
||||
"--dist",
|
||||
"loadfile",
|
||||
"--color=yes",
|
||||
"--durations=10",
|
||||
],
|
||||
conditions=(_PYTEST_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]),
|
||||
# 运行测试并生成覆盖率报告, 跳过 slow, 并行模式
|
||||
"tc": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"pytest_cov",
|
||||
cmd=[
|
||||
"pytest",
|
||||
"-m",
|
||||
"not slow",
|
||||
"--cov",
|
||||
"-n",
|
||||
"auto",
|
||||
"--dist",
|
||||
"loadfile",
|
||||
"--tb=short",
|
||||
"-v",
|
||||
"--color=yes",
|
||||
"--durations=10",
|
||||
],
|
||||
conditions=(_PYTEST_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]
|
||||
),
|
||||
"tc": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"pytest_cov",
|
||||
cmd=[
|
||||
"pytest",
|
||||
"-m",
|
||||
"not slow",
|
||||
"--cov",
|
||||
"-n",
|
||||
"auto",
|
||||
"--dist",
|
||||
"loadfile",
|
||||
"--tb=short",
|
||||
"-v",
|
||||
"--color=yes",
|
||||
"--durations=10",
|
||||
],
|
||||
conditions=(_PYTEST_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]),
|
||||
# 代码格式化与检查
|
||||
"lint": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"ruff_check",
|
||||
cmd=[
|
||||
"ruff",
|
||||
"check",
|
||||
"--fix",
|
||||
"--unsafe-fixes",
|
||||
],
|
||||
conditions=(_RUFF_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
cwd=Path(conf.PROJECT_ROOT),
|
||||
),
|
||||
]
|
||||
),
|
||||
"lint": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"ruff_check",
|
||||
cmd=[
|
||||
"ruff",
|
||||
"check",
|
||||
"--fix",
|
||||
"--unsafe-fixes",
|
||||
],
|
||||
conditions=(_RUFF_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
cwd=Path(conf.PROJECT_ROOT),
|
||||
),
|
||||
]),
|
||||
# 类型检查
|
||||
"typecheck": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"ty_check",
|
||||
cmd=["ty", "check", "src/bitool"],
|
||||
conditions=(BuiltinConditions.HAS_APP_INSTALLED("ty"),),
|
||||
),
|
||||
]
|
||||
),
|
||||
"typecheck": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"ty_check",
|
||||
cmd=["ty", "check", "src/bitool"],
|
||||
conditions=(BuiltinConditions.HAS_APP_INSTALLED("ty"),),
|
||||
),
|
||||
]),
|
||||
# 构建文档
|
||||
"doc": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"sphinx_build",
|
||||
cmd=conf.DOC_BUILD_COMMAND,
|
||||
conditions=(
|
||||
BuiltinConditions.HAS_APP_INSTALLED(conf.DOC_BUILD_TOOL),
|
||||
),
|
||||
),
|
||||
]
|
||||
),
|
||||
"doc": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"sphinx_build",
|
||||
cmd=conf.DOC_BUILD_COMMAND,
|
||||
conditions=(BuiltinConditions.HAS_APP_INSTALLED(conf.DOC_BUILD_TOOL),),
|
||||
),
|
||||
]),
|
||||
# === 发布命令 ===
|
||||
# 发布 Python 主包到 PyPI
|
||||
"pb": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"publish_python",
|
||||
cmd=["hatch", "publish"],
|
||||
cwd=Path(conf.PROJECT_ROOT),
|
||||
conditions=(_HATCH_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]
|
||||
),
|
||||
"pb": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"publish_python",
|
||||
cmd=["hatch", "publish"],
|
||||
cwd=Path(conf.PROJECT_ROOT),
|
||||
conditions=(_HATCH_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]),
|
||||
# 发布所有包(先 Rust 后 Python)
|
||||
"pba": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"publish_rust",
|
||||
cmd=[
|
||||
"twine",
|
||||
"upload",
|
||||
"--disable-progress-bar",
|
||||
conf.CORE_PATTERN,
|
||||
],
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
px.TaskSpec(
|
||||
"publish_python",
|
||||
cmd=["hatch", "publish"],
|
||||
cwd=Path(conf.PROJECT_ROOT),
|
||||
conditions=(_HATCH_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
depends_on=("publish_rust",),
|
||||
),
|
||||
]
|
||||
),
|
||||
"pba": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"publish_rust",
|
||||
cmd=[
|
||||
"twine",
|
||||
"upload",
|
||||
"--disable-progress-bar",
|
||||
conf.CORE_PATTERN,
|
||||
],
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
px.TaskSpec(
|
||||
"publish_python",
|
||||
cmd=["hatch", "publish"],
|
||||
cwd=Path(conf.PROJECT_ROOT),
|
||||
conditions=(_HATCH_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
depends_on=("publish_rust",),
|
||||
),
|
||||
]),
|
||||
# 发布 Rust 核心模块 (maturin publish)
|
||||
"pbc": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"publish_rust",
|
||||
cmd=["maturin", "publish"],
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]
|
||||
),
|
||||
"pbc": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"publish_rust",
|
||||
cmd=["maturin", "publish"],
|
||||
cwd=Path(conf.CORE_DIR),
|
||||
conditions=(_MATURIN_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]),
|
||||
# === 多版本测试命令 ===
|
||||
# 运行多版本 Python 测试 (tox)
|
||||
"tox": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"tox_run",
|
||||
cmd=["tox", "-p", "auto"],
|
||||
conditions=(_TOX_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]
|
||||
),
|
||||
"tox": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"tox_run",
|
||||
cmd=["tox", "-p", "auto"],
|
||||
conditions=(_TOX_CONDITION,),
|
||||
timeout=conf.TIMEOUT,
|
||||
),
|
||||
]),
|
||||
# 安装多版本 Python (仅安装不测试)
|
||||
"tox-install": px.Graph.from_specs(
|
||||
[
|
||||
px.TaskSpec(
|
||||
"uv_python_install",
|
||||
cmd=[
|
||||
"uv",
|
||||
"python",
|
||||
"install",
|
||||
"3.8",
|
||||
"3.9",
|
||||
"3.10",
|
||||
"3.11",
|
||||
"3.12",
|
||||
"3.13",
|
||||
"3.14",
|
||||
],
|
||||
conditions=(_UV_CONDITION,),
|
||||
timeout=600,
|
||||
),
|
||||
]
|
||||
),
|
||||
"tox-install": px.Graph.from_specs([
|
||||
px.TaskSpec(
|
||||
"uv_python_install",
|
||||
cmd=[
|
||||
"uv",
|
||||
"python",
|
||||
"install",
|
||||
"3.8",
|
||||
"3.9",
|
||||
"3.10",
|
||||
"3.11",
|
||||
"3.12",
|
||||
"3.13",
|
||||
"3.14",
|
||||
],
|
||||
conditions=(_UV_CONDITION,),
|
||||
timeout=600,
|
||||
),
|
||||
]),
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user