@unisphere/nx 4.15.0 → 4.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,363 @@
1
+ name: Shared Deployment Jobs
2
+
3
+ on:
4
+ workflow_call:
5
+
6
+ jobs:
7
+ check-elements:
8
+ runs-on:
9
+ - codebuild-ovp-unisphere-runner-${{ github.run_id }}-${{ github.run_attempt }}
10
+ - instance-size:small
11
+ outputs:
12
+ has_packages: ${{ steps.check.outputs.has_packages }}
13
+ has_runtimes: ${{ steps.check.outputs.has_runtimes }}
14
+ has_applications: ${{ steps.check.outputs.has_applications }}
15
+ steps:
16
+
17
+ - name: Checkout Repo
18
+ uses: actions/checkout@v5
19
+ with:
20
+ ref: ${{ github.event_name == 'pull_request' && github.head_ref || github.ref }}
21
+ fetch-tags: true
22
+
23
+ - name: Check elements in .unisphere
24
+ id: check
25
+ run: |
26
+ if [ -f .unisphere ]; then
27
+ PACKAGES=$(jq -r '.elements.packages // {} | length' .unisphere)
28
+ RUNTIMES=$(jq -r '(.elements.runtimes // {} | length) + (.elements.workspace // {} | length) + (.elements.loader // {} | length)' .unisphere)
29
+ APPLICATIONS=$(jq -r '.elements.applications // {} | length' .unisphere)
30
+
31
+ if [ "$PACKAGES" -gt 0 ]; then
32
+ echo "has_packages=true" >> $GITHUB_OUTPUT
33
+ else
34
+ echo "has_packages=false" >> $GITHUB_OUTPUT
35
+ fi
36
+
37
+ if [ "$RUNTIMES" -gt 0 ]; then
38
+ echo "has_runtimes=true" >> $GITHUB_OUTPUT
39
+ else
40
+ echo "has_runtimes=false" >> $GITHUB_OUTPUT
41
+ fi
42
+
43
+ if [ "$APPLICATIONS" -gt 0 ]; then
44
+ echo "has_applications=true" >> $GITHUB_OUTPUT
45
+ else
46
+ echo "has_applications=false" >> $GITHUB_OUTPUT
47
+ fi
48
+ else
49
+ echo "has_packages=false" >> $GITHUB_OUTPUT
50
+ echo "has_runtimes=false" >> $GITHUB_OUTPUT
51
+ echo "has_applications=false" >> $GITHUB_OUTPUT
52
+ fi
53
+
54
+ prepare-runtimes:
55
+ runs-on:
56
+ - codebuild-ovp-unisphere-runner-${{ github.run_id }}-${{ github.run_attempt }}
57
+ - instance-size:medium
58
+
59
+ if: needs.check-elements.outputs.has_runtimes == 'true'
60
+ needs: check-elements
61
+ outputs:
62
+ unisphereElementsArtifactsFolder: ${{ steps.prepare-runtimes.outputs.artifactsRootFolder }}
63
+ hasArtifacts: ${{ steps.prepare-runtimes.outputs.hasArtifacts }}
64
+ commit_sha: ${{ steps.capture_commit_sha.outputs.commit_sha }}
65
+ steps:
66
+ - name: Cache npm
67
+ uses: actions/cache@v5
68
+ with:
69
+ path: ~/.npm
70
+ key: dependencies-${{ runner.os }}-node-${{ hashFiles('.nvmrc') }}-${{ hashFiles('package-lock.json') }}
71
+ restore-keys: |
72
+ dependencies-${{ runner.os }}-node-${{ hashFiles('.nvmrc') }}-
73
+
74
+ - name: Checkout Repo
75
+ uses: actions/checkout@v5
76
+ with:
77
+ ref: ${{ github.event_name == 'pull_request' && github.head_ref || github.ref }}
78
+ fetch-tags: true
79
+ - name: Setup Node.js
80
+ uses: actions/setup-node@v5
81
+ with:
82
+ node-version-file: '.nvmrc'
83
+ - name: Clean workspace
84
+ run: git reset --hard HEAD
85
+ - name: Clean npm cache
86
+ run: npm cache clean --force
87
+
88
+ - name: Setup JFrog
89
+
90
+ uses: jfrog/setup-jfrog-cli@v5
91
+ id: setup-jfrog
92
+ env:
93
+ JF_URL: https://kalturaa.jfrog.io
94
+ with:
95
+ oidc-provider-name: ovp-github-oidc
96
+ - name: Install dependencies
97
+ run: npm ci --prefer-offline --include=optional --no-fund --verbose
98
+ env:
99
+ GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }}
100
+ KALTURA_JFROG_TOKEN: ${{ steps.setup-jfrog.outputs.oidc-token }}
101
+
102
+ - name: Prepare Unisphere Elements
103
+ id: prepare-runtimes
104
+ run: npx unisphere runtime publish prepare --verbose
105
+ - name: Capture Commit SHA
106
+ id: capture_commit_sha
107
+ run: echo "commit_sha=$(git rev-parse HEAD)" >> $GITHUB_ENV
108
+ - name: Set commit_sha as output
109
+ id: set_commit_sha
110
+ run: echo "commit_sha=${{ env.commit_sha }}" >> $GITHUB_OUTPUT
111
+ - uses: actions/upload-artifact@v6
112
+ id: upload-unisphere-elements-artifacts
113
+ with:
114
+ name: unisphere-elements
115
+ path: ${{ steps.prepare-runtimes.outputs.artifactsRootFolder }}
116
+ retention-days: 1
117
+
118
+ deploy-packages:
119
+ if: needs.check-elements.outputs.has_packages == 'true'
120
+ needs: check-elements
121
+ runs-on:
122
+ - codebuild-ovp-unisphere-runner-${{ github.run_id }}-${{ github.run_attempt }}
123
+ - instance-size:medium
124
+ steps:
125
+ - name: Cache npm
126
+ uses: actions/cache@v5
127
+ with:
128
+ path: ~/.npm
129
+ key: dependencies-${{ runner.os }}-node-${{ hashFiles('.nvmrc') }}-${{ hashFiles('package-lock.json') }}
130
+ restore-keys: |
131
+ dependencies-${{ runner.os }}-node-${{ hashFiles('.nvmrc') }}-
132
+
133
+ - name: Checkout Repo
134
+ uses: actions/checkout@v5
135
+ with:
136
+ ref: ${{ github.event_name == 'pull_request' && github.head_ref || github.ref }}
137
+ fetch-tags: true
138
+ - name: Setup Node.js
139
+ uses: actions/setup-node@v5
140
+ with:
141
+ node-version-file: '.nvmrc'
142
+
143
+ - name: Setup JFrog
144
+
145
+ uses: jfrog/setup-jfrog-cli@v5
146
+ id: setup-jfrog
147
+ env:
148
+ JF_URL: https://kalturaa.jfrog.io
149
+ with:
150
+ oidc-provider-name: ovp-github-oidc
151
+
152
+ - name: Install dependencies
153
+
154
+ run: |
155
+ npm ci --prefer-offline --include=optional --no-fund --verbose
156
+
157
+ env:
158
+ GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }}
159
+ KALTURA_JFROG_TOKEN: ${{ steps.setup-jfrog.outputs.oidc-token }}
160
+
161
+ - name: Get NPM Token from AWS Secrets Manager
162
+ id: get-npm-token
163
+ run: |
164
+ NPM_TOKEN=$(aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:eu-central-1:785328604905:secret:unisphere-secrets-um86Cs --query SecretString --output text | jq -r '."NPM_UNISPHERE_TOKEN"')
165
+ echo "NPM_TOKEN=$NPM_TOKEN" >> $GITHUB_ENV
166
+ # Debug token existence (safely)
167
+ echo "::debug::Token exists: $([ ! -z "$NPM_TOKEN" ] && echo 'true' || echo 'false')"
168
+ - name: Deploy to registry
169
+ run: npx unisphere package publish --verbose --jfrogToken ${{ steps.setup-jfrog.outputs.oidc-token }} --jfrogUser ${{ steps.setup-jfrog.outputs.oidc-user }} --npmToken ${{ env.NPM_TOKEN }} --branch "${{ github.event_name == 'pull_request' && github.head_ref || github.ref }}"
170
+
171
+ deploy-runtimes:
172
+ if: needs.prepare-runtimes.outputs.hasArtifacts == 'true'
173
+ needs: prepare-runtimes
174
+ runs-on:
175
+ - codebuild-ovp-unisphere-runner-${{ github.run_id }}-${{ github.run_attempt }}
176
+ - instance-size:medium
177
+ strategy:
178
+ matrix:
179
+ envs_regions:
180
+ - { env: 'nvp1', region: 'us-east-1', accountid: '583352821080' }
181
+ - { env: 'frp2', region: 'eu-central-1', accountid: '082111255551' }
182
+ - { env: 'irp2', region: 'eu-west-1', accountid: '137576761235' }
183
+ - { env: 'nvq2', region: 'us-east-1', accountid: '383697330906' }
184
+ - { env: 'sgp2', region: 'ap-southeast-1', accountid: '882351240370' }
185
+ - { env: 'syp2', region: 'ap-southeast-2', accountid: '650755435642' }
186
+ - { env: 'cap2', region: 'ca-central-1', accountid: '948632009361' }
187
+ fail-fast: false
188
+
189
+ steps:
190
+ - name: Cache npm
191
+ uses: actions/cache@v5
192
+ with:
193
+ path: ~/.npm
194
+ key: dependencies-${{ runner.os }}-node-${{ hashFiles('.nvmrc') }}-${{ hashFiles('package-lock.json') }}
195
+ restore-keys: |
196
+ dependencies-${{ runner.os }}-node-${{ hashFiles('.nvmrc') }}-
197
+
198
+ - name: Check available disk space
199
+ run: df -h
200
+ - name: Checkout Repo at specific commit
201
+ uses: actions/checkout@v5
202
+ with:
203
+ ref: ${{ needs.prepare-runtimes.outputs.commit_sha }}
204
+ fetch-tags: true
205
+ - name: Setup Node.js
206
+ uses: actions/setup-node@v5
207
+ with:
208
+ node-version-file: '.nvmrc'
209
+
210
+ - name: Setup JFrog
211
+
212
+ uses: jfrog/setup-jfrog-cli@v5
213
+ id: setup-jfrog
214
+ env:
215
+ JF_URL: https://kalturaa.jfrog.io
216
+ with:
217
+ oidc-provider-name: ovp-github-oidc
218
+
219
+ - name: Install dependencies
220
+
221
+ run: npm ci --prefer-offline --include=optional --no-fund --verbose
222
+ env:
223
+ GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }}
224
+ KALTURA_JFROG_TOKEN: ${{ steps.setup-jfrog.outputs.oidc-token }}
225
+
226
+ - name: Download artifacts folder
227
+ uses: actions/download-artifact@v7
228
+ with:
229
+ name: unisphere-elements
230
+ path: ${{ needs.prepare-runtimes.outputs.unisphereElementsArtifactsFolder }}
231
+ - name: Sync S3 bucket
232
+ run: |
233
+ npx unisphere runtime publish execute \
234
+ --env ${{ matrix.envs_regions.env }} \
235
+ --aws-region '${{ matrix.envs_regions.region }}' \
236
+ --aws-arn 'arn:aws:iam::${{matrix.envs_regions.accountid }}:role/${{ matrix.envs_regions.env }}-unisphere-content-role' \
237
+ --artifacts-folder '${{ needs.prepare-runtimes.outputs.unisphereElementsArtifactsFolder }}' \
238
+ --verbose
239
+
240
+ prepare-applications:
241
+ if: always() && needs.check-elements.outputs.has_applications == 'true'
242
+ needs: [deploy-runtimes, check-elements]
243
+ runs-on:
244
+ - codebuild-ovp-unisphere-runner-${{ github.run_id }}-${{ github.run_attempt }}
245
+ - instance-size:medium
246
+ outputs:
247
+ unisphereApplicationsArtifactsFolder: ${{ steps.prepare-applications.outputs.artifactsRootFolder }}
248
+ hasArtifacts: ${{ steps.prepare-applications.outputs.hasArtifacts }}
249
+ commit_sha: ${{ steps.capture_commit_sha.outputs.commit_sha }}
250
+ steps:
251
+ - name: Cache npm
252
+ uses: actions/cache@v5
253
+ with:
254
+ path: ~/.npm
255
+ key: dependencies-${{ runner.os }}-node-${{ hashFiles('.nvmrc') }}-${{ hashFiles('package-lock.json') }}
256
+ restore-keys: |
257
+ dependencies-${{ runner.os }}-node-${{ hashFiles('.nvmrc') }}-
258
+
259
+ - name: Checkout Repo
260
+ uses: actions/checkout@v5
261
+ with:
262
+ ref: ${{ github.event_name == 'pull_request' && github.head_ref || github.ref }}
263
+ fetch-tags: true
264
+ - name: Setup Node.js
265
+ uses: actions/setup-node@v5
266
+ with:
267
+ node-version-file: '.nvmrc'
268
+ - name: Clean workspace
269
+ run: git reset --hard HEAD
270
+ - name: Clean npm cache
271
+ run: npm cache clean --force
272
+ - name: Setup JFrog
273
+
274
+ uses: jfrog/setup-jfrog-cli@v5
275
+ id: setup-jfrog
276
+ env:
277
+ JF_URL: https://kalturaa.jfrog.io
278
+ with:
279
+ oidc-provider-name: ovp-github-oidc
280
+ - name: Install dependencies
281
+
282
+ run: npm ci --prefer-offline --include=optional --no-fund --verbose
283
+ env:
284
+ GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }}
285
+ KALTURA_JFROG_TOKEN: ${{ steps.setup-jfrog.outputs.oidc-token }}
286
+ - name: Prepare Unisphere Applications
287
+ id: prepare-applications
288
+ run: npx unisphere application publish prepare --verbose
289
+ - name: Capture Commit SHA
290
+ id: capture_commit_sha
291
+ run: echo "commit_sha=$(git rev-parse HEAD)" >> $GITHUB_ENV
292
+ - name: Set commit_sha as output
293
+ id: set_commit_sha
294
+ run: echo "commit_sha=${{ env.commit_sha }}" >> $GITHUB_OUTPUT
295
+ - uses: actions/upload-artifact@v6
296
+ id: upload-unisphere-applications-artifacts
297
+ with:
298
+ name: unisphere-applications
299
+ path: ${{ steps.prepare-applications.outputs.artifactsRootFolder }}
300
+ retention-days: 1
301
+
302
+ deploy-applications:
303
+ if: always() && needs.prepare-applications.outputs.hasArtifacts == 'true'
304
+ needs: [prepare-applications]
305
+ runs-on:
306
+ - codebuild-ovp-unisphere-runner-${{ github.run_id }}-${{ github.run_attempt }}
307
+ - instance-size:medium
308
+ strategy:
309
+ matrix:
310
+ envs_regions:
311
+ - { env: 'nvp1', region: 'us-east-1', accountid: '583352821080' }
312
+ - { env: 'frp2', region: 'eu-central-1', accountid: '082111255551' }
313
+ - { env: 'irp2', region: 'eu-west-1', accountid: '137576761235' }
314
+ - { env: 'nvq2', region: 'us-east-1', accountid: '383697330906' }
315
+ - { env: 'sgp2', region: 'ap-southeast-1', accountid: '882351240370' }
316
+ - { env: 'syp2', region: 'ap-southeast-2', accountid: '650755435642' }
317
+ - { env: 'cap2', region: 'ca-central-1', accountid: '948632009361' }
318
+ fail-fast: false
319
+ steps:
320
+ - name: Cache npm
321
+ uses: actions/cache@v5
322
+ with:
323
+ path: ~/.npm
324
+ key: dependencies-${{ runner.os }}-node-${{ hashFiles('.nvmrc') }}-${{ hashFiles('package-lock.json') }}
325
+ restore-keys: |
326
+ dependencies-${{ runner.os }}-node-${{ hashFiles('.nvmrc') }}-
327
+
328
+ - name: Checkout Repo at specific commit
329
+ uses: actions/checkout@v5
330
+ with:
331
+ ref: ${{ needs.prepare-applications.outputs.commit_sha }}
332
+ fetch-tags: true
333
+ - name: Setup Node.js
334
+ uses: actions/setup-node@v5
335
+ with:
336
+ node-version-file: '.nvmrc'
337
+ - name: Setup JFrog
338
+
339
+ uses: jfrog/setup-jfrog-cli@v5
340
+ id: setup-jfrog
341
+ env:
342
+ JF_URL: https://kalturaa.jfrog.io
343
+ with:
344
+ oidc-provider-name: ovp-github-oidc
345
+ - name: Install dependencies
346
+
347
+ run: npm ci --prefer-offline --include=optional --no-fund --verbose
348
+ env:
349
+ GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }}
350
+ KALTURA_JFROG_TOKEN: ${{ steps.setup-jfrog.outputs.oidc-token }}
351
+ - name: Download artifacts folder
352
+ uses: actions/download-artifact@v7
353
+ with:
354
+ name: unisphere-applications
355
+ path: ${{ needs.prepare-applications.outputs.unisphereApplicationsArtifactsFolder }}
356
+ - name: Sync S3 bucket
357
+ run: |
358
+ npx unisphere application publish execute \
359
+ --env ${{ matrix.envs_regions.env }} \
360
+ --aws-region '${{ matrix.envs_regions.region }}' \
361
+ --aws-arn 'arn:aws:iam::${{matrix.envs_regions.accountid }}:role/${{ matrix.envs_regions.env }}-unisphere-content-role' \
362
+ --artifacts-folder '${{ needs.prepare-applications.outputs.unisphereApplicationsArtifactsFolder }}' \
363
+ --verbose
@@ -0,0 +1,90 @@
1
+ name: CI/CD
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ - 'prerelease/**'
8
+
9
+ permissions:
10
+ id-token: write
11
+ contents: write
12
+ packages: write
13
+ pull-requests: write
14
+
15
+ jobs:
16
+ release:
17
+ name: Release
18
+ runs-on:
19
+ - codebuild-ovp-unisphere-runner-${{ github.run_id }}-${{ github.attempt }}
20
+ - instance-size:medium
21
+ outputs:
22
+ hasChangesets: ${{ steps.changesets.outputs.hasChangesets }}
23
+ steps:
24
+
25
+ - name: Checkout Repo
26
+ uses: actions/checkout@v5
27
+
28
+ - name: Check if part of prerelease or official release
29
+ id: check
30
+ run: |
31
+ if [ "${{ github.ref }}" = "refs/heads/main" ] && [ -f ".changeset/pre.json" ]; then
32
+ echo "main branch should not have pre.json file, skipping job"
33
+ exit 1
34
+ elif [[ "${{ github.ref }}" == "refs/heads/prerelease/"* ]] && [ ! -f ".changeset/pre.json" ]; then
35
+ echo "prerelease branch must have pre.json file, skipping job"
36
+ exit 1
37
+ elif [ "${{ github.ref }}" != "refs/heads/main" ] && [[ "${{ github.ref }}" != "refs/heads/prerelease/"* ]]; then
38
+ echo "not part of prerelease or official release, skipping job"
39
+ exit 1
40
+ fi
41
+
42
+ - name: Setup Node.js
43
+ uses: actions/setup-node@v5
44
+ with:
45
+ node-version-file: '.nvmrc'
46
+ cache: npm
47
+ cache-dependency-path: package-lock.json
48
+
49
+ - name: Pre-CICD Checks
50
+ uses: kaltura/unisphere-core/.github/actions/pre-cicd@main
51
+ with:
52
+ repo-path: '${{ github.workspace }}'
53
+
54
+ - name: Setup JFrog
55
+
56
+ uses: jfrog/setup-jfrog-cli@v5
57
+ id: setup-jfrog
58
+ env:
59
+ JF_URL: https://kalturaa.jfrog.io
60
+ with:
61
+ oidc-provider-name: ovp-github-oidc
62
+
63
+ - name: Install Dependencies
64
+ run: npm ci --prefer-offline --include=optional --no-fund
65
+ env:
66
+ GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }}
67
+ KALTURA_JFROG_TOKEN: ${{ steps.setup-jfrog.outputs.oidc-token }}
68
+
69
+
70
+ # - name: Security Audit
71
+ # run: npx unisphere tools audit
72
+ # env:
73
+ # KALTURA_JFROG_TOKEN: ${{ steps.setup-jfrog.outputs.oidc-token }}
74
+
75
+ - name: Create Release Pull Request or Publish to npm
76
+ id: changesets
77
+ uses: changesets/action@v1
78
+ env:
79
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
80
+
81
+ - name: Create release tags
82
+ if: steps.changesets.outputs.hasChangesets == 'false'
83
+ run: |
84
+ npx changeset tag
85
+ git push --follow-tags
86
+
87
+ publish-artifacts:
88
+ needs: release
89
+ if: needs.release.outputs.hasChangesets == 'false'
90
+ uses: ./.github/workflows/_publish-artifacts.yml
@@ -0,0 +1,68 @@
1
+ name: Documentations
2
+
3
+ on:
4
+ workflow_dispatch:
5
+
6
+ permissions:
7
+ id-token: write
8
+ contents: write
9
+ packages: write
10
+
11
+ jobs:
12
+ deploy-to-aws:
13
+ runs-on:
14
+ - codebuild-ovp-unisphere-runner-${{ github.run_id }}-${{ github.attempt }}
15
+ strategy:
16
+ matrix:
17
+ envs_regions:
18
+ - env: nvp1
19
+ accountid: "583352821080"
20
+ region: us-east-1
21
+
22
+ steps:
23
+ - name: Checkout Repo at specific commit
24
+ uses: actions/checkout@v5
25
+
26
+ - name: Setup Node.js
27
+ uses: actions/setup-node@v5
28
+ with:
29
+ node-version: 24
30
+
31
+ - name: Setup JFrog
32
+ uses: jfrog/setup-jfrog-cli@v5
33
+ id: setup-jfrog
34
+ env:
35
+ JF_URL: https://kalturaa.jfrog.io
36
+ with:
37
+ oidc-provider-name: ovp-github-oidc
38
+
39
+ - name: Install dependencies
40
+ run: cd unisphere/documentation/__EXPERIENCE_NAME__ && npm ci --include=optional --ignore-scripts
41
+ env:
42
+ KALTURA_JFROG_TOKEN: ${{ steps.setup-jfrog.outputs.oidc-token }}
43
+
44
+ - name: Build documentation
45
+ run: cd unisphere/documentation/__EXPERIENCE_NAME__ && npm run build
46
+ env:
47
+ DOCUSAURUS_URL: 'https://docs.kaltura.ai/'
48
+ DOCUSAURUS_BASE_URL: '/__EXPERIENCE_NAME__/'
49
+
50
+ - name: Configure AWS credentials
51
+ run: |
52
+ aws sts assume-role \
53
+ --role-arn arn:aws:iam::${{ matrix.envs_regions.accountid }}:role/${{ matrix.envs_regions.env }}-unisphere-content-role \
54
+ --role-session-name github-actions-deployment \
55
+ --query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]' \
56
+ --output text | \
57
+ while read access_key secret_key session_token; do
58
+ echo "AWS_ACCESS_KEY_ID=$access_key" >> $GITHUB_ENV
59
+ echo "AWS_SECRET_ACCESS_KEY=$secret_key" >> $GITHUB_ENV
60
+ echo "AWS_SESSION_TOKEN=$session_token" >> $GITHUB_ENV
61
+ done
62
+ echo "AWS_DEFAULT_REGION=${{ matrix.envs_regions.region }}" >> $GITHUB_ENV
63
+
64
+ - name: Sync dist/documentations to S3
65
+ run: |
66
+ aws s3 sync unisphere/documentation/__EXPERIENCE_NAME__/build s3://nvp1-kaltura-documentation/__EXPERIENCE_NAME__ \
67
+ --region ${{ matrix.envs_regions.region }} \
68
+ --delete
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Migration: Upgrade GitHub Actions to Node 24-compatible versions
3
+ *
4
+ * Replaces all GitHub workflow files with updated versions that use
5
+ * Node 24-compatible action versions to resolve the Node 20 deprecation warning.
6
+ *
7
+ * Action upgrades:
8
+ * - actions/checkout: v4 → v5
9
+ * - actions/setup-node: v4 → v5
10
+ * - actions/cache: v3 → v5
11
+ * - actions/upload-artifact: v4 → v6
12
+ * - actions/download-artifact: v4 → v7
13
+ * - jfrog/setup-jfrog-cli: v4 → v5
14
+ */
15
+ import { Tree } from '@nx/devkit';
16
+ export default function update(tree: Tree): Promise<void>;
17
+ //# sourceMappingURL=upgrade-github-actions-node24.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade-github-actions-node24.d.ts","sourceRoot":"","sources":["../../../src/migrations/4-15-1/upgrade-github-actions-node24.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,IAAI,EAAoB,MAAM,YAAY,CAAC;AAWpD,wBAA8B,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAgE9D"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ /**
3
+ * Migration: Upgrade GitHub Actions to Node 24-compatible versions
4
+ *
5
+ * Replaces all GitHub workflow files with updated versions that use
6
+ * Node 24-compatible action versions to resolve the Node 20 deprecation warning.
7
+ *
8
+ * Action upgrades:
9
+ * - actions/checkout: v4 → v5
10
+ * - actions/setup-node: v4 → v5
11
+ * - actions/cache: v3 → v5
12
+ * - actions/upload-artifact: v4 → v6
13
+ * - actions/download-artifact: v4 → v7
14
+ * - jfrog/setup-jfrog-cli: v4 → v5
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.default = update;
18
+ const devkit_1 = require("@nx/devkit");
19
+ const fs_1 = require("fs");
20
+ const path_1 = require("path");
21
+ async function update(tree) {
22
+ devkit_1.logger.info('🔄 Upgrading GitHub Actions to Node 24-compatible versions...');
23
+ // Ensure .github/workflows directory exists
24
+ if (!tree.exists('.github')) {
25
+ tree.write('.github/.gitkeep', '');
26
+ }
27
+ if (!tree.exists('.github/workflows')) {
28
+ tree.write('.github/workflows/.gitkeep', '');
29
+ }
30
+ // Update cicd.yml
31
+ try {
32
+ const cicdPath = '.github/workflows/cicd.yml';
33
+ const cicdTemplatePath = (0, path_1.join)(__dirname, 'templates', 'cicd.template');
34
+ const cicdContent = (0, fs_1.readFileSync)(cicdTemplatePath, 'utf-8');
35
+ tree.write(cicdPath, cicdContent);
36
+ devkit_1.logger.info('✅ Updated .github/workflows/cicd.yml');
37
+ }
38
+ catch (error) {
39
+ devkit_1.logger.error(`❌ Failed to update cicd.yml: ${error?.message || 'Unknown error'}`);
40
+ throw error;
41
+ }
42
+ // Update _publish-artifacts.yml
43
+ try {
44
+ const publishPath = '.github/workflows/_publish-artifacts.yml';
45
+ const publishTemplatePath = (0, path_1.join)(__dirname, 'templates', '_publish-artifacts.template');
46
+ const publishContent = (0, fs_1.readFileSync)(publishTemplatePath, 'utf-8');
47
+ tree.write(publishPath, publishContent);
48
+ devkit_1.logger.info('✅ Updated .github/workflows/_publish-artifacts.yml');
49
+ }
50
+ catch (error) {
51
+ devkit_1.logger.error(`❌ Failed to update _publish-artifacts.yml: ${error?.message || 'Unknown error'}`);
52
+ throw error;
53
+ }
54
+ // Update documentation.yml (only if documentation elements exist)
55
+ try {
56
+ if (tree.exists('.unisphere')) {
57
+ const config = (0, devkit_1.readJson)(tree, '.unisphere');
58
+ const experienceName = config.name;
59
+ if (experienceName && config.elements?.documentation && Object.keys(config.elements.documentation).length > 0) {
60
+ const docPath = '.github/workflows/documentation.yml';
61
+ const docTemplatePath = (0, path_1.join)(__dirname, 'templates', 'documentation-workflow.template');
62
+ const docContent = (0, fs_1.readFileSync)(docTemplatePath, 'utf-8');
63
+ const workflowContent = docContent.replace(/__EXPERIENCE_NAME__/g, experienceName);
64
+ tree.write(docPath, workflowContent);
65
+ devkit_1.logger.info('✅ Updated .github/workflows/documentation.yml');
66
+ }
67
+ else {
68
+ devkit_1.logger.info('â­ī¸ No documentation elements found, skipping documentation.yml');
69
+ }
70
+ }
71
+ else {
72
+ devkit_1.logger.info('â­ī¸ No .unisphere file found, skipping documentation.yml');
73
+ }
74
+ }
75
+ catch (error) {
76
+ devkit_1.logger.error(`❌ Failed to update documentation.yml: ${error?.message || 'Unknown error'}`);
77
+ throw error;
78
+ }
79
+ devkit_1.logger.info('✅ GitHub Actions upgraded to Node 24-compatible versions');
80
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Migration: Add critical security overrides
3
+ *
4
+ * Adds npm overrides for critical transitive dependency vulnerabilities:
5
+ * - websocket-driver (critical): Resource limit bypass via message compression +
6
+ * message corruption via abuse of protocol length headers
7
+ * Chain: @nx/webpack → webpack-dev-server → sockjs → websocket-driver
8
+ */
9
+ import { Tree } from '@nx/devkit';
10
+ export default function update(tree: Tree): Promise<void>;
11
+ //# sourceMappingURL=add-critical-security-overrides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-critical-security-overrides.d.ts","sourceRoot":"","sources":["../../../src/migrations/4-15-2/add-critical-security-overrides.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAsB,MAAM,YAAY,CAAC;AAMtD,wBAA8B,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA2C9D"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * Migration: Add critical security overrides
4
+ *
5
+ * Adds npm overrides for critical transitive dependency vulnerabilities:
6
+ * - websocket-driver (critical): Resource limit bypass via message compression +
7
+ * message corruption via abuse of protocol length headers
8
+ * Chain: @nx/webpack → webpack-dev-server → sockjs → websocket-driver
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.default = update;
12
+ const devkit_1 = require("@nx/devkit");
13
+ const SECURITY_OVERRIDES = {
14
+ 'websocket-driver': '>=0.7.5',
15
+ };
16
+ async function update(tree) {
17
+ devkit_1.logger.info('🔄 Adding security overrides for critical vulnerabilities...');
18
+ const packageJsonPath = 'package.json';
19
+ if (!tree.exists(packageJsonPath)) {
20
+ devkit_1.logger.warn('âš ī¸ No package.json found, skipping');
21
+ return;
22
+ }
23
+ const added = [];
24
+ const updated = [];
25
+ (0, devkit_1.updateJson)(tree, packageJsonPath, (packageJson) => {
26
+ if (!packageJson.overrides) {
27
+ packageJson.overrides = {};
28
+ }
29
+ for (const [pkg, version] of Object.entries(SECURITY_OVERRIDES)) {
30
+ if (packageJson.overrides[pkg]) {
31
+ if (packageJson.overrides[pkg] !== version) {
32
+ packageJson.overrides[pkg] = version;
33
+ updated.push(`${pkg}@${version}`);
34
+ }
35
+ }
36
+ else {
37
+ packageJson.overrides[pkg] = version;
38
+ added.push(`${pkg}@${version}`);
39
+ }
40
+ }
41
+ return packageJson;
42
+ });
43
+ if (added.length > 0) {
44
+ devkit_1.logger.info(`đŸ“Ļ Added overrides: ${added.join(', ')}`);
45
+ }
46
+ if (updated.length > 0) {
47
+ devkit_1.logger.info(`đŸ“Ļ Updated overrides: ${updated.join(', ')}`);
48
+ }
49
+ if (added.length === 0 && updated.length === 0) {
50
+ devkit_1.logger.info('â„šī¸ All security overrides already present');
51
+ }
52
+ devkit_1.logger.info('✅ Critical security overrides applied');
53
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Migration: Move @unisphere/cli to devDependencies
3
+ *
4
+ * @unisphere/cli is a build/development tool and should not be in production
5
+ * dependencies. This migration moves it from dependencies to devDependencies,
6
+ * preserving the existing version.
7
+ *
8
+ * This also resolves the critical `decompress` vulnerability from production
9
+ * audit reports (decompress is a transitive dependency of @unisphere/cli).
10
+ */
11
+ import { Tree } from '@nx/devkit';
12
+ export default function update(tree: Tree): Promise<void>;
13
+ //# sourceMappingURL=move-cli-to-dev-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move-cli-to-dev-dependencies.d.ts","sourceRoot":"","sources":["../../../src/migrations/4-15-2/move-cli-to-dev-dependencies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAsB,MAAM,YAAY,CAAC;AAItD,wBAA8B,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC9D"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ /**
3
+ * Migration: Move @unisphere/cli to devDependencies
4
+ *
5
+ * @unisphere/cli is a build/development tool and should not be in production
6
+ * dependencies. This migration moves it from dependencies to devDependencies,
7
+ * preserving the existing version.
8
+ *
9
+ * This also resolves the critical `decompress` vulnerability from production
10
+ * audit reports (decompress is a transitive dependency of @unisphere/cli).
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.default = update;
14
+ const devkit_1 = require("@nx/devkit");
15
+ const TARGET_PACKAGE = '@unisphere/cli';
16
+ async function update(tree) {
17
+ devkit_1.logger.info('🔄 Moving @unisphere/cli to devDependencies...');
18
+ const packageJsonPath = 'package.json';
19
+ if (!tree.exists(packageJsonPath)) {
20
+ devkit_1.logger.warn('âš ī¸ No package.json found, skipping');
21
+ return;
22
+ }
23
+ let moved = false;
24
+ (0, devkit_1.updateJson)(tree, packageJsonPath, (packageJson) => {
25
+ // If it's in dependencies, move it to devDependencies
26
+ if (packageJson.dependencies?.[TARGET_PACKAGE]) {
27
+ const version = packageJson.dependencies[TARGET_PACKAGE];
28
+ // Ensure devDependencies exists
29
+ if (!packageJson.devDependencies) {
30
+ packageJson.devDependencies = {};
31
+ }
32
+ // Move to devDependencies (preserve version)
33
+ packageJson.devDependencies[TARGET_PACKAGE] = version;
34
+ delete packageJson.dependencies[TARGET_PACKAGE];
35
+ moved = true;
36
+ devkit_1.logger.info(`đŸ“Ļ Moved ${TARGET_PACKAGE}@${version} from dependencies to devDependencies`);
37
+ }
38
+ return packageJson;
39
+ });
40
+ if (!moved) {
41
+ devkit_1.logger.info(`â„šī¸ ${TARGET_PACKAGE} is not in dependencies (already in devDependencies or not present)`);
42
+ }
43
+ devkit_1.logger.info('✅ @unisphere/cli placement verified');
44
+ }
package/migrations.json CHANGED
@@ -570,6 +570,30 @@
570
570
  "cli": {
571
571
  "postUpdateMessage": "✅ Languages support migrated to @unisphere/ui-i18n-react"
572
572
  }
573
+ },
574
+ "4.15.1-upgrade-github-actions-node24": {
575
+ "version": "4.15.1",
576
+ "description": "Upgrades GitHub Actions to Node 24-compatible versions (resolves Node 20 deprecation warning)",
577
+ "factory": "./dist/migrations/4-15-1/upgrade-github-actions-node24.js",
578
+ "cli": {
579
+ "postUpdateMessage": "✅ GitHub Actions upgraded to Node 24-compatible versions"
580
+ }
581
+ },
582
+ "4.15.2-add-critical-security-overrides": {
583
+ "version": "4.15.2",
584
+ "description": "Adds npm override for websocket-driver critical vulnerability (resource limit bypass + message corruption)",
585
+ "factory": "./dist/migrations/4-15-2/add-critical-security-overrides.js",
586
+ "cli": {
587
+ "postUpdateMessage": "✅ Critical security overrides applied (websocket-driver)"
588
+ }
589
+ },
590
+ "4.15.2-move-cli-to-dev-dependencies": {
591
+ "version": "4.15.2",
592
+ "description": "Moves @unisphere/cli from dependencies to devDependencies (build tool, not production dependency)",
593
+ "factory": "./dist/migrations/4-15-2/move-cli-to-dev-dependencies.js",
594
+ "cli": {
595
+ "postUpdateMessage": "✅ @unisphere/cli moved to devDependencies"
596
+ }
573
597
  }
574
598
  },
575
599
  "packageJsonUpdates": {
@@ -1020,6 +1044,80 @@
1020
1044
  "alwaysAddToPackageJson": false
1021
1045
  }
1022
1046
  }
1047
+ },
1048
+ "4.15.1": {
1049
+ "version": "4.15.1",
1050
+ "cli": "nx",
1051
+ "postUpdateMessage": "🎉 Migration to @unisphere/nx 4.15.1 completed successfully!",
1052
+ "packages": {
1053
+ "nx": {
1054
+ "version": "22.7.7",
1055
+ "alwaysAddToPackageJson": false
1056
+ },
1057
+ "@nx/eslint": {
1058
+ "version": "22.7.7",
1059
+ "alwaysAddToPackageJson": false
1060
+ },
1061
+ "@nx/eslint-plugin": {
1062
+ "version": "22.7.7",
1063
+ "alwaysAddToPackageJson": false
1064
+ },
1065
+ "@nx/jest": {
1066
+ "version": "22.7.7",
1067
+ "alwaysAddToPackageJson": false
1068
+ },
1069
+ "@nx/js": {
1070
+ "version": "22.7.7",
1071
+ "alwaysAddToPackageJson": false
1072
+ },
1073
+ "@nx/react": {
1074
+ "version": "22.7.7",
1075
+ "alwaysAddToPackageJson": false
1076
+ },
1077
+ "@nx/rollup": {
1078
+ "version": "22.7.7",
1079
+ "alwaysAddToPackageJson": false
1080
+ },
1081
+ "@nx/vite": {
1082
+ "version": "22.7.7",
1083
+ "alwaysAddToPackageJson": false
1084
+ },
1085
+ "@nx/vitest": {
1086
+ "version": "22.7.7",
1087
+ "alwaysAddToPackageJson": false
1088
+ },
1089
+ "@nx/web": {
1090
+ "version": "22.7.7",
1091
+ "alwaysAddToPackageJson": false
1092
+ },
1093
+ "@nx/webpack": {
1094
+ "version": "22.7.7",
1095
+ "alwaysAddToPackageJson": false
1096
+ },
1097
+ "@nx/workspace": {
1098
+ "version": "22.7.7",
1099
+ "alwaysAddToPackageJson": false
1100
+ },
1101
+ "vite": {
1102
+ "version": "7.3.6",
1103
+ "alwaysAddToPackageJson": false
1104
+ },
1105
+ "@unisphere/cli": {
1106
+ "version": "6.0.2",
1107
+ "alwaysAddToPackageJson": false
1108
+ }
1109
+ }
1110
+ },
1111
+ "4.15.2": {
1112
+ "version": "4.15.2",
1113
+ "cli": "nx",
1114
+ "postUpdateMessage": "🎉 Migration to @unisphere/nx 4.15.2 completed successfully!",
1115
+ "packages": {
1116
+ "@unisphere/cli": {
1117
+ "version": "6.0.3",
1118
+ "alwaysAddToPackageJson": false
1119
+ }
1120
+ }
1023
1121
  }
1024
1122
  }
1025
1123
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unisphere/nx",
3
- "version": "4.15.0",
3
+ "version": "4.15.2",
4
4
  "private": false,
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",