Vercel

CircleCI

Learn how to use CircleCI with Turborepo.

The following example shows how to use Turborepo with CircleCI.

TTY on CircleCI

CircleCI uses interactive terminals (TTY) that crash Turborepo's terminal UI. To workaround this, set the TURBO_UI=false environment variable in your CircleCI configuration.

For a given root package.json:

./package.json
{
  "name": "my-turborepo",
  "scripts": {
    "build": "turbo run build",
    "test": "turbo run test"
  },
  "devDependencies": {
    "turbo": "latest"
  }
}

And a turbo.json:

./turbo.json
{
  "$schema": "https://turborepo.dev/schema.json",
  "tasks": {
    "build": {
      "outputs": [".next/**", "!.next/cache/**"],
      "dependsOn": ["^build"]
    },
    "test": {
      "dependsOn": ["^build"]
    }
  }
}

Create a file called .circleci/config.yml in your repository with the following contents:

.circleci/config.yml
version: 2.1
orbs:
  node: circleci/node@5.0.2
workflows:
  test:
    jobs:
      - test
jobs:
  test:
    docker:
      - image: cimg/node:lts
    steps:
      - checkout
      - node/install-packages
      - run:
        command: npm i -g pnpm
        environment:
          TURBO_UI: "false"
      - run:
        command: pnpm build
        environment:
          TURBO_UI: "false"
      - run:
        command: pnpm test
        environment:
          TURBO_UI: "false"
.circleci/config.yml
version: 2.1
orbs:
  node: circleci/node@5.0.2
workflows:
  test:
    jobs:
      - test
jobs:
  test:
    docker:
      - image: cimg/node:lts
    steps:
      - checkout
      - node/install-packages:
        pkg-manager: yarn
      - run:
        command: yarn build
        environment:
          TURBO_UI: "false"
      - run:
        command: yarn test
        environment:
          TURBO_UI: "false"
.circleci/config.yml
version: 2.1
orbs:
  node: circleci/node@5.0.2
workflows:
  test:
    jobs:
      - test
jobs:
  test:
    docker:
      - image: cimg/node:lts
    steps:
      - checkout
      - node/install-packages
      - run:
        command: npm run build
        environment:
          TURBO_UI: "false"

      - run:
        command: npm run test
        environment:
          TURBO_UI: "false"
.circleci/config.yml
version: 2.1
orbs:
  node: circleci/node@5.0.2
workflows:
  test:
    jobs:
      - test
jobs:
  test:
    docker:
      - image: cimg/node:lts
    steps:
      - checkout
      - node/install-packages
      - run:
        command: npm i -g bun
        environment:
          TURBO_UI: "false"
      - run:
        command: bun run build
        environment:
          TURBO_UI: "false"
      - run:
        command: bun run test
        environment:
          TURBO_UI: "false"

Remote Caching

To use Remote Caching, retrieve the team and token for the Remote Cache for your provider. In this example, we'll use Vercel Remote Cache:

  • TURBO_TOKEN - The Bearer token to access the Remote Cache
  • TURBO_TEAM - The slug of the Vercel team to share the artifacts with

To use Vercel Remote Caching, you can get the value of these variables in a few steps:

  1. Create a Scoped Access Token to your account in the Vercel Dashboard

Vercel Access Tokens

Copy the value to a safe place. You'll need it in a moment.

  1. Go to your CircleCI project settings and click on the Environment Variables tab. Create a new secret called TURBO_TOKEN and enter the value of your Scoped Access Token.

CircleCI Environment Variables CircleCI Create Environment Variables

  1. Make a second secret called TURBO_TEAM and set it to your team slug - the part after vercel.com/ in your Team URL. For example, the slug for vercel.com/acme is acme.

  2. CircleCI automatically loads environment variables stored in project settings into the CI environment. No modifications are necessary for the CI file.

9,001,168

hours

Total Compute Saved
Get started with
Remote Caching →

On this page

GitHubEdit this page on GitHub