持续集成 (CI)
要在 CI 上使用注册表,需要在工作流程中运行tuist registry login ,确保已登录注册表。
ONLY XCODE INTEGRATION
只有在使用 Xcode 集成软件包时,才需要创建新的预解锁钥匙串。
由于注册表凭据存储在钥匙串中,因此需要确保在 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_PATHtuist 注册表登录 会将凭证存储在默认钥匙串中。在运行_ tuist registry login 之前,确保已创建并解锁默认钥匙串_。
此外,您还需要确保TUIST_TOKEN 环境变量已设置。您可以根据此处的文档
创建一个环境变量。
GitHub 操作的工作流程示例如下:
yaml
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 软件包集成时缓存依赖关系,最好的办法是在通过xcodebuild 解析依赖关系时指定一个自定义的clonedSourcePackagesDirPath 。这可以通过在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 的集成,我们可以使用位于项目根目录或Tuist 目录中的默认.build 目录。请在设置管道时确保路径正确。
下面是一个 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 }}