Skip to content

Commit

Permalink
Bring over workflow and nx.json changes from skyux monorepo
Browse files Browse the repository at this point in the history
  • Loading branch information
johnhwhite committed Jan 10, 2025
1 parent 9d2752a commit 46049b8
Show file tree
Hide file tree
Showing 14 changed files with 475 additions and 305 deletions.
213 changes: 125 additions & 88 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,28 +1,30 @@
name: CI

on:
merge_group:
types: [checks_requested]
pull_request:
push:
branches:
- main
pull_request:

env:
NX_CLOUD_DISTRIBUTED_EXECUTION: false
NX_TASKS_RUNNER: local
MATRIX_SIZE: 1
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
install-deps:
name: Install and cache dependencies
if: ${{ !startsWith( github.head_ref || github.ref_name, 'release-please--' ) }}
runs-on: ubuntu-latest
outputs:
node-version: ${{ steps.setup-node.outputs.node-version }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
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
- uses: actions/setup-node@v4
id: setup-node
with:
node-version-file: '.nvmrc'
Expand All @@ -31,164 +33,199 @@ jobs:
run: node ./scripts/rebase-pr.js
- name: Cache node modules
id: cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node-${{ steps.setup-node.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }}
- name: npm install
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci
- name: Start Nx Cloud CI run
run: |
if [ $MATRIX_SIZE -gt 1 ]; then
npx nx-cloud start-ci-run
else
echo "Nx Cloud CI run not started because MATRIX_SIZE is $MATRIX_SIZE"
fi
- name: Agent list
run: |
echo 'matrix_size=${{ env.MATRIX_SIZE }}' >> $GITHUB_OUTPUT
node -e 'console.log("agents=" + JSON.stringify({ agent: Array.from(Array(${{ env.MATRIX_SIZE }}).keys()).map(i => i + 1) }))' >> $GITHUB_OUTPUT

agents:
name: Bootup Nx Cloud agent
if: needs.install-deps.outputs.matrix_size > 1
runs-on: ubuntu-latest
needs: install-deps
strategy:
matrix: ${{ fromJSON(needs.install-deps.outputs.agents) }}
matrix:
agent: [1, 2, 3]
env:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Retrieve node_modules cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node-${{ needs.install-deps.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }}
- name: Start Nx Agent ${{ matrix.agent }}
run: npx nx-cloud start-agent
if: ${{ env.NX_CLOUD_ACCESS_TOKEN }}
env:
NX_VERBOSE_LOGGING: ${{ runner.debug || '' }}

lint:
name: Lint
needs: install-deps
build-coverage-lint:
name: Build, code coverage unit tests, and linting
if: ${{ !startsWith( github.head_ref || github.ref_name, 'release-please--' ) }}
runs-on: ubuntu-latest
needs: install-deps
env:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
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
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
# Rebase must happen before installing dependencies.
- name: Rebase current branch
run: node ./scripts/rebase-pr.js
- name: Derive appropriate SHAs for base and head for `nx affected` commands
uses: nrwl/nx-set-shas@v3
- run: npx nx-cloud start-ci-run --agent-count=3 --distribute-on="manual"
if: ${{ env.NX_CLOUD_ACCESS_TOKEN }}
env:
NX_VERBOSE_LOGGING: ${{ runner.debug || '' }}
- name: Retrieve node_modules cache
uses: actions/cache@v3
uses: actions/cache/restore@v4
with:
path: node_modules
key: ${{ runner.os }}-node-${{ needs.install-deps.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }}
- name: Check library dependencies
run: npx skyux-dev check-lib-dependencies
- name: Check library missing peers
run: npx skyux-dev check-lib-missing-peers
- name: Check library resources
run: npx skyux-dev check-lib-resources
- name: Check code formatting
run: npx prettier --check .
- name: Run lint
run: npx nx affected:lint --quiet --silent --parallel=${{ env.MATRIX_SIZE }}
- uses: nrwl/nx-set-shas@v4
# Rebase must happen before installing dependencies.
- name: Rebase current branch
run: node ./scripts/rebase-pr.js
- name: Run build, lint, test, and posttest for npm packages
run: |
npx nx affected --target build lint test posttest --configuration ci --parallel 1 --exclude '*,!tag:npm'
env:
NX_VERBOSE_LOGGING: ${{ runner.debug || '' }}
- name: Run lint, test, and posttest for non-npm packages
run: |
npx nx affected --target lint test posttest --configuration ci --parallel 1 --exclude 'tag:npm'
env:
NX_VERBOSE_LOGGING: ${{ runner.debug || '' }}
- name: Stop
if: ${{ always() && env.NX_CLOUD_ACCESS_TOKEN }}
run: npx nx-cloud stop-all-agents
env:
NX_VERBOSE_LOGGING: ${{ runner.debug || '' }}

build:
name: Build
needs: build-coverage-lint
runs-on: ubuntu-latest
if: ${{ always() && !startsWith( github.head_ref || github.ref_name, 'release-please--' ) }}
steps:
- name: Run build
run: |
[ '${{ needs.build-coverage-lint.result }}' == 'success' ] && echo Built. || false
coverage:
name: Code coverage
needs: build-coverage-lint
runs-on: ubuntu-latest
if: ${{ always() && !startsWith( github.head_ref || github.ref_name, 'release-please--' ) }}
steps:
- name: Run code coverage
run: |
[ '${{ needs.build-coverage-lint.result }}' == 'success' ] && echo Code covered. || false
lint:
name: Lint
needs: build-coverage-lint
runs-on: ubuntu-latest
if: ${{ always() && !startsWith( github.head_ref || github.ref_name, 'release-please--' ) }}
steps:
- name: Run lint
run: |
[ '${{ needs.build-coverage-lint.result }}' == 'success' ] && echo Linted. || false
check-workspace:
name: Check dependencies and resources
if: ${{ !cancelled() && !startsWith( github.head_ref || github.ref_name, 'release-please--' ) }}
needs: install-deps
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
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
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
# Rebase must happen before installing dependencies.
- name: Rebase current branch
run: node ./scripts/rebase-pr.js
- name: Derive appropriate SHAs for base and head for `nx affected` commands
uses: nrwl/nx-set-shas@v3
- name: Retrieve node_modules cache
uses: actions/cache@v3
uses: actions/cache/restore@v4
with:
path: node_modules
key: ${{ runner.os }}-node-${{ needs.install-deps.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }}
- name: Build
run: npx nx affected --target=build --parallel=${{ env.MATRIX_SIZE }}
- name: Check library dependencies
run: npx skyux-dev check-lib-dependencies
- name: Check library missing peers
run: npx skyux-dev check-lib-missing-peers
- name: Check library resources
run: npx skyux-dev check-lib-resources

build-dist:
name: Build packages distribution
format:
name: Check formatting
needs: install-deps
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
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
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
# Rebase must happen before installing dependencies.
- name: Rebase current branch
run: node ./scripts/rebase-pr.js
- name: Derive appropriate SHAs for base and head for `nx affected` commands
uses: nrwl/nx-set-shas@v4
- name: Retrieve node_modules cache
uses: actions/cache@v3
uses: actions/cache/restore@v4
with:
path: node_modules
key: ${{ runner.os }}-node-${{ needs.install-deps.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }}
- name: Build packages dist
run: npx skyux-dev create-packages-dist
- name: Check code formatting
run: npx nx format:check
env:
NX_VERBOSE_LOGGING: ${{ runner.debug || '' }}

coverage:
name: Code coverage
build-dist:
name: Build packages distribution
needs: install-deps
runs-on: ubuntu-latest
if: ${{ github.event_name != 'pull_request' }}
steps:
- uses: actions/checkout@v3
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
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
# Rebase must happen before installing dependencies.
- name: Rebase current branch
run: node ./scripts/rebase-pr.js
- name: Derive appropriate SHAs for base and head for `nx affected` commands
uses: nrwl/nx-set-shas@v3
- name: Retrieve node_modules cache
uses: actions/cache@v3
uses: actions/cache/restore@v4
with:
path: node_modules
key: ${{ runner.os }}-node-${{ needs.install-deps.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }}
- name: Code coverage
run: |
npx nx affected --target=test,posttest --configuration=ci --parallel=${{ env.MATRIX_SIZE }}
- name: Build packages dist
run: npx skyux-dev create-packages-dist
- name: Notify Slack (failure)
if: ${{ failure() }}
uses: rtCamp/action-slack-notify@v2
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_COLOR: ${{ job.status }}
SLACK_MESSAGE: 'Build packages distribution step failed on branch `${{ github.ref_name }}`.'
SLACK_ICON_EMOJI: ':github:'
SLACK_USERNAME: GitHub
#cor-skyux-notifications
SLACK_CHANNEL: C01GY7ZP4HM
SLACK_FOOTER: 'Blackbaud Sky Build User'

stop-agents:
name: Stop Nx Cloud agents
runs-on: ubuntu-latest
if: needs.install-deps.outputs.matrix_size > 1
needs: [install-deps, lint, build, build-dist, coverage]
if: ${{ !cancelled() }}
needs: build-coverage-lint
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
- name: Retrieve node_modules cache
uses: actions/cache@v3
with:
path: node_modules
key: ${{ runner.os }}-node-${{ needs.install-deps.outputs.node-version }}-modules-${{ hashFiles('package-lock.json') }}
- name: Stop Nx Cloud agents
run: npx nx-cloud stop-all-agents
run: echo "🛑 ☁️ 🕵️"
4 changes: 2 additions & 2 deletions apps/playground/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"projectType": "application",
"sourceRoot": "apps/playground/src",
"prefix": "app",
"tags": [],
"targets": {
"build": {
"executor": "@angular-devkit/build-angular:browser",
Expand Down Expand Up @@ -83,6 +84,5 @@
"lint": {
"executor": "@nx/eslint:lint"
}
},
"tags": []
}
}
3 changes: 2 additions & 1 deletion libs/clipboard/.eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
"prefix": "sky",
"style": "kebab-case"
}
]
],
"@angular-eslint/prefer-standalone": "off"
}
},
{
Expand Down
7 changes: 4 additions & 3 deletions libs/clipboard/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
"projectType": "library",
"sourceRoot": "libs/clipboard/src",
"prefix": "sky",
"tags": ["component", "npm"],
"targets": {
"build": {
"executor": "@nx/angular:package",
"outputs": ["{workspaceRoot}/dist/{projectRoot}"],
"options": {
"project": "libs/clipboard/ng-package.json"
"project": "libs/clipboard/ng-package.json",
"updateBuildableProjectDepsInPackageJson": true
},
"configurations": {
"production": {
Expand Down Expand Up @@ -47,6 +49,5 @@
"lint": {
"executor": "@nx/eslint:lint"
}
},
"tags": ["component", "npm"]
}
}
3 changes: 2 additions & 1 deletion libs/code-block/.eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
"prefix": "sky",
"style": "kebab-case"
}
]
],
"@angular-eslint/prefer-standalone": "off"
}
},
{
Expand Down
Loading

0 comments on commit 46049b8

Please sign in to comment.