Skip to content

Commit c3c8ad6

Browse files
Add build script for static site generation with dist/index.html and assets/
1 parent f6bbcd2 commit c3c8ad6

3 files changed

Lines changed: 79 additions & 1 deletion

File tree

.github/workflows/deploy.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,21 @@ jobs:
2525
- name: Checkout
2626
uses: actions/checkout@v4
2727

28+
- name: Setup Node.js
29+
uses: actions/setup-node@v4
30+
with:
31+
node-version: '20'
32+
33+
- name: Build
34+
run: node build.js
35+
2836
- name: Setup Pages
2937
uses: actions/configure-pages@v4
3038

3139
- name: Upload artifact
3240
uses: actions/upload-pages-artifact@v3
3341
with:
34-
path: '.'
42+
path: './dist'
3543

3644
- name: Deploy to GitHub Pages
3745
id: deployment

build.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import fs from 'fs';
2+
import path from 'path';
3+
import { fileURLToPath } from 'url';
4+
5+
const __filename = fileURLToPath(import.meta.url);
6+
const __dirname = path.dirname(__filename);
7+
8+
const dist = path.join(__dirname, 'dist');
9+
const assetsDir = path.join(dist, 'assets');
10+
11+
// Clean dist folder
12+
if (fs.existsSync(dist)) {
13+
fs.rmSync(dist, { recursive: true });
14+
}
15+
16+
// Create dist structure
17+
fs.mkdirSync(dist, { recursive: true });
18+
fs.mkdirSync(path.join(assetsDir, 'styles'), { recursive: true });
19+
fs.mkdirSync(path.join(assetsDir, 'js'), { recursive: true });
20+
fs.mkdirSync(path.join(assetsDir, 'icons', 'fontawesome'), { recursive: true });
21+
22+
// Copy HTML
23+
let html = fs.readFileSync('index.html', 'utf8');
24+
// Update paths in HTML
25+
html = html.replace(/\.\/src\/styles\//g, './assets/styles/');
26+
html = html.replace(/\.\/src\/js\//g, './assets/js/');
27+
fs.writeFileSync(path.join(dist, 'index.html'), html);
28+
29+
// Copy CSS
30+
fs.copyFileSync('src/styles/base.css', path.join(assetsDir, 'styles', 'base.css'));
31+
fs.copyFileSync('src/styles/modal.css', path.join(assetsDir, 'styles', 'modal.css'));
32+
33+
// Copy JS files
34+
const jsFiles = ['app.js', 'export.js', 'gradient.js', 'icons.js', 'keyboard.js', 'presets.js', 'state.js', 'storage.js', 'ui.js'];
35+
jsFiles.forEach(file => {
36+
let content = fs.readFileSync(path.join('src/js', file), 'utf8');
37+
// Update icon path in icons.js
38+
if (file === 'icons.js') {
39+
content = content.replace('./public/icons/fontawesome', './assets/icons/fontawesome');
40+
}
41+
fs.writeFileSync(path.join(assetsDir, 'js', file), content);
42+
});
43+
44+
// Copy icons
45+
const iconFiles = fs.readdirSync('public/icons/fontawesome');
46+
iconFiles.forEach(file => {
47+
fs.copyFileSync(
48+
path.join('public/icons/fontawesome', file),
49+
path.join(assetsDir, 'icons', 'fontawesome', file)
50+
);
51+
});
52+
53+
console.log('✓ Build complete! Output in dist/');

package.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"name": "streamdeck-icon-generator",
3+
"version": "1.0.0",
4+
"type": "module",
5+
"description": "Stream Deck Icon Generator with gradient backgrounds",
6+
"scripts": {
7+
"build": "node build.js",
8+
"dev": "npx serve ."
9+
},
10+
"keywords": [
11+
"streamdeck",
12+
"icon-generator",
13+
"gradient"
14+
],
15+
"author": "SyntaxSidekick",
16+
"license": "MIT"
17+
}

0 commit comments

Comments
 (0)