refactor!: refactor client manifest to be more typesafe #291
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
# Change this if your primary branch is not main | |
- main | |
- dev | |
pull_request: | |
# Needed for nx-set-shas when run on the main branch | |
permissions: | |
actions: read | |
contents: read | |
env: | |
NX_CLOUD_DISTRIBUTED_EXECUTION: true | |
NX_CLOUD_DISTRIBUTED_EXECUTION_AGENT_COUNT: 3 # expected number of agents | |
NX_BRANCH: ${{ github.event.number || github.ref_name }} | |
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} | |
jobs: | |
main: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
name: Checkout [Pull Request] | |
if: ${{ github.event_name == 'pull_request' }} | |
with: | |
# By default, PRs will be checked-out based on the Merge Commit, but we want the actual branch HEAD. | |
ref: ${{ github.event.pull_request.head.sha }} | |
# We need to fetch all branches and commits so that Nx affected has a base to compare against. | |
fetch-depth: 0 | |
- uses: actions/checkout@v4 | |
name: Checkout [Default Branch] | |
if: ${{ github.event_name != 'pull_request' }} | |
with: | |
# We need to fetch all branches and commits so that Nx affected has a base to compare against. | |
fetch-depth: 0 | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 20 | |
- uses: pnpm/action-setup@v3 | |
name: Install pnpm | |
with: | |
version: 8 | |
run_install: false | |
- name: Get pnpm store directory | |
shell: bash | |
run: | | |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV | |
- uses: actions/cache@v3 | |
name: Setup pnpm cache | |
with: | |
path: ${{ env.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-pnpm-store- | |
# The "--stop-agents-after" is optional, but allows idle agents to shut down once the "e2e-ci" targets have been requested | |
# - run: npx nx-cloud start-ci-run --distribute-on="5 linux-medium-js" --stop-agents-after="e2e-ci" | |
- run: pnpm i --frozen-lockfile | |
- uses: nrwl/nx-set-shas@v3 | |
with: | |
main-branch-name: "dev" | |
# This line is needed for nx affected to work when CI is running on a PR | |
- name: Checkout default branch | |
if: github.ref != 'refs/heads/dev' | |
run: git branch --track dev origin/dev | |
- name: Initialize the Nx Cloud distributed CI run and stop agents when the build tasks are done | |
run: npx nx-cloud start-ci-run --stop-agents-after=build | |
- name: Run commands in parallel | |
run: | | |
pids=() | |
# list of commands to be run on main has env flag NX_CLOUD_DISTRIBUTED_EXECUTION set to false | |
NX_CLOUD_DISTRIBUTED_EXECUTION=false npx nx-cloud record -- npx nx format:check & pids+=($!) | |
# list of commands to be run on agents | |
npx nx affected -t lint,test --parallel=3 & | |
npx nx affected -t build --parallel=3 & | |
pids+=($!) | |
# run all commands in parallel and bail if one of them fails | |
for pid in ${pids[*]}; do | |
if ! wait $pid; then | |
exit 1 | |
fi | |
done | |
exit 0 | |
- name: Stop CI run | |
run: npx nx-cloud complete-ci-run | |
agents: | |
name: Agent ${{ matrix.agent }} | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
agent: [1, 2, 3] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 20 | |
- uses: pnpm/action-setup@v3 | |
name: Install pnpm | |
with: | |
version: 8 | |
run_install: false | |
- name: Get pnpm store directory | |
shell: bash | |
run: | | |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV | |
- uses: actions/cache@v3 | |
name: Setup pnpm cache | |
with: | |
path: ${{ env.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-pnpm-store- | |
- name: Install Dependencies | |
run: pnpm i --frozen-lockfile | |
- name: Start Nx Agent ${{ matrix.agent }} | |
run: npx nx-cloud start-agent | |
env: | |
NX_AGENT_NAME: ${{ matrix.agent }} |