Как я за два дня написал 30 open-source библиотек для Python, JS и SkyForge и автоматизировал релизы
Пишу на 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, snils
from sky_datetime_ru import add_working_days
from datetime import date
inn.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.


