Непрерывная интеграция (CI)
Чтобы использовать реестр в CI, необходимо убедиться, что вы вошли в реестр,
выполнив команду tuist registry login в рамках рабочего процесса.
Создание новой предварительно разблокированной связки ключей требуется только в том случае, если вы используете интеграцию пакетов в Xcode.
Поскольку учетные данные реестра хранятся в связке ключей, необходимо убедиться, что к этой связке можно получить доступ в среде CI. Обратите внимание, что некоторые CI-провайдеры или инструменты автоматизации, например Fastlane, уже создают временную связку ключей или предоставляют встроенный способ ее создания. Однако вы также можете создать его, создав пользовательский шаг со следующим кодом:
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 сохранит учетные данные в связке ключей по умолчанию.
Убедитесь, что связка ключей по умолчанию создана и разблокирована перед
запуском tuist registry login.
Кроме того, необходимо убедиться, что переменная окружения TUIST_TOKEN
установлена. Вы можете создать ее, следуя документации
здесь.
Пример рабочего процесса для GitHub Actions может выглядеть следующим образом:
name: Build
jobs:
build:
steps:
- # Your set up steps...
- name: Create keychain
run: |
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
- name: Log in to the Tuist Registry
env:
TUIST_TOKEN: ${{ secrets.TUIST_TOKEN }}
run: tuist registry login
- # Your build steps
Инкрементное разрешение в разных средах#
Чистое/холодное восстановление происходит немного быстрее с нашим реестром, и вы
можете получить еще большее улучшение, если будете сохранять разрешенные
зависимости во всех сборках CI. Обратите внимание, что благодаря реестру размер
директории, которую нужно хранить и восстанавливать, намного меньше, чем без
реестра, что занимает значительно меньше времени. Чтобы кэшировать зависимости
при использовании интеграции пакетов Xcode по умолчанию, лучше всего указать
пользовательский clonedSourcePackagesDirPath при разрешении зависимостей через
xcodebuild. Это можно сделать, добавив следующее в ваш файл Config.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:
- 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 }}