testeranto 0.205.0 → 0.207.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/Dockerfile.mothership +14 -4
- package/Dockerfile.node +5 -3
- package/bundle.js +5 -4
- package/dist/common/src/app/backend/PM_0.js +3 -0
- package/dist/common/src/app/backend/PM_1_WithProcesses.js +2 -0
- package/dist/common/src/app/backend/PM_2_WithTCP.js +2 -0
- package/dist/common/src/app/backend/PM_WithHelpo.js +1 -0
- package/dist/common/src/app/backend/main.js +27 -26
- package/dist/common/src/app/frontend/useFs.js +2 -1
- package/dist/common/src/mothership/mothership.js +197 -0
- package/dist/common/src/testeranto.js +31 -42
- package/dist/common/tsconfig.common.tsbuildinfo +1 -1
- package/dist/module/src/app/backend/PM_0.js +3 -0
- package/dist/module/src/app/backend/PM_1_WithProcesses.js +2 -0
- package/dist/module/src/app/backend/PM_2_WithTCP.js +2 -0
- package/dist/module/src/app/backend/PM_WithHelpo.js +1 -0
- package/dist/module/src/app/backend/main.js +27 -26
- package/dist/module/src/app/frontend/useFs.js +2 -1
- package/dist/module/src/mothership/mothership.js +196 -0
- package/dist/module/src/testeranto.js +31 -42
- package/dist/module/tsconfig.module.tsbuildinfo +1 -1
- package/dist/prebuild/App.css +68 -12
- package/dist/prebuild/App.js +8 -91
- package/dist/prebuild/mothership.mjs +4 -0
- package/dist/types/src/app/backend/PM_1_WithProcesses.d.ts +0 -1
- package/dist/types/src/app/backend/PM_WithBuild.d.ts +0 -1
- package/dist/types/src/app/backend/main.d.ts +1 -0
- package/dist/types/src/app/frontend/useFs.d.ts +1 -1
- package/dist/types/src/mothership/mothership.d.ts +1 -0
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/docker-compose.yml +54 -54
- package/package.json +12 -5
- package/src/app/backend/PM_0.ts +3 -0
- package/src/app/backend/PM_1_WithProcesses.ts +4 -2
- package/src/app/backend/PM_2_WithTCP.ts +3 -0
- package/src/app/backend/PM_WithBuild.ts +0 -2
- package/src/app/backend/PM_WithHelpo.ts +1 -1
- package/src/app/backend/main.ts +26 -8
- package/src/app/frontend/useFs.ts +2 -1
- package/src/mothership/mothership.ts +218 -0
- package/src/testeranto.ts +47 -45
- package/dist/common/src/mothership/index.js +0 -183
- package/dist/module/src/mothership/index.js +0 -178
- package/dist/prebuild/esbuildConfigs/eslint-formatter-testeranto.mjs +0 -22
- package/dist/prebuild/init-docs.mjs +0 -43
- package/dist/prebuild/testeranto.mjs +0 -5352
- package/dist/types/src/mothership/index.d.ts +0 -2
- package/src/mothership/index.ts +0 -216
package/src/mothership/index.ts
DELETED
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
import express from "express";
|
|
2
|
-
import Docker from "dockerode";
|
|
3
|
-
|
|
4
|
-
const app = express();
|
|
5
|
-
app.use(express.json());
|
|
6
|
-
|
|
7
|
-
const docker = new Docker();
|
|
8
|
-
|
|
9
|
-
// Track running services
|
|
10
|
-
const runningServices = new Map();
|
|
11
|
-
|
|
12
|
-
// Service to build file mapping
|
|
13
|
-
const serviceBuildFiles = {
|
|
14
|
-
'node-build': 'src/builders/node.ts',
|
|
15
|
-
'web-build': 'src/builders/web.ts',
|
|
16
|
-
'golang-build': 'src/builders/golang.ts',
|
|
17
|
-
'python-build': 'src/builders/python.ts'
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
// Automatically start build services on mothership startup
|
|
21
|
-
async function initializeServices() {
|
|
22
|
-
console.log('Initializing build services...');
|
|
23
|
-
|
|
24
|
-
for (const serviceName of Object.keys(serviceBuildFiles)) {
|
|
25
|
-
try {
|
|
26
|
-
// Get all containers
|
|
27
|
-
const containers = await docker.listContainers({ all: true });
|
|
28
|
-
|
|
29
|
-
// Find the container for the requested service
|
|
30
|
-
const containerInfo = containers.find(container =>
|
|
31
|
-
container.Names.some(name => name.includes(serviceName))
|
|
32
|
-
);
|
|
33
|
-
|
|
34
|
-
if (containerInfo) {
|
|
35
|
-
const container = docker.getContainer(containerInfo.Id);
|
|
36
|
-
|
|
37
|
-
// Start the container if it's not running
|
|
38
|
-
if (containerInfo.State !== 'running') {
|
|
39
|
-
console.log(`Starting ${serviceName}...`);
|
|
40
|
-
await container.start();
|
|
41
|
-
} else {
|
|
42
|
-
console.log(`${serviceName} is already running`);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
runningServices.set(serviceName, containerInfo.Id);
|
|
46
|
-
} else {
|
|
47
|
-
console.warn(`Container for ${serviceName} not found`);
|
|
48
|
-
}
|
|
49
|
-
} catch (error) {
|
|
50
|
-
console.error(`Error initializing ${serviceName}:`, error);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
console.log('Build services initialization complete');
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Initialize services when mothership starts
|
|
57
|
-
initializeServices();
|
|
58
|
-
|
|
59
|
-
app.get("/", (req, res) => {
|
|
60
|
-
res.send("Mothership is running");
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// Start a specific service
|
|
64
|
-
app.post("/services/:serviceName/start", async (req, res) => {
|
|
65
|
-
const { serviceName } = req.params;
|
|
66
|
-
|
|
67
|
-
try {
|
|
68
|
-
// Get all containers
|
|
69
|
-
const containers = await docker.listContainers({ all: true });
|
|
70
|
-
|
|
71
|
-
// Find the container for the requested service
|
|
72
|
-
const containerInfo = containers.find(container =>
|
|
73
|
-
container.Names.some(name => name.includes(serviceName))
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
if (!containerInfo) {
|
|
77
|
-
return res.status(404).json({ error: `Service ${serviceName} not found` });
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const container = docker.getContainer(containerInfo.Id);
|
|
81
|
-
|
|
82
|
-
// Start the container if it's not running
|
|
83
|
-
if (containerInfo.State !== 'running') {
|
|
84
|
-
await container.start();
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
runningServices.set(serviceName, containerInfo.Id);
|
|
88
|
-
res.status(200).json({
|
|
89
|
-
status: 'started',
|
|
90
|
-
service: serviceName,
|
|
91
|
-
containerId: containerInfo.Id
|
|
92
|
-
});
|
|
93
|
-
} catch (error) {
|
|
94
|
-
console.error(`Error starting service ${serviceName}:`, error);
|
|
95
|
-
res.status(500).json({ error: `Failed to start service: ${error.message}` });
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
// Stop a specific service
|
|
100
|
-
app.post("/services/:serviceName/stop", async (req, res) => {
|
|
101
|
-
const { serviceName } = req.params;
|
|
102
|
-
|
|
103
|
-
try {
|
|
104
|
-
const containerId = runningServices.get(serviceName);
|
|
105
|
-
if (!containerId) {
|
|
106
|
-
return res.status(404).json({ error: `Service ${serviceName} is not running` });
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const container = docker.getContainer(containerId);
|
|
110
|
-
await container.stop();
|
|
111
|
-
runningServices.delete(serviceName);
|
|
112
|
-
|
|
113
|
-
res.status(200).json({
|
|
114
|
-
status: 'stopped',
|
|
115
|
-
service: serviceName
|
|
116
|
-
});
|
|
117
|
-
} catch (error) {
|
|
118
|
-
console.error(`Error stopping service ${serviceName}:`, error);
|
|
119
|
-
res.status(500).json({ error: `Failed to stop service: ${error.message}` });
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
// Get status of all services
|
|
124
|
-
app.get("/services", async (req, res) => {
|
|
125
|
-
try {
|
|
126
|
-
const containers = await docker.listContainers({ all: true });
|
|
127
|
-
const services = containers
|
|
128
|
-
.filter(container =>
|
|
129
|
-
container.Names.some(name => name.match(/_(node-build|web-build|golang-build|python-build|mothership)_/))
|
|
130
|
-
)
|
|
131
|
-
.map(container => ({
|
|
132
|
-
name: container.Names[0].replace('/', ''),
|
|
133
|
-
id: container.Id,
|
|
134
|
-
status: container.State,
|
|
135
|
-
image: container.Image
|
|
136
|
-
}));
|
|
137
|
-
|
|
138
|
-
res.status(200).json({ services });
|
|
139
|
-
} catch (error) {
|
|
140
|
-
console.error("Error listing services:", error);
|
|
141
|
-
res.status(500).json({ error: `Failed to list services: ${error.message}` });
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
// Trigger a build in a specific service
|
|
146
|
-
app.post("/build/:serviceName", async (req, res) => {
|
|
147
|
-
const { serviceName } = req.params;
|
|
148
|
-
|
|
149
|
-
try {
|
|
150
|
-
const containerId = runningServices.get(serviceName);
|
|
151
|
-
if (!containerId) {
|
|
152
|
-
return res.status(404).json({ error: `Service ${serviceName} is not running` });
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
const container = docker.getContainer(containerId);
|
|
156
|
-
|
|
157
|
-
// Execute the build command in the container
|
|
158
|
-
const buildFile = serviceBuildFiles[serviceName];
|
|
159
|
-
if (!buildFile) {
|
|
160
|
-
return res.status(400).json({ error: `No build file configured for ${serviceName}` });
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
// Run the TypeScript build file using ts-node
|
|
164
|
-
const exec = await container.exec({
|
|
165
|
-
Cmd: ['npx', 'ts-node', '--transpile-only', buildFile],
|
|
166
|
-
AttachStdout: true,
|
|
167
|
-
AttachStderr: true
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
// Start the exec instance
|
|
171
|
-
const stream = await exec.start({ hijack: true, stdin: false });
|
|
172
|
-
|
|
173
|
-
// Collect output
|
|
174
|
-
let output = '';
|
|
175
|
-
stream.on('data', (chunk: Buffer) => {
|
|
176
|
-
output += chunk.toString();
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
stream.on('end', () => {
|
|
180
|
-
res.status(200).json({
|
|
181
|
-
status: 'build completed',
|
|
182
|
-
service: serviceName,
|
|
183
|
-
output: output
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
stream.on('error', (error) => {
|
|
188
|
-
console.error(`Stream error for ${serviceName}:`, error);
|
|
189
|
-
res.status(500).json({ error: `Build stream error: ${error.message}` });
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
} catch (error) {
|
|
193
|
-
console.error(`Error triggering build for ${serviceName}:`, error);
|
|
194
|
-
res.status(500).json({ error: `Failed to trigger build: ${error.message}` });
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
// Get build file for each service
|
|
199
|
-
app.get("/build-files", (req, res) => {
|
|
200
|
-
res.status(200).json(serviceBuildFiles);
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
// Claim resource endpoint
|
|
204
|
-
app.get("/claim", (req, res) => {
|
|
205
|
-
const { resource } = req.query;
|
|
206
|
-
console.log(`Resource claimed: ${resource}`);
|
|
207
|
-
res.status(200).json({ status: 'claimed', resource });
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
export default (port: number) => {
|
|
211
|
-
app.listen(port, () => {
|
|
212
|
-
console.log(`Mothership listening on port ${port}`);
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
return app;
|
|
216
|
-
};
|