Как я за два дня написал 30 open-source библиотек для Python, JS и SkyForge и автоматизировал релизы

Wait 5 sec.

Пишу на Python и JS. Иногда берусь за SkyForge. Регулярно сталкиваюсь с одной и той же ситуацией. Нужна валидация ИНН. Иду в гугл, нахожу десять решений. Пять из них не обновлялись года три. У остальных нет поддержки кириллицы или они требуют лишних зависимостей. В итоге пишу свою регулярку, теряю час и всё равно получаю баги на граничных случаях.Так появился проект SkyPackages. За два дня я выпустил 30+ библиотек. С единым API, с тестами, с поддержкой русского языка там где это нужно.Что внутриДве группы пакетов.Первая закрывает то, что мировые аналоги не решают вообще. ИНН, ОГРН, СНИЛС, КПП, БИК, расчётные счета. Производственный календарь РФ с праздниками и рабочими днями. Склонение числительных. Транслитерация по ГОСТ. Телефоны с определением оператора. Карты МИР. Всё это есть в открытом доступе по частям, но собрать в одном месте с нормальными тестами никто не удосужился.Вторая группа это обычные утилиты, которых не хватает в стандартных библиотеках. Безопасный парсинг JSON с лимитами. Криптография на AES-256 и PBKDF2. Генерация UUID v7, ULID, NanoID. Cron с вычислением следующего запуска. Semver. Расстояние Левенштейна.Каждый пакет существует в трёх версиях сразу. Для Python, для npm и для SkyForge.Про автоматизациюОбычно поддерживать три кодовые базы это боль. Три набора тестов. Три пайплайна публикации. Три раза руками заливать релизы на GitHub. Я потратил полдня и написал скрипт builder.py, который делает всё за меня.Что делает скрипт при запуске. Генерирует файлы для всех трёх экосистем. Ставит зависимости и прогоняет тесты через pytest, vitest и SkyForge check. Собирает wheel, tgz и zip. Создаёт релизы на GitHub через API. Создаёт или обновляет репозитории для SkyForge. Правит index.html прямо в репозитории, без git. Дёргает деплой на Render.Один запуск, всё готово. От строки кода до появления пакета на сайте проходит меньше двух минут. Никаких ручных шагов.ПримерыPython. Импортируем модули валидации и производственного календаря:from sky_validate_ru import inn, snilsfrom sky_datetime_ru import add_working_daysfrom datetime import dateinn.is_valid("7707083893")snils.format("11223344595")add_working_days(date(2026, 12, 31), 1)Первая строка вернёт True. Вторая вернёт строку "112-233-445 95". Третья вернёт 9 января 2026 года, потому что декабрьские праздники перескакивают.TypeScript. Импортируем генератор ID и форматер телефонов:import { uuidV7 } from "@skypackages/id";import { formatPhone } from "@skypackages/phone-ru";uuidV7();formatPhone("+79991234567");Первая строка вернёт UUID v7 вроде "018f4a3e-...". Вторая вернёт "+7 (999) 123-45-67".SkyForge. Подтягиваем пакет и вызываем функцию:пусть v = подтянуть "skyforge-validate-ru"лог(v.инн_валиден("7707083893"))В консоль выведется истина.Цифры30 уникальных библиотек. 90 релизов, по три на каждую. Три экосистемы. Покрытие тестами сто процентов. Первое место в лидерборде SkyForge. Большинство пакетов без внешних зависимостей.Проект независимый, не принадлежит никакой компании. Всё open-source. Ставится одной командой с GitHub Releases, без регистрации в реестрах.Что понял по ходуЕсли релиз занимает десять минут ручной работы, вы не будете выпускать обновления часто. Если тридцать секунд, будете. Это главный вывод.Писать один и тот же код трижды неприятно, но это решается генерацией. Скрипт делает это лучше меня.Русскоязычные библиотеки нужны. Не для галочки в отчёте об импортозамещении, а потому что люди реально тратят время на велосипеды каждый день. Я сам так делал годами.СсылкиGitHub: github.com/skytech-alt/SkyPackagesСайт: skypackages.onrender.comБуду рад фидбэку. Если знаете какая ещё библиотека нужна, пишите в комментариях или открывайте issue на GitHub.