Repo
文档
GitHub Actions

使用 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 远程缓存,您可以通过以下步骤获取这些变量的值

  1. Vercel 仪表盘 (在新标签页打开) 中为您的帐户创建一个范围访问令牌

Vercel Access Tokens

将该值复制到安全的地方。您稍后会用到它。

  1. 转到您的 GitHub 仓库设置,单击 **Secrets**,然后单击 **Actions** 选项卡。创建一个名为 TURBO_TOKEN 的新密钥,并输入您的范围访问令牌的值。

GitHub Secrets GitHub Secrets Create

  1. 创建一个新的仓库变量(单击 **Variables** 选项卡),名为 TURBO_TEAM,并输入您的团队的 Vercel URL 值,不包括 vercel.com/。使用仓库变量而不是密钥可以防止 Github Actions 在日志输出中屏蔽您的团队名称。

GitHub Repository Variables

您可以在仪表盘中,从团队的常规项目设置中找到您的团队 URL。如果您使用的是 Hobby 计划,则可以使用您的用户名。您可以在您的 Vercel 个人帐户设置 (在新标签页打开) 中找到您的用户名。

Vercel Account Slug

  1. 在您的 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 工件。

  1. 使用 --cache-dir 标志为您的 turbo build 命令提供所需的缓存输出位置
  • 示例 package.json,其中 .turbo 是所需的输出目录
{
  "name": "my-turborepo",
  "scripts": {
    "build": "turbo run build --cache-dir=.turbo",
  },
  "devDependencies": {
    "turbo": "1.2.5"
  }
}
  1. 使用一个步骤配置您的 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
        # ...