Skip to content

Commit ddbae80

Browse files
authored
implement ui build pipeline and complete workflows (#215)
Builds would live at: pr builds - neuralmagic.github.io/guidellm/ui/pr/12 dev - neuralmagic.github.io/guidellm/ui/dev staging/release-candidate - neuralmagic.github.io/guidellm/ui/release/v1.0.0 or .../ui/release/latest production/release - neuralmagic.github.io/guidellm/ui/v1.0.0 or .../ui/latest PR builds will include mocked data, view example in comments below. All other builds currently will be blank slates, waiting to be pulled down and used to generate an html report.
1 parent 292f073 commit ddbae80

File tree

11 files changed

+827
-11
lines changed

11 files changed

+827
-11
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: Cleanup Dev
2+
3+
on:
4+
pull_request:
5+
types: [closed]
6+
7+
jobs:
8+
cleanup-ui-pr-preview:
9+
permissions:
10+
contents: write
11+
id-token: 'write'
12+
issues: write
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- name: Check out gh-pages branch
17+
uses: actions/checkout@v3
18+
with:
19+
ref: gh-pages
20+
fetch-depth: 1
21+
22+
- name: Check if preview directory exists
23+
id: check-preview
24+
run: |
25+
if [ -d "ui/pr/${{ github.event.pull_request.number }}" ]; then
26+
echo "preview_exists=true" >> $GITHUB_OUTPUT
27+
echo "Preview directory exists for PR #${{ github.event.pull_request.number }}"
28+
else
29+
echo "preview_exists=false" >> $GITHUB_OUTPUT
30+
echo "No preview directory found for PR #${{ github.event.pull_request.number }}"
31+
fi
32+
33+
- name: Create an empty directory for cleanup
34+
if: steps.check-preview.outputs.preview_exists == 'true'
35+
run: mkdir -p empty
36+
37+
- name: Remove GitHub Pages Build
38+
if: steps.check-preview.outputs.preview_exists == 'true'
39+
uses: peaceiris/actions-gh-pages@v3
40+
with:
41+
github_token: ${{ secrets.GITHUB_TOKEN }}
42+
publish_dir: ./empty
43+
destination_dir: ui/pr/${{ github.event.pull_request.number }}
44+
keep_files: false
45+
user_name: ${{ github.actor }}
46+
user_email: ${{ github.actor }}@users.noreply.github.com
47+
publish_branch: gh-pages
48+
commit_message: 'chore: Clean up preview for PR #${{ github.event.pull_request.number }}'
49+
50+
- name: Log Cleanup Completion
51+
run: echo "Cleanup completed for PR \#${{ github.event.pull_request.number }}"
52+
53+
update-preview-comment:
54+
needs: [cleanup-ui-pr-preview]
55+
name: Update PR Comment
56+
permissions:
57+
pull-requests: write
58+
issues: write
59+
runs-on: ubuntu-latest
60+
steps:
61+
- name: Update PR comment to reflect cleanup
62+
uses: peter-evans/find-comment@v2
63+
id: find-comment
64+
with:
65+
token: ${{ secrets.GITHUB_TOKEN }}
66+
issue-number: ${{ github.event.pull_request.number }}
67+
body-includes: '<!-- pr-preview-comment -->'
68+
69+
- name: Update PR comment to reflect cleanup
70+
if: steps.find-comment.outputs.comment-id != ''
71+
uses: peter-evans/create-or-update-comment@v3
72+
with:
73+
token: ${{ secrets.GITHUB_TOKEN }}
74+
comment-id: ${{ steps.find-comment.outputs.comment-id }}
75+
issue-number: ${{ github.event.pull_request.number }}
76+
edit-mode: replace
77+
body: |
78+
<!-- pr-preview-comment -->
79+
🧹 The live preview for this PR has been removed.
80+
81+
- name: Log comment update status
82+
run: |
83+
if [ "${{ steps.find-comment.outputs.comment-id }}" != "" ]; then
84+
echo "Updated existing preview comment"
85+
else
86+
echo "No preview comment found to update"
87+
fi

.github/workflows/development.yml

Lines changed: 125 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ jobs:
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

@@ -59,6 +64,11 @@ jobs:
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

Comments
 (0)