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

Плагин Gradle для Tuist может отправлять аналитику сборок в Tuist, обеспечивая видимость выполнения задач и производительности сборки.

## Настройка поведения загрузки {#configure-upload-behavior}

По умолчанию:
- Аналитика сборок загружается в фоновом режиме для локальных сборок.
- Аналитика сборок загружается в активном режиме для запусков в CI, чтобы избежать потери телеметрии на краткоживущих агентах.

Вы можете управлять этим поведением, используя `uploadInBackground` внутри расширения `tuist`:

```kotlin
tuist {
    uploadInBackground = false // always upload in the foreground
}
```

## Справочник конфигурации {#configuration-reference}

Опция `uploadInBackground` доступна в блоке расширения `tuist` в файле `settings.gradle.kts`:

| Опция | Тип | По умолчанию | Описание |
| --- | --- | --- | --- |
| `uploadInBackground` | `Boolean?` | `null` (фон локально, активный режим в CI) | Загружать ли аналитику сборок в фоновом режиме для локальных сборок. |

Эта настройка не влияет на параметры удаленного кэша в блоке `buildCache`.

## Указание актора в отчете {#report-actor-claim}

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

```kotlin
tuist {
    buildInsights {
        actorId = providers.environmentVariable("CORPORATE_ACTOR_ID").getOrElse("")
    }
}
```

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

## Публикация с доверием к сети {#network-trusted-publishing}

Развертывания на собственных серверах могут явно разрешать отчеты о сборках и тестах Gradle из своей доверенной сети без учетных данных разработчиков. Оператор должен сначала настроить `TUIST_NETWORK_TRUSTED_INSIGHTS_ACCESS=true` на экземпляре и перезапустить его. Это применяется ко всем поддерживаемым проектам; в панели управления такой настройки нет. См. <.localized_link href="/guides/server/self-host/server#network-trusted-access">руководство по самостоятельному размещению</.localized_link>.

Настройте назначение один раз в репозитории:

```kotlin
tuist {
    project = "organization/project"
    url = "https://tuist.internal.example"
    buildCache { enabled = false }
}
```

Отчетность о сборках и тестах не требует аутентифицированного обнаружения конечных точек кэша. Отключите кэш, если экземпляр отдельно не включает доступ к кэшу с доверием к сети или разработчики не предоставляют токены. Неподписанные отчеты о тестах опускают ссылки на шарды и существующие сборки и не запускают автоматизацию карантина или определения нестабильности. Поиск в карантине пропускается, когда учетные данные действительно отсутствуют; при наличии действительных учетных данных сохраняется существующее поведение с аутентификацией. Если учетные данные присутствуют, они все равно используются, а неверные учетные данные приводят к ошибке, а не к возврату к публикации без учетных данных. Когда учетные данные отсутствуют, плагин автоматически определяет, разрешает ли самостоятельно размещенный сервер отчетность без учетных данных. Никакой клиентский флаг или настройка `buildInsights` не требуются. Обновите каждую реплику сервера до версии, поддерживающей обнаружение, перед обновлением клиентов, работающих без учетных данных. Более старые серверы без поддержки обнаружения, отключенные экземпляры и ошибки обнаружения по-прежнему требуют аутентификации; аутентифицированная публикация остается совместимой. Явно пустое значение `TUIST_TOKEN` приводит к отказу в доступе, а не к включению публикации без учетных данных. Для задач форка или Dependabot без секретов удалите эту переменную вместо того, чтобы определять ее как пустую строку.

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

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

Добавляйте теги и данные в формате ключ-значение к сборкам Gradle, чтобы сравнивать запуски разных команд, оборудования или рабочих процессов. Теги доступны как фильтры в панели управления, а значения отображаются на странице деталей каждой сборки, а также в интерфейсе прикладного программирования и инструментах Model Context Protocol.

Установите метаданные с помощью переменных окружения:

```sh
export TUIST_BUILD_TAGS="nightly,android"
export TUIST_BUILD_VALUE_TICKET="TUIST-123"
export TUIST_BUILD_VALUE_RUNNER="macos-14"
```

Вы также можете настроить метаданные в `settings.gradle.kts`:

```kotlin
tuist {
    buildInsights {
        tag("nightly")
        tag("android")
        value("ticket", "TUIST-123")
        value("runner", "macos-14")
    }
}
```

Если одно и то же значение настроено в обоих местах, приоритет имеет значение в `settings.gradle.kts`.

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

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