<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ydb/build/plugins/lib, branch CLI_2.18.0</title>
<subtitle>Mirror of YDB github repos</subtitle>
<id>https://code.mastervirt.ru/ydb/atom?h=CLI_2.18.0</id>
<link rel='self' href='https://code.mastervirt.ru/ydb/atom?h=CLI_2.18.0'/>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/'/>
<updated>2024-12-12T10:12:07Z</updated>
<entry>
<title>nots/*: Поддержка пиров из pnpm.overrides (Experiment)</title>
<updated>2024-12-12T10:12:07Z</updated>
<author>
<name>khoden</name>
<email>khoden@yandex-team.com</email>
</author>
<published>2024-12-11T17:01:09Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=94e999485e5ffeb7e6bd95a6ee0c9e796c735ca5'/>
<id>urn:sha1:94e999485e5ffeb7e6bd95a6ee0c9e796c735ca5</id>
<content type='text'>
Конфигурирование, сборка, последующая работа показывает, что все работает, как задумано (в этом конкретном кейсе точно).

```
~/arcadia/devtools/dummy_arcadia/typescript/pnpm_overrides -nots-support-pnpm-overrides took 3s
at 15:29:04 f ❯ notsl build -- -n
Building devtools/dummy_arcadia/typescript/pnpm_overrides…
Warn[-WUserWarn]: in $S/devtools/frontend_build_platform/nots/builder/ya.make: Using branch nots/builder
Ok

~/arcadia/devtools/dummy_arcadia/typescript/pnpm_overrides -nots-support-pnpm-overrides took 6s
at 15:30:05 f ❯ notsl start

&gt; @yandex-int/pnpm-overrides-demo@ start /Users/khoden/arcadia/devtools/dummy_arcadia/typescript/pnpm_overrides
&gt; ya tool nots node build/index.js

from fake_lodash
Previous line should be 'from fake_lodash'
```
commit_hash:650c69f1fe38483cda5922ecd8cd813fffdf5bcd
</content>
</entry>
<entry>
<title>nots: дедупликация действий после сборки,  пропуск pnpm install на актуальных node_modules</title>
<updated>2024-12-10T17:26:38Z</updated>
<author>
<name>khoden</name>
<email>khoden@yandex-team.com</email>
</author>
<published>2024-12-10T17:01:01Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=eb63fbfeb3d457403c1290a9d4ef893b1659226b'/>
<id>urn:sha1:eb63fbfeb3d457403c1290a9d4ef893b1659226b</id>
<content type='text'>
## Суть изменений:

1. Пересмотрены методы логирования при сборке (и после), чтобы не показывались логи действий, который не выполняются (пропускаются).
   Таким образом логирование секций кода (с последующим стиранием строки лога) теперь осуществляется в методе-обёртке.
2. Команда `nots install` теперь выполняет последовательную сборку пиров (раньше запускал параллельно, что приводило к состоянию гонки);
3. Сборка пиров в команде `nots install` выполняется без рекурсивного обхода пиров для пиров (все пиры и так переданы). Это позволило не "чинить дедупликацию", а в принципе не приводить к "дупликации" – каждый пир проходится один раз. Тут важно определить порядок обхода.
4. Пропуск повторных запусков `pnpm install` без необходимости. Необходимость вычисляется так:
   - `builder` в локальном режиме кладет в аутпут файлик `pre.pnpm-lockfile.yaml`, хеш которого используется в `nots/cli`
   - `builder` в локальном режиме рядом с папкой `node_modules` создает файлик `node_modules.json` с хешом `pre.pnpm-lockfile.yaml`, который использовался при сборке этого `node_modules`
   - `nots/cli` использует сравнивает файлик из аутпута и из `node_modules.json` и если отличаются, то `pnpm install` запускается.

Пожалуй, пункт 4 стоит расписать.
Кажется, что эти файлики всегда будут совпадать, но я перестраховываюсь: часть пиров может быть закеширована в сборке, но удалена из `~/.nots/nm_store`, например, при запуске с `nots --clean`.
Чтобы избежать подобных локальных казусов я и перестраховываюсь.
Хеш от `pre.pnpm-lockfile.yaml` предпочтительнее хеша от `pnpm-lockfile.yaml`, т.к. он включает в себя пиры (т.е. это результат смерживания лок-файлов).
Также была версия с проверкой, что node_modules создалась в промежутке между проверкой и запуском nots/cli (т.е. в рамках `ya make`), но это не работает при кешировании узлов сборки пиров.
Если у вас будут идеи, какие еще проверки можно сделать для принятия решения, запускать ли `pnpm install` – я открыт к предложениям.

## Побочные улучшения:

### nots/cli

- Добавлен хелпер `utils.ts:processItems(items, action)` - отказоустойчивый `forEach`;
- Для `log-formatters.ts:unlog` вместо прямой записи ESC-последовательностей в stdout используется модуль `readline`;
- `log-formatters.ts:unlog` не срабатывает в тестах (пишет заглушку) и при включении отладочного вывода (`DEBUG`/`--verbose`);
- Для `DoneHandler` добавлен метод-обёртка  `runOnce(action, key, fn)` для более удобного использования, а также запись в лог отладки, если действие пропускается.

## Что не вошло в PR

Осталось на будущее:

1. Дедупликация пиров нескольких таргетов.
   Т.е. сборка пиров при `nots install project1 project2` должна быть общей, а не своё поддерево для каждого.
   И `ya make` для них нужно запускать один раз.
   И пост-сборочные действия выполнять единожды в правильном порядке, деже не пытаясь в дупликацию.
2. Подобный пункту 4 механизм, но не для `nots build`, а `nots install` — не запускать `pnpm install`, если недавно ставили (тут нужно определиться с критерием)
commit_hash:11f98acb44f759464876f61c5dbf69da7c0d0340
</content>
</entry>
<entry>
<title>nots: bootstrap update to clean up old pnpm store</title>
<updated>2024-12-04T08:14:47Z</updated>
<author>
<name>vturov</name>
<email>vturov@yandex-team.com</email>
</author>
<published>2024-12-04T07:52:37Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=8463f1192992e8761da0c19ba4d5dc9aa37998f7'/>
<id>urn:sha1:8463f1192992e8761da0c19ba4d5dc9aa37998f7</id>
<content type='text'>
`nots --clean-all` is to clean old pnpm store
commit_hash:927fbcdd1038f132059572ff8a6d37ac8377b082
</content>
</entry>
<entry>
<title>remove coverage_push_tool from ya</title>
<updated>2024-12-03T17:18:52Z</updated>
<author>
<name>ya-shishqa</name>
<email>ya-shishqa@yandex-team.com</email>
</author>
<published>2024-12-03T17:01:03Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=6301465bfe48c88e4aaf1a8addeed7cda47e4b47'/>
<id>urn:sha1:6301465bfe48c88e4aaf1a8addeed7cda47e4b47</id>
<content type='text'>
Related to
commit_hash:64d85744304d4a2195b5039e1d7688d14592b717
</content>
</entry>
<entry>
<title>Lookup CPP custom linter configs</title>
<updated>2024-12-03T07:06:22Z</updated>
<author>
<name>alevitskii</name>
<email>alevitskii@yandex-team.com</email>
</author>
<published>2024-12-03T06:43:44Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=b0c2229a8d320931b2a986503a39f0f805956f11'/>
<id>urn:sha1:b0c2229a8d320931b2a986503a39f0f805956f11</id>
<content type='text'>
Lookup custom linter config
commit_hash:43ad16d363652673970beb4e755b5e045618607e
</content>
</entry>
<entry>
<title>Support autoincludes in ya style</title>
<updated>2024-11-30T17:12:24Z</updated>
<author>
<name>alevitskii</name>
<email>alevitskii@yandex-team.com</email>
</author>
<published>2024-11-30T17:01:31Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=21adcc74febab524dedf75a02d887e6f507d0b7e'/>
<id>urn:sha1:21adcc74febab524dedf75a02d887e6f507d0b7e</id>
<content type='text'>
Support autoincludes in ya style

* Сделал конфиги отдельной сущностью, которую стайлеры могут использовать

* Поддержал сущность `AutoincludeConfig`, добавил ее в black, ruff, clang-format стайлеры
commit_hash:948c057433b3247dd84044f7c4743d2fb1d0c336
</content>
</entry>
<entry>
<title>,Переход на pnpm@9 [technical]</title>
<updated>2024-11-29T04:21:23Z</updated>
<author>
<name>vturov</name>
<email>vturov@yandex-team.com</email>
</author>
<published>2024-11-29T04:05:08Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=a19f304160d01fab02373a90bf664e7f9965f267'/>
<id>urn:sha1:a19f304160d01fab02373a90bf664e7f9965f267</id>
<content type='text'>
+ use pnpm 9.12.3
&lt;hr/&gt;
commit_hash:401355b36acf391df042416ba13707112a07cecb
</content>
</entry>
<entry>
<title>nots/*: Стабилизация trunk</title>
<updated>2024-11-22T06:34:12Z</updated>
<author>
<name>khoden</name>
<email>khoden@yandex-team.com</email>
</author>
<published>2024-11-22T06:21:45Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=6b6dd52cba2350a42670094a53b7df008f38577f'/>
<id>urn:sha1:6b6dd52cba2350a42670094a53b7df008f38577f</id>
<content type='text'>
Суть изменений:
1. Наполнение папки ~/.nots/nm_store/$MODDIR/node_modules прямо в builder (перед установкой модулей в $BINDIR)
2. Это все равно нужно было бы делать в nots/cli, а теперь оно наполняется заранее, что обеспечивает структуру node_modules выше по уровню, чем virtual-store (важно для кастомных резолверов пакетов, ищущих пакеты выше по иерархии)
3. Убран предварительный запуск `pnpm install`, пакеты качаются один раз (тарболы в ya make)
4. После `ya make` все равно запускается `pnpm install` для гарантии (там еще всякие действия делаются)

# Всем, кого робот призовет в PR
## Пожалуйста, игнорируйте, это массовая проверка, в транк не попадут изменения в ваших проектах
## Нам нужно лишь стриггерить CI, чтобы проверить, что никто не сломался. Правки в pnpm-lock.yaml файлах будет откачены.
commit_hash:d124ecb77bda10bd8e975078382c685ac35c8928
</content>
</entry>
<entry>
<title>Use clang-format resource in style cpp linter</title>
<updated>2024-11-20T06:33:33Z</updated>
<author>
<name>alevitskii</name>
<email>alevitskii@yandex-team.com</email>
</author>
<published>2024-11-20T06:22:19Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=2d3e35f925595c445a0ff7405eda6c5ed162ab98'/>
<id>urn:sha1:2d3e35f925595c445a0ff7405eda6c5ed162ab98</id>
<content type='text'>
Use clang-format resouce in style cpp linter
commit_hash:440dce939163f75f5652a9d119a2d5f064e47e6e
</content>
</entry>
<entry>
<title>Only move node_modules dir if it exists</title>
<updated>2024-11-10T08:59:01Z</updated>
<author>
<name>vturov</name>
<email>vturov@yandex-team.com</email>
</author>
<published>2024-11-10T08:37:31Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=dc0f15601f0a9a72abf93036aadff4d257a96f52'/>
<id>urn:sha1:dc0f15601f0a9a72abf93036aadff4d257a96f52</id>
<content type='text'>
Move node_modules bundle for peers only when those exist
commit_hash:ba53ab8e38bbf8c45cdb921344bf780ff1d5f9da
</content>
</entry>
</feed>
