"Add Windows installer and driver training rewards"

This commit is contained in:
larssand
2026-08-24 14:48:49 +02:00
parent 4c0e94bc50
commit de7b4adfe0
21 changed files with 2068 additions and 210 deletions

51
scripts/verify-install.js Normal file
View File

@@ -0,0 +1,51 @@
const fs = require("fs");
const path = require("path");
const root = path.resolve(__dirname, "..");
function fail(message, error) {
console.error(`[verify] ${message}`);
if (error) {
console.error(`[verify] ${error instanceof Error ? error.message : String(error)}`);
}
if (process.platform === "win32") {
console.error("[verify] Retry with windows\\install.bat.");
console.error("[verify] Native fallback: run C:\\Program Files\\nodejs\\install_tools.bat as Administrator.");
}
process.exit(1);
}
try {
require("express");
} catch (error) {
fail("Express could not be loaded.", error);
}
try {
const Database = require("better-sqlite3");
const db = new Database(":memory:");
const row = db.prepare("SELECT 1 AS ok").get();
db.close();
if (row?.ok !== 1) {
fail("SQLite verification query returned an unexpected result.");
}
} catch (error) {
fail("better-sqlite3 could not be loaded or initialized.", error);
}
for (const directory of ["data", "logs"]) {
fs.mkdirSync(path.join(root, directory), { recursive: true });
}
if (process.platform === "win32") {
const ammcDir = path.join(root, "AMMC", "windows64");
const requiredFiles = ["ammc-amb.exe", "ammc.dll", "MyLapsSDK.dll"];
const missingFiles = requiredFiles.filter((file) => !fs.existsSync(path.join(ammcDir, file)));
if (missingFiles.length > 0) {
fail(`Bundled AMMC runtime is incomplete: ${missingFiles.join(", ")}`);
}
console.log(`[verify] AMMC Windows runtime: ${ammcDir}`);
}
console.log(`[verify] Express and SQLite: OK (${process.platform}/${process.arch}, Node ${process.version})`);
console.log("[verify] Installation is ready. Start with: npm start");