diff --git a/.github/workflows/release-docker.yml b/.github/workflows/release-docker.yml.disabled similarity index 100% rename from .github/workflows/release-docker.yml rename to .github/workflows/release-docker.yml.disabled diff --git a/.gitignore b/.gitignore index e133e60..5baa61b 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,18 @@ __pycache__/ # Local markdown workspace md/ docs/ + +# Go +/md-to-html +/bin/ +/dist/ +/tmp/ +*.test +*.out + +# Web build artifacts +/web/static/dist/ +/node_modules/ + +# Air live-reload +.air.log diff --git a/.dockerignore b/archive/.dockerignore similarity index 100% rename from .dockerignore rename to archive/.dockerignore diff --git a/Dockerfile b/archive/Dockerfile similarity index 100% rename from Dockerfile rename to archive/Dockerfile diff --git a/archive/README.md b/archive/README.md new file mode 100644 index 0000000..34263eb --- /dev/null +++ b/archive/README.md @@ -0,0 +1 @@ +Архивная Python-реализация md-to-html v0.1.2. Для истории. diff --git a/app/__init__.py b/archive/app/__init__.py similarity index 100% rename from app/__init__.py rename to archive/app/__init__.py diff --git a/app/api.py b/archive/app/api.py similarity index 100% rename from app/api.py rename to archive/app/api.py diff --git a/app/converter.py b/archive/app/converter.py similarity index 100% rename from app/converter.py rename to archive/app/converter.py diff --git a/app/streamlit_app.py b/archive/app/streamlit_app.py similarity index 100% rename from app/streamlit_app.py rename to archive/app/streamlit_app.py diff --git a/app/version.py b/archive/app/version.py similarity index 100% rename from app/version.py rename to archive/app/version.py diff --git a/archive/md/.DS_Store b/archive/md/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/archive/md/.DS_Store differ diff --git a/archive/md/01-01-pretask.md b/archive/md/01-01-pretask.md new file mode 100644 index 0000000..6bfe5dc --- /dev/null +++ b/archive/md/01-01-pretask.md @@ -0,0 +1,41 @@ +Описание Github API конвертера markdown в HTML: https://docs.github.com/en/rest/markdown/markdown?apiVersion=2022-11-28 + +Пример вызова API: +```bash +curl -L \ + -X POST \ + -H "Accept: text/html" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/markdown \ + -d '{"text":"## Title 2\nHello **world**"}' +``` +Ответ: +```html +
+Hello world
+``` +Нужен простой python скрипт, который будет: +1. Принимать на вход путь к markdown файлу `..path/example.md` +2. Через Github API конвертировать его в html +3. Формировать новый html файл по шаблону `md\template.html` и сохранять результат рядом в `..path/example.html` + +=== + +У меня есть готовый пайтон скрипт md_to_html.py, который умеет конвертировать markdown в html с помощью Github API. + +Мне нужно переделать его в простое Streamlit приложение, которое будет иметь следующий интерфейс: +1. Поле для загрузки markdown файла +2. Кнопка для конвертации +3. Поле для отображения результата в виде HTML и возможность скачать результат в виде HTML файла + +Так же хочу этот проект запускать в докере. + +Было бы классно еще иметь один публичный API ендпоинт, который будет принимать markdown текст и возвращать html результат, чтобы можно было использовать этот сервис в других приложениях. + +Задай вопросы, если что-то не понятно или есть неоднозночности или неопределенности. + +Создай репозиторий на GitHub для этого проекта. +Введи версии релизов. +Настрой на гитхаб Actions для автоматической сборки и публикации докер образа при каждом релизе. + + diff --git a/archive/md/01-02-plan.md b/archive/md/01-02-plan.md new file mode 100644 index 0000000..25b8f1c --- /dev/null +++ b/archive/md/01-02-plan.md @@ -0,0 +1,226 @@ +# План: md-to-html — Streamlit UI + публичный API в Docker + +## Context + +Сейчас в проекте есть CLI-скрипт `md_to_html.py`, который через GitHub Markdown API конвертирует `.md` файл в самодостаточный HTML (с CSS-шаблоном `md/template.html`). Нужно превратить его в сервис с двумя интерфейсами: + +1. **Streamlit UI** — загрузить `.md`, нажать кнопку, увидеть превью HTML и скачать результат. +2. **Публичный REST API** — принимает markdown-текст, отдаёт готовый HTML. Для интеграции с другими приложениями. + +Всё это должно упаковываться в Docker-образ. + +Решения, зафиксированные по ходу обсуждения: +- FastAPI и Streamlit живут в **одном контейнере** (два процесса, запуск через стартовый скрипт). +- Возвращается **полная HTML-страница** с применённым `template.html` — и в API, и в превью Streamlit. +- Читаем `GITHUB_TOKEN` из env (опционально, для обхода лимита 60/час). +- API **без аутентификации и rate-limiting** — минимальный стартовый вариант. + +## Архитектура + +``` +md-to-html/ +├── md_to_html.py # оставить как есть (работающий CLI) +├── md/template.html # без изменений, используется как раньше +├── app/ +│ ├── __init__.py +│ ├── converter.py # общая логика (вынесена из md_to_html.py) +│ ├── api.py # FastAPI приложение +│ └── streamlit_app.py # Streamlit UI +├── requirements.txt +├── Dockerfile +├── start.py # Python-супервизор: запускает uvicorn + streamlit +├── .dockerignore +└── README.md # короткая инструкция запуска +``` + +Порты в контейнере: FastAPI — 8000, Streamlit — 8501. Оба пробрасываются наружу. + +## Что делать + +### 1. `app/converter.py` — общий модуль + +Вынести из `md_to_html.py` переиспользуемые функции (без изменения логики): + +- `render_markdown(markdown_text: str) -> str` — вызов GitHub API. Добавить чтение `GITHUB_TOKEN` из env: если задан, слать `Authorization: Bearer