2929 - name : Check out code
3030 uses : actions/checkout@v4
3131
32+ - name : Set up Node.js 22
33+ uses : actions/setup-node@v4
34+ with :
35+ node-version : ' 22'
36+
3237 - name : Install dependencies
3338 run : npm ci
3439
5964 - name : Check out code
6065 uses : actions/checkout@v4
6166
67+ - name : Set up Node.js 22
68+ uses : actions/setup-node@v4
69+ with :
70+ node-version : ' 22'
71+
6272 - name : Install dependencies
6373 run : npm ci
6474
@@ -81,14 +91,19 @@ jobs:
8191 - name : Run pre-commit checks
8292 run : SKIP=ruff-format pre-commit run --all-files
8393
84- ui-precommit-check :
94+ ui-precommit-checks :
8595 permissions :
8696 contents : " read"
8797 runs-on : ubuntu-latest
8898 steps :
8999 - name : Check out code
90100 uses : actions/checkout@v4
91101
102+ - name : Set up Node.js 22
103+ uses : actions/setup-node@v4
104+ with :
105+ node-version : ' 22'
106+
92107 - name : Install dependencies
93108 run : npm ci
94109
@@ -119,6 +134,11 @@ jobs:
119134 - name : Check out code
120135 uses : actions/checkout@v4
121136
137+ - name : Set up Node.js 22
138+ uses : actions/setup-node@v4
139+ with :
140+ node-version : ' 22'
141+
122142 - name : Install dependencies
123143 run : npm ci
124144
@@ -149,6 +169,11 @@ jobs:
149169 - name : Check out code
150170 uses : actions/checkout@v4
151171
172+ - name : Set up Node.js 22
173+ uses : actions/setup-node@v4
174+ with :
175+ node-version : ' 22'
176+
152177 - name : Install dependencies
153178 run : npm ci
154179
@@ -208,6 +233,105 @@ jobs:
208233 `
209234 })
210235
236+ ui-pr-preview :
237+ needs : [ui-quality-checks, ui-precommit-checks, ui-unit-tests, ui-integration-tests]
238+ permissions :
239+ contents : write
240+ pull-requests : write
241+ issues : write
242+ runs-on : ubuntu-latest
243+ steps :
244+ - name : Check out code
245+ uses : actions/checkout@v3
246+ with :
247+ fetch-depth : 0
248+
249+ - name : Check if UI-related files changed
250+ id : check-changes
251+ run : |
252+ BASE_BRANCH=${{ github.event.pull_request.base.ref }}
253+ CHANGED_FILES=$(git diff --name-only origin/$BASE_BRANCH...HEAD)
254+ SHOULD_BUILD=false
255+
256+ if echo "$CHANGED_FILES" | grep -q "^src/ui/"; then
257+ echo "UI source files changed"
258+ SHOULD_BUILD=true
259+ fi
260+
261+ echo "should_build=$SHOULD_BUILD" >> $GITHUB_OUTPUT
262+ echo "Should build: $SHOULD_BUILD"
263+
264+ - name : Install dependencies
265+ if : steps.check-changes.outputs.should_build == 'true'
266+ run : npm ci
267+
268+ - name : Build app to root
269+ if : steps.check-changes.outputs.should_build == 'true'
270+ id : build
271+ run : |
272+ # Export vars to ensure they are loaded before build
273+ export $(grep -v '^#' .env.development | xargs)
274+
275+ PR_NUMBER=${{ github.event.pull_request.number }}
276+ echo "pr_number=${PR_NUMBER}" >> $GITHUB_OUTPUT
277+
278+ # Set asset prefix and base path with PR number
279+ ASSET_PREFIX=https://neuralmagic.github.io/guidellm/ui/pr/${PR_NUMBER}
280+ USE_MOCK_DATA=true
281+ BASE_PATH=/ui/pr/${PR_NUMBER}
282+ GIT_SHA=${{ github.sha }}
283+ export ASSET_PREFIX=${ASSET_PREFIX}
284+ export BASE_PATH=${BASE_PATH}
285+ export GIT_SHA=${GIT_SHA}
286+ export USE_MOCK_DATA=${USE_MOCK_DATA}
287+ npm run build
288+
289+ - name : Deploy to GitHub Pages
290+ if : steps.check-changes.outputs.should_build == 'true'
291+ uses : peaceiris/actions-gh-pages@v3
292+ with :
293+ github_token : ${{ secrets.GITHUB_TOKEN }}
294+ publish_dir : ./src/ui/out
295+ destination_dir : ui/pr/${{ steps.build.outputs.pr_number }}
296+ keep_files : false
297+ user_name : ${{ github.actor }}
298+ user_email : ${{ github.actor }}@users.noreply.github.com
299+ publish_branch : gh-pages
300+ commit_message : ' build: Deploy preview build for PR #${{ github.event.pull_request.number }}'
301+
302+ - name : Set deployment url
303+ if : steps.check-changes.outputs.should_build == 'true'
304+ id : deploy
305+ run : |
306+ DEPLOY_URL=https://neuralmagic.github.io/guidellm/ui/pr/${{ steps.build.outputs.pr_number }}
307+ echo "url=${DEPLOY_URL}" >> $GITHUB_OUTPUT
308+
309+ - name : Find PR comment
310+ if : steps.check-changes.outputs.should_build == 'true'
311+ uses : peter-evans/find-comment@v2
312+ id : find-comment
313+ with :
314+ token : ${{ secrets.GITHUB_TOKEN }}
315+ issue-number : ${{ github.event.pull_request.number }}
316+ body-includes : ' <!-- pr-preview-comment -->'
317+
318+ - name : Post Deployment URL to PR
319+ if : steps.check-changes.outputs.should_build == 'true'
320+ uses : peter-evans/create-or-update-comment@v3
321+ with :
322+ token : ${{ secrets.GITHUB_TOKEN }}
323+ comment-id : ${{ steps.find-comment.outputs.comment-id }}
324+ issue-number : ${{ github.event.pull_request.number }}
325+ edit-mode : replace
326+ body : |
327+ <!-- pr-preview-comment -->
328+ 🎉 **Live Preview:** [Click here to view the live version](${{ steps.deploy.outputs.url }})
329+ *Last updated: ${{ github.sha }}*
330+
331+ - name : Skip build notification
332+ if : steps.check-changes.outputs.should_build == 'false'
333+ run : echo "Skipping UI preview build - no relevant files changed"
334+
211335 build-and-push-container :
212336 # Only build if the PR branch is local
213337 if : github.event.pull_request.head.repo.full_name == github.repository
0 commit comments