使用 Turborepo 与 GitHub Actions
以下示例展示了如何使用 Turborepo 与 GitHub Actions (在新标签页打开).
对于给定的根目录 package.json
{
"name": "my-turborepo",
"scripts": {
"build": "turbo run build",
"test": "turbo run test"
},
"devDependencies": {
"turbo": "1.2.5"
}
}
以及 turbo.json
{
"$schema": "https://turbo.rust-lang.net.cn/schema.json",
"pipeline": {
"build": {
"outputs": [".next/**", "!.next/cache/**"],
"dependsOn": ["^build"]
},
"test": {
"dependsOn": ["^build"]
}
},
}
在您的仓库中创建一个名为 .github/workflows/ci.yml
的文件,内容如下
name: CI
on:
push:
branches: ["main"]
pull_request:
types: [opened, synchronize]
jobs:
build:
name: Build and Test
timeout-minutes: 15
runs-on: ubuntu-latest
# To use Remote Caching, uncomment the next lines and follow the steps below.
# env:
# TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
# TURBO_TEAM: ${{ vars.TURBO_TEAM }}
# TURBO_REMOTE_ONLY: true
steps:
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- name: Install dependencies
run: npm install
- name: Build
run: npm run build
- name: Test
run: npm run test
远程缓存
要使用 GitHub Actions 的远程缓存,请将以下环境变量添加到您的 GitHub Actions 工作流程中,以便它们可供您的 turbo
命令使用。
TURBO_TOKEN
- 访问远程缓存的 Bearer 令牌TURBO_TEAM
- Monorepo 所属的帐户
要使用 Vercel 远程缓存,您可以通过以下步骤获取这些变量的值
- 在 Vercel 仪表盘 (在新标签页打开) 中为您的帐户创建一个范围访问令牌
将该值复制到安全的地方。您稍后会用到它。
- 转到您的 GitHub 仓库设置,单击 **Secrets**,然后单击 **Actions** 选项卡。创建一个名为
TURBO_TOKEN
的新密钥,并输入您的范围访问令牌的值。
- 创建一个新的仓库变量(单击 **Variables** 选项卡),名为
TURBO_TEAM
,并输入您的团队的 Vercel URL 值,不包括vercel.com/
。使用仓库变量而不是密钥可以防止 Github Actions 在日志输出中屏蔽您的团队名称。
您可以在仪表盘中,从团队的常规项目设置中找到您的团队 URL。如果您使用的是 Hobby 计划,则可以使用您的用户名。您可以在您的 Vercel 个人帐户设置 (在新标签页打开) 中找到您的用户名。
- 在您的 GitHub Actions 工作流程的顶部,为使用
turbo
的作业提供以下环境变量
# ...
jobs:
build:
name: Build and Test
timeout-minutes: 15
runs-on: ubuntu-latest
# To use Turborepo Remote Caching, set the following environment variables for the job.
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
steps:
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 2
# ...
使用 github actions/cache 缓存
以下步骤说明了如何使用 actions/cache (在新标签页打开) 在 github 上缓存您的 monorepo 工件。
- 使用
--cache-dir
标志为您的turbo build
命令提供所需的缓存输出位置
- 示例
package.json
,其中.turbo
是所需的输出目录
{
"name": "my-turborepo",
"scripts": {
"build": "turbo run build --cache-dir=.turbo",
},
"devDependencies": {
"turbo": "1.2.5"
}
}
- 使用一个步骤配置您的 github 管道,该步骤在您的 ci 文件的构建步骤之前使用
actions/cache@v3
操作。
-
确保在
actions/cache
操作中设置的path
属性与上面指定的输出位置匹配。- 在下面的示例中,
path
被设置为.turbo
。
- 在下面的示例中,
-
在
key
属性下指定当前运行的缓存键。- 在下面的示例中,我们使用运行器操作系统和 GitHub SHA 的组合作为缓存键。
-
在
restore-keys
属性下指定所需的缓存前缀模式。确保此模式在未来的 CI 运行中仍然有效。- 在下面的示例中,我们使用
${{ runner.os }}-turbo-
作为缓存键前缀模式进行搜索。这允许我们在任何后续的 CI 运行中命中缓存,即使github.sha
发生变化。
- 在下面的示例中,我们使用
-
使用
.turbo
作为选定缓存文件夹的示例ci
yaml# ... jobs: build: runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v4 - name: Cache turbo build setup uses: actions/cache@v4 with: path: .turbo key: ${{ runner.os }}-turbo-${{ github.sha }} restore-keys: | ${{ runner.os }}-turbo- - name: Setup Node.js environment uses: actions/setup-node@v4 with: node-version: 20 cache: 'npm' - name: Install dependencies run: npm install - name: Build run: npm run build # ...