Files
dev_harness/dev_scripts/new_task_archive.py
T

88 lines
2.7 KiB
Python
Raw Normal View History

2026-08-16 19:21:36 +08:00
"""只在 Gitea Wiki 创建任务归档;本地镜像由人工按需导出。"""
2026-08-07 23:11:25 +08:00
from __future__ import annotations
import argparse
import re
from datetime import date
from pathlib import Path
2026-08-07 23:57:13 +08:00
from wiki_docs import (
DEFAULT_CONFIG,
WikiClient,
WikiDocsError,
load_config,
)
2026-08-07 23:11:25 +08:00
def safe_title(title: str) -> str:
2026-08-07 23:57:13 +08:00
"""把标题转换为适合 Wiki 页面名和 Windows 文件名的短文本。"""
2026-08-07 23:11:25 +08:00
cleaned = re.sub(r'[<>:"/\\|?*]', "-", title.strip())
cleaned = re.sub(r"\s+", "-", cleaned)
2026-08-07 23:57:13 +08:00
cleaned = re.sub(r"-+", "-", cleaned)
2026-08-07 23:11:25 +08:00
return cleaned.strip(".-")
2026-08-07 23:57:13 +08:00
def build_archive(
template: str,
issue_number: str,
title: str,
page_name: str,
issue_url: str,
) -> str:
content = template.replace("<工单号>", issue_number, 1)
2026-08-07 23:11:25 +08:00
content = content.replace("<标题>", title.strip(), 1)
content = content.replace("YYYY-MM-DD", date.today().isoformat(), 1)
2026-08-07 23:57:13 +08:00
content = content.replace("<链接>", issue_url, 1)
return content.replace("<页面名>", page_name, 1)
2026-08-07 23:11:25 +08:00
2026-08-07 23:57:13 +08:00
def main() -> int:
parser = argparse.ArgumentParser(
2026-08-16 19:21:36 +08:00
description="在 Gitea Wiki 创建任务归档,不自动导出本地镜像"
2026-08-07 23:57:13 +08:00
)
2026-08-07 23:11:25 +08:00
parser.add_argument("issue_number", help="Gitea 工单号,例如 123")
parser.add_argument("title", help="简短任务标题")
2026-08-07 23:57:13 +08:00
parser.add_argument("--config", default=str(DEFAULT_CONFIG), help="Wiki 映射配置")
2026-08-07 23:11:25 +08:00
args = parser.parse_args()
2026-08-07 23:57:13 +08:00
short_title = safe_title(args.title)
if not args.issue_number.isdigit():
print("错误:工单号必须是数字")
return 1
if not short_title:
print("错误:标题不能为空")
return 1
try:
config = load_config(Path(args.config).resolve())
page_name = f"Task-{args.issue_number}-{short_title}"
client = WikiClient(config)
2026-08-16 19:21:36 +08:00
if any(item.get("title") == page_name for item in client.list_pages()):
raise WikiDocsError(f"任务归档已经存在:{page_name}")
2026-08-07 23:57:13 +08:00
template = client.get_page("Task-Archive-Template").text
issue_url = (
f"{config.gitea_url}/{config.owner}/{config.repository}/issues/"
f"{args.issue_number}"
)
content = build_archive(
template, args.issue_number, args.title, page_name, issue_url
)
page = client.create_page(
page_name,
content,
f"docs: 创建任务 #{args.issue_number} 归档草稿",
)
except WikiDocsError as exc:
print(f"错误:{exc}")
return 1
print(f"已创建 Wiki:{page.html_url}")
2026-08-16 19:21:36 +08:00
print("未导出本地任务归档;需要时运行 export_task_archives.py")
2026-08-07 23:57:13 +08:00
return 0
2026-08-07 23:11:25 +08:00
if __name__ == "__main__":
2026-08-07 23:57:13 +08:00
raise SystemExit(main())