mirror of
https://github.com/Kaelio/ktx.git
synced 2026-06-07 07:55:13 +02:00
Initial open-source release
This commit is contained in:
commit
1a42152e6f
1199 changed files with 257054 additions and 0 deletions
74
scripts/setup-dev.mjs
Normal file
74
scripts/setup-dev.mjs
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
import { execFile as execFileCallback } from 'node:child_process';
|
||||
import { dirname, resolve } from 'node:path';
|
||||
import { fileURLToPath, pathToFileURL } from 'node:url';
|
||||
import { promisify } from 'node:util';
|
||||
|
||||
const execFileAsync = promisify(execFileCallback);
|
||||
|
||||
function kloRootDir() {
|
||||
return resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
||||
}
|
||||
|
||||
function failureText(error) {
|
||||
const stdout = typeof error?.stdout === 'string' ? error.stdout.trim() : '';
|
||||
const stderr = typeof error?.stderr === 'string' ? error.stderr.trim() : '';
|
||||
const message = error instanceof Error ? error.message.trim() : String(error);
|
||||
return [stderr, stdout, message].find((line) => line.length > 0) ?? 'Command failed';
|
||||
}
|
||||
|
||||
export async function runSetupDev(options = {}) {
|
||||
const rootDir = options.rootDir ?? kloRootDir();
|
||||
const execFile = options.execFile ?? execFileAsync;
|
||||
const log = options.log ?? ((line) => process.stdout.write(`${line}\n`));
|
||||
const phases = [
|
||||
{
|
||||
name: 'dependency install',
|
||||
command: 'pnpm',
|
||||
args: ['install', '--frozen-lockfile'],
|
||||
retry: 'pnpm install --frozen-lockfile',
|
||||
},
|
||||
{
|
||||
name: 'native SQLite rebuild',
|
||||
command: 'pnpm',
|
||||
args: ['run', 'native:rebuild'],
|
||||
retry: 'pnpm run native:rebuild',
|
||||
},
|
||||
{
|
||||
name: 'TypeScript package build',
|
||||
command: 'pnpm',
|
||||
args: ['run', 'build'],
|
||||
retry: 'pnpm run build',
|
||||
},
|
||||
{
|
||||
name: 'doctor setup',
|
||||
command: process.execPath,
|
||||
args: ['packages/cli/dist/bin.js', 'dev', 'doctor', 'setup', '--no-input'],
|
||||
retry: 'pnpm run klo -- dev doctor setup --no-input',
|
||||
},
|
||||
];
|
||||
|
||||
for (const phase of phases) {
|
||||
log(`RUN ${phase.name}: ${phase.command} ${phase.args.join(' ')}`);
|
||||
try {
|
||||
await execFile(phase.command, phase.args, { cwd: rootDir, maxBuffer: 1024 * 1024 });
|
||||
log(`PASS ${phase.name}`);
|
||||
} catch (error) {
|
||||
log(`FAIL ${phase.name}: ${failureText(error)}`);
|
||||
log(`Retry: ${phase.retry}`);
|
||||
return { ok: false, failedPhase: phase };
|
||||
}
|
||||
}
|
||||
|
||||
log('Workspace CLI: pnpm run klo -- --help');
|
||||
log('Optional global dev link: pnpm run link:dev');
|
||||
return { ok: true };
|
||||
}
|
||||
|
||||
if (import.meta.url === pathToFileURL(process.argv[1]).href) {
|
||||
const result = await runSetupDev();
|
||||
if (!result.ok) {
|
||||
process.exitCode = 1;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue