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

Непрерывная интеграция (CI)

Реестр работает из коробки в среде CI без дополнительной настройки аутентификации. По умолчанию для неаутентифицированных запросов установлено ограничение частоты: 1000 запросов в минуту на один IP-адрес.

Если вам нужно более высокое ограничение частоты — 20 000 запросов в минуту, — вы можете пройти аутентификацию, выполнив команду tuist registry login. Для этого необходимо задать переменную окружения TUIST_TOKEN. Вы можете создать токен проекта, следуя документации здесь.

Note

Настройка связки ключей, описанная ниже, требуется только если вы используете tuist registry login для получения более высоких лимитов частоты запросов. В большинстве случаев стандартного лимита для неаутентифицированных запросов достаточно, и этот шаг можно полностью пропустить.

Кроме того, создание новой разблокированной связки ключей необходимо только при использовании интеграции пакетов с Xcode.

Поскольку tuist registry login сохраняет учетные данные в связке ключей, нужно убедиться, что к ней есть доступ в среде CI. Обратите внимание: некоторые провайдеры CI или инструменты автоматизации, такие как Fastlane, уже создают временную связку ключей или предоставляют встроенный способ её создания. Однако вы также можете создать её самостоятельно, добавив пользовательский шаг со следующим кодом:

bash
TMP_DIRECTORY=$(mktemp -d)
KEYCHAIN_PATH=$TMP_DIRECTORY/keychain.keychain
KEYCHAIN_PASSWORD=$(uuidgen)
security create-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security default-keychain -s $KEYCHAIN_PATH
security unlock-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH

Убедитесь, что ваша стандартная связка ключей создана и разблокирована до выполнения команды tuist registry login.

Инкрементальное разрешение зависимостей между средами#

«Чистое» или «холодное» разрешение зависимостей немного быстрее с нашим реестром, а ещё больших улучшений можно добиться, если сохранять разрешённые зависимости между сборками CI. Благодаря реестру размер директории, которую нужно сохранять и восстанавливать, значительно меньше, чем без него, поэтому процесс занимает гораздо меньше времени. Чтобы кэшировать зависимости при использовании стандартной интеграции пакетов Xcode, лучше всего указать пользовательский параметр clonedSourcePackagesDirPath при разрешении зависимостей через xcodebuild. Это можно сделать, добавив следующее в файл Config.swift:

swift
import ProjectDescription
let config = Config(
generationOptions: .options(
additionalPackageResolutionArguments: ["-clonedSourcePackagesDirPath", ".build"]
)
)

Кроме того, вам потребуется найти путь к файлу Package.resolved. Его можно получить, выполнив команду ls **/Package.resolved. Путь будет выглядеть примерно так: App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved.

Для Swift-пакетов и интеграции на основе XcodeProj можно использовать стандартную директорию .build, которая находится либо в корне проекта, либо в директории Tuist. Убедитесь, что путь указан верно при настройке вашего пайплайна.

Ниже приведён пример рабочего процесса для GitHub Actions по разрешению и кэшированию зависимостей при использовании стандартной интеграции пакетов Xcode:

yaml
- name: Restore cache
id: cache-restore
uses: actions/cache/restore@v4
with:
path: .build
key: ${{ runner.os }}-${{ hashFiles('App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved') }}
- name: Resolve dependencies
if: steps.cache-restore.outputs.cache-hit != 'true'
run: xcodebuild -resolvePackageDependencies -clonedSourcePackagesDirPath .build
- name: Save cache
id: cache-save
uses: actions/cache/save@v4
with:
path: .build
key: ${{ steps.cache-restore.outputs.cache-primary-key }}