Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Перевести tlroadmap в честный веб #257

Open
13 tasks
b0g3r opened this issue May 6, 2020 · 3 comments
Open
13 tasks

Перевести tlroadmap в честный веб #257

b0g3r opened this issue May 6, 2020 · 3 comments
Labels
Milestone

Comments

@b0g3r
Copy link
Member

b0g3r commented May 6, 2020

tlroadmap -> https://tlroadmap.io

Кажется, пришло время оформить наполовину сделаную работу в виде полноценного ишью.

Зачем tlroadmap уезжать в веб?

tlroadmap из небольшого .mm файла и набора статей превратился в базу знаний, которая усложнялась и будет постепенно усложняться дальше: генерация артефактов, проверки, шаблонные файлы, перекрёстные связи, переводы, глоссарий, ...

При этом пользоваться им становится всё сложнее с обоих сторон: читателю приходится качать файл / перебирать репозиторий, а писателю разбираться с флоу, проверками и решать конфликты между разными версиями бинарных артефактов.

Какое решение?

Сейчас источником истины для дерева компетенций служит .puml файл с ссылками на .mm файлы, которые лежат в достаточно плоской структуре директорий. Из этого .puml-файла генерируются связанные артефакты: .png, .svg, .mm, часть .md и кладутся в репозиторий.

Что я предлагаю:

  • Источником истины считать структуру папок и .md файлы в ней.
  • Мета-информацию (тайтл, теги, цвет ветки, расположение ветки, ...) хранить в .md файлах в frontmatter-формате или любом другом
  • Чтобы поддерживать i18n каждая ветка содержит ru.md, en.md, %anylocale%.md файл
  • Утилита при сборке извлекает дерево и нужные мета-данные из файлов и структуре папок и кладёт его в какой-нибудь структурированный формат (json, yaml)
  • Утилита генерирует артефакты дерева (картинки, .mm файлы, т.д.)
  • Утилита генерирует статический сайт

Например из такой структуры файлов:
image
Должен генерироваться сайт с такой структурой:
image

Что нужно предусмотреть:

  • Минимальную боль для писателя (контрибьютора) — в идеальном случае единственное, с чем он должен работать — это с редактором .md файла.
  • Генерация должна быть лёгковесной и быстрой: чтобы иметь возможность разворачивать тестовые окружения под каждое изменение
  • Генератор статического сайта должен быть достаточно мощным и расширяемым, чтобы иметь возможность быстро добавлять интерактивные компоненты
  • Сгенерированный статический сайт должен иметь удобную мобильную версию, быть быстрым (PageSpeed > 65), поддерживать кеширование
  • Сгенерированный статический сайт должен быть SEO-friendly: иметь статичную meta-информацию, возможность настроить её для каждой страницы
  • Сайт должен трекать перемещение пользователя по страницам, строить статистику
  • Возможность интеграции с сервисами по менеджементу переводов (crowdin, gitlocalize)

Какие технические детали?

Я и @teners реализовали большую часть из озвученных выше штук, использовав следующую магию:

  • Мы распихали весь текущий родмап по вложенным папкам и назвали их ru.md
  • В "ветки", у которых нет описания мы добавили мета-информацию с переводом заголовка
  • Мы сгенерировали из этой структуры статический сайт на VuePress
  • Мы сгенерировали из этой структуры .json дерево специальным vuepress-плагином
  • Мы добились красивых URL-ов другим специальным vuepress-плагином
  • Мы вывели всю генерацию артефактов в Github Actions, и прикрутили автодеплой в netlify с ревью-окружениями для каждого PR

Есть и подводные камни:

  • Репозиторий tlroadmap — база знаний, а не ПО. Лицензия CC-BY-SA 4.0 плохо подходит для свободного ПО, и с этим есть очевидные проблемы. Весь код мы максимально вынесли за пределы репозитория под MIT-лицензиями, и это нужно будет продолжать делать.
  • Мы взяли VuePress в качестве генератора и сейчас достаточно сильно от него зависим, написали специальные плагины, подкрутили всё что можно подкрутить и будем продолжать подкручивать. Весь интерактив, кастомные компоненты, SEO-магия и другие штуки часто будут зависеть от Vue как фреймворка. Впрочем, такую структуру файлов легко съест любой другой генератор статических файлов (Hugo, Jekyll, Gatsby), поэтому переезд возможен в любой момент.

Что теперь?

Когда все из обязательных условий будут выполнены форк b0g3r/tlroadmap будет влит в tlbootcamp/tlroadmap, и структура файлов в репозитории изменится.

Скорее всего вместе с этим сломаются все текущие PR :(

Чтобы отслеживать будущие ишью по сайту предлагаю создать лейбл website, и перенести оставшиеся в форке ишью в апстрим.

После завершения работы над базовой функциональностью я предлагаю пустить зов по чатикам на лучший компонент для интерактивного отображения родмапа на сайте.

@b0g3r
Copy link
Member Author

b0g3r commented May 6, 2020

В идеале эти требования выше и сам сайт отдать на растерзание и поиск ошибок в комьюнити, многое мы наверняка не учли

@b0g3r b0g3r pinned this issue May 10, 2020
@etolstoy etolstoy added this to the tlroadmap.io milestone May 10, 2020
@etolstoy
Copy link
Member

@b0g3r кажется, можем закрывать уже?

@b0g3r
Copy link
Member Author

b0g3r commented May 14, 2020

Я бы как эпик оставил

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants