# Аналитика сборок Rust {#rust-build-insights}

Build Insights помогает найти, что замедляет ваши сборки Cargo, и выявить регрессии до того, как они повлияют на всю команду. Вы можете сравнивать локальные сборки со сборками в CI, отслеживать изменения времени сборки и проверять крейты, скомпилированные в каждой сборке.

> [!IMPORTANT] Requirements
> - Следуйте <.localized_link href="/guides/get-started/rust-project">настройке проекта Rust</.localized_link>, чтобы подключить проект и пройти аутентификацию.

## Отправка отчетов о сборках {#report-your-builds}

Выполняйте обычные команды Cargo через Tuist:

```sh
tuist cargo build --workspace
tuist cargo check --all-targets
tuist cargo +nightly build --features tracing
```

Если вы используете mise, <.localized_link href="/guides/get-started/rust-project#keep-typing-cargo">настройте обертку для Cargo</.localized_link>, чтобы продолжать использовать обычные команды `cargo`. Ваши аргументы, выбор тулчейна, вывод и код завершения останутся прежними.

## Поиск причин замедления сборки {#explore-your-builds}

Откройте сборку в разделе **Сборки → Запуски сборок** на панели управления. Используйте фильтры по дате, окружению и версии Rust, чтобы сравнивать похожие сборки. Данные о сборках и их счетчиках кэша также доступны через `tuist build cargo list` и `tuist build cargo show`, `GET /api/projects/{account_handle}/{project_handle}/cargo/builds`, а также инструменты `list_cargo_builds` и `get_cargo_build` <.localized_link href="/guides/features/agentic-coding/mcp">MCP</.localized_link>.

На вкладке **Обзор** используйте раздел **Задачи компилятора**, чтобы найти медленные крейты. Сортируйте по **Длительности** или **Начато после** (время с момента запуска команды Cargo) или выполняйте поиск по имени крейта или корневому исходному файлу.

Каждая строка соответствует одному вызову `rustc` для крейта, который может содержать множество исходных файлов. **Корень крейта** указывает его корневой исходный файл; длительность относится ко всей задаче компилятора, а не только к этому файлу. Крейт может встречаться несколько раз для разных целей или конфигураций. Сообщения компилятора сгруппированы в разделах **Предупреждения** и **Ошибки**.

### Отслеживание крейтов между сборками {#crate-history}

Для проектов, участвующих в постепенном внедрении истории крейтов, раздел **Сборки → Крейты** показывает наблюдаемые крейты и историю их компиляции. Откройте крейт, чтобы сравнить записанные длительности и результаты между сборками, а затем перейдите от компиляции к соответствующей сборке Cargo. Тот же инвентарь доступен через `/cargo/crates` в API проекта и общие инструменты MCP для сущностей сборки с параметром `kind: cargo_crates`.

Крейты группируются по точному записанному корневому пути, имени и типу. Изменение путей клонирования может разделить истории; профили, возможности и тройки целей не различаются. Это инвентарь наблюдаемых задач компилятора, а не всех крейтов в вашем рабочем пространстве. Кэшированные или актуальные крейты не создают образцы компиляции.

### Атрибуция отчетов о сборках {#report-attribution}

Аутентифицированные отчеты идентифицируют конкретного пользователя за личными учетными данными. Общие учетные данные могут не указывать на конкретного пользователя. При необходимости установите `TUIST_ACTOR_ID` в стабильный непрозрачный идентификатор на машине, отправляющей отчет; по умолчанию эта функция отключена, и значение отображается как непроверенное утверждение, которое никогда не используется для авторизации. Старые серверы могут игнорировать это утверждение. Не помещайте в него секреты.

## Анализ временных показателей {#timing-boundaries}

Длительность сборки — это время выполнения всей команды Cargo. Задачи компилятора могут выполняться параллельно, поэтому их длительности не суммируются в общую длительность сборки.

Cargo компилирует только те крейты, которые требуют пересборки. Крейты, которые уже актуальны, не появятся в списке компилятора. При использовании кэша компиляции Tuist восстановленные задачи отображаются в измерениях кэша, а не как выполнения компилятора.

Tuist не измеряет скрипты сборки отдельно и не показывает временную шкалу сборки. В большой сборке отображаются первые 500 задач компилятора с уведомлением, если было записано больше.

## Анализ измерений кэша {#cache-measurements}

`tuist cargo` включает экспериментальный кэш компиляции, реализованный в CLI Tuist. Следуйте <.localized_link href="/guides/features/cache/rust">руководству по кэшу Rust</.localized_link> для настройки, удаленного чтения и записи через Kura, поддерживаемых компиляций и устранения неполадок.

Откройте раздел **Cargo Cache** в боковой панели проекта, чтобы отслеживать процент попаданий в кэш и записанные показатели передачи, задержки и пропускной способности между сборками. Фильтруйте по дате или окружению, переключайтесь между дневными трендами и процентом попаданий для отдельных сборок или откройте недавнюю сборку, чтобы проверить активность кэша. Сборки без измерений кэша остаются недоступными, а не учитываются как нулевые.

Откройте вкладку **Кэш** сборки, чтобы увидеть попадания задач, промахи задач, процент попаданий, а также объем загруженных и выгруженных данных. Вкладка появляется, когда сборка сообщает данные кэша.

- **Кэшируемые задачи** показывают, какие задачи компилятора и скриптов сборки повторно использовали кэшированные выходные данные. Ищите или фильтруйте задачи, проверяйте задержку чтения/записи кэша и разверните строку, чтобы увидеть ее выходные данные.
- **Выходные данные CAS** показывают загрузки и выгрузки артефактов с указанием их размеров, длительности и пропускной способности. Диаграмма учитывает завершенные передачи; уже присутствующие артефакты и неудачные попытки остаются в таблице.

**Попадание** означает, что кэшированные выходные данные были повторно использованы. **Промах** означает, что задача была скомпилирована заново. Попадания не разделяются на локальные и удаленные; раздел «Выходные данные CAS» показывает записанные операции с артефактами.

Если подробные записи отсутствуют или неполны, страница показывает уведомление. Сводка все равно охватывает всю сборку. Оцененная избегнутая работа компилятора — это **не сэкономленное время сборки**.

> [!WARNING] Experimental compilation cache
> Кэш является экспериментальным и протестирован на Mac с Apple Silicon. Библиотеки кэшируются по источникам, которые читал компилятор; скрипты сборки, процедурные макросы, исполняемые файлы и нативный код кэшируются только на Mac с Apple Silicon. Ключи кэша заменяют пути клонирования и тулчейна заполнителями, поэтому клонирование по другому пути на той же машине позволяет их повторно использовать. Инкрементальные компиляции выполняются обычно.

### Сборки, запускающие тесты {#builds-that-run-tests}

`tuist cargo test` сообщает длительность всей команды, включая ее тесты. Он также сообщает результаты отдельных тестов, включая doctests, через <.localized_link href="/guides/features/test-insights/rust">Rust Test Insights</.localized_link>. Результаты отдельных тестов появляются в разделе **Тесты**; длительность команды отображается в аналитике сборок.

## Другие инструменты компилятора {#other-compiler-tools}

Tuist сохраняет существующие обертки компилятора, настроенные через `RUSTC_WRAPPER`, `CARGO_BUILD_RUSTC_WRAPPER` или конфигурацию Cargo, и оставляет `RUSTC_WORKSPACE_WRAPPER` без изменений. Существующая глобальная обертка отключает кэш Tuist и наблюдатель компилятора: Tuist не может установить, действительно ли эта обертка запускала rustc. Пользовательские обертки рабочего пространства также могут привести к меньшему количеству задач компилятора в отчете.

Tuist находит Cargo через rustup. Если вы используете пользовательскую установку, установите `TUIST_CARGO_EXECUTABLE` в путь к исполняемому файлу. Вызов Cargo по прямому пути тулчейна обходит обертку mise. Алиас Cargo не может заменить встроенную команду, такую как `build`.

Если вы используете ночную опцию `-C` Cargo, сначала перейдите в рабочее пространство: Tuist перенаправляет команды `-C`, но не собирает их данные о времени сборки.

## Устранение неполадок {#troubleshooting}

Если сборка не отображается на панели управления, включите отладочный вывод, чтобы узнать, почему ее отчет не был отправлен:

```sh
TUIST_DEBUG=1 tuist cargo build --workspace
```

Отчетность не влияет на результат вашей сборки.
