feat: Implement Svelte frontend with OTA update support, build tooling, and deployment documentation.

This commit is contained in:
2026-03-03 17:29:06 -05:00
parent c357c76af6
commit 046f353d7e
7 changed files with 218 additions and 100 deletions

View File

@@ -6,13 +6,13 @@
import { execSync } from 'child_process';
import { resolve, dirname } from 'path';
import { fileURLToPath } from 'url';
import { existsSync, readFileSync, mkdirSync } from 'fs';
import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
const __dirname = dirname(fileURLToPath(import.meta.url));
const projectRoot = resolve(__dirname, '..');
const distDir = resolve(projectRoot, 'dist');
const binDir = resolve(projectRoot, 'bin');
const outputFile = resolve(binDir, 'www.bin');
const versionFile = resolve(projectRoot, 'version.json');
// Ensure bin directory exists
if (!existsSync(binDir)) {
@@ -26,6 +26,33 @@ const PAGE_SIZE = 256;
console.log('--- OTA Packaging ---');
/**
* Handle versioning: Read current version
*/
function getVersion() {
if (existsSync(versionFile)) {
try {
return JSON.parse(readFileSync(versionFile, 'utf8'));
} catch (e) {
console.warn('Warning: Could not read version.json:', e.message);
}
}
return { major: 0, minor: 0, revision: 0 };
}
/**
* Increment and save revision
*/
function incrementVersion(version) {
try {
version.revision = (version.revision || 0) + 1;
writeFileSync(versionFile, JSON.stringify(version, null, 2));
console.log(`Version incremented to: ${version.major}.${version.minor}.${version.revision} for next build.`);
} catch (e) {
console.warn('Warning: Could not update version.json:', e.message);
}
}
/**
* Simple .env parser to load MKLITTLEFS_PATH without external dependencies
*/
@@ -51,6 +78,9 @@ function loadEnv() {
}
loadEnv();
const version = getVersion();
const versionStr = `${version.major}.${version.minor}.${version.revision}`;
const outputFile = resolve(binDir, `www_v${versionStr}.bin`);
if (!existsSync(distDir)) {
console.error('Error: dist/ directory not found. Run "npm run build:esp32" first.');
@@ -107,6 +137,9 @@ try {
console.log(`Running: ${cmd}`);
execSync(cmd, { stdio: 'inherit' });
console.log('Success: www.bin created.');
// Auto-increment for the next build
incrementVersion(version);
} catch (e) {
console.error('Error during packaging:', e.message);
process.exit(1);