Files
dev_harness/scripts/new_task_archive.py
T

57 lines
1.7 KiB
Python
Raw Normal View History

2026-08-07 23:11:25 +08:00
"""根据模板创建任务归档草稿。"""
from __future__ import annotations
import argparse
import re
from datetime import date
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
TEMPLATE = ROOT / "docs" / "templates" / "task-archive.md"
TASK_DIR = ROOT / "docs" / "task"
def safe_title(title: str) -> str:
"""把标题转换为适合文件名的短文本。"""
cleaned = re.sub(r'[<>:"/\\|?*]', "-", title.strip())
cleaned = re.sub(r"\s+", "-", cleaned)
return cleaned.strip(".-")
def create_archive(issue_number: str, title: str) -> Path:
"""创建归档草稿;目标文件存在时拒绝覆盖。"""
short_title = safe_title(title)
if not issue_number.isdigit():
raise ValueError("工单号必须是数字")
if not short_title:
raise ValueError("标题不能为空")
target = TASK_DIR / f"{issue_number}-{short_title}.md"
if target.exists():
raise FileExistsError(f"文件已存在:{target}")
content = TEMPLATE.read_text(encoding="utf-8")
content = content.replace("<工单号>", issue_number, 1)
content = content.replace("<标题>", title.strip(), 1)
content = content.replace("YYYY-MM-DD", date.today().isoformat(), 1)
target.write_text(content, encoding="utf-8")
return target
def main() -> None:
parser = argparse.ArgumentParser(description="创建 docs/task 任务归档草稿")
parser.add_argument("issue_number", help="Gitea 工单号,例如 123")
parser.add_argument("title", help="简短任务标题")
args = parser.parse_args()
target = create_archive(args.issue_number, args.title)
print(f"已创建:{target.relative_to(ROOT)}")
if __name__ == "__main__":
main()