Об утилите:
Очень давно я параллельно писал 4 проекта и замучался переносить код между проектами и создал в Github организацию с общим кодом (https://github.com/rucken), куда вынес все общее из разных проектов, но помимо кода были также различные девопс скрипты.
Для скриптов я написал небольшую утилиту (https://github.com/rucken/rucken) и вынес в нее общие между проектами девопс скрипты и оформил их отдельными командами.
В данный момент там есть такие команды:
make-ts-list - создание списков ts-файлов для всех nx - библиотек;
version-updater - обновление версий зависимостей использующихся в nx - библиотеках до версии этих зависимостей в рутовом package.json;
translate - извлечение перевода из исходного кода с последующим формированием словарей для перевода ("pot", "po");
postgres - создание баз данных на сервере баз данных Postgres;
env-replacer - рекурсивная замена вложенных значений переменных окружения в переданной переменной;
copy-paste - копирование и вставка файлов и директорий с параллельной заменой одной строки, при этом происходит замена не только по полному совпадению, но и в различных вариантах регистра, а также происходит замена и множественного варианта этого слова.
Все команды утилиты использовались в личных и рабочих проектах, а для упрощения процесса подключения, утилита публикуется в npm - регистр.
Сама организация и общий код между проектами уже кучу лет не развивается, так как нет на него времени, а вот консольная утилита периодически расширяется.
В этом посте я хотел описать новое небольшое изменение и по пути описал суть проекта.
Новые изменения:
Я часто пользуюсь своей утилитой по копированию файлов и директорий с кодом, но для генерации конфигураций деплоя по шаблонам я использовал баш скрипты, в которых помимо различных условий происходит копирование через команду "cp" и замена переменных через команду "sed".
На днях подумал и решил что часть с копированием и заменой можно убрать в утилиту "rucken" и тем самым оставить в баш скриптах только логики с условиями.
В некоторых моих проектах логик во��бще нет, только копирование с заменой переменных окружения, для таких проектов это прям очень нужная штука.
Вот и добавил поддержку замены переменных окружения, ниже будет пример использования утилиты.
Пример использования:
Создаем папку cat-dog
mkdir cat-dog
Создаем текстовый файл cat-dog/cat_dog.txt
echo "%START_ENV_VARIABLE% catDog CatDog cat-dog cat_dog CAT_DOG Cat-Dog Cat_Dog CAT-DOG cat Dog Cat Dog cat dog CAT DOG catDogs CatDogs cat-dogs cat_dogs CAT_DOGS Cat-Dogs Cat_Dogs CAT-DOGS cat Dogs Cat Dogs cat dogs CAT DOGS" > cat-dog/cat_dog.txt
Запускаем утилиту
export START_ENV_VARIABLE="examples:" npx rucken@latest copy-paste --find=cat-dog --replace=human-ufo --path=./cat-dog --replace-envs=true
Проверяем содержимое нового файла
cat ./human-ufo/human_ufo.txt
Результат:
$ cat ./human-ufo/human_ufo.txt examples: humanUfo HumanUfo human-ufo human_ufo HUMAN_UFO Human-Ufo Human_Ufo HUMAN-UFO human Ufo Human Ufo human ufo HUMAN UFO humanUfos HumanUfos human-ufos human_ufos HUMAN_UFOS Human-Ufos Human_Ufos HUMAN-UFOS human Ufos Human Ufos human ufos HUMAN UFOS
P.S. Разрабатывается и проверяется только на Ubuntu
Ссылки:
https://www.npmjs.com/package/rucken - опубликованная утилита
https://github.com/rucken/rucken - код проекта
https://github.com/rucken/rucken/blob/master/libs/rucken/src/lib/copy-paste/copy-paste.service.ts - код команды в которой произошли изменения
