Files
DndGamePlayer/scripts/generate-release-docx.py
T
Ivan Fontosh 02b3131f19 фикс
2026-05-18 08:52:39 +08:00

189 lines
7.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
"""Generate TTRPG-Release-Instructions.docx (run: python scripts/generate-release-docx.py)."""
from __future__ import annotations
from pathlib import Path
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import Pt
ROOT = Path(__file__).resolve().parents[1]
OUT_PATHS = [
ROOT / "docs" / "TTRPG-Release-Instructions.docx",
Path(r"D:\TTRPG-Release\TTRPG-Release-Instructions.docx"),
]
def add_bullet(doc: Document, text: str, level: int = 0) -> None:
style = "List Bullet" if level == 0 else "List Bullet 2"
doc.add_paragraph(text, style=style)
def add_step(doc: Document, title: str, body: str) -> None:
p = doc.add_paragraph()
p.add_run(f"{title}. ").bold = True
p.add_run(body)
def build_document() -> Document:
doc = Document()
normal = doc.styles["Normal"]
normal.font.name = "Calibri"
normal.font.size = Pt(11)
title = doc.add_heading("TTRPG Player — сборка и публикация обновлений", level=0)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
doc.add_paragraph(
"Одна версия на все платформы. Сначала вручную поднимается версия и собирается macOS; "
"затем на Windows скрипт собирает Win/Linux без повторного bump и выкладывает на "
"https://updates.mailib.ru/"
)
doc.add_heading("Рекомендуемый порядок", level=1)
add_step(
doc,
"Шаг 1. Поднять версию",
"В каталоге проекта dnd_player: bump-version.cmd (D:\\TTRPG-Release) "
"или npm version patch --no-git-tag-version. "
"Закоммитить package.json при необходимости до сборки на Mac.",
)
add_step(
doc,
"Шаг 2. Собрать macOS (только на Mac)",
"npm ci && npm run build && npm run pack:mac",
)
add_step(
doc,
"Шаг 3. Скопировать Mac-артефакты в D:\\TTRPG-Release",
"latest-mac.yml (только свежий с Mac), TTRPGPlayer-x64.zip, TTRPGPlayer-arm64.zip; "
"опционально TTRPGPlayer-x64.dmg, TTRPGPlayer-arm64.dmg. "
"Версия в latest-mac.yml должна совпадать с package.json.",
)
add_step(
doc,
"Шаг 4. Сборка Win/Linux и публикация (Windows)",
"release-all.cmd — по умолчанию режим -AfterMac: без bump, проверка Mac-файлов, "
"сборка Windows и Linux (WSL), копирование в D:\\TTRPG-Release, upload на сервер.",
)
doc.add_heading("Скрипты (D:\\TTRPG-Release)", level=1)
table = doc.add_table(rows=7, cols=2)
table.style = "Table Grid"
table.rows[0].cells[0].text = "Команда"
table.rows[0].cells[1].text = "Назначение"
rows = [
("bump-version.cmd", "Только patch в package.json (шаг 1)"),
("release-all.cmd", "Шаг 4: Win/Linux + publish, без bump (-AfterMac)"),
("prepare-release.cmd -AfterMac", "Только сборка Win/Linux и копирование"),
("publish.cmd", "Только проверка и upload на VPS"),
("publish.cmd -SkipMac", "Выложить Win/Linux, если Mac ещё не готов"),
("release-all-bump.cmd", "Устаревший режим: bump в скрипте, Mac потом"),
]
for i, (cmd, desc) in enumerate(rows, start=1):
table.rows[i].cells[0].text = cmd
table.rows[i].cells[1].text = desc
doc.add_heading("Флаги prepare-release", level=2)
for line in [
"-AfterMac — не менять версию; требовать Mac-файлы в папке релиза (по умолчанию в release-all)",
"-Bump — поднять patch и собрать (старый порядок)",
"-SkipGit, -SkipLinux, -NoBump, -Version X.Y.Z, -Minor",
]:
add_bullet(doc, line)
doc.add_heading("Флаги publish", level=2)
add_bullet(doc, "-CheckOnly — проверить файлы, без upload")
add_bullet(doc, "-SkipMac — не проверять и не заливать macOS")
doc.add_heading("Артефакты (имена без версии)", level=1)
art = doc.add_table(rows=4, cols=2)
art.style = "Table Grid"
art.rows[0].cells[0].text = "Платформа"
art.rows[0].cells[1].text = "Файлы"
artifacts = [
(
"Windows",
"latest.yml, TTRPGPlayer-Setup.exe, TTRPGPlayer-Setup.exe.blockmap",
),
(
"Linux",
"latest-linux.yml, latest-linux-arm64.yml, "
"TTRPGPlayer-x64.AppImage, TTRPGPlayer-arm64.AppImage",
),
(
"macOS",
"latest-mac.yml, TTRPGPlayer-x64.zip, TTRPGPlayer-arm64.zip "
"(zip — автообновление; dmg — опционально, вручную)",
),
]
for i, (plat, files) in enumerate(artifacts, start=1):
art.rows[i].cells[0].text = plat
art.rows[i].cells[1].text = files
doc.add_heading("Требования", level=1)
for line in [
"Windows: Node.js 20.19+ (или 22.12+), git, OpenSSH, WSL2 с nvm (Node 22, .nvmrc в проекте)",
"Проект: D:\\Work\\my_projects\\dnd_project\\dnd_player",
"Папка релиза: D:\\TTRPG-Release",
"SSH: %USERPROFILE%\\.ssh\\ttrpg_updates_root → root@185.173.94.234",
"Mac: Node 20+, сборка только на macOS",
]:
add_bullet(doc, line)
doc.add_heading("Проверка после выкладки", level=1)
for url in [
"https://updates.mailib.ru/latest.yml",
"https://updates.mailib.ru/latest-linux.yml",
"https://updates.mailib.ru/latest-mac.yml",
]:
add_bullet(doc, url)
doc.add_heading("Частые проблемы", level=1)
problems = [
(
"Win/Linux на версию выше Mac",
"Не использовать release-all-bump.cmd. Сначала bump + Mac, потом release-all.cmd.",
),
(
"macOS: missing TTRPGPlayer-1.0.xx-mac.zip",
"Устаревший latest-mac.yml — пересобрать на Mac или publish.cmd -SkipMac.",
),
(
"git push Failed to authenticate",
"Скрипт повторит push с токеном Gitea; или настроить credentials для git.mailib.ru.",
),
(
"WSL Linux build / Node 18",
"Нужен nvm и Node 22 (scripts/wsl-pack-linux.sh).",
),
(
"AfterMac: version mismatch",
"Версии в package.json и latest-mac.yml должны совпадать до запуска release-all.",
),
]
for prob, fix in problems:
p = doc.add_paragraph()
p.add_run(f"{prob}. ").bold = True
p.add_run(fix)
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
p.add_run("Конфиг: release-config.json, publish-config.json в D:\\TTRPG-Release").italic = True
return doc
def main() -> None:
doc = build_document()
for path in OUT_PATHS:
path.parent.mkdir(parents=True, exist_ok=True)
doc.save(str(path))
print(f"Wrote {path}")
if __name__ == "__main__":
main()