Files
luma-home/tools/screenshots.mjs
T
Kaloyan DanchevandClaude Opus 4.6 cbea5a322f
CI / Identify a merged version PR (push) Canceled after 0s
CI / Rust checks, rendering, and native package (push) Canceled after 0s
CI / Publish release and Homebrew feed (push) Canceled after 0s
Release PR / Maintain Version Packages PR (push) Canceled after 0s
Merge Luma launcher fork into monorepo
Move trampoline files (boot-hook, watcher, overlay) into trampoline/
subdirectory. Add upstream Luma v2.3.1 source at repo root with our
additions:

- Page::Ha (4th nav tab) with placeholder empty state
- HA tab config schema and default entity mapping (ha-home/)
- Nav keys renamed: "home" → "start", new "ha" tab between Apps and Settings
- All state.rs/view.rs/main.rs/tests.rs updated for 4-tab navigation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-24 11:52:55 +03:00

64 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Capture documentation from the actual native desktop renderer, not a browser.
import fs from 'node:fs/promises';
import path from 'node:path';
import { spawnSync } from 'node:child_process';
const root = path.resolve(import.meta.dirname, '..');
const docs = path.join(root, 'docs');
const scratch = path.join(root, '.build');
await fs.mkdir(docs, { recursive: true });
await fs.mkdir(scratch, { recursive: true });
function run(command, args) {
const result = spawnSync(command, args, { cwd: root, stdio: 'inherit', timeout: 120000 });
if (result.error) throw result.error;
if (result.status !== 0) throw new Error(`${command} exited with status ${result.status}`);
}
// Force the desktop feature set even after a previous all-features lint/build.
run('cargo', ['build', '--locked', '--package', 'luma', '--no-default-features']);
const binary = path.resolve(root, process.env.CARGO_TARGET_DIR ?? 'target', 'debug/luma');
const temporary = await fs.mkdtemp(path.join(scratch, 'documentation-'));
const preferences = path.join(temporary, 'preferences.json');
const configuration = {
language: 'en',
background: 'dunes',
hour_24: false,
show_home_names: false,
show_weather: true,
weather_location: null,
hidden: [],
input_modes: {},
reduced_motion: false,
};
try {
for (const [name, script] of [
['home', 'home,down'],
['apps', 'apps,down'],
['settings', 'settings,down'],
['inputs', 'settings,down,down,down,down,enter'],
]) {
// Independent state makes screenshots stable regardless of capture order.
await fs.writeFile(preferences, JSON.stringify(configuration));
run(binary, [
'--assets',
path.join(scratch, 'assets'),
'--preferences',
preferences,
'--time',
'2026-10-22T20:41:00+02:00',
'--script',
script,
'--frames',
'90',
'--capture-scale',
'1',
'--screenshot',
path.join(docs, `${name}.png`),
]);
console.log(`Native screenshot: docs/${name}.png (1920×1080)`);
}
} finally {
await fs.rm(temporary, { recursive: true, force: true });
}