Ci cd #17
Workflow file for this run
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: | |
- main | |
pull_request: | |
env: | |
NX_CLOUD_DISTRIBUTED_EXECUTION: true # this enables DTE | |
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 }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} # this is needed if our pipeline publishes to npm | |
jobs: | |
main: | |
name: Nx Cloud - Main Job | |
runs-on: ubuntu-latest | |
environment: | |
name: Development | |
steps: | |
- uses: actions/checkout@v3 | |
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@v3 | |
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 | |
# Set node/npm/yarn versions using volta | |
- uses: volta-cli/action@v4 | |
with: | |
package-json-path: '${{ github.workspace }}/package.json' | |
- name: Use the package manager cache if available | |
uses: actions/cache@v3 | |
with: | |
path: ~/.npm | |
key: ${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}- | |
- name: Install dependencies | |
run: npm ci | |
- name: Initialize the Nx Cloud distributed CI run | |
run: npx nx-cloud start-ci-run | |
- 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 --parallel=3 & | |
pids+=($!) | |
npx nx affected -t test --parallel=3 & | |
pids+=($!) | |
npx nx affected -t build --parallel=3 --name="${{vars.NAME}}" --devtool="${{vars.DEV_TOOL}}" --variant="${{vars.VARIANT}}" --oauth="${{secrets.OAUTH_CLIENT_ID}}" & | |
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 all running agents for this CI run | |
# It's important that we always run this step, otherwise in the case of any failures in preceding non-Nx steps, the agents will keep running and waste billable minutes | |
if: ${{ always() }} | |
run: npx nx-cloud stop-all-agents | |
agents: | |
name: Agent ${{ matrix.agent }} | |
runs-on: ubuntu-latest | |
environment: | |
name: Development | |
strategy: | |
matrix: | |
agent: [1, 2, 3] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
# Set node/npm/yarn versions using volta | |
- uses: volta-cli/action@v4 | |
with: | |
package-json-path: '${{ github.workspace }}/package.json' | |
- name: Use the package manager cache if available | |
uses: actions/cache@v3 | |
with: | |
path: ~/.npm | |
key: ${{ runner.os }}-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}- | |
- name: Install dependencies | |
run: npm ci | |
- name: Start Nx Agent ${{ matrix.agent }} | |
run: npx nx-cloud start-agent | |
env: | |
NX_AGENT_NAME: ${{ matrix.agent }} |