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

Hex-пакет Tuist может отправлять аналитику сборок в Tuist. Время сборки, граф зависимостей между вашими файлами и то, как они меняются со временем, дают вам всё необходимое для оптимизации графа сборки и максимального использования всех ядер, доступных в среде компиляции.

> [!IMPORTANT]
> **Требования**
>
> - Пройдите <.localized_link href="/guides/get-started/elixir-project">Начало работы с Elixir</.localized_link>

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

Общая настройка устанавливает интеграцию компиляции. Продолжайте использовать свои обычные команды:

```bash
mix compile
```

Интеграция охватывает `mix compile` и каждую компиляцию, которую запускает другая задача, например `mix test` или `mix phx.server`. Компиляция, которая не находит работы, не отправляется в отчёт, поэтому в панели управления отображаются только выполненные сборки.

## Отправка идентификатора актора {#report-actor-claim}

Запросы отчётов о сборке и тестировании Mix включают необязательный заголовок `x-tuist-actor-id` только если вы явно настроили метку. Установите `TUIST_ACTOR_ID` в метку, ограниченную организацией, или добавьте `actor_id: "developer-label"` в конфигурацию `tuist` проекта. Приоритет имеет переменная окружения, затем параметры времени выполнения `:actor_id`, затем конфигурация проекта. По умолчанию метка не отправляется, и пакет не определяет имена пользователей операционной системы. Фиксированная метка проекта применяется ко всем, кто использует эту конфигурацию. Пустые или недействительные переопределения пропускают утверждение вместо возврата к значению по умолчанию; это не удаляет проверенную идентификацию на основе учётных данных. Если пользовательский прокси отклоняет неизвестные заголовки, откажитесь от отправки с помощью `TUIST_ACTOR_ID=""`.

Идентификаторы должны состоять из 1–128 байт печатных символов ASCII, кроме пробелов. Недействительные переопределения пропускаются без возврата к значению по умолчанию. Проверенные индивидуальные учётные данные имеют приоритет; другие идентификаторы, сообщаемые клиентом, отображаются как **Не проверено**, никогда не авторизуют доступ и никогда не связываются с пользователями автоматически. Любой, кто может просматривать отчёты проекта, видит эти идентификаторы, включая публичных зрителей, если проект общедоступен, и они включаются в экспорт данных, поэтому не включайте секреты. Старые серверы игнорируют необязательный заголовок, а новые серверы принимают старых клиентов без него. Новые отчёты с общим токеном без идентификатора показывают **Неизвестно**, а не публикующую организацию; исторические отчёты сохраняют прежнюю атрибуцию. Отчётность о сборках и тестах по умолчанию требует аутентификации. Самостоятельно размещённые установки могут явно включить отчётность без учётных данных, как описано ниже.

## Отчётность без учётных данных в частной сети {#network-trusted-publishing}

После того как оператор настроит `TUIST_NETWORK_TRUSTED_INSIGHTS_ACCESS=true` на экземпляре и перезапустит его, как описано в <.localized_link href="/guides/server/self-host/server#network-trusted-access">руководстве по самостоятельному размещению</.localized_link>, настройте целевой сервер. SDK автоматически определяет, разрешает ли экземпляр отчётность без учётных данных, когда они отсутствуют. Настройка экземпляра охватывает все поддерживаемые проекты и не имеет переключателя в панели управления:

```elixir
tuist: [
  url: "https://tuist.internal.example",
  project: "account/project"
]
```

`mix tuist.compile` и `mix tuist.test` публикуют структурированные отчёты без входа в систему, когда учётные данные действительно отсутствуют и обнаружение подтверждает, что сервер это разрешает. Флаг клиента или согласие проекта не требуются. Предоставленные учётные данные, включая предоставленную идентификацию CI OIDC, используются или отклоняются, но никогда не игнорируются для перехода к неподписанной отчётности. `TUIST_TOKEN`, состоящий только из пробельных символов, является ошибкой. Пустой `TUIST_TOKEN` может вернуться к действительным сохранённым учётным данным или предоставленному OIDC, а устаревшие сохранённые учётные данные могут вернуться к предоставленному OIDC; оба пути остаются аутентифицированными и никогда не включают неподписанную отчётность. Непригодные учётные данные сохраняются и приводят к ошибке, если ни один аутентифицированный вариант возврата не succeeds. Обновите каждую реплику сервера до версии с поддержкой обнаружения перед обновлением клиентов для отчётности без учётных данных; старые серверы без обнаружения, отключённые экземпляры и сбои обнаружения всё ещё требуют аутентификации.

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

## Что отслеживается {#what-is-tracked}

Для каждой сборки пакет собирает:
- Её длительность, успешность, а также среду Elixir, Erlang/OTP и Mix, в которой она выполнялась
- Каждое предупреждение и ошибку с указанием файла и строки
- Время компиляции каждого файла и модули, которые он определяет
- Файлы, от которых зависит каждый файл, и нужны ли они во время компиляции или только во время выполнения
- Что делала сборка помимо компиляции файлов, например проверку типов, запись на диск и работу других компиляторов Mix
- Использование процессора, памяти, сети и диска машиной во время сборки
- Ветку и коммит, а при непрерывной интеграции — провайдера и запуск

## Поиск причин замедления сборки {#find-what-slows-a-build-down}

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

На вкладке **Обзор** перечислены файлы, скомпилированные сборкой. Вы можете группировать их по модулям, искать и сортировать по:
- **Длительности компиляции**, чтобы найти файлы, которые сами по себе медленные.
- **Зависимым во время компиляции** — количеству файлов, которые не могут быть скомпилированы, пока не будет скомпилирован этот. Медленный файл с большим количеством зависимых задерживает остальную часть сборки, а его изменение приводит к повторной компиляции всех них.
- **Зависимостям во время компиляции** — количеству файлов, которых ожидает этот файл.

![Обзор сборки Mix приложения Phoenix](/images/guides/features/elixir/build.png)

Вкладка **Временная шкала** показывает ту же сборку во времени: какие файлы компилировались параллельно, где сборка выполняла проверку типов и запись на диск, и какова была нагрузка на машину в каждый момент. Участок с одной полосой означает период, когда сборка не могла использовать имеющиеся ядра.

![Временная шкала полной сборки Mix приложения Phoenix](/images/guides/features/elixir/build-timeline.png)

На вкладках **Предупреждения** и **Ошибки** перечислены диагностики сборки.

## Пользовательские метаданные {#custom-metadata}

Прикрепляйте теги и данные в формате ключ-значение к сборкам Mix, чтобы различать запуски разных команд, оборудования или рабочих процессов. Оба вида данных отображаются на странице деталей каждой сборки.

Установите метаданные через переменные окружения:

```sh
export TUIST_TAGS="nightly,release"
export TUIST_VALUES="ticket=TUIST-123,runner=linux-arm64"
```

Вы также можете настроить метаданные в `mix.exs`:

```elixir
tuist: [
  project: "account/project",
  tags: ["nightly", "release"],
  values: %{"ticket" => "TUIST-123", "runner" => "linux-arm64"}
]
```

Теги из обоих источников объединяются. Если один и тот же ключ настроен в обоих местах, приоритет имеет значение из переменной окружения.

Теги могут содержать только буквы, цифры, дефисы и подчеркивания. Сборка может иметь до 50 тегов, каждый тег — до 50 символов. Сборка может иметь до 20 записей в формате ключ-значение, каждый ключ — до 50 символов, каждое значение — до 500 символов. Это те же серверные ограничения, что и для метаданных сборок Xcode. Пакет пропускает недопустимые теги и слишком большие или пустые записи метаданных перед отправкой отчета, поэтому неверная конфигурация не помешает сохранению остальной части отчета аналитики сборки. Используйте метаданные в формате ключ-значение для данных, не соответствующих ограничениям для тегов.

Пользовательские метаданные прикрепляются к сборкам, а не к запускам тестов.

Пользовательские метаданные видны участникам проекта в панели управления. Не используйте их для учетных данных, токенов доступа или других конфиденциальных данных. Tuist хранит данные сборок Mix, включая эти метаданные, в течение 90 дней. Подробнее см. в <.localized_link href="/guides/server/data-retention">политике хранения данных</.localized_link>.

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

Отправка отчетов никогда не влияет на результат вашей сборки: если отчет не удается отправить, сборка завершается как обычно, и ничего не выводится. Чтобы узнать, почему отчет не был отправлен, установите `TUIST_DEBUG=1`:

```bash
TUIST_DEBUG=1 mix compile --force
```
