Compare commits
118 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6d55c78957 | |||
| 18e7ffae1a | |||
| 9cb0c1fefe | |||
| ad8950223c | |||
| 353b18564b | |||
| d03134d195 | |||
| acc3f67b53 | |||
| 37b396e187 | |||
| f6064c41c8 | |||
| 509ffc18e3 | |||
| 88a3ac3f97 | |||
| 1a68977753 | |||
| 6db8b189b6 | |||
| 77c464af05 | |||
| 57013e4aaf | |||
| 8970c347bc | |||
| dec20cad86 | |||
| 569bca7510 | |||
| 414a1642bc | |||
| d8ff6de13a | |||
| a683861e24 | |||
| 29ad261d78 | |||
| 7d2fa746ad | |||
| 9da9b4ad2e | |||
| 5049e2741e | |||
| 2634804e9d | |||
| 90b10c9638 | |||
| 544f89676a | |||
| 2fd5b4c58c | |||
| c0b7aef4d9 | |||
| e8d209519c | |||
| 56cc220091 | |||
| cc5bea5af9 | |||
| fd1f186512 | |||
| 63e96ddb3d | |||
| b32efc1267 | |||
| ece87768fe | |||
| 5e6a940caf | |||
| b2ad4fe800 | |||
| 9da2ade4c2 | |||
| adde583cf8 | |||
| 72677918a3 | |||
| ef7f7d37a5 | |||
| 7f49e636f2 | |||
| e4fb0034a4 | |||
| e31cbbdf7b | |||
| 214912db16 | |||
| aeacee8692 | |||
| 2830c340cf | |||
| 1cab59c61b | |||
| b07b0575ed | |||
| 4a22e88a3e | |||
| 3bc4365a6a | |||
| fdbec636d6 | |||
| 315c766466 | |||
| d96ce5bf89 | |||
| 4a1737b237 | |||
| 5da14f4dc4 | |||
| a4f7b96708 | |||
| 7c72733c8c | |||
| e194a00bd3 | |||
| 5336aa0725 | |||
| b50c8dbe8c | |||
| 7aca936f40 | |||
| aa3d1d821f | |||
| 7284babfcb | |||
| ed350a4088 | |||
| c8620d1853 | |||
| b61be19477 | |||
| 7e326e5352 | |||
| 7f69f278d8 | |||
| c5f658b95d | |||
| 8fac5d79da | |||
| c3ed7f9f5d | |||
| e337cb6de7 | |||
| d082cd1610 | |||
| fef174f509 | |||
| a6a81cfc33 | |||
| a45cdd6f55 | |||
| c0da413fb8 | |||
| 7fc8a62880 | |||
| 88c2529dbc | |||
| c41de4b383 | |||
| 84ed1d728e | |||
| f371a6e217 | |||
| 8d0f277520 | |||
| 6cb2af4e6f | |||
| f808ea86b0 | |||
| a714301ad0 | |||
| d59e8cc6af | |||
| 10405bcfe9 | |||
| 07c07e4e86 | |||
| 7325b9ce28 | |||
| c83dd29c3c | |||
| 399ee5b3bd | |||
| 6f9e1477d4 | |||
| 1e39ba671f | |||
| 7ead9a022f | |||
| 99cfc14893 | |||
| aa7b2b011d | |||
| 245bed7a07 | |||
| e47b45b958 | |||
| 69ec3796fe | |||
| 145fe01e3d | |||
| afe0cecb1e | |||
| 485090572c | |||
| e8ce99d234 | |||
| 46eac466de | |||
| c006e90f97 | |||
| c3f401ceda | |||
| 85bed15280 | |||
| 74777a1754 | |||
| 11fe2a700e | |||
| 926ade4270 | |||
| 7231561c92 | |||
| e458ecf2b1 | |||
| 371d20446f | |||
| 392d72e00d |
@@ -1,6 +1,7 @@
|
||||
name: 🐞 Bug Report
|
||||
description: This form is to report unexpected behavior in Nx.
|
||||
labels: ["type: bug"]
|
||||
type: Bug
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
|
||||
@@ -25,35 +25,43 @@ jobs:
|
||||
- ubuntu-latest
|
||||
- macos-latest
|
||||
node_version:
|
||||
- 20
|
||||
- 18
|
||||
- 20
|
||||
- 22
|
||||
# - 23
|
||||
exclude:
|
||||
# run just node v20 on macos
|
||||
- os: macos-latest
|
||||
node_version: 18
|
||||
- os: macos-latest
|
||||
node_version: 22
|
||||
# - os: macos-latest
|
||||
# node_version: 23
|
||||
|
||||
name: Cache install (${{ matrix.os }}, node v${{ matrix.node_version }})
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install PNPM
|
||||
run: |
|
||||
npm install -g @pnpm/exe@8
|
||||
- uses: pnpm/action-setup@v4
|
||||
name: Install pnpm
|
||||
with:
|
||||
version: 9.8.0
|
||||
run_install: false
|
||||
|
||||
- name: Set node
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node_version }}
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Cache node_modules
|
||||
id: cache-modules
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
lookup-only: true
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ matrix.node_version }}-${{ github.run_id }}
|
||||
key: ${{ runner.os }}-modules-${{ matrix.node_version }}-${{ hashFiles('pnpm-lock.yaml') }}
|
||||
|
||||
- name: Ensure Python setuptools Installed on Macos
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
@@ -71,7 +79,7 @@ jobs:
|
||||
|
||||
- name: Cache Homebrew
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
lookup-only: true
|
||||
path: ${{ steps.homebrew-cache-dir-path.outputs.dir }}
|
||||
@@ -81,7 +89,7 @@ jobs:
|
||||
|
||||
- name: Cache Cypress
|
||||
id: cache-cypress
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
lookup-only: true
|
||||
path: '${{ github.workspace }}/.cypress'
|
||||
@@ -104,8 +112,10 @@ jobs:
|
||||
- ubuntu-latest
|
||||
- macos-latest
|
||||
node_version:
|
||||
- 20
|
||||
- 18
|
||||
- 20
|
||||
- 22
|
||||
# - 23
|
||||
package_manager:
|
||||
- npm
|
||||
- yarn
|
||||
@@ -266,6 +276,106 @@ jobs:
|
||||
project: e2e-vue
|
||||
- node_version: 18
|
||||
project: e2e-webpack
|
||||
- node_version: 22
|
||||
project: e2e-angular
|
||||
- node_version: 22
|
||||
project: e2e-cypress
|
||||
- node_version: 22
|
||||
project: e2e-detox
|
||||
- node_version: 22
|
||||
project: e2e-esbuild
|
||||
- node_version: 22
|
||||
project: e2e-expo
|
||||
- node_version: 22
|
||||
project: e2e-gradle
|
||||
- node_version: 22
|
||||
project: e2e-jest
|
||||
- node_version: 22
|
||||
project: e2e-js
|
||||
- node_version: 22
|
||||
project: e2e-eslint
|
||||
- node_version: 22
|
||||
project: e2e-next
|
||||
- node_version: 22
|
||||
project: e2e-node
|
||||
- node_version: 22
|
||||
project: e2e-nuxt
|
||||
- node_version: 22
|
||||
project: e2e-nx-init
|
||||
- node_version: 22
|
||||
project: e2e-nx
|
||||
- node_version: 22
|
||||
project: e2e-plugin
|
||||
- node_version: 22
|
||||
project: e2e-playwright
|
||||
- node_version: 22
|
||||
project: e2e-react
|
||||
- node_version: 22
|
||||
project: e2e-react-native
|
||||
- node_version: 22
|
||||
project: e2e-web
|
||||
- node_version: 22
|
||||
project: e2e-remix
|
||||
- node_version: 22
|
||||
project: e2e-rollup
|
||||
- node_version: 22
|
||||
project: e2e-storybook
|
||||
- node_version: 22
|
||||
project: e2e-vite
|
||||
- node_version: 22
|
||||
project: e2e-vue
|
||||
- node_version: 22
|
||||
project: e2e-webpack
|
||||
# - node_version: 23
|
||||
# project: e2e-angular
|
||||
# - node_version: 23
|
||||
# project: e2e-cypress
|
||||
# - node_version: 23
|
||||
# project: e2e-detox
|
||||
# - node_version: 23
|
||||
# project: e2e-esbuild
|
||||
# - node_version: 23
|
||||
# project: e2e-expo
|
||||
# - node_version: 23
|
||||
# project: e2e-gradle
|
||||
# - node_version: 23
|
||||
# project: e2e-jest
|
||||
# - node_version: 23
|
||||
# project: e2e-js
|
||||
# - node_version: 23
|
||||
# project: e2e-eslint
|
||||
# - node_version: 23
|
||||
# project: e2e-next
|
||||
# - node_version: 23
|
||||
# project: e2e-node
|
||||
# - node_version: 23
|
||||
# project: e2e-nuxt
|
||||
# - node_version: 23
|
||||
# project: e2e-nx-init
|
||||
# - node_version: 23
|
||||
# project: e2e-nx
|
||||
# - node_version: 23
|
||||
# project: e2e-plugin
|
||||
# - node_version: 23
|
||||
# project: e2e-playwright
|
||||
# - node_version: 23
|
||||
# project: e2e-react
|
||||
# - node_version: 23
|
||||
# project: e2e-react-native
|
||||
# - node_version: 23
|
||||
# project: e2e-web
|
||||
# - node_version: 23
|
||||
# project: e2e-remix
|
||||
# - node_version: 23
|
||||
# project: e2e-rollup
|
||||
# - node_version: 23
|
||||
# project: e2e-storybook
|
||||
# - node_version: 23
|
||||
# project: e2e-vite
|
||||
# - node_version: 23
|
||||
# project: e2e-vue
|
||||
# - node_version: 23
|
||||
# project: e2e-webpack
|
||||
# run just npm v20 on macos
|
||||
- os: macos-latest
|
||||
package_manager: yarn
|
||||
@@ -273,6 +383,10 @@ jobs:
|
||||
package_manager: pnpm
|
||||
- os: macos-latest
|
||||
node_version: 18
|
||||
- os: macos-latest
|
||||
node_version: 22
|
||||
# - os: macos-latest
|
||||
# node_version: 23
|
||||
fail-fast: false
|
||||
|
||||
name: ${{ matrix.os_name }}/${{ matrix.package_manager }}/${{ matrix.node_version }} ${{ join(matrix.project) }}
|
||||
@@ -283,22 +397,24 @@ jobs:
|
||||
- name: Prepare dir for output
|
||||
run: mkdir -p outputs
|
||||
|
||||
- name: Install PNPM
|
||||
run: |
|
||||
npm install -g @pnpm/exe@8
|
||||
- uses: pnpm/action-setup@v4
|
||||
name: Install pnpm
|
||||
with:
|
||||
version: 9.8.0
|
||||
run_install: false
|
||||
|
||||
- name: Use Node.js ${{ matrix.node_version }}
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node_version }}
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Cache node_modules
|
||||
id: cache-modules
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ matrix.node_version }}-${{ github.run_id }}
|
||||
key: ${{ runner.os }}-modules-${{ matrix.node_version }}-${{ hashFiles('pnpm-lock.yaml') }}
|
||||
|
||||
- name: Install packages
|
||||
run: pnpm install --frozen-lockfile
|
||||
@@ -322,7 +438,7 @@ jobs:
|
||||
|
||||
- name: Cache Homebrew
|
||||
if: ${{ matrix.os == 'macos-latest' }}
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.homebrew-cache-dir-path.outputs.dir }}
|
||||
key: brew-${{ matrix.node_version }}
|
||||
@@ -331,7 +447,7 @@ jobs:
|
||||
|
||||
- name: Cache Cypress
|
||||
id: cache-cypress
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: '${{ github.workspace }}/.cypress'
|
||||
key: ${{ runner.os }}-cypress
|
||||
@@ -396,10 +512,12 @@ jobs:
|
||||
echo "$matrix" > $path
|
||||
|
||||
- name: Upload matrix config
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ always() }}
|
||||
with:
|
||||
name: outputs
|
||||
overwrite: true
|
||||
if-no-files-found: 'ignore'
|
||||
path: ${{ steps.save-matrix.outputs.path }}
|
||||
|
||||
- name: Setup tmate session
|
||||
@@ -418,7 +536,7 @@ jobs:
|
||||
codeowners: ${{ steps.process-json.outputs.CODEOWNERS }}
|
||||
steps:
|
||||
- name: Load outputs
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: outputs
|
||||
path: outputs
|
||||
|
||||
@@ -22,22 +22,24 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
node_version:
|
||||
- 20
|
||||
- 18
|
||||
- 20
|
||||
- 22
|
||||
# - 23
|
||||
|
||||
name: Cache install (node v${{ matrix.node_version }})
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- uses: pnpm/action-setup@v2
|
||||
- uses: pnpm/action-setup@v4
|
||||
name: Install pnpm
|
||||
with:
|
||||
version: 8
|
||||
version: 9.8.0
|
||||
run_install: false
|
||||
|
||||
- name: Set node
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node_version }}
|
||||
cache: 'pnpm'
|
||||
@@ -48,14 +50,15 @@ jobs:
|
||||
with:
|
||||
lookup-only: true
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ matrix.node_version }}-${{ github.run_id }}
|
||||
key: ${{ runner.os }}-modules-${{ matrix.node_version }}-${{ hashFiles('pnpm-lock.yaml') }}
|
||||
|
||||
- name: Install packages
|
||||
if: steps.cache-modules.outputs.cache-hit != 'true'
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
- name: Cache Cypress
|
||||
id: cache-cypress
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
lookup-only: true
|
||||
path: '${{ github.workspace }}/.cypress'
|
||||
@@ -74,8 +77,10 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
node_version:
|
||||
- 20
|
||||
- 18
|
||||
- 20
|
||||
- 22
|
||||
# - 23
|
||||
package_manager:
|
||||
- npm
|
||||
project:
|
||||
@@ -109,14 +114,8 @@ jobs:
|
||||
codeowners: 'S04SS457V38'
|
||||
- project: e2e-cypress
|
||||
codeowners: 'S04T16BTJJY'
|
||||
- project: e2e-detox
|
||||
codeowners: 'S04TNCNJG5N'
|
||||
- project: e2e-esbuild
|
||||
codeowners: 'S04SJ6HHP0X'
|
||||
- project: e2e-expo
|
||||
codeowners: 'S04TNCNJG5N'
|
||||
- project: e2e-gradle
|
||||
codeowners: 'S04TNCNJG5N'
|
||||
- project: e2e-jest
|
||||
codeowners: 'S04T16BTJJY'
|
||||
- project: e2e-js
|
||||
@@ -139,8 +138,6 @@ jobs:
|
||||
codeowners: 'S04SYHYKGNP'
|
||||
- project: e2e-react
|
||||
codeowners: 'S04TNCNJG5N'
|
||||
- project: e2e-react-native
|
||||
codeowners: 'S04TNCNJG5N'
|
||||
- project: e2e-web
|
||||
codeowners: 'S04SJ6PL98X'
|
||||
- project: e2e-rollup
|
||||
@@ -205,6 +202,90 @@ jobs:
|
||||
project: e2e-vue
|
||||
- node_version: 18
|
||||
project: e2e-webpack
|
||||
- node_version: 22
|
||||
project: e2e-angular
|
||||
- node_version: 22
|
||||
project: e2e-cypress
|
||||
- node_version: 22
|
||||
project: e2e-esbuild
|
||||
- node_version: 22
|
||||
project: e2e-jest
|
||||
- node_version: 22
|
||||
project: e2e-js
|
||||
- node_version: 22
|
||||
project: e2e-eslint
|
||||
- node_version: 22
|
||||
project: e2e-next
|
||||
- node_version: 22
|
||||
project: e2e-node
|
||||
- node_version: 22
|
||||
project: e2e-nuxt
|
||||
- node_version: 22
|
||||
project: e2e-nx-init
|
||||
- node_version: 22
|
||||
project: e2e-nx
|
||||
- node_version: 22
|
||||
project: e2e-plugin
|
||||
- node_version: 22
|
||||
project: e2e-playwright
|
||||
- node_version: 22
|
||||
project: e2e-react
|
||||
- node_version: 22
|
||||
project: e2e-web
|
||||
- node_version: 22
|
||||
project: e2e-remix
|
||||
- node_version: 22
|
||||
project: e2e-rollup
|
||||
- node_version: 22
|
||||
project: e2e-storybook
|
||||
- node_version: 22
|
||||
project: e2e-vite
|
||||
- node_version: 22
|
||||
project: e2e-vue
|
||||
- node_version: 22
|
||||
project: e2e-webpack
|
||||
# - node_version: 23
|
||||
# project: e2e-angular
|
||||
# - node_version: 23
|
||||
# project: e2e-cypress
|
||||
# - node_version: 23
|
||||
# project: e2e-esbuild
|
||||
# - node_version: 23
|
||||
# project: e2e-jest
|
||||
# - node_version: 23
|
||||
# project: e2e-js
|
||||
# - node_version: 23
|
||||
# project: e2e-eslint
|
||||
# - node_version: 23
|
||||
# project: e2e-next
|
||||
# - node_version: 23
|
||||
# project: e2e-node
|
||||
# - node_version: 23
|
||||
# project: e2e-nuxt
|
||||
# - node_version: 23
|
||||
# project: e2e-nx-init
|
||||
# - node_version: 23
|
||||
# project: e2e-nx
|
||||
# - node_version: 23
|
||||
# project: e2e-plugin
|
||||
# - node_version: 23
|
||||
# project: e2e-playwright
|
||||
# - node_version: 23
|
||||
# project: e2e-react
|
||||
# - node_version: 23
|
||||
# project: e2e-web
|
||||
# - node_version: 23
|
||||
# project: e2e-remix
|
||||
# - node_version: 23
|
||||
# project: e2e-rollup
|
||||
# - node_version: 23
|
||||
# project: e2e-storybook
|
||||
# - node_version: 23
|
||||
# project: e2e-vite
|
||||
# - node_version: 23
|
||||
# project: e2e-vue
|
||||
# - node_version: 23
|
||||
# project: e2e-webpack
|
||||
fail-fast: false
|
||||
|
||||
name: ${{ matrix.project }} (v${{ matrix.node_version }})
|
||||
@@ -215,21 +296,21 @@ jobs:
|
||||
- name: Prepare dir for output
|
||||
run: mkdir -p outputs
|
||||
|
||||
- uses: pnpm/action-setup@v2
|
||||
- uses: pnpm/action-setup@v4
|
||||
name: Install pnpm
|
||||
with:
|
||||
version: 8.7.4
|
||||
version: 9.8.0
|
||||
run_install: false
|
||||
|
||||
- name: Use Node.js ${{ matrix.node_version }}
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node_version }}
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Cache node_modules
|
||||
id: cache-modules
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ matrix.node_version }}-${{ github.run_id }}
|
||||
@@ -239,7 +320,7 @@ jobs:
|
||||
|
||||
- name: Cache Cypress
|
||||
id: cache-cypress
|
||||
uses: actions/cache@v3
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: '${{ github.workspace }}/.cypress'
|
||||
key: ${{ runner.os }}-cypress
|
||||
@@ -289,10 +370,12 @@ jobs:
|
||||
echo "$matrix" > $path
|
||||
|
||||
- name: Upload matrix config
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ always() }}
|
||||
with:
|
||||
name: outputs
|
||||
overwrite: true
|
||||
if-no-files-found: 'ignore'
|
||||
path: ${{ steps.save-matrix.outputs.path }}
|
||||
|
||||
- name: Setup tmate session
|
||||
@@ -311,7 +394,7 @@ jobs:
|
||||
codeowners: ${{ steps.process-json.outputs.CODEOWNERS }}
|
||||
steps:
|
||||
- name: Load outputs
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: outputs
|
||||
path: outputs
|
||||
|
||||
@@ -8,25 +8,21 @@ on:
|
||||
permissions: {}
|
||||
jobs:
|
||||
audit:
|
||||
if: ${{ github.repository_owner == 'nrwl' }}
|
||||
permissions:
|
||||
contents: read # to fetch code (actions/checkout)
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install PNPM
|
||||
run: |
|
||||
npm install -g @pnpm/exe@8
|
||||
- uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9.8.0 # Aligned with root package.json (pnpm/action-setup will helpfully error if out of sync)
|
||||
|
||||
- name: Run a security audit
|
||||
run: pnpm dlx audit-ci --critical --report-type summary
|
||||
|
||||
# - name: Run Dependency confusion supply chain check
|
||||
# run: npx snync -d .
|
||||
|
||||
report:
|
||||
if: ${{ always() && github.repository_owner == 'nrwl' && github.event_name != 'workflow_dispatch' }}
|
||||
needs: audit
|
||||
|
||||
@@ -79,12 +79,14 @@ rust-toolchain @nrwl/nx-native-reviewers
|
||||
/docs/generated/packages/js/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
|
||||
/docs/generated/packages/web/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
|
||||
/docs/generated/packages/webpack/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
|
||||
/docs/generated/packages/rspack/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
|
||||
/docs/generated/packages/esbuild/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
|
||||
/docs/generated/packages/rollup/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
|
||||
/docs/generated/packages/vite/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
|
||||
/docs/shared/packages/js/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
|
||||
/docs/shared/packages/web/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
|
||||
/docs/shared/packages/webpack/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
|
||||
/docs/shared/packages/rspack/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
|
||||
/docs/shared/packages/esbuild/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
|
||||
/docs/shared/packages/vite/** @nrwl/nx-js-reviewers @nrwl/nx-docs-reviewers
|
||||
/packages/js/** @nrwl/nx-js-reviewers
|
||||
@@ -94,6 +96,9 @@ rust-toolchain @nrwl/nx-native-reviewers
|
||||
/packages/webpack/** @nrwl/nx-js-reviewers
|
||||
/packages/webpack/src/utils/module-federation @jaysoo @Coly010
|
||||
/e2e/webpack/** @nrwl/nx-js-reviewers
|
||||
/packages/rspack/** @nrwl/nx-js-reviewers
|
||||
/packages/rspack/src/utils/module-federation @jaysoo @Coly010
|
||||
/e2e/rspack/** @nrwl/nx-js-reviewers
|
||||
/packages/esbuild/** @nrwl/nx-js-reviewers
|
||||
/e2e/esbuild/** @nrwl/nx-js-reviewers
|
||||
/packages/rollup/** @nrwl/nx-js-reviewers
|
||||
|
||||
@@ -290,6 +290,15 @@ version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "ci_info"
|
||||
version = "0.14.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "840dbb7bdd1f2c4d434d6b08420ef204e0bfad0ab31a07a80a1248d24cc6e38b"
|
||||
dependencies = [
|
||||
"envmnt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clang-sys"
|
||||
version = "1.8.1"
|
||||
@@ -460,6 +469,16 @@ version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
|
||||
|
||||
[[package]]
|
||||
name = "envmnt"
|
||||
version = "0.10.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d73999a2b8871e74c8b8bc23759ee9f3d85011b24fafc91a4b3b5c8cc8185501"
|
||||
dependencies = [
|
||||
"fsio",
|
||||
"indexmap",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "errno"
|
||||
version = "0.3.8"
|
||||
@@ -499,9 +518,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "fastrand"
|
||||
version = "2.0.1"
|
||||
version = "2.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
|
||||
checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6"
|
||||
|
||||
[[package]]
|
||||
name = "filedescriptor"
|
||||
@@ -545,6 +564,16 @@ dependencies = [
|
||||
"syn 2.0.53",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fs4"
|
||||
version = "0.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec6fcfb3c0c1d71612528825042261419d5dade9678c39a781e05b63677d9b32"
|
||||
dependencies = [
|
||||
"rustix",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fs_extra"
|
||||
version = "1.3.0"
|
||||
@@ -560,6 +589,15 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fsio"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dad0ce30be0cc441b325c5d705c8b613a0ca0d92b6a8953d41bd236dc09a36d0"
|
||||
dependencies = [
|
||||
"dunce",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "funty"
|
||||
version = "2.0.0"
|
||||
@@ -1030,6 +1068,16 @@ dependencies = [
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "1.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"hashbrown 0.12.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "inotify"
|
||||
version = "0.9.6"
|
||||
@@ -1120,9 +1168,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.155"
|
||||
version = "0.2.161"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
|
||||
checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1"
|
||||
|
||||
[[package]]
|
||||
name = "libloading"
|
||||
@@ -1147,9 +1195,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.4.13"
|
||||
version = "0.4.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
|
||||
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
@@ -1467,11 +1515,13 @@ version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"assert_fs",
|
||||
"ci_info",
|
||||
"colored",
|
||||
"crossbeam-channel",
|
||||
"crossterm",
|
||||
"dashmap",
|
||||
"dunce",
|
||||
"fs4",
|
||||
"fs_extra",
|
||||
"globset",
|
||||
"hashbrown 0.14.5",
|
||||
@@ -1496,6 +1546,7 @@ dependencies = [
|
||||
"swc_ecma_dep_graph",
|
||||
"swc_ecma_parser",
|
||||
"swc_ecma_visit",
|
||||
"tempfile",
|
||||
"thiserror",
|
||||
"tracing",
|
||||
"tracing-subscriber",
|
||||
@@ -1919,9 +1970,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "0.38.32"
|
||||
version = "0.38.38"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89"
|
||||
checksum = "aa260229e6538e52293eeb577aabd09945a09d6d9cc0fc550ed7529056c2e32a"
|
||||
dependencies = [
|
||||
"bitflags 2.6.0",
|
||||
"errno",
|
||||
@@ -2370,14 +2421,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
|
||||
|
||||
[[package]]
|
||||
name = "tempfile"
|
||||
version = "3.10.1"
|
||||
version = "3.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
|
||||
checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"fastrand",
|
||||
"once_cell",
|
||||
"rustix",
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2826,6 +2878,15 @@ dependencies = [
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.59.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
|
||||
dependencies = [
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.48.5"
|
||||
|
||||
@@ -61,13 +61,13 @@ Tasks can fail:
|
||||
Let’s see how varying a few parameters affects the probability of the CI execution failing.
|
||||
|
||||
| Number of VMS | Avg Tests per VM | Flaky Test Probability | Slow Test Probability | Broken CI Builds (Flaky) | Slow CI Builds |
|
||||
| ------------- | ---------------- | ---------------------- | --------------------- | ------------------------ | -------------- |
|
||||
| 5 | 10 | 0.1% | 0.3% | 5% | 15% |
|
||||
| 10 | 10 | 0.1% | 0.3% | 10% | 26% |
|
||||
| 50 | 10 | 0.1% | 0.3% | 39% | 78% |
|
||||
| 5 | 10 | 0.5% | 1% | 23% | 41% |
|
||||
| 10 | 10 | 0.5% | 1% | 40% | 65% |
|
||||
| 50 | 10 | 0.5% | 1% | 92% | 99% |
|
||||
| :-----------: | :--------------: | :--------------------: | :-------------------: | :----------------------: | :------------: |
|
||||
| 5 | 10 | 0.1% | 0.3% | 5% | 15% |
|
||||
| 10 | 10 | 0.1% | 0.3% | 10% | 26% |
|
||||
| 50 | 10 | 0.1% | 0.3% | 39% | 78% |
|
||||
| 5 | 10 | 0.5% | 1% | 23% | 41% |
|
||||
| 10 | 10 | 0.5% | 1% | 40% | 65% |
|
||||
| 50 | 10 | 0.5% | 1% | 92% | 99% |
|
||||
|
||||
**The result is much worse than most intuitively expect.** For instance, assuming that an **e2e test has 1 in 1000 chance (0.1%) of failing** for a flaky reason, when the number of e2e tests reaches 500, **the probability of the CI failing for a flaky reason reaches 39%**, and the vast majority of CI executions are slowed down. Note, this is an exceptionally stable test suite. The bottom part of the table is more representative of a typical e2e suite, and the CI becomes “broken” at a much smaller scale.
|
||||
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
---
|
||||
title: Better security with Personal Access Tokens
|
||||
slug: personal-access-tokens
|
||||
authors: ['Philip Fulcher']
|
||||
tags: [nx-cloud]
|
||||
cover_image: /blog/images/2024-09-05/personal-access-tokens-header.avif
|
||||
---
|
||||
|
||||
Today, Nx Cloud gets a huge upgrade to managing access to your cached artifacts
|
||||
using [Nx Replay](/ci/features/remote-cache). Previously, workspaces
|
||||
were limited to defining access tokens with read or read/write permissions for an entire workspace. With the
|
||||
introduction of _personal access tokens_, you gain much more control over access. This is a feature request we've heard
|
||||
from many customers, especially our [Enterprise](/enterprise) customers, and we're happy to be able to deliver this
|
||||
enhancement.
|
||||
|
||||
## Access Tokens and the problem of revoking access
|
||||
|
||||
Our previous implementation of access tokens required you to commit the access token to your `nx.json` file. Typically,
|
||||
service providers don't recommend committing any kind of API token like this, and we've fielded a lot of questions about
|
||||
this practice in the past. It is safe to commit this token, as access to the cached artifacts of Nx Cloud rely on both
|
||||
the access token and the source code itself. Without access to both, you can't access the cache.
|
||||
|
||||
However, this did present the following problem: revoking someone's access to the cache became difficult as long as they
|
||||
had the source code. Imagine a scenario where someone has left an organization. As long as they have a clone of the
|
||||
repo, they have everything they need to access the cache, even if their credentials have been
|
||||
revoked. To fully revoke
|
||||
their access would require cycling the access token, which could interrupt the work of other developers and CI
|
||||
pipelines.
|
||||
|
||||
## Access Tokens become CI Access Tokens
|
||||
|
||||
What we previously called "access tokens" will now be called "[CI access tokens](/ci/recipes/security/access-tokens)."
|
||||
They are still defined at the workspace
|
||||
level, but are designed for use in CI. These tokens should be set as environment variables or secrets on your CI
|
||||
platform so that they're no longer committed to your repo.
|
||||
|
||||
## What are personal access tokens?
|
||||
|
||||
[Personal access tokens](/ci/recipes/security/personal-access-tokens) are a new type of access token that is scoped to
|
||||
an individual user. This means that this token lives and dies with that member's access to your Nx Cloud workspace.
|
||||
Users must log in to Nx Cloud and they are a member of a workspace before a personal access token can be created.
|
||||
Once created, we validate that token for access each time you use the distributed cache. As soon as a user loses access,
|
||||
the personal access token no
|
||||
longer works, and access to the cache is removed.
|
||||
|
||||
This gets even more powerful when combined with the GitHub VCS integration. When a user's GitHub access is removed from
|
||||
a GitHub-connected organization, their access to Nx Cloud is removed, and their personal access token is invalidated.
|
||||
This means that Nx Cloud can fit into existing user de-provisioning processes you already have.
|
||||
|
||||
Open source teams also benefit from personal access tokens. You can configure your access to allow anonymous users to
|
||||
read from the cache, but limit read/write access to core contributors.
|
||||
|
||||
## Controlling default access
|
||||
|
||||

|
||||
|
||||
By default, a workspace that opts in to personal access tokens will allow anonymous users (users without a personal
|
||||
access token defined) read-only access. This can be changed to disallow access to the cache for anonymous users
|
||||
in your workspace settings.
|
||||
|
||||
Users with personal access tokens will have read-only access to the cache. This can be changed to enable read-write
|
||||
access in the workspace settings.
|
||||
|
||||
## Converting existing workspaces to use personal access tokens
|
||||
|
||||
Personal access tokens can be enabled with _Nx versions 13+_. These steps will get you started, but you
|
||||
can [find more details in our docs](/ci/recipes/security/personal-access-tokens).
|
||||
|
||||
1. **Convert to using `nxCloudId` by running `npx nx-cloud convert-to-nx-cloud-id`** - Previously, your `nx.json` had a
|
||||
CI
|
||||
access token defined in the `nxCloudAccessToken` property. This command will replace that with `nxCloudId`, a generic
|
||||
id that references your workspace but no longer provides access to the cache.
|
||||
2. **Generate a personal access token by running `npx nx-cloud login`** - Follow the directions in your terminal to log
|
||||
in
|
||||
to Nx Cloud. Each contributor with access to the workspace will need to complete this step.
|
||||
3. **Move CI access tokens to environment variables** - Now that the access token is no longer committed to your
|
||||
`nx.json`,
|
||||
you'll need to provide that CI access token via the
|
||||
`NX_CLOUD_ACCESS_TOKEN` [environment variable](/ci/reference/env-vars#nxcloudaccesstoken).
|
||||
4. **_Optional_ Disable anonymous access** - By default, anyone without a personal access token will have read-only
|
||||
access
|
||||
to your cached artifacts. Once everyone has a personal access token defined, you can disable this anonymous access in
|
||||
your Nx Cloud workspace settings.
|
||||
|
||||
[Learn more about using personal access tokens](/ci/recipes/security/personal-access-tokens)
|
||||
|
||||
## Learn more
|
||||
|
||||
- [Nx Docs](/getting-started/intro)
|
||||
- [Nx Cloud Cache Security](/ci/concepts/cache-security)
|
||||
- [Nx Cloud Personal Access Tokens](/ci/recipes/security/personal-access-tokens)
|
||||
- [Nx Cloud CI Access Tokens](/ci/recipes/security/access-tokens)
|
||||
- [X/Twitter](https://twitter.com/nxdevtools) -- [LinkedIn](https://www.linkedin.com/company/nrwl/)
|
||||
- [Nx GitHub](https://github.com/nrwl/nx)
|
||||
- [Nx Official Discord Server](https://go.nx.dev/community)
|
||||
- [Nx Youtube Channel](https://www.youtube.com/@nxdevtools)
|
||||
- [Speed up your CI](https://nx.app/)
|
||||
@@ -6,6 +6,12 @@ tags: [nx, release]
|
||||
cover_image: /blog/images/evolving-nx/thumbnail.png
|
||||
---
|
||||
|
||||
_Update from Jeff Cross, October 17, 2024_
|
||||
|
||||
In my original version of this post, I said that Powerpack is completely new functionality. I mistakenly thought that all custom remote cache solutions were using private/unsupported APIs, but I've since learned that we've had docs and some APIs that helped people build their own remote caches. I'm sorry for the error, and have updated the text to indicate that Powerpack is mostly new functionality. We've also updated the [Powerpack page](/powerpack) to make it more explicit how some teams can get free Powerpack licenses.
|
||||
|
||||
---
|
||||
|
||||
Over the years, Nx has grown from a small 20% side project of our consulting business into a tool that empowers millions of developers worldwide and helps Fortune 500 companies ship high-quality software faster. In the last two years, we successfully transformed our consulting business into a product company, where our team can fully focus on evolving Nx and building Nx Cloud to extend Nx’s capabilities beyond local development.
|
||||
|
||||
This success is in large part thanks to:
|
||||
@@ -21,7 +27,7 @@ When we have new ideas to make Nx better, we’ve always had two options: it cou
|
||||
|
||||
> If you want to get into the technical details, we wrote a separate blog post diving deeper into the technical details: [Introducing Nx Powerpack](/blog/introducing-nx-powerpack).
|
||||
|
||||
Everything in Powerpack is new functionality, not previously free features that we’re now putting behind a paywall. However, this change coincides with some Nx improvements that will eventually interfere with users who were relying on our original filesystem-based implementation of local caching. We’ve completely rewritten Nx's local caching to be faster and more secure, partly by using a local database instead of checking the filesystem for artifact metadata. With this rewrite, any custom remote caches that rely on metadata reflected in the filesystem will not work as of Nx 21. This is why we decided to build an API into Powerpack to be able to connect Nx’s cache to different clouds and data sources. Now with Powerpack, teams can use an officially-supported implementation of remote caching, without needing to use Nx Cloud.
|
||||
Powerpack is mostly new functionality. However, this change coincides with some Nx improvements that will eventually interfere with users who were relying on our original filesystem-based implementation of local caching. We’ve completely rewritten Nx's local caching to be faster and more secure, partly by using a local database instead of checking the filesystem for artifact metadata. With this rewrite, any custom remote caches that rely on metadata reflected in the filesystem will not work as of Nx 21. This is why we decided to build an API into Powerpack to be able to connect Nx’s cache to different clouds and data sources. Now with Powerpack, teams can use an officially-supported implementation of remote caching, without needing to use Nx Cloud.
|
||||
|
||||
There’s a Steve Jobs quote that I think rings true with all of us at Nx:
|
||||
|
||||
@@ -45,7 +51,7 @@ Are you a startup? If these features make sense for your team but the cost is a
|
||||
|
||||
## Got Questions?
|
||||
|
||||
If you’re curious to learn more about these changes for Nx and how to get started, [check out our docs](/features/powerpack).
|
||||
If you’re curious to learn more about these changes for Nx and how to get started, [check out our docs](/nx-enterprise/powerpack).
|
||||
|
||||
## Learn more
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@ A dedicated `nx sync` command automatically synchronizes these definitions to a
|
||||
...
|
||||
```
|
||||
|
||||
Read all about how to [configure Codeowners for your project in our docs](/features/powerpack/owners).
|
||||
Read all about how to [configure Codeowners for your project in our docs](/nx-enterprise/powerpack/owners).
|
||||
|
||||
## Self-hosted Cache Storage
|
||||
|
||||
@@ -178,7 +178,7 @@ jobs:
|
||||
|
||||
Similarly you can **set up network file based caching** using the `nx add @nx/powerpack-shared-fs-cache` package and by setting the `cacheDirectory` path in your `nx.json`.
|
||||
|
||||
Read all about how to [set up S3 or network drive based caching for your Nx workspace in our docs](/features/powerpack/custom-caching).
|
||||
Read all about how to [set up S3 or network drive based caching for your Nx workspace in our docs](/nx-enterprise/powerpack/custom-caching).
|
||||
|
||||
## Workspace Conformance (Beta)
|
||||
|
||||
@@ -245,7 +245,7 @@ You can then run `nx conformance` to execute the conformance checks:
|
||||
|
||||
In this first preview release, you'll only be able to run workspace conformance rules on a single workspace. In future iterations, you **will be able to connect it to your existing Nx Cloud organization**, allowing you to upload conformance rules and run them across connected workspaces.
|
||||
|
||||
Read all the details on how to [get started with workspace conformance rules in our docs](/features/powerpack/conformance).
|
||||
Read all the details on how to [get started with workspace conformance rules in our docs](/nx-enterprise/powerpack/conformance).
|
||||
|
||||
## Learn More
|
||||
|
||||
|
||||
@@ -4,9 +4,18 @@ slug: announcing-nx-20
|
||||
authors: [Mike Hartington]
|
||||
tags: [nx, release]
|
||||
cover_image: /blog/images/2024-10-03/nx-20-header.png
|
||||
youtubeUrl: https://youtu.be/5-QwtlhaJK8
|
||||
---
|
||||
|
||||
I know it's hard to believe but Nx 20 is here! There's a lot to cover in this release, so let's just dive right in.
|
||||
I know it's hard to believe but Nx 20 is here! There's a lot of great updates in this release, but look back at some of the major features from Nx 19:
|
||||
|
||||
- Added [`nx import`][nx-import] to import existing external projects, more on that below.
|
||||
- Added a [generator][crystalize-command] to convert all your Nx Plugins to use inferred tasks.
|
||||
- Moved to [rspack][nx-rspack] as the default bundler for Module Federation
|
||||
- Added [file-based versioning][file-based-versioning] for Nx Release
|
||||
- Created a new [plugin for Gradle][nx-gradle] and support for [task atomization][gradle-atomizer]
|
||||
|
||||
With Nx 20 we're keeping the momentum going and bringing some quality improvements to the overall monorepo experience as well as a boost in speed for TypeScript projects.
|
||||
|
||||
## `@nx` All The Things!
|
||||
|
||||
@@ -14,27 +23,32 @@ If you've been around the Nx ecosystem for any amount of time, you're probably a
|
||||
|
||||
## TypeScript Project References For Monorepos
|
||||
|
||||
[**Project References**](https://www.typescriptlang.org/docs/handbook/project-references.html) allows TypeScript to process individual projects rather than the entire monorepo as whole. This is a huge improvement in terms of build times and developer experience. However, Project References comes with a maintenance cost, as it is up to you to update these references. In a large monorepo, this cost is prohibitive.
|
||||
[**Project References**](https://www.typescriptlang.org/docs/handbook/project-references.html) allows TypeScript to process individual projects rather than the entire monorepo as a whole. This is a huge improvement in terms of build times and developer experience. However, Project References comes with a maintenance cost, as it is up to you to update these references. In a large monorepo, this cost is prohibitive.
|
||||
|
||||
With Nx 20, when using `create-nx-workspace --preset=ts`, workspaces will use Project References out of the box. Nx removes the maintenance cost of this feature by automatically updating the references for you when you run `build` or `typecheck` targets. You can also run [`nx sync`](/reference/nx-commands#sync) to update references, and `nx sync:check` in CI to validate the workspace.
|
||||
With Nx 20, when using `create-nx-workspace --preset=ts`, workspaces will use Project References out of the box. Nx removes the maintenance cost of this feature by automatically updating the references for you when you run `build` or `typecheck` targets. You can also run [`nx sync`](/reference/nx-commands#sync) to update project references in your `tsconfig.json`, and `nx sync:check` in CI to validate the workspace.
|
||||
|
||||
In addition to adopting Project References, we're also changing the way we link projects in a TypeScript monorepos. **Workspaces** is the standard way to link packages in monorepos. This is a feature that all modern package managers support, such as [npm](https://docs.npmjs.com/cli/using-npm/workspaces), [yarn](https://yarnpkg.com/features/workspaces), [pnpm](https://pnpm.io/workspaces), and [bun](https://bun.sh/docs/install/workspaces), so taking advantage of it is a no-brainer. Now we have a proper way to provide type information and have your packages available in a way developers are used to.
|
||||
In addition to adopting Project References, we're also changing the way we link projects in a TypeScript monorepos. **Workspaces** is the standard way to link packages in monorepos. This is a feature that all modern package managers support, such as [npm](https://docs.npmjs.com/cli/using-npm/workspaces), [yarn](https://yarnpkg.com/features/workspaces), [pnpm](https://pnpm.io/workspaces), and [bun](https://bun.sh/docs/install/workspaces), where you can declare a `workspace` key in your `package.json` and provide it an array of paths. Then on install, your package manager will traverse any directories that it finds in the workspaces key, and link them to your `node-modules`. This built in feature provides a much more standard way of connecting your packages in a monorepo that it’s a no-brainer. Now we have a proper way to provide type information and have your packages available in a way developers are used to.
|
||||
|
||||
Note that we've enabled Project References and Workspaces for the TS preset (i.e. `--preset=ts`), and we're working on extending this support for all other presets soon (Angular, React, Vue, Node). If you are an existing Nx user and want to create an empty workspace in the previous "integrated" style, you can use `create-nx-workspace --preset=apps`.
|
||||
|
||||
## `@nx/rspack` Graduates From Labs 🎓
|
||||
|
||||
[Rspack][rspack] has become one of the most exciting new bundlers in recent years. With a webpack-compatible API, it's a painless migration for folks who want faster builds without having to rewrite their entire build process. At Nx, we're big fans of Rspack and have been working on a plugin for folks who would like to migrate. With that in mind, the `@nx/rspack` plugin has officially been merged into the main Nx repository and will become a fully supported plugin for the ecosystem.
|
||||
[Rspack][rspack] has become one of the most exciting new bundlers in recent years. With a webpack-compatible API, it's a painless migration for folks who want faster builds without having to rewrite their entire build process. At Nx, we're big fans of Rspack and have been working on a plugin for folks who would like to migrate. With that in mind, the `@nx/rspack` plugin has officially been merged into the main Nx repository and will become a fully supported plugin for the ecosystem. Want to learn more about Rspac in general? Check out our recent live stream where we deep dive into how to use Rspack and cover it’s involvement with module federation.
|
||||
|
||||
{% youtube
|
||||
src="https://www.youtube.com/watch?v=_c4zjYm0pYE"
|
||||
title="Nx Live | Rspack"
|
||||
/%}
|
||||
|
||||
In addition to this, Nx core team member [Colum Ferry][colum] has taken the work he's done on the Rspack plugin and brought it to the Angular ecosystem! He's recently released `@ng-rspack/nx` to bring Rspack support to your Angular projects. Simply install the plugin and generate a new app in your workspace to try it out!
|
||||
|
||||
```bash
|
||||
```shell
|
||||
# In an Nx Workspace (npx create-nx-workspace)
|
||||
# Install Package
|
||||
npm install @ng-rspack/nx
|
||||
|
||||
# Run the app generator
|
||||
npx nx g @ng-rspack/nx: app apps/myapp
|
||||
npx nx g @ng-rspack/nx:app apps/myapp
|
||||
|
||||
# Serve the app
|
||||
npx nx serve myapp
|
||||
@@ -46,6 +60,19 @@ npx nx build myapp
|
||||
npx nx e2e myapp-e2e
|
||||
```
|
||||
|
||||
## ESLint v9 Updates
|
||||
|
||||
In [Nx 19.8](/blog/nx-19-8-update#new-nx-workspaces-created-with-eslint-v9), we highlighted that workspaces will now be created with [`eslint`](https://www.npmjs.com/package/eslint) v9, and [`typescript-eslint`](https://www.npmjs.com/package/typescript-eslint) v8.
|
||||
|
||||
This not only brings us inline with the latest version of eslint and typescript-eslint, but also that [flat config](https://eslint.org/docs/latest/use/configure/migration-guide) is only supported moving forward. Nx users should migrate to this new config format using [our flat config generator](/recipes/tips-n-tricks/flat-config#switching-to-eslints-flat-config-format).
|
||||
|
||||
For more on eslint's flat config, and how to use our generator to get to flat config checkout this video:
|
||||
|
||||
{% youtube
|
||||
src="https://www.youtube.com/watch?v=32XH909CZrY"
|
||||
title="ESLint Config Automation With Nx"
|
||||
/%}
|
||||
|
||||
## Nx Release: More Powerful And Flexible Versioning
|
||||
|
||||
`nx release` has added many powerful versioning capabilities since it was first made public as part of Nx 19. We are super excited about an in progress ground-up reworking of our versioning logic that powers `nx release` and the programmatic API `releaseVersion()` that will continue to support all these features, and allow for even more complex and large scale workspaces to be supported.
|
||||
@@ -56,6 +83,26 @@ Additionally, for workspaces that contain multiple different programming languag
|
||||
|
||||
The Nx Team provides the JavaScript version generator out of the box, so for many users, this is not a concern. But for those working with Go, Rust, Dotnet, Java etc, currently a lot of logic needs to be reimplemented and kept up to date with the latest features. In the upcoming versioning rework, the abstraction required for each new language/ecosystem is tiny and purely deals with interacting with the relevant manifest file and registry, if applicable. All feature capabilities are maintained on the Nx core side. Once this new versioning implementation is available in an Nx v20 minor release we will update our documentation to provide guidance on how to opt in, before it ultimately becomes the primary implementation in Nx v21.
|
||||
|
||||
## Importing Existing Projects
|
||||
|
||||
Another important feature worth highlighting with Nx 20 is the ability to import external projects and add them to your Nx workspace with `nx import`. Not only does `nx import` ease the process of consolidating separate projects into one monorepo, it also maintains that original projects git history. Now you have the full historical context of that particular project. In addition to just being able to bring in external projects, `nx import` will also analyze the project and provide recommended Nx plugins to be added to your workspace. So if you're importing a Vite project that also has ESLint, `nx import` will detect the config files and suggest installing them into your workspace. So not only is migrating to a monorepo simpler, you can keep your existing tool chain and keep working with a setup you are familiar with. Get a glance of how import works in a past live stream and be on the lookout for more on import in the future.
|
||||
|
||||
{% youtube
|
||||
src="https://youtu.be/8ljemsNT21c?t=2632"
|
||||
title="Nx Import Preview"
|
||||
/%}
|
||||
|
||||
## Caching - Now With Databases
|
||||
|
||||
Caching is a big feature of Nx and is one of many reasons why we can have such a fast build time. But our approach to caching has historically been lacking for a bit. Prior to Nx 20, we utilized a file-based caching system where the build results were written to disk and were read from disk when any subsequent builds were performed. This solution could lead to some performance issues if the cached output was rather large, leading to the build process needing to wait for any output to be loaded from the cache. In Nx 20, we've adopted a database-driven solution for caching your results. Not only is this a faster mechanism for caching, but it's a much more robust solution than simply reading/writing from a directory. We can make sure that as your monorepo scales, the caching portion does not become a bottleneck. While the new database caching solution is the default for Nx 20, you can opt-out by setting `useLegacyCache` in your `nx.json`
|
||||
|
||||
```json {% fileName="nx.json" %}
|
||||
{
|
||||
"useLegacyCache": true,
|
||||
"namedInputs": {...}
|
||||
}
|
||||
```
|
||||
|
||||
## So Long Derived Directories 👋
|
||||
|
||||
Generating apps and libraries in a monorepo is something folks do quite regularly and part of that is telling Nx where it should put things. So you've probably seen this prompt before:
|
||||
@@ -66,10 +113,34 @@ This is where the concept of derived directories comes in. It will try to inspec
|
||||
|
||||
## Wrapping Up
|
||||
|
||||
There's a lot more in Nx 20, so be sure to check the full changelog for all the details on everything in this major release.
|
||||
Updating Nx and its plugins is easy as we ship an [automated migration command][migration-step].
|
||||
|
||||
- [Nx 20 Changelog](/changelog)
|
||||
{% youtube
|
||||
src="https://www.youtube.com/watch?v=A0FjwsTlZ8A"
|
||||
title="Nx Automatic Migrations"
|
||||
/%}
|
||||
|
||||
```shell
|
||||
npx nx migrate latest
|
||||
npx nx migrate --run-migrations
|
||||
```
|
||||
|
||||
There's a lot more in Nx 20, so be sure to check the full changelog for all the details on everything in this major release and any of our past releases.
|
||||
|
||||
- [Nx 20.0 Changelog](/changelog#20.0.0)
|
||||
- [Nx 19.8 Changelog](/changelog#19.8.0)
|
||||
- [Nx 19.7 Changelog](/changelog#19.7.0)
|
||||
- [Nx 19.6 Changelog](/changelog#19.6.0)
|
||||
- [Nx 19.5 Changelog](/changelog#19.5.0)
|
||||
- [Nx 19.0 Changelog](/changelog#19.0.0)
|
||||
|
||||
[rspack]: https://rspack.dev
|
||||
[rescope]: /deprecated/rescope
|
||||
[colum]: https://x.com/FerryColum
|
||||
[gradle-atomizer]: /blog/nx-19-5-adds-stackblitz-new-features-and-more#experimental-gradle-test-atomization
|
||||
[nx-gradle]: /blog/nx-19-release#new-plugin-nxgradle
|
||||
[file-based-versioning]: /recipes/nx-release/file-based-versioning-version-plans
|
||||
[nx-rspack]: /nx-api/rspack
|
||||
[crystalize-command]: /blog/nx-19-8-update#crystalize-your-entire-workspace-in-one-command
|
||||
[nx-import]: /recipes/adopting-nx/import-project
|
||||
[migration-step]: /features/automate-updating-dependencies
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
---
|
||||
title: Improve your architecture and CI pipeline times with Nx projects
|
||||
slug: improve-architecture-and-ci-times-with-projects
|
||||
authors: [Philip Fulcher]
|
||||
tags: [nx, enterprise]
|
||||
cover_image: '/blog/images/2024-10-25/header.avif'
|
||||
---
|
||||
|
||||
When adopting monorepos and Nx, it can feel like there's a lot that needs to be understood first before you get all the benefits. Oftentimes it's tempting to skip some fundamentals and just add all your code into one monorepo and call it a day. Following this mentality is the best way to actually _increase_ your CI run times and cost. Monorepos should simplify your architecture and reduce costs, not cause you to spend more money and time to build, test, and deploy. To make this possible, following a simple restructure of multiple applications and investing time and effort into setting up your monorepo can pay off in the long run. But what does this ideal structure look like, and what are the benefits?
|
||||
|
||||
## Real World Example
|
||||
|
||||

|
||||
|
||||
While it's easy to say this architectural approach is better, it does help to highlight cases where other teams have faced this very challenge. A major sports retailer in the US made the switch to monorepos powered by Nx and faced several challenges. Their project structure had a massive amount of code duplication across all of the apps in monorepo. When measuring their initial migration, they had an average **CI run time of an hour** and a **cache hit rate of under 20%**. We worked with this team and were able to guide them along their migration to figure out where they could make the biggest impact. After investing in this effort, they've been able to cut their CI run times down to **7-9 minutes** and with a **cache hit rate of 57%**. This significant improvement can all be traced back to following best practices.
|
||||
|
||||
## Projects All The Way Down
|
||||
|
||||
In our sports retailer monorepo, let’s consider that we have three apps for different parts of our frontend. In a worst case scenario, we bring all these apps together, configure their CI pipelines, and call it a day. This bare minimum, while it does give us a monorepo, it does not provide any real substantial value outside of dependencies being matched across the apps. As we start to add more and more to the monorepo, we'll see our CI run times start to increase. Anytime we try to cut a release, we'll be left waiting longer and longer. So what's the solution here?
|
||||
|
||||
Let's say we have some code in our app that exists in all three of our apps that is copied across all of them. When your PR hits CI, this portion of code is built, tested, and linted in every place that it is copied, which is unnecessary. One block of shared code won't fix our CI pipeline times, but it will set us on the correct path. The solution is to start migrating portions that are common across any apps in a monorepo into its own project that we can import.
|
||||
|
||||
Splitting this code out with Nx is as simple as generating a new project and migrating that code over. So this:
|
||||
|
||||
```text
|
||||
monorepo/
|
||||
└── apps/
|
||||
├── storefront/
|
||||
├── internal-dash/
|
||||
└── support-dash/
|
||||
```
|
||||
|
||||
Becomes this:
|
||||
|
||||
```text
|
||||
monorepo/
|
||||
├── apps/
|
||||
│ ├── storefront/
|
||||
│ ├── internal-dash/
|
||||
│ └── support-dash/
|
||||
└── libs/
|
||||
└── date-time-utils/
|
||||
```
|
||||
|
||||

|
||||
|
||||
This small change will now allow Nx to cache the task results of our `date-time-utils`. That way, when we attempt to build, test, or lint our apps, Nx will simply provide the cached results if the project hasn't been changed. As we migrate more and more of our code into their own projects, the caching features become more and more impactful.
|
||||
|
||||
Splitting our shared utilities seems like a very reasonable first step, but we can take this further by actually splitting any UI features into their own projects. This is helpful if we've standardized around a particular frontend framework, then sharing those components across any number of apps becomes trivial. A secondary aspect of this is now we can ensure consistency across our UI design all while reducing our build times further down.
|
||||
|
||||
## Projects aren't just for shared code
|
||||
|
||||
Shared libraries often make sense as a first attempt at optimizing monorepo architecture because it mirrors what we see in a multirepo approach. Grouping code that's used in multiple places into a single reusable library scratches that engineering itch to be DRY. But shared code is not the only code that should be in projects in a monorepo. Applications themselves can also be broken down into projects.
|
||||
|
||||
Why? Caching and parallelization of tasks happens at the **project** level. Dividing code into logical pieces and separating it into separate projects allow us to:
|
||||
|
||||
- **Run tasks faster** - Running tasks on smaller projects = faster run times
|
||||
- **Cache more results** - Making changes to smaller projects results in fewer affected projects = running fewer tasks in CI
|
||||
|
||||
Imagine this application has three routes:
|
||||
|
||||
```text
|
||||
storefront/
|
||||
├── product-search
|
||||
├── product-details
|
||||
└── checkout
|
||||
```
|
||||
|
||||
If we leave this application as-is, we build, test, and lint this entire application any time we make a change.
|
||||
|
||||
If we instead break these routes into their own projects:
|
||||
|
||||
```text
|
||||
monorepo/
|
||||
├── libs/
|
||||
│ shared
|
||||
│ │ └──date-time-utils/
|
||||
│ └──storefront/
|
||||
│ ├──product-search/
|
||||
│ ├──product-details/
|
||||
│ └──checkout
|
||||
└── apps/
|
||||
├── storefront/
|
||||
├── internal-dash/
|
||||
└── support-dash/
|
||||
```
|
||||
|
||||

|
||||
|
||||
The routes exist as projects which are then imported by the application. We can now lint and test the app and those routes individually. If we make a change to one route, we don't have to lint and test the other routes.
|
||||
|
||||
## Improve Your Builds, Talk With Us
|
||||
|
||||
Adopting a monorepo powered by Nx on its own does not solve build speeds or CI pipeline times. But adopting a monorepo and taking the time to reevaluate your architecture can lead to a significant improvement in build times when best practices are applied. If you're curious to know more, reach out to us to see how Nx can improve your monorepo experience and ship faster!
|
||||
|
||||
{% call-to-action title="Explore Nx Cloud for Enterprises" url="/enterprise" icon="nxcloud" description="Learn more about our offerings for enterprises and contact our team" %} Explore Nx Cloud for Enterprises {% /call-to-action %}
|
||||
|
||||
## Further reading
|
||||
|
||||
- [Project size in monorepos](/concepts/decisions/project-size)
|
||||
- [Folder structure for project](/concepts/decisions/folder-structure)
|
||||
- [Defining dependency rules between projects](/concepts/decisions/project-dependency-rules)
|
||||
@@ -0,0 +1,89 @@
|
||||
---
|
||||
title: Import External Projects to Your Nx Monorepo With `nx import`
|
||||
slug: nx-import
|
||||
authors: [Zack DeRose]
|
||||
tags: [nx]
|
||||
cover_image: '/blog/images/2024-10-29/nx-import-thumbnail.avif'
|
||||
youtubeUrl: https://youtu.be/hnbwoV2-620
|
||||
---
|
||||
|
||||
- [The Need](#the-need)
|
||||
- [How It Works](#how-it-works)
|
||||
- [`git` History ✅; Selective `git` History ✅](#git-history-selective-git-history)
|
||||
- [Resources And More](#resources-and-more)
|
||||
|
||||
## The Need
|
||||
|
||||
One of the larger and more frequent asks we've gotten through the years at Nx is for the ability to import other repos (and projects from other repos) into an organization's monorepo. And that's understandable.
|
||||
|
||||
The [benefits of monorepos](https://monorepo.tools/) are immense, and over time we've seen more and more organizations and developers in the wider community gravitate towards monorepos as a way of managing codebases that are broader and more complex.
|
||||
|
||||
However, while we've always had a great story for starting up a fresh monorepo from scratch, the ability to easily import other existing projects has become more and more in demand as organizations have warmed to the idea of monorepos - and like we said, it's understandable. Once you get a taste of how much better things get in a monorepo, you tend to want to bring in all the things!
|
||||
|
||||
Prior to this work, it was always possible to do manually - but it takes some finessing both in terms of copying/pasting files over, and (as we'll see later) maintaining combining git history from the old project into its new home.
|
||||
|
||||
We always wanted to make this better - and now, we've now added a new top-level command to Nx specifically to address this: [`nx import`](http://localhost:4200/nx-api/nx/documents/import).
|
||||
|
||||
## How It Works
|
||||
|
||||
Here's how it works:
|
||||
|
||||
```shell
|
||||
nx import ../my-side-project
|
||||
```
|
||||
|
||||
Simply provide either a path to the repo that you want to import from to the CLI, or if you want to import from a central repository - for example from GitHub, you can provide the URL of the repo as the command-line argument. This will take you through some interactive prompts. For this example I'm importing the project `promise-pool`, located on my local disk at `/my-side-project/projects/promise-pool`.
|
||||
|
||||
Here are those interactive prompts:
|
||||
|
||||
```shell
|
||||
nx import ../example-ts-monorepo --dry-run
|
||||
|
||||
NX Nx will walk you through the process of importing code from the source repository into this repository:
|
||||
|
||||
1. Nx will clone the source repository into a temporary directory
|
||||
2. The project code from the sourceDirectory will be moved to the destinationDirectory on a temporary branch in this repository
|
||||
✔ Filtered git history to only include files in packages/promise-pool
|
||||
✔ /Users/zackderose/example-ts-monorepo has been prepared to be imported into this workspace on a temporary branch: __nx_tmp_import__/main in /private/var/folders/r2/7dj0tnbd1174yxxj18nhl5v40000gn/T/nx-import/repo
|
||||
✔ Fetched __nx_tmp_import__/main from __tmp_nx_import__
|
||||
✔ Merged files and git history from main from /Users/zackderose/example-ts-monorepo into libs/promise-pool
|
||||
✔ Cleaned up temporary files and remotes
|
||||
```
|
||||
|
||||
Following this, Nx will prompt you to install any relevant Nx plugins that it can detect from the incoming project if they are missing!
|
||||
|
||||
```shell
|
||||
Add these Nx plugins to integrate with the tools used in your workspace.
|
||||
|
||||
? Which plugins would you like to add? Press <Space> to select and <Enter> to submit. …
|
||||
✔ @nx/eslint
|
||||
✔ @nx/vite
|
||||
✔ @nx/playwright
|
||||
```
|
||||
|
||||
Following this step, we're essentially good-to-go, though in a real life scenario you're likely 90-95% of the way there. There may be some final finessing required in terms of merging CI pipelines and etc. - things that we can't really automate away!
|
||||
|
||||
## `git` History ✅; Selective `git` History ✅
|
||||
|
||||
One thing you may have missed in the example was this line here when the `nx import` command was running:
|
||||
|
||||
```shell
|
||||
⠋ Filtering git history to only include files in packages/promise-pool (this might take a few minutes -- install git-filter-repo for faster performance)
|
||||
```
|
||||
|
||||
As mentioned earlier, `nx import` WILL preserve the git history of your incoming project, merging it in with your monorepo's git history.
|
||||
|
||||
But as an extra feature - in the case like the example we were looking at (only importing one package from the `my-side-project` repo), `nx import` will automate a filtering of the git history of the incoming project, to ONLY match for commits that involved the projects being imported! We've found this feature to be especially helpful for our enterprise-level users who are importing a project from their legacy codebase into their Nx Workspace!
|
||||
|
||||
## Resources And More
|
||||
|
||||
For more on `nx import` be sure to check out our [recipe for using `nx import`](/recipes/adopting-nx/import-project), and as always, you can find more help:
|
||||
|
||||
- In the [Nx Docs](/getting-started/intro)
|
||||
- On our [Nx Official Discord Server](https://go.nx.dev/community)
|
||||
|
||||
And you can keep up with us:
|
||||
|
||||
- On our [Nx Youtube Channel](https://www.youtube.com/@nxdevtools)
|
||||
- On [X/Twitter](https://twitter.com/nxdevtools) -- [LinkedIn](https://www.linkedin.com/company/nrwl/)
|
||||
- And on the [Nx GitHub](https://github.com/nrwl/nx)
|
||||
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 709 KiB |
|
Before Width: | Height: | Size: 478 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 811 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 35 KiB |
@@ -1,4 +1,9 @@
|
||||
# Nx 20
|
||||
# [Nx 20.0 Blogpost](/blog/announcing-nx-20)
|
||||
|
||||
{% youtube
|
||||
src="https://youtu.be/5-QwtlhaJK8"
|
||||
title="Announcing... Nx 20!!!"
|
||||
width="100%" /%}
|
||||
|
||||
## Features
|
||||
|
||||
|
||||
@@ -14,7 +14,17 @@
|
||||
"originalFilePath": "shared/packages/powerpack-conformance/powerpack-conformance-plugin"
|
||||
}
|
||||
],
|
||||
"executors": [],
|
||||
"executors": [
|
||||
{
|
||||
"description": "Compile and bundle an Nx Conformance Rule",
|
||||
"file": "external-generated/packages/powerpack-conformance/executors/bundle-rule.json",
|
||||
"hidden": false,
|
||||
"name": "bundle-rule",
|
||||
"originalFilePath": "/libs/nx-packages/powerpack-conformance/src/executors/bundle-rule/schema.json",
|
||||
"path": "powerpack-conformance/executors/bundle-rule",
|
||||
"type": "executor"
|
||||
}
|
||||
],
|
||||
"generators": [],
|
||||
"githubRoot": "https://github.com/nrwl/nx/blob/master",
|
||||
"name": "powerpack-conformance",
|
||||
|
||||
@@ -18,7 +18,7 @@ In order to use `@nx/powerpack-conformance`, you need to have an active Powerpac
|
||||
|
||||
## Set Up @nx/powerpack-conformance
|
||||
|
||||
1. [Activate Powerpack](/recipes/installation/activate-powerpack) if you haven't already
|
||||
1. [Activate Powerpack](/nx-enterprise/activate-powerpack) if you haven't already
|
||||
2. Install the package
|
||||
|
||||
```shell
|
||||
@@ -189,6 +189,7 @@ import { createConformanceRule } from '@nx/powerpack-conformance';
|
||||
|
||||
const rule = createConformanceRule({
|
||||
name: 'local-conformance-rule-example',
|
||||
description: 'The description of the rule',
|
||||
category: 'security', // `consistency`, `maintainability`, `reliability` or `security`
|
||||
reporter: 'project-reporter', // `project-reporter` or `project-files-reporter`
|
||||
implementation: async (context) => {
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "bundle-rule",
|
||||
"implementation": "/libs/nx-packages/powerpack-conformance/src/executors/bundle-rule/executor.ts",
|
||||
"schema": {
|
||||
"$schema": "https://json-schema.org/schema",
|
||||
"version": 2,
|
||||
"title": "BundleNxConformanceRule",
|
||||
"description": "Compile and bundle an Nx Conformance Rule",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"main": {
|
||||
"type": "string",
|
||||
"description": "The entrypoint file for the rule"
|
||||
},
|
||||
"outputPath": {
|
||||
"type": "string",
|
||||
"description": "The output path for the bundled rule"
|
||||
}
|
||||
},
|
||||
"required": ["main", "outputPath"],
|
||||
"presets": []
|
||||
},
|
||||
"description": "Compile and bundle an Nx Conformance Rule",
|
||||
"aliases": [],
|
||||
"hidden": false,
|
||||
"path": "/libs/nx-packages/powerpack-conformance/src/executors/bundle-rule/schema.json",
|
||||
"type": "executor"
|
||||
}
|
||||
@@ -13,7 +13,7 @@ In order to use `@nx/powerpack-owners`, you need to have an active Powerpack lic
|
||||
|
||||
## Set Up @nx/powerpack-owners
|
||||
|
||||
1. [Activate Powerpack](/recipes/installation/activate-powerpack) if you haven't already
|
||||
1. [Activate Powerpack](/nx-enterprise/activate-powerpack) if you haven't already
|
||||
2. Install the package
|
||||
|
||||
```shell
|
||||
|
||||
@@ -19,7 +19,7 @@ In order to use `@nx/powerpack-s3-cache`, you need to have an active Powerpack l
|
||||
|
||||
### 1. Install the Package
|
||||
|
||||
1. [Activate Powerpack](/recipes/installation/activate-powerpack) if you haven't already
|
||||
1. [Activate Powerpack](/nx-enterprise/activate-powerpack) if you haven't already
|
||||
2. Install the package
|
||||
|
||||
```shell
|
||||
@@ -48,6 +48,35 @@ There are four different ways to authenticate with AWS. They will be attempted i
|
||||
|
||||
Both the `AWS_ACCESS_KEY_ID` and the `AWS_SECRET_ACCESS_KEY` environment variables are required to use the environment variable authentication method.
|
||||
|
||||
Here's an example of using OICD in GitHub Actions to set the environment variables in CI:
|
||||
|
||||
```yaml {% fileName=".github/workflows/ci.yml" %}
|
||||
name: CI
|
||||
...
|
||||
permissions:
|
||||
id-token: write
|
||||
...
|
||||
|
||||
env:
|
||||
NX_DB_CACHE: true
|
||||
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
...
|
||||
|
||||
- name: 'Configure AWS Credentials'
|
||||
uses: aws-actions/configure-aws-credentials@v4.0.2
|
||||
with:
|
||||
role-to-assume: arn:aws:iam::123456789123:role/GhAIBucketUserRole
|
||||
aws-region: us-east-1
|
||||
|
||||
...
|
||||
|
||||
- run: pnpm exec nx affected -t lint test build
|
||||
```
|
||||
|
||||
#### INI Config Files
|
||||
|
||||
AWS can read your authentication credentials from [shared INI config files](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html). The files are located at `~/.aws/credentials` and `~/.aws/config`. Both files are expected to be INI formatted with section names corresponding to profiles. Sections in the credentials file are treated as profile names, whereas profile sections in the config file must have the format of `[profile profile-name]`, except for the default profile. Profiles that appear in both files will not be merged, and the version that appears in the credentials file will be given precedence over the profile found in the config file.
|
||||
|
||||
@@ -19,7 +19,7 @@ In order to use `@nx/powerpack-shared-fs-cache`, you need to have an active Powe
|
||||
|
||||
### 1. Install the Package
|
||||
|
||||
1. [Activate Powerpack](/recipes/installation/activate-powerpack) if you haven't already
|
||||
1. [Activate Powerpack](/nx-enterprise/activate-powerpack) if you haven't already
|
||||
2. Install the package
|
||||
|
||||
```shell
|
||||
|
||||
@@ -171,7 +171,7 @@ Named inputs targets can refer to reduce duplication
|
||||
|
||||
• `Optional` **neverConnectToCloud**: `boolean`
|
||||
|
||||
Set this to false to disable connection to Nx Cloud
|
||||
Set this to true to disable connection to Nx Cloud
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@ Named inputs targets can refer to reduce duplication
|
||||
|
||||
• `Optional` **neverConnectToCloud**: `boolean`
|
||||
|
||||
Set this to false to disable connection to Nx Cloud
|
||||
Set this to true to disable connection to Nx Cloud
|
||||
|
||||
#### Inherited from
|
||||
|
||||
|
||||
@@ -682,54 +682,32 @@
|
||||
"file": "",
|
||||
"itemList": [
|
||||
{
|
||||
"id": "on-premise",
|
||||
"name": "On-Premise",
|
||||
"id": "single-tenant",
|
||||
"name": "Single Tenant",
|
||||
"description": "Manage an on-premise installation of Nx Cloud",
|
||||
"mediaImage": "",
|
||||
"file": "",
|
||||
"itemList": [
|
||||
{
|
||||
"id": "on-premise",
|
||||
"name": "Set up Nx Cloud On-Premise",
|
||||
"description": "Set up Nx Cloud on machines that you control",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/features/nx-enterprise-on-prem",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/on-premise",
|
||||
"tags": ["on-premise"]
|
||||
},
|
||||
{
|
||||
"id": "auth-single-admin",
|
||||
"name": "Authenticate with a Single Admin",
|
||||
"id": "overview",
|
||||
"name": "Single Tenant Nx Cloud Hosting",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-single-admin",
|
||||
"file": "nx-cloud/enterprise/single-tenant/overview",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-single-admin",
|
||||
"tags": []
|
||||
"path": "/ci/recipes/enterprise/single-tenant/overview",
|
||||
"tags": ["single-tenant"]
|
||||
},
|
||||
{
|
||||
"id": "auth-github",
|
||||
"name": "Authenticate with GitHub",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-github",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-github",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-github",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
"id": "ami-setup",
|
||||
"name": "On-Prem VM Setup",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/ami-setup",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/ami-setup",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-github",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -737,10 +715,10 @@
|
||||
"name": "Authenticate with GitLab",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-gitlab",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-gitlab",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-gitlab",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-gitlab",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -748,10 +726,10 @@
|
||||
"name": "Authenticate with BitBucket",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-bitbucket",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-bitbucket",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -759,10 +737,10 @@
|
||||
"name": "Authenticate with BitBucket Data Center",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-bitbucket-data-center",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-bitbucket-data-center",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket-data-center",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket-data-center",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -770,21 +748,10 @@
|
||||
"name": "Authenticate via SAML",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-saml",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-saml",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-saml",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
"id": "advanced-config",
|
||||
"name": "Advanced Configuration",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/advanced-config",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/advanced-config",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-saml",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -792,15 +759,15 @@
|
||||
"name": "Custom GitHub App",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/custom-github-app",
|
||||
"file": "nx-cloud/enterprise/single-tenant/custom-github-app",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/custom-github-app",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/custom-github-app",
|
||||
"tags": []
|
||||
}
|
||||
],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise",
|
||||
"path": "/ci/recipes/enterprise/single-tenant",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -1277,54 +1244,32 @@
|
||||
"file": "",
|
||||
"itemList": [
|
||||
{
|
||||
"id": "on-premise",
|
||||
"name": "On-Premise",
|
||||
"id": "single-tenant",
|
||||
"name": "Single Tenant",
|
||||
"description": "Manage an on-premise installation of Nx Cloud",
|
||||
"mediaImage": "",
|
||||
"file": "",
|
||||
"itemList": [
|
||||
{
|
||||
"id": "on-premise",
|
||||
"name": "Set up Nx Cloud On-Premise",
|
||||
"description": "Set up Nx Cloud on machines that you control",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/features/nx-enterprise-on-prem",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/on-premise",
|
||||
"tags": ["on-premise"]
|
||||
},
|
||||
{
|
||||
"id": "auth-single-admin",
|
||||
"name": "Authenticate with a Single Admin",
|
||||
"id": "overview",
|
||||
"name": "Single Tenant Nx Cloud Hosting",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-single-admin",
|
||||
"file": "nx-cloud/enterprise/single-tenant/overview",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-single-admin",
|
||||
"tags": []
|
||||
"path": "/ci/recipes/enterprise/single-tenant/overview",
|
||||
"tags": ["single-tenant"]
|
||||
},
|
||||
{
|
||||
"id": "auth-github",
|
||||
"name": "Authenticate with GitHub",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-github",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-github",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-github",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
"id": "ami-setup",
|
||||
"name": "On-Prem VM Setup",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/ami-setup",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/ami-setup",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-github",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -1332,10 +1277,10 @@
|
||||
"name": "Authenticate with GitLab",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-gitlab",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-gitlab",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-gitlab",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-gitlab",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -1343,10 +1288,10 @@
|
||||
"name": "Authenticate with BitBucket",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-bitbucket",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-bitbucket",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -1354,10 +1299,10 @@
|
||||
"name": "Authenticate with BitBucket Data Center",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-bitbucket-data-center",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-bitbucket-data-center",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket-data-center",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket-data-center",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -1365,21 +1310,10 @@
|
||||
"name": "Authenticate via SAML",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-saml",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-saml",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-saml",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
"id": "advanced-config",
|
||||
"name": "Advanced Configuration",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/advanced-config",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/advanced-config",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-saml",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -1387,15 +1321,15 @@
|
||||
"name": "Custom GitHub App",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/custom-github-app",
|
||||
"file": "nx-cloud/enterprise/single-tenant/custom-github-app",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/custom-github-app",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/custom-github-app",
|
||||
"tags": []
|
||||
}
|
||||
],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise",
|
||||
"path": "/ci/recipes/enterprise/single-tenant",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -1481,55 +1415,33 @@
|
||||
"path": "/ci/recipes/enterprise",
|
||||
"tags": []
|
||||
},
|
||||
"/ci/recipes/enterprise/on-premise": {
|
||||
"id": "on-premise",
|
||||
"name": "On-Premise",
|
||||
"/ci/recipes/enterprise/single-tenant": {
|
||||
"id": "single-tenant",
|
||||
"name": "Single Tenant",
|
||||
"description": "Manage an on-premise installation of Nx Cloud",
|
||||
"mediaImage": "",
|
||||
"file": "",
|
||||
"itemList": [
|
||||
{
|
||||
"id": "on-premise",
|
||||
"name": "Set up Nx Cloud On-Premise",
|
||||
"description": "Set up Nx Cloud on machines that you control",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/features/nx-enterprise-on-prem",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/on-premise",
|
||||
"tags": ["on-premise"]
|
||||
},
|
||||
{
|
||||
"id": "auth-single-admin",
|
||||
"name": "Authenticate with a Single Admin",
|
||||
"id": "overview",
|
||||
"name": "Single Tenant Nx Cloud Hosting",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-single-admin",
|
||||
"file": "nx-cloud/enterprise/single-tenant/overview",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-single-admin",
|
||||
"tags": []
|
||||
"path": "/ci/recipes/enterprise/single-tenant/overview",
|
||||
"tags": ["single-tenant"]
|
||||
},
|
||||
{
|
||||
"id": "auth-github",
|
||||
"name": "Authenticate with GitHub",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-github",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-github",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-github",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
"id": "ami-setup",
|
||||
"name": "On-Prem VM Setup",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/ami-setup",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/ami-setup",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-github",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -1537,10 +1449,10 @@
|
||||
"name": "Authenticate with GitLab",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-gitlab",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-gitlab",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-gitlab",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-gitlab",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -1548,10 +1460,10 @@
|
||||
"name": "Authenticate with BitBucket",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-bitbucket",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-bitbucket",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -1559,10 +1471,10 @@
|
||||
"name": "Authenticate with BitBucket Data Center",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-bitbucket-data-center",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-bitbucket-data-center",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket-data-center",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket-data-center",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -1570,21 +1482,10 @@
|
||||
"name": "Authenticate via SAML",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-saml",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-saml",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-saml",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
"id": "advanced-config",
|
||||
"name": "Advanced Configuration",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/advanced-config",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/advanced-config",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-saml",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
@@ -1592,125 +1493,92 @@
|
||||
"name": "Custom GitHub App",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/custom-github-app",
|
||||
"file": "nx-cloud/enterprise/single-tenant/custom-github-app",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/custom-github-app",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/custom-github-app",
|
||||
"tags": []
|
||||
}
|
||||
],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise",
|
||||
"path": "/ci/recipes/enterprise/single-tenant",
|
||||
"tags": []
|
||||
},
|
||||
"/ci/recipes/enterprise/on-premise/on-premise": {
|
||||
"id": "on-premise",
|
||||
"name": "Set up Nx Cloud On-Premise",
|
||||
"description": "Set up Nx Cloud on machines that you control",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/features/nx-enterprise-on-prem",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/on-premise",
|
||||
"tags": ["on-premise"]
|
||||
},
|
||||
"/ci/recipes/enterprise/on-premise/auth-single-admin": {
|
||||
"id": "auth-single-admin",
|
||||
"name": "Authenticate with a Single Admin",
|
||||
"/ci/recipes/enterprise/single-tenant/overview": {
|
||||
"id": "overview",
|
||||
"name": "Single Tenant Nx Cloud Hosting",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-single-admin",
|
||||
"file": "nx-cloud/enterprise/single-tenant/overview",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-single-admin",
|
||||
"tags": []
|
||||
"path": "/ci/recipes/enterprise/single-tenant/overview",
|
||||
"tags": ["single-tenant"]
|
||||
},
|
||||
"/ci/recipes/enterprise/on-premise/auth-github": {
|
||||
"/ci/recipes/enterprise/single-tenant/auth-github": {
|
||||
"id": "auth-github",
|
||||
"name": "Authenticate with GitHub",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-github",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-github",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-github",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-github",
|
||||
"tags": []
|
||||
},
|
||||
"/ci/recipes/enterprise/on-premise/ami-setup": {
|
||||
"id": "ami-setup",
|
||||
"name": "On-Prem VM Setup",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/ami-setup",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/ami-setup",
|
||||
"tags": []
|
||||
},
|
||||
"/ci/recipes/enterprise/on-premise/auth-gitlab": {
|
||||
"/ci/recipes/enterprise/single-tenant/auth-gitlab": {
|
||||
"id": "auth-gitlab",
|
||||
"name": "Authenticate with GitLab",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-gitlab",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-gitlab",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-gitlab",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-gitlab",
|
||||
"tags": []
|
||||
},
|
||||
"/ci/recipes/enterprise/on-premise/auth-bitbucket": {
|
||||
"/ci/recipes/enterprise/single-tenant/auth-bitbucket": {
|
||||
"id": "auth-bitbucket",
|
||||
"name": "Authenticate with BitBucket",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-bitbucket",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-bitbucket",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket",
|
||||
"tags": []
|
||||
},
|
||||
"/ci/recipes/enterprise/on-premise/auth-bitbucket-data-center": {
|
||||
"/ci/recipes/enterprise/single-tenant/auth-bitbucket-data-center": {
|
||||
"id": "auth-bitbucket-data-center",
|
||||
"name": "Authenticate with BitBucket Data Center",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-bitbucket-data-center",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-bitbucket-data-center",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket-data-center",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket-data-center",
|
||||
"tags": []
|
||||
},
|
||||
"/ci/recipes/enterprise/on-premise/auth-saml": {
|
||||
"/ci/recipes/enterprise/single-tenant/auth-saml": {
|
||||
"id": "auth-saml",
|
||||
"name": "Authenticate via SAML",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-saml",
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-saml",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-saml",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-saml",
|
||||
"tags": []
|
||||
},
|
||||
"/ci/recipes/enterprise/on-premise/advanced-config": {
|
||||
"id": "advanced-config",
|
||||
"name": "Advanced Configuration",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/advanced-config",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/advanced-config",
|
||||
"tags": []
|
||||
},
|
||||
"/ci/recipes/enterprise/on-premise/custom-github-app": {
|
||||
"/ci/recipes/enterprise/single-tenant/custom-github-app": {
|
||||
"id": "custom-github-app",
|
||||
"name": "Custom GitHub App",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "nx-cloud/enterprise/on-premise/custom-github-app",
|
||||
"file": "nx-cloud/enterprise/single-tenant/custom-github-app",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/ci/recipes/enterprise/on-premise/custom-github-app",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/custom-github-app",
|
||||
"tags": []
|
||||
},
|
||||
"/ci/recipes/enterprise/dte": {
|
||||
|
||||
@@ -323,39 +323,6 @@
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Powerpack Features",
|
||||
"path": "/features/powerpack",
|
||||
"id": "powerpack",
|
||||
"isExternal": false,
|
||||
"children": [
|
||||
{
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"path": "/features/powerpack/conformance",
|
||||
"id": "conformance",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"path": "/features/powerpack/owners",
|
||||
"id": "owners",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"path": "/features/powerpack/custom-caching",
|
||||
"id": "custom-caching",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
}
|
||||
],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "CI Features",
|
||||
"path": "/features/ci-features",
|
||||
@@ -472,63 +439,6 @@
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Powerpack Features",
|
||||
"path": "/features/powerpack",
|
||||
"id": "powerpack",
|
||||
"isExternal": false,
|
||||
"children": [
|
||||
{
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"path": "/features/powerpack/conformance",
|
||||
"id": "conformance",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"path": "/features/powerpack/owners",
|
||||
"id": "owners",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"path": "/features/powerpack/custom-caching",
|
||||
"id": "custom-caching",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
}
|
||||
],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"path": "/features/powerpack/conformance",
|
||||
"id": "conformance",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"path": "/features/powerpack/owners",
|
||||
"id": "owners",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"path": "/features/powerpack/custom-caching",
|
||||
"id": "custom-caching",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "CI Features",
|
||||
"path": "/features/ci-features",
|
||||
@@ -1155,14 +1065,6 @@
|
||||
"id": "installation",
|
||||
"isExternal": false,
|
||||
"children": [
|
||||
{
|
||||
"name": "Activate Powerpack",
|
||||
"path": "/recipes/installation/activate-powerpack",
|
||||
"id": "activate-powerpack",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Install Nx in a Non-Javascript Repo",
|
||||
"path": "/recipes/installation/install-non-javascript",
|
||||
@@ -2144,14 +2046,6 @@
|
||||
"id": "installation",
|
||||
"isExternal": false,
|
||||
"children": [
|
||||
{
|
||||
"name": "Activate Powerpack",
|
||||
"path": "/recipes/installation/activate-powerpack",
|
||||
"id": "activate-powerpack",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Install Nx in a Non-Javascript Repo",
|
||||
"path": "/recipes/installation/install-non-javascript",
|
||||
@@ -2171,14 +2065,6 @@
|
||||
],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Activate Powerpack",
|
||||
"path": "/recipes/installation/activate-powerpack",
|
||||
"id": "activate-powerpack",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Install Nx in a Non-Javascript Repo",
|
||||
"path": "/recipes/installation/install-non-javascript",
|
||||
@@ -3973,6 +3859,121 @@
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Enterprise",
|
||||
"path": "/nx-enterprise",
|
||||
"id": "nx-enterprise",
|
||||
"isExternal": false,
|
||||
"children": [
|
||||
{
|
||||
"name": "Activate Powerpack",
|
||||
"path": "/nx-enterprise/activate-powerpack",
|
||||
"id": "activate-powerpack",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Powerpack Features",
|
||||
"path": "/nx-enterprise/powerpack",
|
||||
"id": "powerpack",
|
||||
"isExternal": false,
|
||||
"children": [
|
||||
{
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"path": "/nx-enterprise/powerpack/conformance",
|
||||
"id": "conformance",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"path": "/nx-enterprise/powerpack/owners",
|
||||
"id": "owners",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"path": "/nx-enterprise/powerpack/custom-caching",
|
||||
"id": "custom-caching",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
}
|
||||
],
|
||||
"disableCollapsible": false
|
||||
}
|
||||
],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Activate Powerpack",
|
||||
"path": "/nx-enterprise/activate-powerpack",
|
||||
"id": "activate-powerpack",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Powerpack Features",
|
||||
"path": "/nx-enterprise/powerpack",
|
||||
"id": "powerpack",
|
||||
"isExternal": false,
|
||||
"children": [
|
||||
{
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"path": "/nx-enterprise/powerpack/conformance",
|
||||
"id": "conformance",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"path": "/nx-enterprise/powerpack/owners",
|
||||
"id": "owners",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"path": "/nx-enterprise/powerpack/custom-caching",
|
||||
"id": "custom-caching",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
}
|
||||
],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"path": "/nx-enterprise/powerpack/conformance",
|
||||
"id": "conformance",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"path": "/nx-enterprise/powerpack/owners",
|
||||
"id": "owners",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"path": "/nx-enterprise/powerpack/custom-caching",
|
||||
"id": "custom-caching",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Showcase",
|
||||
"path": "/showcase",
|
||||
@@ -5896,46 +5897,30 @@
|
||||
"isExternal": false,
|
||||
"children": [
|
||||
{
|
||||
"name": "On-Premise",
|
||||
"path": "/ci/recipes/enterprise/on-premise",
|
||||
"id": "on-premise",
|
||||
"name": "Single Tenant",
|
||||
"path": "/ci/recipes/enterprise/single-tenant",
|
||||
"id": "single-tenant",
|
||||
"isExternal": false,
|
||||
"children": [
|
||||
{
|
||||
"name": "Set up Nx Cloud On-Premise",
|
||||
"path": "/ci/recipes/enterprise/on-premise/on-premise",
|
||||
"id": "on-premise",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with a Single Admin",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-single-admin",
|
||||
"id": "auth-single-admin",
|
||||
"name": "Single Tenant Nx Cloud Hosting",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/overview",
|
||||
"id": "overview",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with GitHub",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-github",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-github",
|
||||
"id": "auth-github",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "On-Prem VM Setup",
|
||||
"path": "/ci/recipes/enterprise/on-premise/ami-setup",
|
||||
"id": "ami-setup",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with GitLab",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-gitlab",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-gitlab",
|
||||
"id": "auth-gitlab",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -5943,7 +5928,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with BitBucket",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket",
|
||||
"id": "auth-bitbucket",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -5951,7 +5936,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with BitBucket Data Center",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket-data-center",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket-data-center",
|
||||
"id": "auth-bitbucket-data-center",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -5959,23 +5944,15 @@
|
||||
},
|
||||
{
|
||||
"name": "Authenticate via SAML",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-saml",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-saml",
|
||||
"id": "auth-saml",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Advanced Configuration",
|
||||
"path": "/ci/recipes/enterprise/on-premise/advanced-config",
|
||||
"id": "advanced-config",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Custom GitHub App",
|
||||
"path": "/ci/recipes/enterprise/on-premise/custom-github-app",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/custom-github-app",
|
||||
"id": "custom-github-app",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -6330,46 +6307,30 @@
|
||||
"isExternal": false,
|
||||
"children": [
|
||||
{
|
||||
"name": "On-Premise",
|
||||
"path": "/ci/recipes/enterprise/on-premise",
|
||||
"id": "on-premise",
|
||||
"name": "Single Tenant",
|
||||
"path": "/ci/recipes/enterprise/single-tenant",
|
||||
"id": "single-tenant",
|
||||
"isExternal": false,
|
||||
"children": [
|
||||
{
|
||||
"name": "Set up Nx Cloud On-Premise",
|
||||
"path": "/ci/recipes/enterprise/on-premise/on-premise",
|
||||
"id": "on-premise",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with a Single Admin",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-single-admin",
|
||||
"id": "auth-single-admin",
|
||||
"name": "Single Tenant Nx Cloud Hosting",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/overview",
|
||||
"id": "overview",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with GitHub",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-github",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-github",
|
||||
"id": "auth-github",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "On-Prem VM Setup",
|
||||
"path": "/ci/recipes/enterprise/on-premise/ami-setup",
|
||||
"id": "ami-setup",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with GitLab",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-gitlab",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-gitlab",
|
||||
"id": "auth-gitlab",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -6377,7 +6338,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with BitBucket",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket",
|
||||
"id": "auth-bitbucket",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -6385,7 +6346,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with BitBucket Data Center",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket-data-center",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket-data-center",
|
||||
"id": "auth-bitbucket-data-center",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -6393,23 +6354,15 @@
|
||||
},
|
||||
{
|
||||
"name": "Authenticate via SAML",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-saml",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-saml",
|
||||
"id": "auth-saml",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Advanced Configuration",
|
||||
"path": "/ci/recipes/enterprise/on-premise/advanced-config",
|
||||
"id": "advanced-config",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Custom GitHub App",
|
||||
"path": "/ci/recipes/enterprise/on-premise/custom-github-app",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/custom-github-app",
|
||||
"id": "custom-github-app",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -6479,46 +6432,30 @@
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "On-Premise",
|
||||
"path": "/ci/recipes/enterprise/on-premise",
|
||||
"id": "on-premise",
|
||||
"name": "Single Tenant",
|
||||
"path": "/ci/recipes/enterprise/single-tenant",
|
||||
"id": "single-tenant",
|
||||
"isExternal": false,
|
||||
"children": [
|
||||
{
|
||||
"name": "Set up Nx Cloud On-Premise",
|
||||
"path": "/ci/recipes/enterprise/on-premise/on-premise",
|
||||
"id": "on-premise",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with a Single Admin",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-single-admin",
|
||||
"id": "auth-single-admin",
|
||||
"name": "Single Tenant Nx Cloud Hosting",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/overview",
|
||||
"id": "overview",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with GitHub",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-github",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-github",
|
||||
"id": "auth-github",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "On-Prem VM Setup",
|
||||
"path": "/ci/recipes/enterprise/on-premise/ami-setup",
|
||||
"id": "ami-setup",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with GitLab",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-gitlab",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-gitlab",
|
||||
"id": "auth-gitlab",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -6526,7 +6463,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with BitBucket",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket",
|
||||
"id": "auth-bitbucket",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -6534,7 +6471,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with BitBucket Data Center",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket-data-center",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket-data-center",
|
||||
"id": "auth-bitbucket-data-center",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -6542,23 +6479,15 @@
|
||||
},
|
||||
{
|
||||
"name": "Authenticate via SAML",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-saml",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-saml",
|
||||
"id": "auth-saml",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Advanced Configuration",
|
||||
"path": "/ci/recipes/enterprise/on-premise/advanced-config",
|
||||
"id": "advanced-config",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Custom GitHub App",
|
||||
"path": "/ci/recipes/enterprise/on-premise/custom-github-app",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/custom-github-app",
|
||||
"id": "custom-github-app",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -6568,40 +6497,24 @@
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Set up Nx Cloud On-Premise",
|
||||
"path": "/ci/recipes/enterprise/on-premise/on-premise",
|
||||
"id": "on-premise",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with a Single Admin",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-single-admin",
|
||||
"id": "auth-single-admin",
|
||||
"name": "Single Tenant Nx Cloud Hosting",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/overview",
|
||||
"id": "overview",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with GitHub",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-github",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-github",
|
||||
"id": "auth-github",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "On-Prem VM Setup",
|
||||
"path": "/ci/recipes/enterprise/on-premise/ami-setup",
|
||||
"id": "ami-setup",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with GitLab",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-gitlab",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-gitlab",
|
||||
"id": "auth-gitlab",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -6609,7 +6522,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with BitBucket",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket",
|
||||
"id": "auth-bitbucket",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -6617,7 +6530,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with BitBucket Data Center",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-bitbucket-data-center",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-bitbucket-data-center",
|
||||
"id": "auth-bitbucket-data-center",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -6625,23 +6538,15 @@
|
||||
},
|
||||
{
|
||||
"name": "Authenticate via SAML",
|
||||
"path": "/ci/recipes/enterprise/on-premise/auth-saml",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/auth-saml",
|
||||
"id": "auth-saml",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Advanced Configuration",
|
||||
"path": "/ci/recipes/enterprise/on-premise/advanced-config",
|
||||
"id": "advanced-config",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"name": "Custom GitHub App",
|
||||
"path": "/ci/recipes/enterprise/on-premise/custom-github-app",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/custom-github-app",
|
||||
"id": "custom-github-app",
|
||||
"isExternal": false,
|
||||
"children": [],
|
||||
@@ -8495,14 +8400,6 @@
|
||||
"children": [],
|
||||
"isExternal": false,
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"id": "export",
|
||||
"path": "/nx-api/next/executors/export",
|
||||
"name": "export",
|
||||
"children": [],
|
||||
"isExternal": false,
|
||||
"disableCollapsible": false
|
||||
}
|
||||
],
|
||||
"isExternal": false,
|
||||
@@ -10617,6 +10514,23 @@
|
||||
],
|
||||
"isExternal": false,
|
||||
"disableCollapsible": false
|
||||
},
|
||||
{
|
||||
"id": "executors",
|
||||
"path": "/nx-api/powerpack-conformance/executors",
|
||||
"name": "executors",
|
||||
"children": [
|
||||
{
|
||||
"id": "bundle-rule",
|
||||
"path": "/nx-api/powerpack-conformance/executors/bundle-rule",
|
||||
"name": "bundle-rule",
|
||||
"children": [],
|
||||
"isExternal": false,
|
||||
"disableCollapsible": false
|
||||
}
|
||||
],
|
||||
"isExternal": false,
|
||||
"disableCollapsible": false
|
||||
}
|
||||
],
|
||||
"isExternal": false,
|
||||
|
||||
@@ -1531,15 +1531,6 @@
|
||||
"originalFilePath": "/packages/next/src/executors/server/schema.json",
|
||||
"path": "/nx-api/next/executors/server",
|
||||
"type": "executor"
|
||||
},
|
||||
"/nx-api/next/executors/export": {
|
||||
"description": "Export a Next.js application. The exported application is located at `dist/$outputPath/exported`.",
|
||||
"file": "generated/packages/next/executors/export.json",
|
||||
"hidden": false,
|
||||
"name": "export",
|
||||
"originalFilePath": "/packages/next/src/executors/export/schema.json",
|
||||
"path": "/nx-api/next/executors/export",
|
||||
"type": "executor"
|
||||
}
|
||||
},
|
||||
"generators": {
|
||||
@@ -3626,7 +3617,17 @@
|
||||
},
|
||||
"root": "/libs/nx-packages/powerpack-conformance",
|
||||
"source": "/libs/nx-packages/powerpack-conformance/src",
|
||||
"executors": {},
|
||||
"executors": {
|
||||
"/nx-api/powerpack-conformance/executors/bundle-rule": {
|
||||
"description": "Compile and bundle an Nx Conformance Rule",
|
||||
"file": "external-generated/packages/powerpack-conformance/executors/bundle-rule.json",
|
||||
"hidden": false,
|
||||
"name": "bundle-rule",
|
||||
"originalFilePath": "/libs/nx-packages/powerpack-conformance/src/executors/bundle-rule/schema.json",
|
||||
"path": "/nx-api/powerpack-conformance/executors/bundle-rule",
|
||||
"type": "executor"
|
||||
}
|
||||
},
|
||||
"generators": {},
|
||||
"path": "/nx-api/powerpack-conformance"
|
||||
},
|
||||
|
||||
@@ -438,51 +438,6 @@
|
||||
"path": "/features/manage-releases",
|
||||
"tags": ["nx-release"]
|
||||
},
|
||||
{
|
||||
"id": "powerpack",
|
||||
"name": "Powerpack Features",
|
||||
"description": "Nx Powerpack is a suite of paid extensions for the Nx CLI specifically designed for enterprises.",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/index",
|
||||
"itemList": [
|
||||
{
|
||||
"id": "conformance",
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"description": "Write and apply rules for your Nx workspace",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/conformance",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/features/powerpack/conformance",
|
||||
"tags": ["conformance"]
|
||||
},
|
||||
{
|
||||
"id": "owners",
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"description": "Configure and maintain code owners for projects in an Nx workspace",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/owners",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/features/powerpack/owners",
|
||||
"tags": ["owners"]
|
||||
},
|
||||
{
|
||||
"id": "custom-caching",
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"description": "Host the remote cache without using Nx Cloud",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/custom-caching",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/features/powerpack/custom-caching",
|
||||
"tags": ["custom-caching"]
|
||||
}
|
||||
],
|
||||
"isExternal": false,
|
||||
"path": "/features/powerpack",
|
||||
"tags": []
|
||||
},
|
||||
{
|
||||
"id": "ci-features",
|
||||
"name": "CI Features",
|
||||
@@ -643,84 +598,6 @@
|
||||
"path": "/features/manage-releases",
|
||||
"tags": ["nx-release"]
|
||||
},
|
||||
"/features/powerpack": {
|
||||
"id": "powerpack",
|
||||
"name": "Powerpack Features",
|
||||
"description": "Nx Powerpack is a suite of paid extensions for the Nx CLI specifically designed for enterprises.",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/index",
|
||||
"itemList": [
|
||||
{
|
||||
"id": "conformance",
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"description": "Write and apply rules for your Nx workspace",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/conformance",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/features/powerpack/conformance",
|
||||
"tags": ["conformance"]
|
||||
},
|
||||
{
|
||||
"id": "owners",
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"description": "Configure and maintain code owners for projects in an Nx workspace",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/owners",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/features/powerpack/owners",
|
||||
"tags": ["owners"]
|
||||
},
|
||||
{
|
||||
"id": "custom-caching",
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"description": "Host the remote cache without using Nx Cloud",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/custom-caching",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/features/powerpack/custom-caching",
|
||||
"tags": ["custom-caching"]
|
||||
}
|
||||
],
|
||||
"isExternal": false,
|
||||
"path": "/features/powerpack",
|
||||
"tags": []
|
||||
},
|
||||
"/features/powerpack/conformance": {
|
||||
"id": "conformance",
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"description": "Write and apply rules for your Nx workspace",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/conformance",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/features/powerpack/conformance",
|
||||
"tags": ["conformance"]
|
||||
},
|
||||
"/features/powerpack/owners": {
|
||||
"id": "owners",
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"description": "Configure and maintain code owners for projects in an Nx workspace",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/owners",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/features/powerpack/owners",
|
||||
"tags": ["owners"]
|
||||
},
|
||||
"/features/powerpack/custom-caching": {
|
||||
"id": "custom-caching",
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"description": "Host the remote cache without using Nx Cloud",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/custom-caching",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/features/powerpack/custom-caching",
|
||||
"tags": ["custom-caching"]
|
||||
},
|
||||
"/features/ci-features": {
|
||||
"id": "ci-features",
|
||||
"name": "CI Features",
|
||||
@@ -1577,17 +1454,6 @@
|
||||
"mediaImage": "",
|
||||
"file": "",
|
||||
"itemList": [
|
||||
{
|
||||
"id": "activate-powerpack",
|
||||
"name": "Activate Powerpack",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "shared/recipes/installation/activate-powerpack",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/recipes/installation/activate-powerpack",
|
||||
"tags": ["installation"]
|
||||
},
|
||||
{
|
||||
"id": "install-non-javascript",
|
||||
"name": "Install Nx in a Non-Javascript Repo",
|
||||
@@ -2931,17 +2797,6 @@
|
||||
"mediaImage": "",
|
||||
"file": "",
|
||||
"itemList": [
|
||||
{
|
||||
"id": "activate-powerpack",
|
||||
"name": "Activate Powerpack",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "shared/recipes/installation/activate-powerpack",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/recipes/installation/activate-powerpack",
|
||||
"tags": ["installation"]
|
||||
},
|
||||
{
|
||||
"id": "install-non-javascript",
|
||||
"name": "Install Nx in a Non-Javascript Repo",
|
||||
@@ -2969,17 +2824,6 @@
|
||||
"path": "/recipes/installation",
|
||||
"tags": []
|
||||
},
|
||||
"/recipes/installation/activate-powerpack": {
|
||||
"id": "activate-powerpack",
|
||||
"name": "Activate Powerpack",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "shared/recipes/installation/activate-powerpack",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/recipes/installation/activate-powerpack",
|
||||
"tags": ["installation"]
|
||||
},
|
||||
"/recipes/installation/install-non-javascript": {
|
||||
"id": "install-non-javascript",
|
||||
"name": "Install Nx in a Non-Javascript Repo",
|
||||
@@ -5440,6 +5284,163 @@
|
||||
"path": "/recipes/nx-release/build-before-versioning",
|
||||
"tags": ["nx-release"]
|
||||
},
|
||||
"/nx-enterprise": {
|
||||
"id": "nx-enterprise",
|
||||
"name": "Enterprise",
|
||||
"description": "Enterprise solutions for the Nx CLI",
|
||||
"mediaImage": "",
|
||||
"file": "",
|
||||
"itemList": [
|
||||
{
|
||||
"id": "activate-powerpack",
|
||||
"name": "Activate Powerpack",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "shared/recipes/installation/activate-powerpack",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise/activate-powerpack",
|
||||
"tags": ["installation"]
|
||||
},
|
||||
{
|
||||
"id": "powerpack",
|
||||
"name": "Powerpack Features",
|
||||
"description": "Nx Powerpack is a suite of paid extensions for the Nx CLI specifically designed for enterprises.",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/index",
|
||||
"itemList": [
|
||||
{
|
||||
"id": "conformance",
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"description": "Write and apply rules for your Nx workspace",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/conformance",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise/powerpack/conformance",
|
||||
"tags": ["conformance"]
|
||||
},
|
||||
{
|
||||
"id": "owners",
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"description": "Configure and maintain code owners for projects in an Nx workspace",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/owners",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise/powerpack/owners",
|
||||
"tags": ["owners"]
|
||||
},
|
||||
{
|
||||
"id": "custom-caching",
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"description": "Host the remote cache without using Nx Cloud",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/custom-caching",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise/powerpack/custom-caching",
|
||||
"tags": ["custom-caching"]
|
||||
}
|
||||
],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise/powerpack",
|
||||
"tags": []
|
||||
}
|
||||
],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise",
|
||||
"tags": []
|
||||
},
|
||||
"/nx-enterprise/activate-powerpack": {
|
||||
"id": "activate-powerpack",
|
||||
"name": "Activate Powerpack",
|
||||
"description": "",
|
||||
"mediaImage": "",
|
||||
"file": "shared/recipes/installation/activate-powerpack",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise/activate-powerpack",
|
||||
"tags": ["installation"]
|
||||
},
|
||||
"/nx-enterprise/powerpack": {
|
||||
"id": "powerpack",
|
||||
"name": "Powerpack Features",
|
||||
"description": "Nx Powerpack is a suite of paid extensions for the Nx CLI specifically designed for enterprises.",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/index",
|
||||
"itemList": [
|
||||
{
|
||||
"id": "conformance",
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"description": "Write and apply rules for your Nx workspace",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/conformance",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise/powerpack/conformance",
|
||||
"tags": ["conformance"]
|
||||
},
|
||||
{
|
||||
"id": "owners",
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"description": "Configure and maintain code owners for projects in an Nx workspace",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/owners",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise/powerpack/owners",
|
||||
"tags": ["owners"]
|
||||
},
|
||||
{
|
||||
"id": "custom-caching",
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"description": "Host the remote cache without using Nx Cloud",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/custom-caching",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise/powerpack/custom-caching",
|
||||
"tags": ["custom-caching"]
|
||||
}
|
||||
],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise/powerpack",
|
||||
"tags": []
|
||||
},
|
||||
"/nx-enterprise/powerpack/conformance": {
|
||||
"id": "conformance",
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"description": "Write and apply rules for your Nx workspace",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/conformance",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise/powerpack/conformance",
|
||||
"tags": ["conformance"]
|
||||
},
|
||||
"/nx-enterprise/powerpack/owners": {
|
||||
"id": "owners",
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"description": "Configure and maintain code owners for projects in an Nx workspace",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/owners",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise/powerpack/owners",
|
||||
"tags": ["owners"]
|
||||
},
|
||||
"/nx-enterprise/powerpack/custom-caching": {
|
||||
"id": "custom-caching",
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"description": "Host the remote cache without using Nx Cloud",
|
||||
"mediaImage": "",
|
||||
"file": "shared/features/powerpack/custom-caching",
|
||||
"itemList": [],
|
||||
"isExternal": false,
|
||||
"path": "/nx-enterprise/powerpack/custom-caching",
|
||||
"tags": ["custom-caching"]
|
||||
},
|
||||
"/showcase": {
|
||||
"id": "showcase",
|
||||
"name": "Showcase",
|
||||
|
||||
@@ -575,33 +575,6 @@
|
||||
"path": "/nx-api/nx/documents/release"
|
||||
}
|
||||
],
|
||||
"conformance": [
|
||||
{
|
||||
"description": "Write and apply rules for your Nx workspace",
|
||||
"file": "shared/features/powerpack/conformance",
|
||||
"id": "conformance",
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"path": "/features/powerpack/conformance"
|
||||
}
|
||||
],
|
||||
"owners": [
|
||||
{
|
||||
"description": "Configure and maintain code owners for projects in an Nx workspace",
|
||||
"file": "shared/features/powerpack/owners",
|
||||
"id": "owners",
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"path": "/features/powerpack/owners"
|
||||
}
|
||||
],
|
||||
"custom-caching": [
|
||||
{
|
||||
"description": "Host the remote cache without using Nx Cloud",
|
||||
"file": "shared/features/powerpack/custom-caching",
|
||||
"id": "custom-caching",
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"path": "/features/powerpack/custom-caching"
|
||||
}
|
||||
],
|
||||
"intro": [
|
||||
{
|
||||
"description": "",
|
||||
@@ -811,13 +784,6 @@
|
||||
}
|
||||
],
|
||||
"installation": [
|
||||
{
|
||||
"description": "",
|
||||
"file": "shared/recipes/installation/activate-powerpack",
|
||||
"id": "activate-powerpack",
|
||||
"name": "Activate Powerpack",
|
||||
"path": "/recipes/installation/activate-powerpack"
|
||||
},
|
||||
{
|
||||
"description": "",
|
||||
"file": "shared/recipes/installation/install-non-javascript",
|
||||
@@ -831,6 +797,13 @@
|
||||
"id": "update-global-installation",
|
||||
"name": "Update Your Global Nx Installation",
|
||||
"path": "/recipes/installation/update-global-installation"
|
||||
},
|
||||
{
|
||||
"description": "",
|
||||
"file": "shared/recipes/installation/activate-powerpack",
|
||||
"id": "activate-powerpack",
|
||||
"name": "Activate Powerpack",
|
||||
"path": "/nx-enterprise/activate-powerpack"
|
||||
}
|
||||
],
|
||||
"workspace-watching": [
|
||||
@@ -1103,6 +1076,33 @@
|
||||
"path": "/recipes/tips-n-tricks/flat-config"
|
||||
}
|
||||
],
|
||||
"conformance": [
|
||||
{
|
||||
"description": "Write and apply rules for your Nx workspace",
|
||||
"file": "shared/features/powerpack/conformance",
|
||||
"id": "conformance",
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"path": "/nx-enterprise/powerpack/conformance"
|
||||
}
|
||||
],
|
||||
"owners": [
|
||||
{
|
||||
"description": "Configure and maintain code owners for projects in an Nx workspace",
|
||||
"file": "shared/features/powerpack/owners",
|
||||
"id": "owners",
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"path": "/nx-enterprise/powerpack/owners"
|
||||
}
|
||||
],
|
||||
"custom-caching": [
|
||||
{
|
||||
"description": "Host the remote cache without using Nx Cloud",
|
||||
"file": "shared/features/powerpack/custom-caching",
|
||||
"id": "custom-caching",
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"path": "/nx-enterprise/powerpack/custom-caching"
|
||||
}
|
||||
],
|
||||
"database": [
|
||||
{
|
||||
"description": "",
|
||||
@@ -1188,13 +1188,13 @@
|
||||
"path": "/ci/features/remote-cache"
|
||||
}
|
||||
],
|
||||
"on-premise": [
|
||||
"single-tenant": [
|
||||
{
|
||||
"description": "Set up Nx Cloud on machines that you control",
|
||||
"file": "nx-cloud/features/nx-enterprise-on-prem",
|
||||
"id": "on-premise",
|
||||
"name": "Set up Nx Cloud On-Premise",
|
||||
"path": "/ci/recipes/enterprise/on-premise/on-premise"
|
||||
"description": "",
|
||||
"file": "nx-cloud/enterprise/single-tenant/overview",
|
||||
"id": "overview",
|
||||
"name": "Single Tenant Nx Cloud Hosting",
|
||||
"path": "/ci/recipes/enterprise/single-tenant/overview"
|
||||
}
|
||||
],
|
||||
"docker": [
|
||||
|
||||
@@ -1511,15 +1511,6 @@
|
||||
"originalFilePath": "/packages/next/src/executors/server/schema.json",
|
||||
"path": "next/executors/server",
|
||||
"type": "executor"
|
||||
},
|
||||
{
|
||||
"description": "Export a Next.js application. The exported application is located at `dist/$outputPath/exported`.",
|
||||
"file": "generated/packages/next/executors/export.json",
|
||||
"hidden": false,
|
||||
"name": "export",
|
||||
"originalFilePath": "/packages/next/src/executors/export/schema.json",
|
||||
"path": "next/executors/export",
|
||||
"type": "executor"
|
||||
}
|
||||
],
|
||||
"generators": [
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name to give to the remote Angular app.",
|
||||
"pattern": "^[a-zA-Z][^:]*$",
|
||||
"pattern": "^[a-zA-Z_$][a-zA-Z_$0-9]*$",
|
||||
"x-priority": "important"
|
||||
},
|
||||
"host": {
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
},
|
||||
"listenAddress": {
|
||||
"type": "string",
|
||||
"description": "Listen address that Verdaccio should listen to"
|
||||
"description": "Listen address that Verdaccio should listen to",
|
||||
"default": "localhost"
|
||||
},
|
||||
"config": {
|
||||
"type": "string",
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
{
|
||||
"name": "export",
|
||||
"implementation": "/packages/next/src/executors/export/export.impl.ts",
|
||||
"schema": {
|
||||
"version": 2,
|
||||
"outputCapture": "pipe",
|
||||
"cli": "nx",
|
||||
"title": "Next Export",
|
||||
"description": "Export a Next.js application. The exported application is located at `dist/$outputPath/exported`.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"buildTarget": {
|
||||
"type": "string",
|
||||
"description": "Target which builds the application",
|
||||
"x-priority": "important"
|
||||
},
|
||||
"silent": {
|
||||
"type": "boolean",
|
||||
"description": "Hide progress or not (default is `false`)",
|
||||
"default": false
|
||||
},
|
||||
"threads": {
|
||||
"type": "number",
|
||||
"description": "Number of worker threads to utilize (defaults to the number of CPUs)"
|
||||
},
|
||||
"buildLibsFromSource": {
|
||||
"type": "boolean",
|
||||
"description": "Read buildable libraries from source instead of building them separately.",
|
||||
"default": true
|
||||
}
|
||||
},
|
||||
"required": [],
|
||||
"presets": []
|
||||
},
|
||||
"description": "Export a Next.js application. The exported application is located at `dist/$outputPath/exported`.",
|
||||
"x-deprecated": "Use static exports in next.config.js instead. See: https://nextjs.org/docs/pages/building-your-application/deploying/static-exports.",
|
||||
"aliases": [],
|
||||
"hidden": false,
|
||||
"path": "/packages/next/src/executors/export/schema.json",
|
||||
"type": "executor"
|
||||
}
|
||||
@@ -19,7 +19,7 @@
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the remote application to generate the Module Federation configuration",
|
||||
"pattern": "^[a-zA-Z][^:]*$",
|
||||
"pattern": "^[a-zA-Z_$][a-zA-Z_$0-9]*$",
|
||||
"x-priority": "important"
|
||||
},
|
||||
"dynamic": {
|
||||
|
||||
@@ -77,7 +77,7 @@ npm add -D @nx/rspack
|
||||
|
||||
### Generate a new project using Rspack
|
||||
|
||||
You can generate a [React](/nx-api/react) application or library that uses Rspack. The [`@nx/react:app`](/nx-api/react/generators/application) and [`@nx/react:lib`](/nx-api/react/generators/library) generators accept the `bundler` option, where you can pass `rspack`. This will generate a new application configured to use Rspack, and it will also install all the necessary dependencies, including the `@nx/rspack` plugin.
|
||||
You can generate a [React](/nx-api/react) application that uses Rspack. The [`@nx/react:app`](/nx-api/react/generators/application) generator accepts the `bundler` option, where you can pass `rspack`. This will generate a new application configured to use Rspack, and it will also install all the necessary dependencies, including the `@nx/rspack` plugin.
|
||||
|
||||
To generate a React application using Rspack, run the following:
|
||||
|
||||
@@ -85,12 +85,6 @@ To generate a React application using Rspack, run the following:
|
||||
nx g @nx/react:app my-app --bundler=rspack
|
||||
```
|
||||
|
||||
To generate a React library using Rspack, run the following:
|
||||
|
||||
```bash
|
||||
nx g @nx/react:lib my-lib --bundler=rspack
|
||||
```
|
||||
|
||||
### Modify an existing React project to use Rspack
|
||||
|
||||
You can use the `@nx/rspack:configuration` generator to change your React to use Rspack. This generator will modify your project's configuration to use Rspack, and it will also install all the necessary dependencies, including the `@nx/rspack` plugin.
|
||||
|
||||
@@ -131,35 +131,6 @@
|
||||
"tags": ["nx-release"],
|
||||
"file": "shared/features/manage-releases"
|
||||
},
|
||||
{
|
||||
"name": "Powerpack Features",
|
||||
"id": "powerpack",
|
||||
"description": "Nx Powerpack is a suite of paid extensions for the Nx CLI specifically designed for enterprises.",
|
||||
"file": "shared/features/powerpack/index",
|
||||
"itemList": [
|
||||
{
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"description": "Write and apply rules for your Nx workspace",
|
||||
"id": "conformance",
|
||||
"tags": ["conformance"],
|
||||
"file": "shared/features/powerpack/conformance"
|
||||
},
|
||||
{
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"description": "Configure and maintain code owners for projects in an Nx workspace",
|
||||
"id": "owners",
|
||||
"tags": ["owners"],
|
||||
"file": "shared/features/powerpack/owners"
|
||||
},
|
||||
{
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"description": "Host the remote cache without using Nx Cloud",
|
||||
"id": "custom-caching",
|
||||
"tags": ["custom-caching"],
|
||||
"file": "shared/features/powerpack/custom-caching"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "CI Features",
|
||||
"id": "ci-features",
|
||||
@@ -377,12 +348,6 @@
|
||||
"id": "installation",
|
||||
"description": "Installing Nx",
|
||||
"itemList": [
|
||||
{
|
||||
"name": "Activate Powerpack",
|
||||
"id": "activate-powerpack",
|
||||
"tags": ["installation"],
|
||||
"file": "shared/recipes/installation/activate-powerpack"
|
||||
},
|
||||
{
|
||||
"name": "Install Nx in a Non-Javascript Repo",
|
||||
"id": "install-non-javascript",
|
||||
@@ -1105,6 +1070,48 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Enterprise",
|
||||
"id": "nx-enterprise",
|
||||
"description": "Enterprise solutions for the Nx CLI",
|
||||
"itemList": [
|
||||
{
|
||||
"name": "Activate Powerpack",
|
||||
"id": "activate-powerpack",
|
||||
"tags": ["installation"],
|
||||
"file": "shared/recipes/installation/activate-powerpack"
|
||||
},
|
||||
{
|
||||
"name": "Powerpack Features",
|
||||
"id": "powerpack",
|
||||
"description": "Nx Powerpack is a suite of paid extensions for the Nx CLI specifically designed for enterprises.",
|
||||
"file": "shared/features/powerpack/index",
|
||||
"itemList": [
|
||||
{
|
||||
"name": "Run Language-Agnostic Conformance Rules",
|
||||
"description": "Write and apply rules for your Nx workspace",
|
||||
"id": "conformance",
|
||||
"tags": ["conformance"],
|
||||
"file": "shared/features/powerpack/conformance"
|
||||
},
|
||||
{
|
||||
"name": "Define Code Ownership at the Project Level",
|
||||
"description": "Configure and maintain code owners for projects in an Nx workspace",
|
||||
"id": "owners",
|
||||
"tags": ["owners"],
|
||||
"file": "shared/features/powerpack/owners"
|
||||
},
|
||||
{
|
||||
"name": "Self-Host the Remote Cache",
|
||||
"description": "Host the remote cache without using Nx Cloud",
|
||||
"id": "custom-caching",
|
||||
"tags": ["custom-caching"],
|
||||
"file": "shared/features/powerpack/custom-caching"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Showcase",
|
||||
"id": "showcase",
|
||||
@@ -1854,61 +1861,45 @@
|
||||
"description": "Recipes for enterprise accounts",
|
||||
"itemList": [
|
||||
{
|
||||
"name": "On-Premise",
|
||||
"id": "on-premise",
|
||||
"name": "Single Tenant",
|
||||
"id": "single-tenant",
|
||||
"description": "Manage an on-premise installation of Nx Cloud",
|
||||
"itemList": [
|
||||
{
|
||||
"name": "Set up Nx Cloud On-Premise",
|
||||
"description": "Set up Nx Cloud on machines that you control",
|
||||
"id": "on-premise",
|
||||
"tags": ["on-premise"],
|
||||
"file": "nx-cloud/features/nx-enterprise-on-prem"
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with a Single Admin",
|
||||
"id": "auth-single-admin",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-single-admin"
|
||||
"name": "Single Tenant Nx Cloud Hosting",
|
||||
"id": "overview",
|
||||
"tags": ["single-tenant"],
|
||||
"file": "nx-cloud/enterprise/single-tenant/overview"
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with GitHub",
|
||||
"id": "auth-github",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-github"
|
||||
},
|
||||
{
|
||||
"name": "On-Prem VM Setup",
|
||||
"id": "ami-setup",
|
||||
"file": "nx-cloud/enterprise/on-premise/ami-setup"
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-github"
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with GitLab",
|
||||
"id": "auth-gitlab",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-gitlab"
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-gitlab"
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with BitBucket",
|
||||
"id": "auth-bitbucket",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-bitbucket"
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-bitbucket"
|
||||
},
|
||||
{
|
||||
"name": "Authenticate with BitBucket Data Center",
|
||||
"id": "auth-bitbucket-data-center",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-bitbucket-data-center"
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-bitbucket-data-center"
|
||||
},
|
||||
{
|
||||
"name": "Authenticate via SAML",
|
||||
"id": "auth-saml",
|
||||
"file": "nx-cloud/enterprise/on-premise/auth-saml"
|
||||
},
|
||||
{
|
||||
"name": "Advanced Configuration",
|
||||
"id": "advanced-config",
|
||||
"file": "nx-cloud/enterprise/on-premise/advanced-config"
|
||||
"file": "nx-cloud/enterprise/single-tenant/auth-saml"
|
||||
},
|
||||
{
|
||||
"name": "Custom GitHub App",
|
||||
"id": "custom-github-app",
|
||||
"file": "nx-cloud/enterprise/on-premise/custom-github-app"
|
||||
"file": "nx-cloud/enterprise/single-tenant/custom-github-app"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -46,7 +46,7 @@ In order to guarantee that cache poisoning will never affect your end users, [sk
|
||||
|
||||
### Do Not Manually Share Your Local Cache
|
||||
|
||||
Nx implicitly trusts the local cache which is stored by default in the `.nx/cache` folder. You can change the location of that folder in the `nx.json` file, so it could be tempting to place it on a network drive and easily share your cache with everyone on the company network. However, by doing this you've voided the guarantee of immutability from your cache. If someone has direct access to the cached files, they could directly poison the cache. Nx will automatically detect if a cache entry has been created in your local cache using a different machine and warn you with an [Unknown Local Cache Error](/troubleshooting/unknown-local-cache). Instead, use Nx Cloud [remote caching](/ci/features/remote-cache). If you want share your local cache anyway, you can [activate Nx Powerpack](/recipes/installation/activate-powerpack) and use the [`@nx/powerpack-shared-fs-cache`](/nx-api/powerpack-shared-fs-cache) plugin.
|
||||
Nx implicitly trusts the local cache which is stored by default in the `.nx/cache` folder. You can change the location of that folder in the `nx.json` file, so it could be tempting to place it on a network drive and easily share your cache with everyone on the company network. However, by doing this you've voided the guarantee of immutability from your cache. If someone has direct access to the cached files, they could directly poison the cache. Nx will automatically detect if a cache entry has been created in your local cache using a different machine and warn you with an [Unknown Local Cache Error](/troubleshooting/unknown-local-cache). Instead, use Nx Cloud [remote caching](/ci/features/remote-cache). If you want share your local cache anyway, you can [activate Nx Powerpack](/nx-enterprise/activate-powerpack) and use the [`@nx/powerpack-shared-fs-cache`](/nx-api/powerpack-shared-fs-cache) plugin.
|
||||
|
||||
### Configure End to End Encryption
|
||||
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
# Advanced Configuration
|
||||
|
||||
## Troubleshooting and Verbose Logging
|
||||
|
||||
To help troubleshoot installations set `verboseLogging` to `'true'`:
|
||||
|
||||
```yaml
|
||||
image:
|
||||
tag: 'latest'
|
||||
|
||||
verboseLogging: 'true'
|
||||
```
|
||||
|
||||
## Running the Mongo Database
|
||||
|
||||
Nx Cloud uses MongoDB to store its metadata. There are several common ways to run MongoDB.
|
||||
|
||||
### Using MongoDB Kubernetes Operator
|
||||
|
||||
The MongoDB team maintains the open
|
||||
source [MongoDB Kubernetes Operator](https://github.com/mongodb/mongodb-kubernetes-operator). You can use it to set up
|
||||
your own deployment of MongoDB. See [the Nx Cloud Kubernetes example](https://github.com/nrwl/nxcloud-k8s-setup) for
|
||||
more information.
|
||||
|
||||
### Using Mongo Atlas
|
||||
|
||||
[Mongo Atlas](https://mongodb.com/) is a great option for deploying MongoDB.
|
||||
|
||||
## Using External File Storage
|
||||
|
||||
By default, the on-prem version of Nx Cloud is going to start a file server and store the cached artifacts in the
|
||||
provided volume. But
|
||||
you can also configure Nx Cloud to use an external file storage. At the moment, only S3 and Azure Blob are
|
||||
supported.
|
||||
|
||||
### Using S3/Minio
|
||||
|
||||
To configure S3 as a file storage, provision the `AWS_S3_ACCESS_KEY_ID`, `AWS_S3_SECRET_ACCESS_KEY`, and `AWS_S3_BUCKET`
|
||||
env variables for the `nx-cloud-nx-api` container.
|
||||
|
||||
If you are using an accelerated bucket, et: `AWS_S3_ACCELERATED` to `true`
|
||||
|
||||
If you are using a local S3 installation (e.g., Minio), you will also need to set `AWS_S3_ENDPOINT`.
|
||||
|
||||
{% callout type="note" title="On cache item expiration time" %}
|
||||
Remember to
|
||||
set [a cache item expiration time](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-expire-general-considerations.html)
|
||||
. The default is currently 4 weeks. If you would like to keep items for longer, for example for 8 weeks, please remember
|
||||
to set the `NX_CACHE_EXPIRATION_PERIOD_IN_DAYS=56` env variable as well, so the container knows when to expire the Mongo
|
||||
cache entries as well.
|
||||
{% /callout %}
|
||||
|
||||
### Using Azure
|
||||
|
||||
To configure Azure Blob as a file storage, provision the `AZURE_CONNECTION_STRING`, `AZURE_CONTAINER` env variables for the `nx-cloud-nx-api` container.
|
||||
|
||||
To obtain the `AZURE_CONNECTION_STRING` value go to your "Storage Account" and click on "Access Keys". You will also
|
||||
need to create a container in your storage account before starting the Nx Cloud container.
|
||||
|
||||
If you use an external file storage and an external MongoDB instance, you don't have to provision the volume.
|
||||
|
||||
{% callout type="note" title="Cache expiration time" %}
|
||||
See note above about setting a cache expiration time. For Azure blob
|
||||
storage, [see this guide](https://docs.microsoft.com/en-us/azure/cdn/cdn-manage-expiration-of-blob-content).
|
||||
{% /callout %}
|
||||
@@ -1,182 +0,0 @@
|
||||
# Setting up a dedicated Nx Cloud VM
|
||||
|
||||
## AWS EC2
|
||||
|
||||
1. Login to your AWS Console and select [the top image published here](https://console.aws.amazon.com/ec2/v2/home?home#Images:visibility=public-images;imageName=nx-cloud;owner=623002322076;sort=desc:imageName)
|
||||
2. Launch a new instance from that AMI
|
||||
3. Recommended instance type: `t3.2xlarge`
|
||||
4. You will need to SSH into the instance once it's created:
|
||||
- Use an existing SSH key-pair that you already have installed locally.
|
||||
- [Or create a new one and download the keys locally](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html?icmpid=docs_ec2_console#having-ec2-create-your-key-pair)
|
||||
- Then select your new SSH pair from the list
|
||||
5. Networking:
|
||||
- Allow the instance to receive HTTP and HTTPS traffic
|
||||
- Allow SSH from your current IP
|
||||
6. Leave the storage options as they are
|
||||
7. "Launch instance"
|
||||
8. Wait 10 minutes, then navigate to your instance's IP in the browser. You should see the Nx Cloud dashboard!
|
||||
|
||||

|
||||
|
||||
### Your Nx Cloud URL
|
||||
|
||||
1. At this point, your instance will have a public IP accessible from the browser.
|
||||
- You can consider this IP the URL of Nx Cloud, and proceed with the below steps and all will work fine!
|
||||
2. You might want, however, to add a Load Balancer in front of the instance, with an explicit domain (e.g. https://my-nxcloud.my-org.com).
|
||||
- This is strongly recommended because you will be able to upgrade/restart/re-configure your Nx Cloud EC2 instance while keeping the Nx Cloud URL static.
|
||||
- Create an [application load balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)
|
||||
- You will need to create a certificate for your domain to assign to the LB
|
||||
- And you will need to target your EC2 instance from the LB
|
||||
- You should now have a permanent domain pointing to your Nx Cloud instance
|
||||
|
||||
Once you have your Nx Cloud URL proceed to the below steps!
|
||||
|
||||
### Configuring your Nx Cloud instance
|
||||
|
||||
1. Create a new `myconfiguration.yaml` file with the below contents
|
||||
|
||||
```yaml
|
||||
# This is all you need to get the baseline of your nx-cloud instance configured!
|
||||
|
||||
# Set the external URL your instance is running on. This is the URL from the previous step
|
||||
nxCloudAppURL: 'https://nx-cloud.on.my-domain.ca' # make sure no backslash is at the end
|
||||
|
||||
secret:
|
||||
# set your initial admin password for logging into the app
|
||||
adminPassword: 'correcthorsebatterystaple'
|
||||
```
|
||||
|
||||
2. Apply the configuration:
|
||||
|
||||
```bash
|
||||
scp -i ./<path-to-your-ssh-pem-file>.pem -r ./myconfiguration.yaml nx-cloud@<your-instance-ip>:~/config/user/update.yaml
|
||||
```
|
||||
|
||||
That's it! After a few minutes, you should be able to log-in with:
|
||||
|
||||
- username: `admin`
|
||||
- password: `<the-password-you-set-above>`
|
||||
|
||||
### Applying the license
|
||||
|
||||
Once you log-in, you will see an organisation has been created for you.
|
||||
|
||||
1. You can rename it or create a new organization.
|
||||
2. Navigate to your new organization's page and send us it's id
|
||||
- It should look something like this: https://your-url.com/orgs/649f240f7fb955000c1fd10b/workspaces
|
||||
3. We will then give you a License Key which you can apply on your org's billing page
|
||||
|
||||
### Connecting to your instance
|
||||
|
||||
In your Nx workspace, you can enable Nx Cloud by running:
|
||||
|
||||
```bash
|
||||
NX_CLOUD_API="https://nx-cloud.on.my-domain.ca" npx nx connect
|
||||
```
|
||||
|
||||
If it doesn't work, there might be an issue with unrecognized certificates on your instance. You can try running with:
|
||||
|
||||
```bash
|
||||
NODE_TLS_REJECT_UNAUTHORIZED=0 NX_CLOUD_API="https://nx-cloud.on.my-domain.ca" npx nx connect
|
||||
```
|
||||
|
||||
Although we have [a full guide here](https://github.com/nrwl/nx-cloud-helm/blob/main/PROXY-GUIDE.md#nxcloud-runner-proxy-issues) for dealing with self-signed certificates.
|
||||
|
||||
### Advanced configuration and auth
|
||||
|
||||
You can optionally enable authentication using your preferred SSO provider:
|
||||
|
||||
- GitHub
|
||||
- Bitbucket
|
||||
- GitLab
|
||||
- SAML (Okta, Azure AD etc.)
|
||||
- And even [Nx Agents](/ci/features/distribute-task-execution#distribute-task-execution-nx-agents)
|
||||
- Follow [the guide here](https://github.com/nrwl/nx-cloud-helm/blob/main/agents-guide/AGENTS-GUIDE.md) for setting up an Nx Agents cluster
|
||||
|
||||
```yaml
|
||||
# This is all you need to get the baseline of your nx-cloud instance configured!
|
||||
|
||||
# only use this if you'd like to use any of the newer Nx Cloud version from here: https://nx.dev/ci/reference/release-notes#docker-containers
|
||||
# global.imageTag: ''
|
||||
|
||||
# Set the external URL your instance is running on
|
||||
nxCloudAppURL: 'https://nx-cloud.on.my-domain.ca' # make sure no backslash is at the end
|
||||
|
||||
# Uncomment (along with github secrets below) to enable working with GitHub pull requests or github auth
|
||||
#github:
|
||||
# auth:
|
||||
# enabled: false
|
||||
# pr:
|
||||
# apiUrl: '' # this is only needed if you have a self-hosted github instance
|
||||
|
||||
#gitlab:
|
||||
# apiUrl: '' # this is only needed if you have a self-hosted gitlab instance
|
||||
# auth:
|
||||
# enabled: false
|
||||
|
||||
# we do not support self-hosted bitbucket instances
|
||||
#bitbucket:
|
||||
# apiUrl: '' (if using Data Center/on-prem)
|
||||
# auth:
|
||||
# enabled: false
|
||||
|
||||
#saml:
|
||||
# auth:
|
||||
# enabled: false
|
||||
|
||||
# for enabling Nx Agents
|
||||
#nxCloudWorkflows:
|
||||
# enabled: true
|
||||
# externalName: your-agents-cluster-address.com
|
||||
|
||||
# Provide plaintext values for your application to use. We will extract them,
|
||||
# store them within the application runtime, and scrub the plaintext ones from
|
||||
# the filesystem
|
||||
secret:
|
||||
# set your initial admin password for logging into the app
|
||||
# see here: https://nx.dev/ci/recipes/enterprise/on-premise/auth-single-admin
|
||||
adminPassword: 'correcthorsebatterystaple'
|
||||
|
||||
# If you want to enable GitHub Login, just provide your client id & secret, we handle the rest
|
||||
# see here: https://nx.dev/ci/recipes/enterprise/on-premise/auth-github
|
||||
githubAuthClientId: 'my_client_id'
|
||||
githubAuthClientSecret: 'my_client_secret'
|
||||
|
||||
# The same goes for GitLab authentication
|
||||
# see here: https://nx.dev/ci/recipes/enterprise/on-premise/auth-gitlab
|
||||
# gitlabAppId: 'my_gitlab_app_id'
|
||||
# gitlabAppSecret: 'my_gitlab_app_secret'
|
||||
|
||||
# Bitbucket too! If these are uncommented, BB auth is automatically enabled
|
||||
# see here: https://nx.dev/ci/recipes/enterprise/on-premise/auth-bitbucket
|
||||
# bitbucketAppId: 'bitbucket_app_id'
|
||||
# bitbucketAppSecret: 'bitbucket_app_secret'
|
||||
|
||||
# SAML auth
|
||||
# see here: https://nx.dev/ci/recipes/enterprise/on-premise/auth-saml
|
||||
# samlEntryPoint: 'your_saml_entry_point'
|
||||
# samlCert: 'saml_cert'
|
||||
```
|
||||
|
||||
### Upgrades
|
||||
|
||||
We send out emails with every new Nx Cloud release to all our Enterprise customers:
|
||||
|
||||
1. You can view your current version at the `/version` route: https://your-nx-cloud-url.com/version
|
||||
2. [And these are the latest Nx Cloud releases](/ci/reference/release-notes)
|
||||
|
||||
To upgrade to a newer version, add the below line to your `myconfiguration.yml` file:
|
||||
|
||||
```yaml
|
||||
global:
|
||||
imageTag: '2306.01.2'
|
||||
global:
|
||||
imageTag: '2405.02.15' # set the version of nx-cloud you'd like
|
||||
helmVersion: '0.15.3' # helm version
|
||||
```
|
||||
|
||||
And apply the changes:
|
||||
|
||||
```bash
|
||||
scp -r ./myconfiguration.yaml nx-cloud@<your-instance-ip>:~/config/user/update.yaml
|
||||
```
|
||||
@@ -1,44 +0,0 @@
|
||||
# GitHub Auth
|
||||
|
||||
First, you'll need to create a GitHub OAuth app for your organisation.
|
||||
|
||||
## Creating a GitHub OAuth app
|
||||
|
||||
From GitHub, click on your profile picture and chose "Settings":
|
||||
|
||||

|
||||
|
||||
Then "Developer settings" from the left-hand menu:
|
||||
|
||||

|
||||
|
||||
Then "OAuth Apps":
|
||||
|
||||

|
||||
|
||||
And create a new OAuth app:
|
||||
|
||||

|
||||
|
||||
Give it a name, and a homepage URL. The authorization callback is the important bit. It needs to be in this form:
|
||||
|
||||
```
|
||||
[your-nx-cloud-url]/auth-callback
|
||||
|
||||
# for example
|
||||
https://my.nx-enterprise.url:8080/auth-callback
|
||||
```
|
||||
|
||||

|
||||
|
||||
Once you create, keep a note of the Client ID:
|
||||
|
||||

|
||||
|
||||
And then generate a new client secret, and save it somewhere secure (we'll use it in a bit):
|
||||
|
||||

|
||||
|
||||
## Configure Nx Cloud Installation
|
||||
|
||||
It's now time to enable auth on NxCloud. Refer to the [auth guide](https://github.com/nrwl/nx-cloud-helm/blob/main/AUTH-GUIDE.md) here for instructions on configuring your Helm values file.
|
||||
@@ -1,69 +0,0 @@
|
||||
# Auth (Basic)
|
||||
|
||||
## Why do users need access?
|
||||
|
||||
While just adding an Nx Cloud access token to your monorepo gives you remote caching and distributed tasks
|
||||
execution, the Nx Cloud web app gives you analytics about tasks running in your workspace, allows devs to easily inspect
|
||||
terminal output, and works seamlessly with our GitHub integration for your Pull Requests. Here is
|
||||
a [video walkthrough of this](https://youtu.be/GT7XIwG1i5A?t=409).
|
||||
|
||||
By default, when you connect your token to a workspace on your Nx Cloud web app, all links and runs are private to only
|
||||
members of your organisation. This means that you'll either need to explicitly add members, or make your organisation
|
||||
public (which means anyone with access to your Nx Cloud instance will be able to see your runs)
|
||||
.
|
||||
|
||||
## Setting up a single admin user
|
||||
|
||||
If you just want to try out running Nx Cloud on prem and set up full membership management later, then the simplest
|
||||
option is to
|
||||
just set up a single admin user. This option might also work for you if you are okay
|
||||
with making your organisation public to anyone that has access to your
|
||||
Nx Cloud installation.
|
||||
|
||||
To do that provision the `ADMIN_PASSWORD` env variable for the `nx-cloud-aggregator` container (if you are running Nx
|
||||
Cloud as a single container, provision the `ADMIN_PASSWORD` env variable for that container). This will set up a
|
||||
default admin user for you, which you can use to manage your workspace on the Nx Cloud web app.
|
||||
|
||||
{% callout type="note" title="Preventing access loss" %}
|
||||
Even if you can make your organisation public, we still recommend setting up GitHub authentication and inviting more
|
||||
than 1 admin to your workspace, to reduce the chance of losing access to it.
|
||||
{% /callout %}
|
||||
|
||||
## Setting up third-party auth providers
|
||||
|
||||
For instructions on how to set up third-party auth providers, please refer to these guides:
|
||||
|
||||
- [GitHub Auth](/ci/recipes/enterprise/on-premise/auth-github)
|
||||
- [GitLab Auth](/ci/recipes/enterprise/on-premise/auth-gitlab)
|
||||
- [BitBucket Auth](/ci/recipes/enterprise/on-premise/auth-bitbucket)
|
||||
- [BitBucket Data Center Auth](/ci/recipes/enterprise/on-premise/auth-bitbucket-data-center)
|
||||
- [SAML Auth](/ci/recipes/enterprise/on-premise/auth-saml)
|
||||
|
||||
## Inviting users
|
||||
|
||||
Once that's done, you can either sign in with your admin user by using the form, or
|
||||
directly via the configured third-party authentication providers by clicking the "_Sign In with configured third-party provider_" button:
|
||||
|
||||

|
||||
|
||||
You can then go to your organisation's settings and then to the members page and start inviting people based on their GitHub username.
|
||||
When you invite someone, Nx Cloud will generate a unique invite URL, which you can send to that person directly.
|
||||
|
||||
## Migrating from an admin-only set up to auth via a configured provider
|
||||
|
||||
If you already have an admin user that manages an existing Nx Cloud workspace, you can still login by using the login form, even after you set up
|
||||
GitHub auth.
|
||||
|
||||
## Finding usernames
|
||||
|
||||
To ensure only the members you trust can accept invitations to your workspace, you need to invite them via their
|
||||
GitHub/GitLab/BitBucket username, and then they need to be logged in with that username to accept the invite. Usernames
|
||||
can usually be found by clicking in the top-right corner.
|
||||
|
||||
GitLab:
|
||||
|
||||

|
||||
|
||||
GitHub:
|
||||
|
||||

|
||||
@@ -1,106 +0,0 @@
|
||||
# Custom GitHub App
|
||||
|
||||
Before creating your container, you'll need to create a GitHub app for your organisation.
|
||||
|
||||
## Creating a GitHub OAuth app
|
||||
|
||||
From GitHub, click on your profile picture and chose "Settings":
|
||||
|
||||

|
||||
|
||||
Then "Developer settings" from the left-hand menu:
|
||||
|
||||

|
||||
|
||||
Then "GitHub Apps":
|
||||
|
||||

|
||||
|
||||
And create a new GitHub app:
|
||||
|
||||

|
||||
|
||||
Give it a name, and a homepage URL. The callback URL is the important bit. It needs to be in this form:
|
||||
|
||||
```
|
||||
[your-nx-cloud-url]/callbacks/github-user
|
||||
|
||||
# for example
|
||||
https://my.nx-enterprise.url:8080/callbacks/github-user
|
||||
```
|
||||
|
||||
Once you create the app, keep a note of the Client ID and App ID:
|
||||
|
||||

|
||||
|
||||
Then generate a new client secret, and save it somewhere secure (we'll use it in a bit):
|
||||
|
||||

|
||||
|
||||
## Configure Permissions for the GitHub App
|
||||
|
||||
The following permissions are required for Nx Cloud to work:
|
||||
|
||||
Repository permissions:
|
||||
|
||||
- `Contents: Read & Write`
|
||||
- `Pull requests: Read & Write`
|
||||
- `Checks: Read Only`
|
||||
- `Commit Statuses: Read & Write`
|
||||
- `Issues: Read & Write`
|
||||
- `Metadata: Read Only`
|
||||
|
||||
Organization permissions:
|
||||
|
||||
- `Administration: Read Only`
|
||||
- `Members: Read Only`
|
||||
|
||||
## Configure Nx Cloud Installation
|
||||
|
||||
### Using Helm:
|
||||
|
||||
```yaml
|
||||
image:
|
||||
tag: 'latest'
|
||||
|
||||
nxCloudAppURL: 'https://nx-cloud.myorg.com'
|
||||
|
||||
github:
|
||||
auth:
|
||||
enabled: true
|
||||
|
||||
secret:
|
||||
name: 'cloudsecret'
|
||||
githubAppClientId: 'NX_CLOUD_GITHUB_APP_CLIENT_ID'
|
||||
githubAppClientSecret: 'NX_CLOUD_GITHUB_APP_CLIENT_SECRET'
|
||||
githubAppId: 'NX_CLOUD_GITHUB_APP_APP_ID'
|
||||
```
|
||||
|
||||
Note that the secret must contain `NX_CLOUD_GITHUB_APP_CLIENT_ID`, `NX_CLOUD_GITHUB_APP_APP_ID`, and `NX_CLOUD_GITHUB_APP_CLIENT_SECRET` (
|
||||
see [Nx Cloud Helm Charts](https://github.com/nrwl/nx-cloud-helm) for more context).
|
||||
|
||||
### Not using Helm:
|
||||
|
||||
Provide the following env variables to the `nx-cloud-frontend` container:
|
||||
|
||||
- `NX_CLOUD_GITHUB_APP_CLIENT_ID`
|
||||
- `NX_CLOUD_GITHUB_APP_CLIENT_SECRET`
|
||||
- `NX_CLOUD_GITHUB_APP_APP_ID`
|
||||
|
||||
{% callout title="Helm Chart Environment Variables" %}
|
||||
If you are using our Helm chart, you can find all the information you need about env variables in [the Helm chart repository](https://github.com/nrwl/nx-cloud-helm/blob/main/AUTH-GUIDE.md).
|
||||
{% /callout %}
|
||||
|
||||
<!-- ## GitHub Enterprise
|
||||
|
||||
If you are running a self-hosted version of GitHub (Enterprise Server), you will need to configure one additional
|
||||
environment variable:
|
||||
|
||||
`GITHUB_API_URL=https://custom-github-instance.com`
|
||||
|
||||
This will point all auth endpoints to your GitHub server (rather the public one).
|
||||
|
||||
{% callout type="check" title="Good to know!" %}
|
||||
The above environment variable, also helps with setting up the GitHub app integration, so you can have Nx Cloud build
|
||||
stats directly on your pull request. See full set up instructions [here](/ci/recipes/source-control-integration/github).
|
||||
{% /callout %} -->
|
||||
@@ -1,6 +1,6 @@
|
||||
# BitBucket Data Center Auth
|
||||
|
||||
This page is for configuring auth via BitBucket Data Center (on-prem). If you are using BitBucket Cloud please refer to the docs [here](/ci/recipes/enterprise/on-premise/auth-bitbucket).
|
||||
This page is for configuring auth via BitBucket Data Center (on-prem). If you are using BitBucket Cloud please refer to the docs [here](/ci/recipes/enterprise/single-tenant/auth-bitbucket).
|
||||
|
||||
Before creating your container, your Bitbucket Data Center admin will need to create an "Application Link".
|
||||
|
||||
@@ -8,16 +8,16 @@ Before creating your container, your Bitbucket Data Center admin will need to cr
|
||||
|
||||
Your BitBucket installation admin will need to navigate to their installation settings:
|
||||
|
||||

|
||||

|
||||
|
||||
Then "Application Links":
|
||||
|
||||

|
||||

|
||||
|
||||
And create a new link using the settings below (make sure the callback URL is pointed to your BitBucket installation):
|
||||
|
||||

|
||||

|
||||
|
||||
## Connect your Nx Cloud installation to your new app
|
||||
## Connect Your Nx Cloud Installation to Your New App
|
||||
|
||||
It's now time to enable auth on NxCloud. Refer to the [auth guide](https://github.com/nrwl/nx-cloud-helm/blob/main/AUTH-GUIDE.md) here for instructions on configuring your Helm values file.
|
||||
Contact your developer productivity engineer to connect your Nx Cloud instance to the newly created BitBucket data center app.
|
||||
@@ -1,22 +1,22 @@
|
||||
# BitBucket Cloud Auth
|
||||
|
||||
This page is only for BitBucket Cloud (bitbucket.org). If you have an on-premise version of BitBucket Data Center please refer to the docs [here](/ci/recipes/enterprise/on-premise/auth-bitbucket-data-center).
|
||||
This page is only for BitBucket Cloud (bitbucket.org). If you have an on-premise version of BitBucket Data Center please refer to the docs [here](/ci/recipes/enterprise/single-tenant/auth-bitbucket-data-center).
|
||||
|
||||
First, you'll need to create a BitBucket "OAuth consumer" for your organisation.
|
||||
|
||||
## Creating a BitBucket OAuth consumer
|
||||
## Creating a BitBucket OAuth Consumer
|
||||
|
||||
From BitBucket, click on your profile picture and select your workspace:
|
||||
|
||||

|
||||

|
||||
|
||||
Then "Settings":
|
||||
|
||||

|
||||

|
||||
|
||||
Then "OAuth consumers":
|
||||
|
||||

|
||||

|
||||
|
||||
And create a new consumer.
|
||||
|
||||
@@ -31,18 +31,18 @@ https://my.nx-enterprise.url:8080/auth-callback
|
||||
|
||||
**Important:** Ensure there is **no backslash at the end of the "Callback URL"** (i.e. it matches the above pattern)
|
||||
|
||||

|
||||

|
||||
|
||||
Ensure you grant it the `account:read` and `account:email` scopes:
|
||||
|
||||

|
||||

|
||||
|
||||
Save your changes.
|
||||
|
||||
Once you create, keep a note of the Key and the Secret:
|
||||
|
||||

|
||||

|
||||
|
||||
## Connect your Nx Cloud installation to your new app
|
||||
## Connect Your Nx Cloud Installation to Your BitBucket OAuth Consumer
|
||||
|
||||
It's now time to enable auth on NxCloud. Refer to the [auth guide](https://github.com/nrwl/nx-cloud-helm/blob/main/AUTH-GUIDE.md) here for instructions on configuring your Helm values file.
|
||||
Contact your developer productivity engineer to connect your Nx Cloud instance to the newly created BitBucket OAuth consumer.
|
||||
@@ -0,0 +1,44 @@
|
||||
# GitHub Auth
|
||||
|
||||
First, you'll need to create a GitHub OAuth app for your organisation.
|
||||
|
||||
## Creating a GitHub OAuth app
|
||||
|
||||
From GitHub, click on your profile picture and chose "Settings":
|
||||
|
||||

|
||||
|
||||
Then "Developer settings" from the left-hand menu:
|
||||
|
||||

|
||||
|
||||
Then "OAuth Apps":
|
||||
|
||||

|
||||
|
||||
And create a new OAuth app:
|
||||
|
||||

|
||||
|
||||
Give it a name, and a homepage URL. The authorization callback is the important bit. It needs to be in this form:
|
||||
|
||||
```
|
||||
[your-nx-cloud-url]/auth-callback
|
||||
|
||||
# for example
|
||||
https://my.nx-enterprise.url:8080/auth-callback
|
||||
```
|
||||
|
||||

|
||||
|
||||
Once you create, keep a note of the Client ID:
|
||||
|
||||

|
||||
|
||||
And then generate a new client secret, and save it somewhere secure (we'll use it in a bit):
|
||||
|
||||

|
||||
|
||||
## Configure Nx Cloud Installation
|
||||
|
||||
Contact your developer productivity engineer to connect your Nx Cloud instance to the newly created GitHub OAuth app.
|
||||
@@ -6,11 +6,11 @@ Before creating your container, you'll need to create a GitLab app for your orga
|
||||
|
||||
From GitLab, click on your profile picture and chose "Preferences":
|
||||
|
||||

|
||||

|
||||
|
||||
Then "Applications" from the left-hand menu:
|
||||
|
||||

|
||||

|
||||
|
||||
Give the app a name. The authorization callback is the important bit. It needs to be in this form:
|
||||
|
||||
@@ -23,18 +23,18 @@ https://my.nx-enterprise.url:8080/auth-callback
|
||||
|
||||
**Important:** Ensure there is **no backslash at the end of the "Redirect URI"** (i.e. it matches the above pattern)
|
||||
|
||||

|
||||

|
||||
|
||||
Ensure you grant it the "`read_user`" scope:
|
||||
|
||||

|
||||

|
||||
|
||||
Click "Save application".
|
||||
|
||||
Once you create, keep a note of the Client ID and the Secret:
|
||||
|
||||

|
||||

|
||||
|
||||
## Connect your Nx Cloud installation to your new app
|
||||
## Connect Your Nx Cloud Installation to Your New App
|
||||
|
||||
It's now time to enable auth on NxCloud. Refer to the [auth guide](https://github.com/nrwl/nx-cloud-helm/blob/main/AUTH-GUIDE.md) here for instructions on configuring your Helm values file.
|
||||
Contact your developer productivity engineer to connect your Nx Cloud instance to the newly created GitLab app.
|
||||
@@ -12,44 +12,44 @@ if you are interested.
|
||||
|
||||
1. Create a new enterprise app
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
2. Choose “Create your own”:
|
||||
|
||||

|
||||

|
||||
|
||||
3. Give it a name
|
||||
|
||||

|
||||

|
||||
|
||||
4. Assign your users and/or groups to it:
|
||||
|
||||

|
||||

|
||||
|
||||
5. Then set-up SSO
|
||||
|
||||

|
||||

|
||||
|
||||
6. And choose SAML:
|
||||
|
||||

|
||||

|
||||
|
||||
7. Add these configuration options
|
||||
|
||||
1. Configure the Identifier **exactly** as `nx-private-cloud`
|
||||
2. For the **Reply URL**, it should point to your Private Cloud instance URL. Make sure it ends with `/auth-callback`
|
||||
|
||||

|
||||

|
||||
|
||||
8. Scroll down and manage claims:
|
||||
|
||||

|
||||

|
||||
|
||||
9. The first row should be the `email` claim, click to Edit it:
|
||||
|
||||

|
||||

|
||||
|
||||
10. Configure it as per below
|
||||
|
||||
@@ -57,32 +57,32 @@ if you are interested.
|
||||
2. **“Name:”** needs to be “email”
|
||||
3. See screenshot below. This is an important step, because Nx Cloud will expect the “email” property on each profile that logs in.
|
||||
|
||||

|
||||

|
||||
|
||||
Make sure your application user profile exposes the email address under `user.mail`. This can be configured in `Users and Groups` in the Azure portal. Alternatively, you can always configure the `email` claim to use a different property under the `user` object.
|
||||
|
||||
11. Under `SAML Certificates`, click the pencil icon to edit
|
||||
|
||||

|
||||

|
||||
|
||||
For **Signing Option**, select **Sign SAML response and assertion**
|
||||
|
||||

|
||||

|
||||
|
||||
Then click **Save** and close the popover.
|
||||
|
||||
12. Download the certificate in **Base64**:
|
||||
|
||||

|
||||

|
||||
|
||||
13. Extract the downloaded certificate value as a one-line string:
|
||||
1. `awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' azure_cert_file.cer`
|
||||
2. We’ll use this in a bit to initialize an environment variable
|
||||
2. We’ll use this later
|
||||
14. Copy the Login URL:
|
||||
|
||||

|
||||

|
||||
|
||||
15. Then add these two env vars to your Nx Cloud cluster secrets (see [Helm config](#helm-config) below):
|
||||
15. Save the following information to send to your DPE:
|
||||
1. `SAML_CERT=<your-cert-string-from-above>`
|
||||
2. `SAML_ENTRY_POINT=<your-login-url-from-above>`
|
||||
|
||||
@@ -90,46 +90,46 @@ if you are interested.
|
||||
|
||||
1. Create a new Okta App Integration:
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
2. Give it a name:
|
||||
|
||||

|
||||

|
||||
|
||||
3. On the Next page, configure it as below:
|
||||
|
||||
1. The Single Sign On URL needs to point to your Nx Cloud instance URL and ends with `/auth-callback`
|
||||
2. The Audience should be `nx-private-cloud`
|
||||
|
||||

|
||||

|
||||
|
||||
4. Scroll down to attribute statements and configure them as per below:
|
||||
|
||||

|
||||

|
||||
|
||||
5. Click “Next”, and select the first option on the next screen.
|
||||
6. Go to the assignments tab and assign the users that can login to the Nx Cloud WebApp:
|
||||
|
||||
1. **Note:** This just gives them permission to use the Nx Cloud web app with their own workspace. Users will still need to be invited manually through the web app to your main workspace.
|
||||
|
||||

|
||||

|
||||
|
||||
7. Then in the Sign-On tab scroll down:
|
||||
|
||||

|
||||

|
||||
|
||||
8. Scroll down and from the list of certificates, download the one with the “Active” status:
|
||||
|
||||

|
||||

|
||||
|
||||
9. Extract the downloaded certificate value as a one-line string:
|
||||
1. `awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' okta.cert`
|
||||
2. We will use this in a bit to initialize and environment variable
|
||||
2. We'll use this later
|
||||
10. Then view the ldP metadata:
|
||||
|
||||

|
||||

|
||||
|
||||
11. Then find the row similar to the below, and copy the highlighted URL (see screenshot as well):
|
||||
|
||||
@@ -140,8 +140,8 @@ if you are interested.
|
||||
/>
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
## Helm config
|
||||
## Connect Your Nx Cloud Installation to Your SAML Set Up
|
||||
|
||||
It's now time to enable auth on NxCloud. Refer to the [auth guide](https://github.com/nrwl/nx-cloud-helm/blob/main/AUTH-GUIDE.md) here for instructions on configuring your Helm values file.
|
||||
Contact your developer productivity engineer to connect your Nx Cloud instance to the SAML configuration.
|
||||
@@ -0,0 +1,83 @@
|
||||
# Custom GitHub App
|
||||
|
||||
Before creating your container, you'll need to create a GitHub app for your organisation.
|
||||
|
||||
## Creating a GitHub OAuth app
|
||||
|
||||
From GitHub, click on your profile picture and chose "Settings":
|
||||
|
||||

|
||||
|
||||
Then "Developer settings" from the left-hand menu:
|
||||
|
||||

|
||||
|
||||
Then "GitHub Apps":
|
||||
|
||||

|
||||
|
||||
And create a new GitHub app:
|
||||
|
||||

|
||||
|
||||
Give it a name, and a homepage URL. The callback URL is the important bit. It needs to be in this form:
|
||||
|
||||
```
|
||||
[your-nx-cloud-url]/callbacks/github-user
|
||||
|
||||
# for example
|
||||
https://my.nx-enterprise.url:8080/callbacks/github-user
|
||||
```
|
||||
|
||||
Configure a webhook and give it a secret:
|
||||
(the URL needs to match `https://<your-NxCloud-instance-URL>/nx-cloud/github-webhook-handler`)
|
||||
|
||||

|
||||
|
||||
Once you create the app, keep a note of the Client ID and App ID:
|
||||
|
||||

|
||||
|
||||
Then generate a new client secret, and save it somewhere secure (we'll use it in a bit):
|
||||
|
||||

|
||||
|
||||
Finally, scroll down and download a private key:
|
||||
|
||||

|
||||
|
||||
Then navigate to your download location locally and stringify the contents of the private key:
|
||||
|
||||
```bash
|
||||
awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' your-key.pem # keep a note of the output
|
||||
```
|
||||
|
||||
Save the output of the above, as we'll also use it in a bit.
|
||||
|
||||
## Configure Permissions for the GitHub App
|
||||
|
||||
The following permissions are required for Nx Cloud to work:
|
||||
|
||||
Repository permissions:
|
||||
|
||||
- `Contents: Read & Write`
|
||||
- `Pull requests: Read & Write`
|
||||
- `Checks: Read Only`
|
||||
- `Commit Statuses: Read & Write`
|
||||
- `Issues: Read & Write`
|
||||
- `Metadata: Read Only`
|
||||
|
||||
Organization permissions:
|
||||
|
||||
- `Administration: Read Only`
|
||||
- `Members: Read Only`
|
||||
|
||||
## Connect Your Nx Cloud Installation
|
||||
|
||||
Provide the following values to your developer productivity engineer so they can help connect Nx Cloud to your custom GitHub app:
|
||||
|
||||
- Github App Client ID
|
||||
- Github App Client Secret
|
||||
- Github App App ID
|
||||
- Github App Private Key
|
||||
- GitHub App Webhook Secret
|
||||
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 194 KiB After Width: | Height: | Size: 194 KiB |
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 249 KiB After Width: | Height: | Size: 249 KiB |
|
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 198 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 167 KiB After Width: | Height: | Size: 167 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 198 KiB |
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 128 KiB |
|
Before Width: | Height: | Size: 181 KiB After Width: | Height: | Size: 181 KiB |
|
Before Width: | Height: | Size: 298 KiB After Width: | Height: | Size: 298 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 175 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 92 KiB |