V6 update.
Давно не было обновлений насчет своего пет-проекта. Было проведено очень много работ по сборке и деплою бинарных образов и вот какие выводы я сделал.
1. optionalDependencies. Никогда не слышали о таком? я тоже. Однако заглянув в библиотеки, которые поставляют готовые бинари для ваших ОС, такие как pnpm, esbuild, oxc. Я сделал вывод о том, зачем это надо. Приведу пример из pnpm, поскольку в основном я вдохновлялся им.
Есть библиотека на npm - pnpm. он же в свою очередь зависит от другого пакета - @pnpm/exe. Это входная библиотека в которой буквально следующее наполнение в упрощенном виде
`{ "name": "@pnpm/exe", "version": "10.0.0" "optionalDependencies": { "@pnpm/win-x64": "10.0.0", "@pnpm/win-arm64": "10.0.0" } }
А сам пакет @pnpm/win-x64 описан примерно так
`{ "name": "@pnpm/win-x64", "bin": { "pnpm": "pnpm.exe" }, "os": ["windows"], "cpu": ["x64"] }
Покопавшись в документации к package.json я пришел к выводу, что таким образом можно "приготовить" библиотеку для конкретной ос и(ли) архитектуры процессора. Это супер удобный механизм, особенно в сочетании с optionalDependencies. optionalDependencies подсказывает вашему пакетному менеджеру о том, что некоторые зависимости можно пропустить. А условия об уставовке зависимости как раз описана в самом пакете, например в @pnpm/win-x64 находится сборка для windows c архитектурой x64.
2. Github actions. Точнее ограничения, связанные с upload-artifact действием с free аккаунтом в 500 MB. Cборка для всех ОС занимает ~500 MB то естественно я сжег все лимиты за 2 запуска. А поскольку ждать 72 часа(~3 дня) я не хочу, то начал искать альтернативы github. Первым пришло в голову gitlab. Там лимиты в 1Gb, что меня тоже не устроило. И я пошел искать дальше. Наткнулся на российский сервис gitflic. Однако, чтобы запустить CI/CD пришлось помучаться из-за неочевидных вещей. Кстати, у них можно развернуть свой runner (да, в github и gitlab это тоже есть, но там есть нюансы). А в gitflic все завелось с пол оборота только со своим раннером(не реклама кстати, в gitflic есть свои проблемы. Если хотите, я поделюсь с вами, только дайте знать в коментах). Кстати, свой раннер полезен еще тем, что у меня куплен свой сервер с vpn и мощности "простаивают". Дабы использовать возможности по максимуму, я решил развернуть на нем runner для gitflic(кстати runner для github у меня так и не поднялся а про gitlab я уже вспомнил, пока писал пост 😄 ).
3. Организация пакетов. После того, как поборол первые 2 пункта, начал думать над тем, как организовать что-то похожее на pnpm и esbuild. После тестовой сборки и выкладки на npmjs я осознал, что бинарник то есть, а вот типов нет. Т.е. банально на импорт чего-либо TS или eslint скажет, что мы такое не знаем. Вот и думаю, что кроме условного exe и пакетов под сборки ОС надо писать доп.библиотеку для самого JS/TS.
Итого 1 проект. 7 библиотек: 5 библиотек с бинарными фаилами, 1 общий exe и 1 для типов. И сам проект еще не в публичном доступе! 😔 .
P.S. название V6 сейчас внутренее, можете накинуть своих идей, как назвать тулз по нагрузочному тестированию.
Boost -
#haradkou_sdet #performance #git #gitlab #github #js #ts #devops #pnpm #npm #package_manager #crossplatform #xpatform #update #updates @haradkou_sdet
В этом посте были ссылки, но мы их удалили по правилам Сетки``