title | description |
---|---|
Using Turborepo with GitHub Actions |
How to use GitHub Actions with Turborepo to optimize your CI workflow |
import { Tabs, Tab } from "../../../../components/Tabs";
The following example shows how to use Turborepo with GitHub Actions.
For a given root package.json
:
{
"name": "my-turborepo",
"scripts": {
"build": "turbo run build",
"test": "turbo run test"
},
"devDependencies": {
"turbo": "1.2.5"
}
}
And a turbo.json
:
{
"$schema": "https://turbo.build/schema.json",
"pipeline": {
"build": {
"outputs": [".next/**", "!.next/cache/**"],
"dependsOn": ["^build"]
},
"test": {
"dependsOn": ["^build"]
}
},
}
Create file called .github/workflows/ci.yml
in your repository with the following contents:
<Tabs items={['npm', 'yarn', 'pnpm']} storageKey="selected-pkg-manager"> ```yaml 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@v3
with:
fetch-depth: 2
- name: Setup Node.js environment
uses: actions/setup-node@v3
with:
node-version: 16
cache: 'npm'
- name: Install dependencies
run: npm install
- name: Build
run: npm run build
- name: Test
run: npm run test
```
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 }}
steps:
- name: Check out code
uses: actions/checkout@v3
with:
fetch-depth: 2
- name: Setup Node.js environment
uses: actions/setup-node@v3
with:
node-version: 16
cache: 'yarn'
- name: Install dependencies
run: yarn
- name: Build
run: yarn build
- name: Test
run: yarn test
```
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 }}
steps:
- name: Check out code
uses: actions/checkout@v3
with:
fetch-depth: 2
- uses: pnpm/action-setup@v2.0.1
with:
version: 6.32.2
- name: Setup Node.js environment
uses: actions/setup-node@v3
with:
node-version: 16
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Build
run: pnpm build
- name: Test
run: pnpm test
```
To use Remote Caching with GitHub Actions, add the following environment variables to your GitHub Actions workflow
to make them available to your turbo
commands.
TURBO_TOKEN
- The Bearer token to access the Remote CacheTURBO_TEAM
- The account to which the monorepo belongs
To use Vercel Remote Caching, you can get the value of these variables in a few steps:
- Create a Scoped Access Token to your account in the Vercel Dashboard
Copy the value to a safe place. You'll need it in a moment.
- Go to your GitHub repository settings and click on the Secrets and then Actions tab. Create a new secret called
TURBO_TOKEN
and enter the value of your Scoped Access Token.
- Create a new repository variable (click the Variables tab) called
TURBO_TEAM
and enter the value of your team's Vercel URL without thevercel.com/
. Using a repository variable rather than a secret will keep Github Actions from censoring your team name in log output.
Your Team URL can be found inside your team's general project settings from the dashboard. If you're using a Hobby Plan, you can use your username. Your username can be found in your Vercel Personal Account Settings
- At the top of your GitHub Actions workflow, provide the following environment variables to jobs that use
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@v3
with:
fetch-depth: 2
# ...