Skip to content

Commit 150076d

Browse files
authored
Merge branch 'main' into prefix_cache_invalidate
2 parents 54138aa + f1f8ca8 commit 150076d

File tree

67 files changed

+7771
-3126
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+7771
-3126
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: 156 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: Development
22

33
on:
4-
pull_request_target:
4+
pull_request:
55
types: [opened, synchronize, reopened]
66

77
jobs:
@@ -12,8 +12,6 @@ jobs:
1212
python: ["3.9", "3.13"]
1313
steps:
1414
- uses: actions/checkout@v4
15-
with:
16-
ref: "${{ github.event.pull_request.merge_commit_sha }}"
1715
- name: Set up Python
1816
uses: actions/setup-python@v5
1917
with:
@@ -29,9 +27,12 @@ jobs:
2927
runs-on: ubuntu-latest
3028
steps:
3129
- name: Check out code
32-
uses: actions/checkout@v3
30+
uses: actions/checkout@v4
31+
32+
- name: Set up Node.js 22
33+
uses: actions/setup-node@v4
3334
with:
34-
ref: "${{ github.event.pull_request.merge_commit_sha }}"
35+
node-version: '22'
3536

3637
- name: Install dependencies
3738
run: npm ci
@@ -46,8 +47,6 @@ jobs:
4647
python: ["3.9", "3.13"]
4748
steps:
4849
- uses: actions/checkout@v4
49-
with:
50-
ref: "${{ github.event.pull_request.merge_commit_sha }}"
5150
- name: Set up Python
5251
uses: actions/setup-python@v5
5352
with:
@@ -63,9 +62,12 @@ jobs:
6362
runs-on: ubuntu-latest
6463
steps:
6564
- name: Check out code
66-
uses: actions/checkout@v3
65+
uses: actions/checkout@v4
66+
67+
- name: Set up Node.js 22
68+
uses: actions/setup-node@v4
6769
with:
68-
ref: "${{ github.event.pull_request.merge_commit_sha }}"
70+
node-version: '22'
6971

7072
- name: Install dependencies
7173
run: npm ci
@@ -80,8 +82,6 @@ jobs:
8082
python: ["3.9"]
8183
steps:
8284
- uses: actions/checkout@v4
83-
with:
84-
ref: "${{ github.event.pull_request.merge_commit_sha }}"
8585
- name: Set up Python
8686
uses: actions/setup-python@v5
8787
with:
@@ -91,15 +91,18 @@ jobs:
9191
- name: Run pre-commit checks
9292
run: SKIP=ruff-format pre-commit run --all-files
9393

94-
ui-precommit-check:
94+
ui-precommit-checks:
9595
permissions:
9696
contents: "read"
9797
runs-on: ubuntu-latest
9898
steps:
9999
- name: Check out code
100-
uses: actions/checkout@v3
100+
uses: actions/checkout@v4
101+
102+
- name: Set up Node.js 22
103+
uses: actions/setup-node@v4
101104
with:
102-
ref: "${{ github.event.pull_request.merge_commit_sha }}"
105+
node-version: '22'
103106

104107
- name: Install dependencies
105108
run: npm ci
@@ -114,8 +117,6 @@ jobs:
114117
python: ["3.9", "3.13"]
115118
steps:
116119
- uses: actions/checkout@v4
117-
with:
118-
ref: "${{ github.event.pull_request.merge_commit_sha }}"
119120
- name: Set up Python
120121
uses: actions/setup-python@v5
121122
with:
@@ -131,7 +132,12 @@ jobs:
131132
runs-on: ubuntu-latest
132133
steps:
133134
- name: Check out code
134-
uses: actions/checkout@v3
135+
uses: actions/checkout@v4
136+
137+
- name: Set up Node.js 22
138+
uses: actions/setup-node@v4
139+
with:
140+
node-version: '22'
135141

136142
- name: Install dependencies
137143
run: npm ci
@@ -146,8 +152,6 @@ jobs:
146152
python: ["3.9", "3.13"]
147153
steps:
148154
- uses: actions/checkout@v4
149-
with:
150-
ref: "${{ github.event.pull_request.merge_commit_sha }}"
151155
- name: Set up Python
152156
uses: actions/setup-python@v5
153157
with:
@@ -163,9 +167,12 @@ jobs:
163167
runs-on: ubuntu-latest
164168
steps:
165169
- name: Check out code
166-
uses: actions/checkout@v3
170+
uses: actions/checkout@v4
171+
172+
- name: Set up Node.js 22
173+
uses: actions/setup-node@v4
167174
with:
168-
ref: "${{ github.event.pull_request.merge_commit_sha }}"
175+
node-version: '22'
169176

170177
- name: Install dependencies
171178
run: npm ci
@@ -174,6 +181,8 @@ jobs:
174181
run: npm run test:integration
175182

176183
build:
184+
# Only build if the PR branch is local
185+
if: github.event.pull_request.head.repo.full_name == github.repository
177186
runs-on: ubuntu-latest
178187
strategy:
179188
matrix:
@@ -183,7 +192,6 @@ jobs:
183192
uses: actions/checkout@v4
184193
with:
185194
fetch-depth: 0
186-
ref: "${{ github.event.pull_request.merge_commit_sha }}"
187195
- name: Set up Python
188196
uses: actions/setup-python@v5
189197
with:
@@ -224,3 +232,129 @@ jobs:
224232
They will be retained for **up to 30 days**.
225233
`
226234
})
235+
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+
335+
build-and-push-container:
336+
# Only build if the PR branch is local
337+
if: github.event.pull_request.head.repo.full_name == github.repository
338+
runs-on: ubuntu-latest
339+
permissions:
340+
packages: write
341+
steps:
342+
- name: Checkout
343+
uses: actions/checkout@v4
344+
- name: Buildah build
345+
id: build-image
346+
uses: redhat-actions/buildah-build@v2
347+
with:
348+
image: ${{ github.event.repository.name }}
349+
tags: "pr-${{ github.event.number }}"
350+
containerfiles: |
351+
./deploy/Containerfile
352+
- name: Push To ghcr.io
353+
id: push-to-ghcr
354+
uses: redhat-actions/push-to-registry@v2
355+
with:
356+
image: ${{ steps.build-image.outputs.image }}
357+
tags: ${{ steps.build-image.outputs.tags }}
358+
username: ${{ github.actor }}
359+
password: ${{ github.token }}
360+
registry: ghcr.io/${{ github.repository_owner }}

0 commit comments

Comments
 (0)