Configuring CI Using Circle CI and Nx

Below is an example of a Circle CI setup, building, and testing only what is affected.

.circleci/config.yml
1version: 2.1 2 3orbs: 4 nx: nrwl/nx@1.6.2 5 6jobs: 7 main: 8 docker: 9 - image: cimg/node:lts-browsers 10 steps: 11 - checkout 12 # This line enables distribution 13 # The "--stop-agents-after" is optional, but allows idle agents to shut down once the "e2e-ci" targets have been requested 14 # - run: npx nx-cloud start-ci-run --distribute-on="3 linux-medium-js" --stop-agents-after="e2e-ci" 15 - run: npm ci 16 17 - nx/set-shas 18 19 # Prepend any command with "nx-cloud record --" to record its logs to Nx Cloud 20 # This requires connecting your workspace to Nx Cloud. Run "nx connect" to get started w/ Nx Cloud 21 # - run: npx nx-cloud record -- nx format:check 22 23 # Without Nx Cloud, run format:check directly 24 - run: npx nx format:check 25 - run: npx nx affected --base=$NX_BASE --head=$NX_HEAD -t lint test build e2e-ci 26workflows: 27 build: 28 jobs: 29 - main 30

Get the Commit of the Last Successful Build

CircleCI can track the last successful run on the main branch and use this as a reference point for the BASE. The Nx Orb provides a convenient implementation of this functionality, which you can drop into your existing CI workflow. Specifically, for push commits, nx/set-shas populates the $NX_BASE environment variable with the commit SHA of the last successful run.

To understand why knowing the last successful build is important for the affected command, check out the in-depth explanation in Orb's docs.

Using CircleCI in a private repository

To use the Nx Orb with a private repository on your main branch, you need to grant the orb access to your CircleCI API. Create an environment variable called CIRCLE_API_TOKEN in the context of the project.

Caution

It should be a user token, not the project token.