<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ydb/build/plugins/lib/nots, branch CLI_2.20.0</title>
<subtitle>Mirror of YDB github repos</subtitle>
<id>https://code.mastervirt.ru/ydb/atom?h=CLI_2.20.0</id>
<link rel='self' href='https://code.mastervirt.ru/ydb/atom?h=CLI_2.20.0'/>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/'/>
<updated>2025-03-03T07:34:50Z</updated>
<entry>
<title>revert rXXXXXX</title>
<updated>2025-03-03T07:34:50Z</updated>
<author>
<name>zaverden</name>
<email>zaverden@yandex-team.com</email>
</author>
<published>2025-03-03T07:13:20Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=34c355040f7a0148f89890c2398aada57d5adb97'/>
<id>urn:sha1:34c355040f7a0148f89890c2398aada57d5adb97</id>
<content type='text'>
Explicit encoding is not required. Fixed in
commit_hash:d163fef95c20da36aaf84dade84ea25b38055dd3
</content>
</entry>
<entry>
<title>fix(conf): process ru comments in tsconfig.json</title>
<updated>2025-02-17T17:59:53Z</updated>
<author>
<name>zaverden</name>
<email>zaverden@yandex-team.com</email>
</author>
<published>2025-02-17T17:00:49Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=3dddf7e61195210623b725e9e915dfec9fc86a34'/>
<id>urn:sha1:3dddf7e61195210623b725e9e915dfec9fc86a34</id>
<content type='text'>
commit_hash:e91ce4b94e88fc391c94405c4abdcbc1c30136fd
</content>
</entry>
<entry>
<title>fix(conf): correct resolve tsconfig paths</title>
<updated>2025-02-14T08:12:24Z</updated>
<author>
<name>zaverden</name>
<email>zaverden@yandex-team.com</email>
</author>
<published>2025-02-14T07:52:52Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=9d0f7b009958a52a9bf06f3f6af49bb629cf2634'/>
<id>urn:sha1:9d0f7b009958a52a9bf06f3f6af49bb629cf2634</id>
<content type='text'>
commit_hash:c7a38b8cf8c701f23c49b920be863fc2d96c80a4
</content>
</entry>
<entry>
<title>Node.js SDK tasklet: support xcode_sidecar</title>
<updated>2025-02-06T19:07:06Z</updated>
<author>
<name>vitalii-perov</name>
<email>vitalii-perov@yandex-team.com</email>
</author>
<published>2025-02-06T18:44:02Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=3aecb043cb6d694e73bf9ff4b8359f50ce2addae'/>
<id>urn:sha1:3aecb043cb6d694e73bf9ff4b8359f50ce2addae</id>
<content type='text'>
commit_hash:2c55f79d794d1397298137030241375d3bff6f9d
</content>
</entry>
<entry>
<title>nots: Сделать output.tar главным артефактом сборки, чтобы можно было использовать его в BUNDLE()</title>
<updated>2025-02-03T06:28:47Z</updated>
<author>
<name>khoden</name>
<email>khoden@yandex-team.com</email>
</author>
<published>2025-02-03T06:04:06Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/ydb/commit/?id=6f9ffcd3daddd441911cbc0f35143aff80f044de'/>
<id>urn:sha1:6f9ffcd3daddd441911cbc0f35143aff80f044de</id>
<content type='text'>
Пока что есть проблемы с пирами (всегда).
Нужно разобраться, как их доставлять правильно.
commit_hash:caf90ef2192d4e9b5b18ee468b0697cb55b79408
</content>
</entry>
<entry>
<title>nots/*: Поддержка пиров из pnpm.overrides (Experiment)</title>
<updated>2024-12-11T17:51:56Z</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=33b2328129ae04e3fb67acc7ead17bb3eaff34f4'/>
<id>urn:sha1:33b2328129ae04e3fb67acc7ead17bb3eaff34f4</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>,Переход на 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>
</feed>
