This commit is contained in:
Ivan Fontosh
2026-05-18 08:52:39 +08:00
parent cfa067519d
commit 02b3131f19
2 changed files with 188 additions and 0 deletions
Binary file not shown.
+188
View File
@@ -0,0 +1,188 @@
# -*- 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()