phase7: documentation + release v0.2.0
release / release (push) Has been cancelled

This commit is contained in:
Sergey Filkin
2026-04-18 12:57:03 +03:00
parent 13ce2a5b4f
commit 66ca05692b
3 changed files with 79 additions and 48 deletions
+22
View File
@@ -4,6 +4,28 @@ All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and the project uses Semantic Versioning. The format is based on Keep a Changelog, and the project uses Semantic Versioning.
## [0.2.0] - 2026-04-18
### Changed
- **BREAKING**: project fully rewritten in Go (goldmark + templUI); Python implementation moved to `archive/`.
- **BREAKING**: heading anchors now use ASCII transliteration (`## Установка``id="ustanovka"`).
- **BREAKING**: heading HTML markup simplified; `<div class="markdown-heading">` is no longer emitted.
- Removed the GitHub Markdown API dependency; conversion now works fully offline.
- Replaced the two-process runtime (uvicorn + Streamlit) with a single binary.
- Preview and download links are now one-shot, UUID-backed, and expire after one hour.
### Added
- Syntax highlighting via chroma with inline styles for self-contained HTML output.
- Footnote support in addition to baseline GFM features.
- Cross-platform release binaries for `linux/amd64`, `linux/arm64`, and `darwin/arm64`.
### Removed
- `READY_CHECK_GITHUB` environment variable.
- Streamlit UI on dedicated port `:8501`.
## [0.1.2] - 2026-04-18 ## [0.1.2] - 2026-04-18
### Added ### Added
+56 -47
View File
@@ -1,81 +1,90 @@
# md-to-html # md-to-html
Сервис конвертации Markdown в самодостаточный HTML (через GitHub API). Сервис конвертации Markdown в самодостаточный HTML. Полностью офлайн, без обращений к внешним API.
Текущая версия: `0.1.2` Текущая версия: `0.2.0` (Go + goldmark + templUI)
Часто нужен адекватно (минималистично) выглядящий HTML из Markdown. HTML получем через открытый API GitHub, а стили просто захардкожены в шаблоне. ## Возможности
![Streamlit UI](screen.png) - GFM + footnote + emoji + подсветка кода через chroma.
- Якоря в заголовках с ASCII-транслитом: `## Установка``#ustanovka`.
- CLI: `md-to-html cli file.md`.
- HTTP API: `POST /convert` совместим с `v0.1.x`.
- Web UI на `http://localhost:8080/` с inline-preview в sandbox iframe и одноразовыми ссылками на preview/download.
GITHUB_TOKEN не нужен, если не требуется массовая (поточная) конвертация. Но если нужно, то его можно передать через переменную окружения при запуске. ## Запуск через Docker
Есть два интерфейса:
- FastAPI на `http://localhost:8000`
- Streamlit UI на `http://localhost:8501` с двумя режимами ввода: загрузка `.md` файла или вставка Markdown-текста из буфера обмена
## Локальный запуск
```bash ```bash
uv venv .venv docker run --rm -p 8080:8080 ghcr.io/fserg/md-to-html:latest
source .venv/bin/activate
uv pip install -r requirements.txt
uvicorn app.api:app --reload
streamlit run app/streamlit_app.py
``` ```
CLI сохранился: ## Локальная разработка
Требования: Go 1.23+, `templ` CLI, Node.js для dev-режима Tailwind или standalone `tailwindcss`.
```bash ```bash
python3 md_to_html.py /path/to/file.md go install github.com/a-h/templ/cmd/templ@v0.3.1001
make tailwind
make build
./bin/md-to-html serve
``` ```
## Docker Для live-reload:
```bash ```bash
docker build -t md-to-html . make dev
docker run --rm -p 8000:8000 -p 8501:8501 -e GITHUB_TOKEN=your_token md-to-html
``` ```
## API ## CLI
```bash
md-to-html cli file.md
md-to-html cli file.md -o out.html
md-to-html cli --stdin < file.md
md-to-html cli - --title "Заголовок"
```
## HTTP API
`POST /convert` `POST /convert`
```bash ```bash
curl -X POST http://localhost:8000/convert \ curl -X POST http://localhost:8080/convert \
-H 'Content-Type: application/json' \ -H 'content-type: application/json' \
-d '{"markdown":"# Hello"}' -d '{"markdown":"# Привет"}'
``` ```
`GET /health` Прочие эндпоинты:
```bash - `GET /` — веб-интерфейс.
curl http://localhost:8000/health - `GET /health`, `GET /version`, `GET /ready` — служебные эндпоинты.
``` - `GET /preview/{id}`, `GET /download/{id}` — одноразовые ссылки из веб-формы.
`GET /version` ## Env-переменные
```bash | Переменная | По умолчанию | Назначение |
curl http://localhost:8000/version |----------------------|--------------|------------|
``` | `ADDR` | `:8080` | Адрес прослушивания |
| `MAX_MARKDOWN_BYTES` | `1048576` | Лимит размера markdown |
| `MAX_REQUEST_BYTES` | `1200000` | Лимит размера HTTP-запроса |
| `PREVIEW_TTL` | `1h` | TTL одноразовых ссылок |
## Миграция с v0.1.x
- API-контракт `POST /convert` не изменился, существующие клиенты продолжают работать.
- Якоря заголовков теперь используют ASCII-транслит. Ссылки вида `#установка` нужно заменить на `#ustanovka`.
- HTML-разметка упрощена: больше нет `<div class="markdown-heading">`, поэтому ручные CSS-оверрайды нужно пересмотреть.
- Переменная окружения `READY_CHECK_GITHUB` удалена: сервис больше не зависит от внешнего Markdown API.
- UI работает на том же порту `8080`, отдельный UI-порт `:8501` больше не нужен.
Python-реализация сохранена в `archive/`.
## Релизы ## Релизы
Проект использует Semantic Versioning. Текущая версия хранится в файле `VERSION`, история изменений ведётся в `CHANGELOG.md`.
Чтобы выпустить релиз:
```bash ```bash
git add VERSION CHANGELOG.md git commit -am "Release vX.Y.Z"
git commit -m "Release v0.1.2" git tag vX.Y.Z
git tag v0.1.2
git push origin main --tags git push origin main --tags
gh release create v0.1.2 --notes-file CHANGELOG.md
``` ```
После публикации релиза GitHub Actions автоматически собирает Docker-образ и публикует его в GitHub Container Registry: GitHub Actions публикует Docker-образ для `linux/amd64` и `linux/arm64` в GHCR и прикладывает бинарники для `linux/amd64`, `linux/arm64` и `darwin/arm64` к GitHub Release.
```bash
docker pull ghcr.io/fserg/md-to-html:v0.1.2
```
+1 -1
View File
@@ -1 +1 @@
0.1.2 0.2.0