Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Commit 25693db

Browse files
committed
feat: publish demo page on GitHub Pages
1 parent ca806ba commit 25693db

7 files changed

Lines changed: 127 additions & 5 deletions

File tree

.github/workflows/pages.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
name: Deploy Demo Page
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: read
11+
pages: write
12+
id-token: write
13+
14+
concurrency:
15+
group: github-pages
16+
cancel-in-progress: true
17+
18+
jobs:
19+
build:
20+
runs-on: ubuntu-latest
21+
steps:
22+
- name: Checkout
23+
uses: actions/checkout@v5
24+
25+
- name: Setup Pages
26+
uses: actions/configure-pages@v5
27+
28+
- name: Setup Node
29+
uses: actions/setup-node@v4
30+
with:
31+
node-version: 24.13.1
32+
cache: npm
33+
34+
- name: Install dependencies
35+
run: npm ci
36+
37+
- name: Build GitHub Pages site
38+
run: node scripts/build-pages.mjs
39+
40+
- name: Upload Pages artifact
41+
uses: actions/upload-pages-artifact@v4
42+
with:
43+
path: site
44+
45+
deploy:
46+
environment:
47+
name: github-pages
48+
url: ${{ steps.deployment.outputs.page_url }}
49+
runs-on: ubuntu-latest
50+
needs: build
51+
steps:
52+
- name: Deploy to GitHub Pages
53+
id: deployment
54+
uses: actions/deploy-pages@v4

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ out
8181
# Nuxt.js build / generate output
8282
.nuxt
8383
dist
84+
site
8485

8586
# Gatsby files
8687
.cache/

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ Build output:
1414
- `dist/size-recommender.iife.js` for `<script>` embeds
1515
- `dist/size-recommender.esm.js` for module consumers
1616

17+
GitHub Pages demo build:
18+
19+
```sh
20+
npm run build:pages
21+
```
22+
23+
This writes a static demo site to `site/`.
24+
1725
## Dev Demo
1826

1927
```sh
@@ -28,6 +36,13 @@ Open [http://localhost:4173](http://localhost:4173). The demo page uses your sam
2836
The page loads the local IIFE bundle and initializes the widget via
2937
`window.SizeRecommender.init(...)`.
3038

39+
## GitHub Pages Demo
40+
41+
The repository is configured to publish the demo page with GitHub Pages from a
42+
custom GitHub Actions workflow. After deployment, the project site URL is:
43+
44+
`https://jkrenge.github.io/size-recommender-ui/`
45+
3146
## HTML Embed
3247

3348
```html

dev/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ <h2>Embedded widget</h2>
303303
</div>
304304
</main>
305305

306-
<script src="/dist/size-recommender.iife.js"></script>
307-
<script src="/dev/main.js"></script>
306+
<script src="./dist/size-recommender.iife.js"></script>
307+
<script src="./dev/main.js"></script>
308308
</body>
309309
</html>

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@jkrenge/size-recommender-ui",
3-
"version": "0.1.0",
3+
"version": "0.1.1",
44
"description": "Embeddable size recommender widget for retailer PDPs.",
55
"type": "module",
66
"license": "MIT",
@@ -16,6 +16,7 @@
1616
],
1717
"scripts": {
1818
"build": "rm -rf dist && node scripts/build.mjs && tsc -p tsconfig.types.json",
19+
"build:pages": "node scripts/build-pages.mjs",
1920
"dev": "node scripts/dev.mjs",
2021
"test": "vitest run --environment jsdom"
2122
},

scripts/build-pages.mjs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { cp, mkdir, rm, writeFile } from 'node:fs/promises';
2+
import path from 'node:path';
3+
import { fileURLToPath } from 'node:url';
4+
import { build } from 'esbuild';
5+
6+
const cwd = fileURLToPath(new URL('..', import.meta.url));
7+
const siteDir = path.join(cwd, 'site');
8+
const distDir = path.join(siteDir, 'dist');
9+
const devDir = path.join(siteDir, 'dev');
10+
11+
await rm(siteDir, { force: true, recursive: true });
12+
await mkdir(distDir, { recursive: true });
13+
await mkdir(devDir, { recursive: true });
14+
15+
const shared = {
16+
bundle: true,
17+
entryPoints: ['src/index.ts'],
18+
legalComments: 'none',
19+
minifyWhitespace: true,
20+
sourcemap: false,
21+
target: ['es2018'],
22+
define: {
23+
__VERSION__: JSON.stringify('pages'),
24+
},
25+
};
26+
27+
await build({
28+
...shared,
29+
format: 'iife',
30+
globalName: 'SizeRecommender',
31+
minify: true,
32+
outfile: path.join(distDir, 'size-recommender.iife.js'),
33+
define: {
34+
...shared.define,
35+
__AUTO_INIT__: 'true',
36+
},
37+
});
38+
39+
await build({
40+
...shared,
41+
format: 'esm',
42+
outfile: path.join(distDir, 'size-recommender.esm.js'),
43+
define: {
44+
...shared.define,
45+
__AUTO_INIT__: 'false',
46+
},
47+
});
48+
49+
await cp(path.join(cwd, 'dev', 'index.html'), path.join(siteDir, 'index.html'));
50+
await cp(path.join(cwd, 'dev', 'main.js'), path.join(devDir, 'main.js'));
51+
await writeFile(path.join(siteDir, '.nojekyll'), '');

0 commit comments

Comments
 (0)