Перейти к содержимому

Установите Hex-пакет

Tuist предоставляет пакет Hex — tuist_ex, который интегрируется с вашим Elixir-проектом и включает такие возможности, как аналитика сборок и аналитика тестов. В этом руководстве описаны шаги по установке и настройке.

Пакет требует Elixir версии 1.18 или новее. Командный интерфейс Tuist не нужен.

1. Создайте проект#

Создайте проект в панели управления Tuist и выберите Mix (Elixir) в качестве системы сборки. Его идентификатор, account/project, связывает ваш Mix-проект с проектом в Tuist.

2. Добавьте пакет#

Добавьте tuist_ex в зависимости вашего файла mix.exs:

elixir
defp deps do
[
{:tuist_ex, "~> 0.10", runtime: false}
]
end

Затем загрузите его:

bash
mix deps.get

runtime: false исключает Tuist из работающего приложения. Перейдите к разделу Начало работы с Elixir, чтобы вместе настроить кэширование, аналитику сборок и аналитику тестов. Разделы ниже описывают аутентификацию и детали конфигурации.

3. Аутентифицируйте команду и непрерывную интеграцию#

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

bash
mix tuist.login

Команда выводит короткий код для входа, открывает браузер, куда нужно ввести этот код, и ожидает авторизации. Чтобы войти без браузера, передайте учётные данные:

bash
mix tuist.login --email [email protected] --password secret

Если вы используете собственный или локальный сервер Tuist, задайте его базовый URL в mix.exs или передайте через --url:

bash
mix tuist.login --url http://localhost:8080

Сохраняйте единообразие в написании хоста. Например, логин, сохранённый для localhost, отличается от логина для 127.0.0.1.

В GitHub Actions, CircleCI и Bitrise этап входа не требуется. При первой отправке отчёта задача обменивает токен OpenID Connect провайдера на токен Tuist. Подключите репозиторий GitHub к проекту Tuist и предоставьте задаче в GitHub Actions разрешение id-token: write:

yaml
jobs:
test:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v4
- uses: erlef/setup-beam@v1
with:
elixir-version: '1.18'
otp-version: '27'
- run: mix deps.get
- run: mix test

Для любого другого провайдера удостоверений OpenID Connect, например Fly.io Machines, настройте политику доверия рабочих удостоверений в разделе Рабочие удостоверения на странице Настройки → Аутентификация вашего аккаунта. Это даёт CI доступ ко всем текущим и будущим проектам этого аккаунта. Укажите в TUIST_OIDC_ACCOUNT аккаунт Tuist, которому принадлежит проект, и передайте свежий токен удостоверения с аудиторией политики через TUIST_OIDC_TOKEN. Интеграция автоматически обменивает его, если нет токена аккаунта или действующего сохранённого логина; mix tuist.login также принимает его вне CI. Автоматический обмен повторно использует незавершённую сессию только для того же сервера, аккаунта и переданного токена удостоверения. Смена удостоверения запускает новый обмен, а пустой токен приводит к ошибке вместо повторного использования предыдущей сессии. Сессии Tuist действуют один час без токенов обновления, поэтому для долгоживущих задач выпустите новый токен удостоверения и снова выполните mix tuist.login до истечения срока сессии. Следуйте инструкциям по настройке рабочего удостоверения и примеру для Fly.io.

Pull-запросы из форков не получают токен OpenID Connect, поэтому их запуски не отправляются в отчёты и завершаются успехом или неудачей как обычно. На других провайдерах установите переменную окружения TUIST_TOKEN в токен аккаунта. Следуйте руководству по аутентификации непрерывной интеграции, чтобы создать его.

4. Продолжайте использовать mix test и mix compile#

Общая настройка устанавливает алиасы компиляции и тестирования. mix test test/my_app_test.exs:12 --trace сообщает о запуске с тем же выводом и кодом выхода, а интеграция компиляции охватывает сборки, запускаемые через mix test или mix phx.server. Если компиляция не находит работы, отчёт не отправляется.

Задачи также работают при вызове по собственному имени. Mix запускает такую задачу в среде dev, поэтому для среды тестирования ей приходится запускаться заново во втором процессе. Добавьте задачи в предпочтительные среды, чтобы пропустить это:

elixir
def cli do
[preferred_envs: ["tuist.test": :test, "tuist.test.build": :test]]
end

Справочник конфигурации#

Следующие параметры доступны в разделе tuist настроек проекта в файле mix.exs:

Параметр Тип По умолчанию Описание
project String нет (обязательно) Идентификатор проекта в формате account/project.
url String "https://tuist.dev" Базовый URL сервера Tuist.
cache boolean или список ключевых слов отключено Настройка включает кэширование зависимостей. См. кэш Elixir для исключений и дополнительных входных данных.
test_retries integer 0 Сколько раз повторять упавшие тесты; см. повторные запуски тестов.
tags список String [] Теги, прикрепляемые к каждой сборке; см. пользовательские метаданные.
values карта %{} Данные «ключ-значение», прикрепляемые к каждой сборке.

Переменные окружения имеют приоритет над mix.exs:

Переменная Описание
TUIST_PROJECT Идентификатор проекта в формате account/project.
TUIST_URL Базовый URL сервера Tuist.
TUIST_TOKEN Токен для аутентификации вместо сохранённого входа.
TUIST_OIDC_TOKEN Свежевыпущенный токен удостоверения OpenID Connect, обмениваемый на токен Tuist. Его аудиторией должно быть значение tuist для GitHub Actions и Bitrise или совпадать с рабочей идентичностью аккаунта для других провайдеров. Используется командой mix tuist.login или как запасной вариант, если нет токена аккаунта или действительного сохранённого входа.
TUIST_OIDC_ACCOUNT Идентификатор аккаунта Tuist, которому принадлежит проект. Требуется при обмене токена через рабочую идентичность аккаунта. Он выбирает среди существующих рабочих идентичностей и сам по себе не предоставляет доступ.
TUIST_TEST_RETRIES Количество повторных попыток запуска упавших тестов.
TUIST_TAGS Теги, прикрепляемые к сборке, разделённые запятыми.
TUIST_VALUES Пары key=value, разделённые запятыми, прикрепляемые к сборке.
TUIST_DEBUG Установите значение 1, чтобы вывести причину, по которой отчёт не удалось отправить.

Отправка отчётов никогда не меняет код выхода команд mix test или mix compile. Если отчёт не удаётся отправить, задача ничего не выводит, если не установлена переменная TUIST_DEBUG=1.

Дальнейшие шаги#

После установки и настройки пакета вы можете использовать:

  • Кэширование зависимостей для повторного использования скомпилированных зависимостей локально и в сборках CI.
  • Аналитика сборок для отслеживания времени компиляции, предупреждений и факторов, замедляющих сборки.
  • Аналитика тестов для отслеживания производительности тестов вплоть до каждого отдельного теста.
  • Нестабильные тесты для обнаружения и отслеживания тестов, которые периодически падают.
  • Разделение тестов для распределения тестов между раннерами непрерывной интеграции.