Skip to content

ethercod3/diploma_latex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

366 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Исходники диплома

Publish Zensical docs Build PDF Release PDF Check tools exe CI Backup git bundle

LaTeX latexmk biblatex biber Docker Python uv Pytest Plotly Pandas Mermaid Zensical GitHub Actions GitHub Pages Task rclone LibreOffice

Last commit Repo size Latest release

Онлайн-документация проекта

https://ethercod3.github.io/diploma_latex/

Каталог PDF по датам

https://ethercod3.github.io/diploma-pdf-archive/

Контрольные суммы PDF

MD5: e91b50e8782b1d6e81901010b81b18e4
SHA-1: 2c47c613e8bfcdfa4a1b1907fd1f30bfd719dbaf
SHA-256: a86f37cb3263428141e81cfb2d0732c0d667845044aee58ae6157389ac7935c7
SHA3-256: c59b29cbf9d83c2c0c7b615cc5ab013e401e739a1867c424f29e5475de08fad9
BLAKE2s: 3d54338f4ed6309fcc804c558e1df1fb29ccec558679b1759fdc299b96d36fc7
SHAKE-128 (256-bit output): 3619d7a31a3f006bec007f2a158f58fe978f2dff89794adc6432a10d3cbef06f

Репозиторий с исходниками дипломной работы: LaTeX-документы, Mermaid-диаграммы, Python-диаграммы, DOCX-шаблоны титульных страниц и Docker-профили для воспроизводимой сборки.

Работа выполнена в рамках выпускной квалификационной работы в федеральном государственном бюджетном образовательном учреждении высшего образования «Амурский государственный университет». Упоминание университета приведено как контекст выполнения работы и не означает передачу исключительных прав на материалы репозитория, если иное не указано отдельным соглашением.

Что внутри

Путь Назначение
*.tex, preamble/ LaTeX-документы и настройки преамбулы
docx/ DOCX-исходники титульника и задания
mermaid/ Исходники Mermaid-диаграмм
python_diagrams/ Python-скрипты генерации диаграмм
figures/ Сгенерированные изображения и PDF для вставки в документ
scripts/ Вспомогательные скрипты сборки, конвертации и сравнения PDF
scripts/ci/ Python-скрипты для GitHub Actions и публикации релизов
docker/ Dockerfile для отдельных профилей сборки
docs/ru/, docs/en/ Zensical-документация проекта и ассеты документации
docs/includes/ Общие Markdown-вставки для Zensical-документации
Taskfile.yml, tasks/ Единая точка входа Task и тематические файлы задач; список команд доступен через task --list
tests/ Pytest-тесты чистой логики вспомогательных скриптов
.github/workflows/ GitHub Actions для Pages, check tools и PDF releases
Установка Task и служебные команды

Установка инструментов

Если у вас установлен mise, используйте его как самый короткий путь к нужным версиям Python, uv и Task:

mise trust
mise install
mise run setup
mise run check

После этого основные команды можно запускать через mise run build, mise run test или напрямую через task.

Установка Task вручную

Проект использует Task как единую точку входа для сборки и вспомогательных команд. Корневой Taskfile.yml подключает тематические файлы из tasks/, но публичные команды остаются плоскими: task build, task docs, task latex:docker.

Windows:

winget install Task.Task

macOS или Linux с Homebrew:

brew install go-task/tap/go-task

Любая платформа с Node.js:

npm install -g @go-task/cli

Если эти варианты не подходят, используйте официальную инструкцию установки: https://taskfile.dev/docs/installation.

Проверить установку:

task --version
task --list

Проверить состояние проекта:

task check

task check проверяет .env, целевой .tex, путь к коду приложения, титульные PDF и актуальность диаграмм. Если Python еще не установлен и нужно только проверить состояние проекта, скачайте diploma-latex-check.exe из GitHub Releases, положите файл в корень проекта и запустите:

.\diploma-latex-check.exe

Проверка выполнится без установленного Python для запуска скрипта, но сама сборка LaTeX без Docker все равно потребует команду python в PATH, потому что документ использует PyLuaTeX.

Посмотреть и удалить сгенерированные артефакты сборки:

task clean:dry
task clean

Остановить и очистить Docker-артефакты только текущего Compose-проекта:

task clean:docker:dry
task clean:docker
task clean:docker:images

Проверить форматирование Python-файлов через Black:

task python:lint

Запустить тесты Python-скриптов:

task python:test

Создать резервную копию Git-истории через rclone:

task backup

Быстрый старт

task build

Максимальная воспроизводимость с оригиналом будет, если вы будете собирать Mermaid-диаграммы из-под Windows. Если собирать их Docker-ом, то шрифт для KaTeX (математических) выражений будет отличаться от оригинала. Если это для вас неважно, просто пользуйтесь скриптом выше.

Для запуска скрипта потребуется Docker. Если вы не планируете использовать Docker, рекомендуемый вариант сборки LaTeX-документа - latexmk. Если task не установлен, используйте исходную команду напрямую: uv run python scripts/build_all.py.

Документация и Zensical

Документация

Документация проекта лежит в docs/ и запускается через Zensical. Русская версия находится в docs/ru/, английская - в docs/en/. Для контейнерного запуска используется официальный Docker-образ zensical/zensical:0.0.40.

Собрать и запустить двуязычную локальную документацию:

task docs

После запуска сайт доступен в браузере:

http://localhost:8000

Команда task docs собирает русскую версию в docs-site/, английскую - в docs-site/en/, а затем раздает статический сайт. Переключатель языка появляется в UI через настройки extra.alternate.

Для локальной статической сборки без запуска сервера используйте task docs:build. Для варианта, который публикуется на GitHub Pages, используется отдельная команда:

task docs:build:pages

Она собирает сайт через zensical.pages.toml и zensical.pages.en.toml, где site_url и ссылки переключателя языка настроены на публичный адрес Pages.

Заранее скачать Docker-образ документации:

task docs:pull

Без Docker Zensical можно установить через uv:

uv tool install zensical
zensical serve --config-file zensical.toml
zensical serve --config-file zensical.en.toml
Сборка без Docker

Сборка без Docker

Рекомендуемый способ сборки без Docker - latexmk. Он сам запускает lualatex и biber нужное количество раз по правилам из .latexmkrc.

Важно

В этом проекте latexmk заметно сокращает время повторной компиляции. Первый запуск через latexmk занимает около 74 секунд, повторный - около 18 секунд. Режим --no-latexmk с ручной цепочкой каждый раз занимает примерно 53-54 секунды.

Первый запуск latexmk может быть дольше ручной сборки, потому что он строит свое служебное состояние, анализирует зависимости, создает .fdb_latexmk и выполняет полный цикл сборки. На следующих запусках latexmk использует эту информацию и пересобирает только то, что действительно изменилось.

latexmk собирает только LaTeX-документ. Перед сборкой без Docker нужно отдельно подготовить все внешние артефакты, которые подключаются в .tex:

  • титульник.pdf и задание.pdf должны лежать в корне проекта. Их можно получить из docx/*.docx вручную через Microsoft Word или LibreOffice. см О титульнике
  • Mermaid-диаграммы из mermaid/*.mmd нужно заранее сгенерировать в figures/, см. Как работать с диаграммами.
    • Python-диаграммы нужно заранее сгенерировать командой task diagrams или вручную uv run python scripts/compile_python_diagrams.py.
  • Если в приложениях подключается код, он должен лежать по пути, на который указывает проект, см. Если есть код.

Если эти файлы не подготовлены, latexmk может завершиться ошибкой из-за отсутствующих PDF, изображений или листингов.

  1. Установить дистрибутив LaTeX. Под Windows рекомендуется установить TeX Live. Установка долгая, но все пакеты сразу скачаются вместе с дистрибутивом. latexmk обычно поставляется вместе с установкой TeX Live, поэтому отдельно его ставить не нужно. Компилятор в работе использовался LuaLaTeX.

  2. Установить Python и убедиться, что команда python доступна в PATH. Python нужен не только вспомогательным скриптам: LaTeX-документ использует PyLuaTeX во время компиляции.

  3. Клонировать репозиторий

  4. Установить Python-зависимости для скриптов:

    task deps

    Или вручную:

    uv sync
  5. Создать в корне проекта файл .env и указать в нем основной .tex файл:

    TARGET="Куприянов_И221_диплом.tex"
  6. Собрать основной документ через latexmk:

    task latex:local

    Или напрямую через latexmk: latexmk "Куприянов_И221_диплом.tex".

    Конфигурация находится в .latexmkrc: используется LuaLaTeX с --shell-escape, biber, вспомогательные файлы складываются в .aux_files, а готовый PDF остается в корне проекта. --shell-escape нужен PyLuaTeX, чтобы запускать Python во время компиляции.

    Для другого .tex файла:

    task latex:local -- --target "<файл>.tex"

    Или напрямую через latexmk: latexmk "<файл>.tex".

Сборка через Python-скрипт

Если удобнее читать TARGET из .env, можно использовать скрипт. По умолчанию он тоже собирает документ через latexmk:

task latex:local
Или вручную: `uv run python scripts/build_latex_manual.py`.

Если нужно собрать другой файл без изменения .env, передайте его явно:

task latex:local -- --target "<файл>.tex"
Или вручную: `uv run python scripts/build_latex_manual.py --target "<файл>.tex"`.

Если нужно отключить latexmk и запустить старую ручную цепочку lualatex, biber, lualatex, lualatex, передайте флаг:

task latex:manual_chain
Или вручную: `uv run python scripts/build_latex_manual.py --no-latexmk`.

Этот режим медленнее на повторных сборках: в текущем проекте около 53-54 секунд каждый раз против примерно 18 секунд при повторном запуске через latexmk.

Настройка TeXstudio

Настройка TeXstudio

Проект использует LuaLaTeX и biblatex с backend biber. Рекомендуемый вариант для TeXstudio - запускать latexmk, который читает настройки из .latexmkrc.

  1. Откройте Options $\rightarrow$ Configure TeXstudio $\rightarrow$ Commands.

  2. В поле Latexmk укажите:

    latexmk %.tex
    
  3. Откройте Options $\rightarrow$ Configure TeXstudio $\rightarrow$ Build.

  4. В Default Compiler выберите Latexmk.

Перед первой сборкой убедитесь, что python, latexmk, lualatex и biber доступны в PATH. При установке TeX Live команды latexmk, lualatex и biber обычно уже доступны вместе с дистрибутивом. Python нужен PyLuaTeX во время компиляции LaTeX. Готовый PDF будет создан в корне проекта, вспомогательные файлы - в .aux_files.

Компиляция в Docker

Компиляция в Docker

  1. Создайте в корне проекте файл .env

    Наполните его содержимое:

    VAULT_PATH="путь монтирования"
    VAULT_OS_PATH="фактический путь до кода на устройстве"
    TARGET="файл латеха"
    

    Пример:

    VAULT_PATH="/vault_code"
    VAULT_OS_PATH="../vault_diploma"
    TARGET="Куприянов_И221_диплом.tex"
    

    Пояснение:

    • VAULT_PATH: любой абсолютный unix путь.
    • VAULT_OS_PATH: где относительно текущей папки лежит код
    • TARGET: .tex файл
  2. Соберите LaTeX-образ:

    task build:image -- latex

    Или вручную: docker compose --profile latex build.

  3. Запустите компиляцию:

    task latex:docker

    Или вручную: docker compose --profile latex run --build --rm latex.

    Профиль latex запускает скрипт scripts/build_latex_docker.py. Он читает TARGET из переменных окружения и собирает документ через latexmk. Вспомогательные файлы складываются в .aux_files_docker, а готовый PDF остается в корне проекта.

Первый build будет долгим. Команда task latex:docker и ручной вариант с run --build проверяют актуальность образа перед запуском, поэтому после изменения Dockerfile не нужно отдельно помнить про пересборку.

Сборка Docker-образов

Собрать все Docker-образы проекта:

task build:images

Собрать образ отдельного профиля:

task build:image -- latex
task build:image -- mermaid
task build:image -- python
task build:image -- docx
task build:image -- crop

Или вручную:

docker compose --profile latex build
docker compose --profile mermaid build
docker compose --profile python build
docker compose --profile docx build
docker compose --profile crop build

Команды профилей используют docker compose run --build, поэтому Docker проверяет актуальность образов перед запуском. Первый запуск все равно будет долгим: Docker скачает базовые образы и соберет окружение.

Профили Docker Compose

В проекте доступны профили:

  • latex - компиляция LaTeX-документа
  • mermaid - генерация Mermaid-диаграмм в figures
  • python - генерация Python-диаграмм в figures
  • docx - конвертация файлов docx/*.docx в одноименные PDF в корне проекта
  • crop - обрезка полей произвольного PDF через pdfcrop
  • stirling - тестовый веб-интерфейс Stirling PDF для ручного сравнения PDF

Запуск отдельных профилей:

task latex:docker
task mermaid:docker
task diagrams:docker
task docx
task crop:docker -- path/to/file.pdf
task stirling

Или вручную:

docker compose --profile latex run --build --rm latex
docker compose --profile mermaid run --build --rm mermaid_diagrams
docker compose --profile python run --build --rm python_diagrams
docker compose --profile docx run --build --rm docx_pdf
docker compose --profile crop run --build --rm crop_pdf python3 scripts/crop_pdf.py path/to/file.pdf
docker compose --profile stirling up -d stirling_pdf

После запуска Stirling PDF доступен по адресу http://localhost:8080. Если порт занят, задайте другой порт через переменную окружения, например STIRLING_PORT=8081 task stirling. Остановить сервис можно командой task stirling:down. Стартовый пароль администратора задается через STIRLING_ADMIN_PASSWORD в .env. Он применяется только при первом запуске, до создания данных в /configs.

Запуск всех профилей одной командой:

task compose:up

Или вручную: docker compose --profile docx --profile mermaid --profile python --profile latex up.

При запуске всех профилей Docker Compose стартует сервисы вместе. Если нужно гарантированно собрать документ уже со свежими PDF из DOCX и диаграммами, сначала запустите профили docx, mermaid и python, затем профиль latex.

Последовательный запуск всех профилей уже вынесен в скрипты:

task build

Скрипты запускают профили в порядке docx $\rightarrow$ mermaid $\rightarrow$ python $\rightarrow$ latex и останавливаются на первой ошибке.

Все вспомогательные скрипты проекта написаны на Python и запускаются одинаково в Windows, Linux и macOS:

task build
task mermaid
task diagrams
task crop -- path/to/file.pdf
task pdf:split-color -- path/to/file.pdf

Или вручную:

uv run python scripts/build_all.py
uvx --from git+https://github.com/ethercod3/compile_mermaid.git compile-mermaid
uv run python scripts/compile_python_diagrams.py
uv run python scripts/crop_pdf.py path/to/file.pdf
uv run python scripts/split_pdf_color.py path/to/file.pdf

Скрипт scripts/convert_docx_to_pdf.py обычно запускается внутри Docker-профиля docx, потому что ему нужны LibreOffice, Ghostscript и qpdf.

Скрипт scripts/split_pdf_color.py делит PDF на два файла рядом с исходником: *_color.pdf с цветными страницами и *_bw.pdf с черно-белыми страницами. Ghostscript используется для анализа inkcov, а qpdf экспортирует страницы без перерисовки, чтобы сохранить поворот и геометрию страниц:

task pdf:split-color -- Куприянов_И221_диплом.pdf

Если локально нет pdfcrop и Ghostscript, используйте Alpine-профиль:

task crop:docker -- path/to/file.pdf
Сравнение PDF между коммитами

Сравнение PDF между коммитами

pdf_diff_example

Если нужно посмотреть визуальную разницу между двумя версиями диплома, используйте задачу:

task diff -- <commit_1> <commit_2>

Или вручную: uvx diff-pdf-commits --build "<команда сборки>" --pdf "<PDF из TARGET>" --view <commit_1> <commit_2>.

Пакет diff-pdf-commits принимает 2 хэша коммита, собирает PDF через Docker в отдельных worktree, складывает две версии во временную папку и открывает diff-pdf.

По умолчанию задача открывает diff. Результат можно также сохранить в PDF:

task diff -- <commit_1> <commit_2> --view
task diff -- <commit_1> <commit_2> --diff-output path/to/diff.pdf
task diff -- <commit_1> <commit_2> --diff-output path/to/diff.pdf --no-view

Для ручного запуска используйте uvx diff-pdf-commits; полный набор параметров для проекта зашит в task diff.

Скачать diff-pdf можно в репозитории

Задача запускает сборку в порядке mermaid $\rightarrow$ python $\rightarrow$ latex. Если нужно изменить последовательность, правьте переменную DIFF_PDF_BUILD_CMD в tasks/tools.yml.

Перед запуском рабочее дерево Git должно быть чистым. Файлы, которые нужны для сборки, но могут отсутствовать в старых коммитах, задача передает через --copy: .env, титульные PDF и вспомогательные build-скрипты.

Проблемы с компиляцией и титульные страницы

Проблемы с компиляцией

Если вы используете latexmk, вручную повторять компиляцию не нужно: он сам запускает lualatex и biber столько раз, сколько требуется. Повторные ручные запуски нужны только при полностью ручной компиляции из последнего раздела README.

Если не компилируется:

Запустите команду из cmd, не из powershell. Если не сработало:

  1. Переименуйте .tex файл в main.tex (или любое другое название на латинице)

  2. Используйте следующую команду для компиляции:

    task latex:local -- --target main.tex

    Или напрямую через latexmk: latexmk main.tex.

О титульнике

LaTeX вставит титульник из файла титульник.pdf в начало файла. Поэтому он должен быть в проекте перед компиляцией (как и все рисунки, листинги). В проекте есть docx/титульник.docx и docx/задание.docx; их можно конвертировать через Docker:

task docx

Или вручную: docker compose --profile docx up.

Профиль берет все файлы docx/*.docx и складывает одноименные PDF в корень проекта, например docx/титульник.docx $\rightarrow$ титульник.pdf.

При конвертации профиль пропускает пустые страницы. Если нужно сохранить PDF как есть, запустите профиль с переменной SKIP_BLANK_PAGES=0:

task docx:keep-blank

Или вручную: docker compose --profile docx run --rm -e SKIP_BLANK_PAGES=0 docx_pdf.

Альтернативный вариант - открыть DOCX в Microsoft Word и экспортировать его в PDF вручную: Файл $\rightarrow$ Экспорт $\rightarrow$ Создать PDF/XPS. Для титульника и задания нужно сохранить PDF в корень проекта с именами титульник.pdf и задание.pdf.

Если нет кода

Если у вас нет файлов кода, и вы хотите скомпилировать проект без них, закомментируйте эти строки в конце .tex файл (в latex комментарии - все строки, содержащие % в начале)

\newpage
\input{appendix_b.tex}
\newpage
\input{include_listings.tex}

Если есть код

Положите код на одном уровне с папкой LaTeX кода. При компиляции LaTeX обращается по такому пути:

../vault_diploma/<файл>

Как работать с диаграммами

Как работать с диаграммами

Просмотр Mermaid-файлов на GitHub

GitHub не всегда показывает содержимое файлов Mermaid с расширением .mmd как обычный текстовый код. Если вместо исходника отображается предпросмотр или файл не открывается удобным образом, нажмите кнопку View raw на странице файла. Так GitHub откроет исходный .mmd-код диаграммы без обработки.

Сборка вручную

Чтобы пересобрать диаграмму в pdf:

  1. Отредактируйте нужную диаграмму (они содержатся в файлах .mmd)

  2. Установите инструмент командой строки mmdc : https://github.com/mermaid-js/mermaid-cli

  3. Пересоберите диаграмму:

    mmdc -i <file.mmd> -o <file.pdf> -f

    флаг -f нужен для того, чтобы лист pdf обрезался под размер диаграммы

Автоматическая сборка всех Mermaid диаграмм

Запустите compile-mermaid через uvx. Инструмент автоматически прогонит все файлы из папки mermaid и положит результат в папку figures.

task mermaid

Или вручную: uvx --from git+https://github.com/ethercod3/compile_mermaid.git compile-mermaid.

По умолчанию пересобираются только диаграммы, у которых исходный .mmd новее соответствующего PDF или PDF еще не создан. Чтобы принудительно пересобрать все Mermaid-диаграммы, запустите task mermaid -- --force.

После генерации скрипт обрезает поля через pdfcrop, которому нужен Ghostscript. Если локально доступны только mmdc и нужно собрать PDF без обрезки, запустите task mermaid -- --no-crop.

Сборка Mermaid через Docker

task mermaid:docker

Или вручную: docker compose --profile mermaid run --build --rm mermaid_diagrams.

Генерация диаграмм Python вручную

  1. Установите интерпретатор python (использовалась версия 3.13+)

  2. Установите в окружение библиотеки: task deps или вручную uv sync

  3. Теперь вы можете запустить скрипт и получить на выходе файл диаграммы

    task diagrams

    Или вручную: uv run python scripts/compile_python_diagrams.py.

Генерация диаграмм Python через Docker

task diagrams:docker

Или вручную: docker compose --profile python up.

Полностью ручная компиляция LaTeX

Полностью ручная компиляция LaTeX

Этот способ нужен только для диагностики или если latexmk недоступен. В обычной сборке без Docker используйте latexmk, потому что он сам определяет нужное количество запусков lualatex и biber. Первый запуск latexmk в этом проекте может занимать около 74 секунд, зато повторные сборки сокращаются примерно до 18 секунд. Ручная цепочка через --no-latexmk каждый раз занимает около 53-54 секунд. В скрипте scripts/build_latex_manual.py этот режим включается флагом --no-latexmk.

Создайте папку для вспомогательных файлов:

mkdir .aux_files

Так как проект использует biblatex с backend biber и PyLuaTeX, одного запуска lualatex недостаточно, а каждый запуск lualatex должен идти с --shell-escape:

lualatex --shell-escape -synctex=1 -interaction=nonstopmode -output-directory=".aux_files" "<файл>.tex"
biber ".aux_files/<файл>.bcf"
lualatex --shell-escape -synctex=1 -interaction=nonstopmode -output-directory=".aux_files" "<файл>.tex"
lualatex --shell-escape -synctex=1 -interaction=nonstopmode -output-directory=".aux_files" "<файл>.tex"

Для основного файла проекта:

lualatex --shell-escape -synctex=1 -interaction=nonstopmode -output-directory=".aux_files" "Куприянов_И221_диплом.tex"
biber ".aux_files/Куприянов_И221_диплом.bcf"
lualatex --shell-escape -synctex=1 -interaction=nonstopmode -output-directory=".aux_files" "Куприянов_И221_диплом.tex"
lualatex --shell-escape -synctex=1 -interaction=nonstopmode -output-directory=".aux_files" "Куприянов_И221_диплом.tex"

После сборки итоговый PDF окажется в .aux_files. Его нужно перенести в корень проекта:

mv ".aux_files/<файл>.pdf" .

В Windows cmd для основного файла:

move ".aux_files\Куприянов_И221_диплом.pdf" .
Git hooks

Git hooks

Чтобы перед каждым коммитом автоматически обновлялись контрольные суммы итогового PDF в README, подключите локальные hooks:

task hooks

Или вручную: git config core.hooksPath .githooks.

Для работы hook нужны Python-пакеты python-dotenv и cogapp. Они уже указаны в pyproject.toml и uv.lock; если окружение еще не подготовлено, установите зависимости:

task deps

Или вручную: uv sync.

Hook считает хэши текущего PDF алгоритмами из стандартного hashlib и обновляет управляемый блок README через cogapp. Если PDF отсутствует, README не меняется и коммит продолжается со старым значением.

Резервное копирование

Резервное копирование

Проект можно бэкапить как git bundle через rclone. Такой архив хранит Git-историю, ветки и теги, но не сохраняет незакоммиченные изменения рабочей копии. Перед важным бэкапом стоит сделать коммит или stash.

Установите rclone по официальной инструкции: https://rclone.org/install/. После установки проверьте, что команда доступна:

rclone version

Настройте два remote в rclone:

rclone config

Рекомендуемые имена remote:

  • gdrive для Google Drive;
  • ydisk для Яндекс Диска.

По умолчанию backup загружается в:

BACKUP_RCLONE_DESTINATIONS="gdrive:diploma_latex_backups,ydisk:diploma_latex_backups"
BACKUP_KEEP_WEEKS="30"

Проверить создание bundle и rclone-операции без реальной загрузки и удаления:

task backup:dry

Создать и проверить только локальный bundle без загрузки в облако:

task backup:local

Создать бэкап, загрузить его на оба remote и оставить только последние 30 bundle-файлов на каждом remote:

task backup

Если remote называются иначе, передайте назначения явно:

task backup -- --destinations "google:latex-backups,yadisk:latex-backups" --keep 30

Пример еженедельного запуска через Windows Task Scheduler по воскресеньям в 22:00:

schtasks /Create /TN "Diploma LaTeX weekly backup" /SC WEEKLY /D SUN /ST 22:00 /TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command \"cd 'C:\Users\Artem\Documents\диплом_latex'; task backup\"" /F

Посмотреть задачу:

schtasks /Query /TN "Diploma LaTeX weekly backup" /V /FO LIST

Запустить вручную:

schtasks /Run /TN "Diploma LaTeX weekly backup"

Backup в GitHub Actions

Workflow .github/workflows/backup.yml запускается вручную и по расписанию каждое воскресенье в 05:00 по Якутску. Он создает git bundle, загружает его через rclone и оставляет последние 30 backup-файлов на каждом remote.

Для работы CI backup добавьте в GitHub repository secret:

RCLONE_CONFIG_CONTENT

Значение секрета - полный текст локального файла rclone.conf. Его путь можно узнать командой:

rclone config file

Remote names в этом конфиге должны совпадать с destinations. По умолчанию workflow использует:

gdrive:diploma_latex_backups,ydisk:diploma_latex_backups

Если нужны другие пути или имена remote, задайте GitHub repository variable:

BACKUP_RCLONE_DESTINATIONS=remote1:path,remote2:path
BACKUP_KEEP_WEEKS=30
CI/CD и релизы

CI/CD и релизы

В .github/workflows/ настроены GitHub Actions:

  • check-tools-exe.yml собирает diploma-latex-check.exe и загружает его в release для тегов v*;
  • pdf-build.yml собирает PDF через Docker и загружает artifact pdf-release-assets;
  • pdf-release.yml скачивает готовый artifact и публикует release assets, а также отправляет PDF в ethercod3/diploma-pdf-archive;
  • pages.yml публикует Zensical-документацию на GitHub Pages;
  • backup.yml еженедельно создает git bundle и загружает его в облачные хранилища через rclone.

Для тегов v* workflow Build PDF запускается через workflow_run после успешного завершения Release check tools exe, поэтому в artifact попадает актуальная версия checktool-windows-x64.exe. После успешного Build PDF workflow Release PDF публикует уже готовый artifact; его можно перезапустить вручную по build_run_id без пересборки LaTeX.

Ночная сборка запускается по cron в 04:00 по Якутску в Build PDF и после успешной сборки обновляет служебный тег/release nightly.

Для публикации PDF в отдельный архивный репозиторий нужен secret PDF_ARCHIVE_TOKEN с Contents: Read and write для ethercod3/diploma-pdf-archive. Количество хранимых PDF регулируется переменной PDF_ARCHIVE_MAX_BUILDS, по умолчанию 50.

Для CI-сборки приложений workflow подтягивает приватный репозиторий ethercod3/diploma_code в vault_diploma. В настройках GitHub Actions должен быть secret VIEW_DIPLOMA_CODE с read-only доступом к этому репозиторию.

Нетривиальная логика CI/CD вынесена из YAML в скрипты scripts/ci/*: подготовка .env, определение release context, скачивание checktool assets, публикация PDF release и выгрузка PDF в архив. Сам workflow вызывает задачи по шагам: task build, python ... и nu ....

Лицензия

Репозиторий использует смешанную некоммерческую схему лицензирования, описанную в LICENSE.md: код и автоматизация распространяются по PolyForm Noncommercial License 1.0.0, документация и авторские материалы - по Creative Commons Attribution-NonCommercial 4.0 International. Коммерческое использование возможно только по отдельному письменному согласованию с автором.

Шрифты в fonts/latin-modern-mono/ распространяются отдельно по GUST Font License из fonts/latin-modern-mono/GUST-FONT-LICENSE.TXT.

About

Sources for my degree diploma: LaTeX, Mermaid, scripts, CI, etc. For EN docs, go to repo website

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors