openboot 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +110 -0
- package/README.md +273 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +132 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/clean.d.ts +7 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +173 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/dev.d.ts +7 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +92 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/down.d.ts +5 -0
- package/dist/commands/down.d.ts.map +1 -0
- package/dist/commands/down.js +33 -0
- package/dist/commands/down.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +560 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/logs.d.ts +14 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +243 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/reboot.d.ts +5 -0
- package/dist/commands/reboot.d.ts.map +1 -0
- package/dist/commands/reboot.js +15 -0
- package/dist/commands/reboot.js.map +1 -0
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +200 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +200 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/up.d.ts +7 -0
- package/dist/commands/up.d.ts.map +1 -0
- package/dist/commands/up.js +325 -0
- package/dist/commands/up.js.map +1 -0
- package/dist/lib/config.d.ts +18 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +95 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/docker.d.ts +19 -0
- package/dist/lib/docker.d.ts.map +1 -0
- package/dist/lib/docker.js +511 -0
- package/dist/lib/docker.js.map +1 -0
- package/dist/lib/health.d.ts +5 -0
- package/dist/lib/health.d.ts.map +1 -0
- package/dist/lib/health.js +80 -0
- package/dist/lib/health.js.map +1 -0
- package/dist/lib/log.d.ts +11 -0
- package/dist/lib/log.d.ts.map +1 -0
- package/dist/lib/log.js +51 -0
- package/dist/lib/log.js.map +1 -0
- package/dist/lib/ports.d.ts +13 -0
- package/dist/lib/ports.d.ts.map +1 -0
- package/dist/lib/ports.js +45 -0
- package/dist/lib/ports.js.map +1 -0
- package/dist/lib/prereqs.d.ts +8 -0
- package/dist/lib/prereqs.d.ts.map +1 -0
- package/dist/lib/prereqs.js +78 -0
- package/dist/lib/prereqs.js.map +1 -0
- package/dist/lib/process.d.ts +38 -0
- package/dist/lib/process.d.ts.map +1 -0
- package/dist/lib/process.js +285 -0
- package/dist/lib/process.js.map +1 -0
- package/dist/lib/tail.d.ts +12 -0
- package/dist/lib/tail.d.ts.map +1 -0
- package/dist/lib/tail.js +136 -0
- package/dist/lib/tail.js.map +1 -0
- package/dist/types.d.ts +71 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +29 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BootConfig } from "../types";
|
|
2
|
+
interface TailHandle {
|
|
3
|
+
/** Stop all watchers and clean up. */
|
|
4
|
+
stop: () => void;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Stream all app logs to stdout, interleaved and color-coded by service name.
|
|
8
|
+
* Returns a handle to stop tailing.
|
|
9
|
+
*/
|
|
10
|
+
export declare function tailAllLogs(config: BootConfig): TailHandle;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=tail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tail.d.ts","sourceRoot":"","sources":["../../src/lib/tail.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAoBtC,UAAU,UAAU;IAClB,sCAAsC;IACtC,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAwF1D"}
|
package/dist/lib/tail.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.tailAllLogs = tailAllLogs;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const LOGS_DIR = path.join(".boot", "logs");
|
|
40
|
+
/**
|
|
41
|
+
* ANSI color codes for service labels.
|
|
42
|
+
*/
|
|
43
|
+
const COLORS = [
|
|
44
|
+
"\x1b[36m", // cyan
|
|
45
|
+
"\x1b[33m", // yellow
|
|
46
|
+
"\x1b[35m", // magenta
|
|
47
|
+
"\x1b[32m", // green
|
|
48
|
+
"\x1b[34m", // blue
|
|
49
|
+
"\x1b[91m", // bright red
|
|
50
|
+
"\x1b[93m", // bright yellow
|
|
51
|
+
"\x1b[95m", // bright magenta
|
|
52
|
+
];
|
|
53
|
+
const RESET = "\x1b[0m";
|
|
54
|
+
const DIM = "\x1b[2m";
|
|
55
|
+
/**
|
|
56
|
+
* Stream all app logs to stdout, interleaved and color-coded by service name.
|
|
57
|
+
* Returns a handle to stop tailing.
|
|
58
|
+
*/
|
|
59
|
+
function tailAllLogs(config) {
|
|
60
|
+
const watchers = [];
|
|
61
|
+
const positions = new Map();
|
|
62
|
+
const apps = config.apps || [];
|
|
63
|
+
const maxNameLen = Math.max(...apps.map((a) => a.name.length), 5);
|
|
64
|
+
// Print initial message
|
|
65
|
+
console.log(`${DIM}Streaming logs for ${apps.length} service${apps.length !== 1 ? "s" : ""}... (Ctrl+C to detach)${RESET}\n`);
|
|
66
|
+
for (let i = 0; i < apps.length; i++) {
|
|
67
|
+
const app = apps[i];
|
|
68
|
+
const color = COLORS[i % COLORS.length];
|
|
69
|
+
const logPath = path.join(LOGS_DIR, `${app.name}.log`);
|
|
70
|
+
const label = app.name.padEnd(maxNameLen);
|
|
71
|
+
// Read existing content from the end (last 5 lines for context)
|
|
72
|
+
if (fs.existsSync(logPath)) {
|
|
73
|
+
const content = fs.readFileSync(logPath, "utf-8");
|
|
74
|
+
const lines = content.split("\n");
|
|
75
|
+
const startLine = Math.max(0, lines.length - 6);
|
|
76
|
+
const tail = lines.slice(startLine).join("\n").trim();
|
|
77
|
+
if (tail) {
|
|
78
|
+
for (const line of tail.split("\n")) {
|
|
79
|
+
console.log(`${color}${label}${RESET} ${DIM}│${RESET} ${line}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
positions.set(app.name, content.length);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
positions.set(app.name, 0);
|
|
86
|
+
}
|
|
87
|
+
// Watch for changes
|
|
88
|
+
try {
|
|
89
|
+
// Ensure the log file exists
|
|
90
|
+
if (!fs.existsSync(logPath)) {
|
|
91
|
+
fs.mkdirSync(path.dirname(logPath), { recursive: true });
|
|
92
|
+
fs.writeFileSync(logPath, "");
|
|
93
|
+
}
|
|
94
|
+
const watcher = fs.watch(logPath, () => {
|
|
95
|
+
try {
|
|
96
|
+
const stat = fs.statSync(logPath);
|
|
97
|
+
const prevPos = positions.get(app.name) || 0;
|
|
98
|
+
if (stat.size > prevPos) {
|
|
99
|
+
// Read new content
|
|
100
|
+
const fd = fs.openSync(logPath, "r");
|
|
101
|
+
const buf = Buffer.alloc(stat.size - prevPos);
|
|
102
|
+
fs.readSync(fd, buf, 0, buf.length, prevPos);
|
|
103
|
+
fs.closeSync(fd);
|
|
104
|
+
const newContent = buf.toString("utf-8");
|
|
105
|
+
const newLines = newContent.split("\n");
|
|
106
|
+
for (const line of newLines) {
|
|
107
|
+
if (line.trim()) {
|
|
108
|
+
console.log(`${color}${label}${RESET} ${DIM}│${RESET} ${line}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
positions.set(app.name, stat.size);
|
|
112
|
+
}
|
|
113
|
+
else if (stat.size < prevPos) {
|
|
114
|
+
// File was truncated (e.g. after clean)
|
|
115
|
+
positions.set(app.name, 0);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// File might have been deleted
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
watchers.push(watcher);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Can't watch this file
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
stop: () => {
|
|
130
|
+
for (const w of watchers) {
|
|
131
|
+
w.close();
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=tail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tail.js","sourceRoot":"","sources":["../../src/lib/tail.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export interface BootConfig {
|
|
2
|
+
/** Project name */
|
|
3
|
+
name: string;
|
|
4
|
+
/** Package manager override (auto-detected if omitted) */
|
|
5
|
+
packageManager?: "pnpm" | "npm" | "yarn";
|
|
6
|
+
/** Environment file validation */
|
|
7
|
+
env?: EnvConfig;
|
|
8
|
+
/** One-time setup commands (run via `boot setup`) */
|
|
9
|
+
setup?: string[];
|
|
10
|
+
/** Docker services (compose-based or raw containers) */
|
|
11
|
+
docker?: DockerConfig;
|
|
12
|
+
/** Application processes managed by boot */
|
|
13
|
+
apps?: AppConfig[];
|
|
14
|
+
}
|
|
15
|
+
export interface EnvConfig {
|
|
16
|
+
/** Path to .env file (default: .env) */
|
|
17
|
+
file?: string;
|
|
18
|
+
/** Required environment variables — boot up will fail if these are missing */
|
|
19
|
+
required?: string[];
|
|
20
|
+
/** Values that should be rejected (e.g. example/default secrets) */
|
|
21
|
+
reject?: Record<string, string[]>;
|
|
22
|
+
}
|
|
23
|
+
export interface DockerConfig {
|
|
24
|
+
/** Path to compose file (default: docker-compose.yml) */
|
|
25
|
+
composeFile?: string;
|
|
26
|
+
/** Services managed via docker compose (requires composeFile) */
|
|
27
|
+
services?: DockerService[];
|
|
28
|
+
/** Standalone containers managed via docker run/start (no compose needed) */
|
|
29
|
+
containers?: ContainerConfig[];
|
|
30
|
+
}
|
|
31
|
+
export interface DockerService {
|
|
32
|
+
/** Service name (used for display) */
|
|
33
|
+
name: string;
|
|
34
|
+
/** Container name (for docker exec; defaults to name) */
|
|
35
|
+
container?: string;
|
|
36
|
+
/** Command to run inside container to check readiness */
|
|
37
|
+
readyCheck?: string;
|
|
38
|
+
/** Seconds to wait for readiness (default: 30) */
|
|
39
|
+
timeout?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface ContainerConfig {
|
|
42
|
+
/** Container name */
|
|
43
|
+
name: string;
|
|
44
|
+
/** Docker image */
|
|
45
|
+
image: string;
|
|
46
|
+
/** Port mappings (e.g. "5433:5432") */
|
|
47
|
+
ports?: string[];
|
|
48
|
+
/** Environment variables for the container */
|
|
49
|
+
env?: Record<string, string>;
|
|
50
|
+
/** Volume mounts */
|
|
51
|
+
volumes?: string[];
|
|
52
|
+
/** Command to run inside container to check readiness */
|
|
53
|
+
readyCheck?: string;
|
|
54
|
+
/** Seconds to wait for readiness (default: 30) */
|
|
55
|
+
timeout?: number;
|
|
56
|
+
}
|
|
57
|
+
export interface AppConfig {
|
|
58
|
+
/** App name (used for display, PID files, log files) */
|
|
59
|
+
name: string;
|
|
60
|
+
/** Working directory relative to project root */
|
|
61
|
+
path?: string;
|
|
62
|
+
/** Command to start the app */
|
|
63
|
+
command: string;
|
|
64
|
+
/** Port the app listens on */
|
|
65
|
+
port?: number;
|
|
66
|
+
/** URL to poll for health check */
|
|
67
|
+
health?: string;
|
|
68
|
+
/** Extra environment variables */
|
|
69
|
+
env?: Record<string, string>;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IAEb,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAEzC,kCAAkC;IAClC,GAAG,CAAC,EAAE,SAAS,CAAC;IAEhB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB,wDAAwD;IACxD,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAE3B,6EAA6E;IAC7E,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IAEb,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IAEb,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IAEd,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB,8CAA8C;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IAEb,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAEhB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "openboot",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Dev stack lifecycle manager. One command to setup, start, stop, and reboot your projects.",
|
|
5
|
+
"author": "Treadie, Inc.",
|
|
6
|
+
"license": "FSL-1.1-MIT",
|
|
7
|
+
"bin": {
|
|
8
|
+
"boot": "./dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"dev": "tsc --watch",
|
|
16
|
+
"prepublishOnly": "npm run build"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"commander": "^13.1.0",
|
|
20
|
+
"yaml": "^2.7.0"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/node": "^22.13.0",
|
|
24
|
+
"typescript": "^5.7.0"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=18.0.0"
|
|
28
|
+
}
|
|
29
|
+
}
|