greenbump 0.4.0 → 0.5.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/CHANGELOG.md +44 -1
- package/action-dist/index.cjs +813 -18
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -1
- package/dist/engine/git.js +1 -0
- package/dist/engine/git.js.map +1 -1
- package/dist/engine/perf/metrics.js +171 -0
- package/dist/engine/perf/metrics.js.map +1 -0
- package/dist/engine/perf/regression.js +115 -0
- package/dist/engine/perf/regression.js.map +1 -0
- package/dist/engine/run.js +49 -1
- package/dist/engine/run.js.map +1 -1
- package/dist/engine/sandbox/docker-manager.js +215 -0
- package/dist/engine/sandbox/docker-manager.js.map +1 -0
- package/dist/engine/sandbox/orchestrator.js +107 -0
- package/dist/engine/sandbox/orchestrator.js.map +1 -0
- package/dist/engine/sandbox/service-detector.js +147 -0
- package/dist/engine/sandbox/service-detector.js.map +1 -0
- package/dist/engine/sandbox/template-generator.js +241 -0
- package/dist/engine/sandbox/template-generator.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { existsSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { readFile } from "fs/promises";
|
|
4
|
+
/**
|
|
5
|
+
* Detect project type based on files present
|
|
6
|
+
*/
|
|
7
|
+
export async function detectProjectType(cwd) {
|
|
8
|
+
if (existsSync(join(cwd, "package.json"))) {
|
|
9
|
+
return "nodejs";
|
|
10
|
+
}
|
|
11
|
+
if (existsSync(join(cwd, "requirements.txt")) ||
|
|
12
|
+
existsSync(join(cwd, "pyproject.toml")) ||
|
|
13
|
+
existsSync(join(cwd, "setup.py"))) {
|
|
14
|
+
return "python";
|
|
15
|
+
}
|
|
16
|
+
return "unknown";
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate Dockerfile for project
|
|
20
|
+
*/
|
|
21
|
+
export async function generateDockerfile(projectType, cwd) {
|
|
22
|
+
if (projectType === "nodejs") {
|
|
23
|
+
return await generateNodeJsDockerfile(cwd);
|
|
24
|
+
}
|
|
25
|
+
if (projectType === "python") {
|
|
26
|
+
return await generatePythonDockerfile(cwd);
|
|
27
|
+
}
|
|
28
|
+
// Fallback to Node.js
|
|
29
|
+
return await generateNodeJsDockerfile(cwd);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Generate Node.js Dockerfile
|
|
33
|
+
*/
|
|
34
|
+
async function generateNodeJsDockerfile(cwd) {
|
|
35
|
+
const hasPnpm = existsSync(join(cwd, "pnpm-lock.yaml"));
|
|
36
|
+
const hasYarn = existsSync(join(cwd, "yarn.lock"));
|
|
37
|
+
let installCmd = "npm ci";
|
|
38
|
+
let copyLockFile = "COPY package*.json ./";
|
|
39
|
+
if (hasPnpm) {
|
|
40
|
+
installCmd = "corepack enable && pnpm install --frozen-lockfile";
|
|
41
|
+
copyLockFile = "COPY package*.json pnpm-lock.yaml ./";
|
|
42
|
+
}
|
|
43
|
+
else if (hasYarn) {
|
|
44
|
+
installCmd = "yarn install --frozen-lockfile";
|
|
45
|
+
copyLockFile = "COPY package*.json yarn.lock ./";
|
|
46
|
+
}
|
|
47
|
+
return `FROM node:20-slim
|
|
48
|
+
|
|
49
|
+
WORKDIR /workspace
|
|
50
|
+
|
|
51
|
+
# Copy package files
|
|
52
|
+
${copyLockFile}
|
|
53
|
+
|
|
54
|
+
# Install dependencies
|
|
55
|
+
RUN ${installCmd}
|
|
56
|
+
|
|
57
|
+
# Copy source code
|
|
58
|
+
COPY . .
|
|
59
|
+
|
|
60
|
+
# Build if build script exists
|
|
61
|
+
RUN if grep -q '"build":' package.json; then npm run build || true; fi
|
|
62
|
+
|
|
63
|
+
# Default command: run tests
|
|
64
|
+
CMD ["npm", "test"]
|
|
65
|
+
`;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Generate Python Dockerfile
|
|
69
|
+
*/
|
|
70
|
+
async function generatePythonDockerfile(cwd) {
|
|
71
|
+
const hasRequirements = existsSync(join(cwd, "requirements.txt"));
|
|
72
|
+
const hasPyproject = existsSync(join(cwd, "pyproject.toml"));
|
|
73
|
+
let installCmd = "";
|
|
74
|
+
let copyFiles = "";
|
|
75
|
+
if (hasRequirements) {
|
|
76
|
+
copyFiles = "COPY requirements*.txt ./";
|
|
77
|
+
installCmd = "pip install --no-cache-dir -r requirements.txt";
|
|
78
|
+
}
|
|
79
|
+
else if (hasPyproject) {
|
|
80
|
+
copyFiles = "COPY pyproject.toml setup.py* ./";
|
|
81
|
+
installCmd = "pip install --no-cache-dir -e .";
|
|
82
|
+
}
|
|
83
|
+
return `FROM python:3.11-slim
|
|
84
|
+
|
|
85
|
+
WORKDIR /workspace
|
|
86
|
+
|
|
87
|
+
# Copy dependency files
|
|
88
|
+
${copyFiles}
|
|
89
|
+
|
|
90
|
+
# Install dependencies
|
|
91
|
+
RUN ${installCmd}
|
|
92
|
+
|
|
93
|
+
# Copy source code
|
|
94
|
+
COPY . .
|
|
95
|
+
|
|
96
|
+
# Default command: run tests
|
|
97
|
+
CMD ["pytest"]
|
|
98
|
+
`;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Generate docker-compose.yml for services
|
|
102
|
+
*/
|
|
103
|
+
export async function generateComposeFile(services) {
|
|
104
|
+
const serviceConfigs = services.map(getServiceConfig).filter((config) => config !== null);
|
|
105
|
+
if (serviceConfigs.length === 0) {
|
|
106
|
+
return "";
|
|
107
|
+
}
|
|
108
|
+
const servicesYaml = serviceConfigs.map(formatServiceConfig).join("\n");
|
|
109
|
+
return `version: '3.8'
|
|
110
|
+
|
|
111
|
+
services:
|
|
112
|
+
${servicesYaml}
|
|
113
|
+
|
|
114
|
+
networks:
|
|
115
|
+
default:
|
|
116
|
+
name: greenbump_network
|
|
117
|
+
`;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get service configuration
|
|
121
|
+
*/
|
|
122
|
+
function getServiceConfig(serviceName) {
|
|
123
|
+
const configs = {
|
|
124
|
+
postgres: {
|
|
125
|
+
name: "postgres",
|
|
126
|
+
image: "postgres:16-alpine",
|
|
127
|
+
ports: ["5432:5432"],
|
|
128
|
+
environment: {
|
|
129
|
+
POSTGRES_USER: "test",
|
|
130
|
+
POSTGRES_PASSWORD: "test",
|
|
131
|
+
POSTGRES_DB: "test",
|
|
132
|
+
},
|
|
133
|
+
healthcheck: {
|
|
134
|
+
test: ["CMD-SHELL", "pg_isready -U test"],
|
|
135
|
+
interval: "5s",
|
|
136
|
+
timeout: "5s",
|
|
137
|
+
retries: 5,
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
mysql: {
|
|
141
|
+
name: "mysql",
|
|
142
|
+
image: "mysql:8",
|
|
143
|
+
ports: ["3306:3306"],
|
|
144
|
+
environment: {
|
|
145
|
+
MYSQL_ROOT_PASSWORD: "test",
|
|
146
|
+
MYSQL_DATABASE: "test",
|
|
147
|
+
},
|
|
148
|
+
healthcheck: {
|
|
149
|
+
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"],
|
|
150
|
+
interval: "5s",
|
|
151
|
+
timeout: "5s",
|
|
152
|
+
retries: 5,
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
redis: {
|
|
156
|
+
name: "redis",
|
|
157
|
+
image: "redis:7-alpine",
|
|
158
|
+
ports: ["6379:6379"],
|
|
159
|
+
healthcheck: {
|
|
160
|
+
test: ["CMD", "redis-cli", "ping"],
|
|
161
|
+
interval: "5s",
|
|
162
|
+
timeout: "5s",
|
|
163
|
+
retries: 5,
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
mongodb: {
|
|
167
|
+
name: "mongodb",
|
|
168
|
+
image: "mongo:7",
|
|
169
|
+
ports: ["27017:27017"],
|
|
170
|
+
environment: {
|
|
171
|
+
MONGO_INITDB_ROOT_USERNAME: "test",
|
|
172
|
+
MONGO_INITDB_ROOT_PASSWORD: "test",
|
|
173
|
+
},
|
|
174
|
+
healthcheck: {
|
|
175
|
+
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"],
|
|
176
|
+
interval: "5s",
|
|
177
|
+
timeout: "5s",
|
|
178
|
+
retries: 5,
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
return configs[serviceName] || null;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Format service config as YAML
|
|
186
|
+
*/
|
|
187
|
+
function formatServiceConfig(config) {
|
|
188
|
+
const lines = [` ${config.name}:`];
|
|
189
|
+
lines.push(` image: ${config.image}`);
|
|
190
|
+
if (config.environment) {
|
|
191
|
+
lines.push(" environment:");
|
|
192
|
+
for (const [key, value] of Object.entries(config.environment)) {
|
|
193
|
+
lines.push(` ${key}: ${value}`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if (config.ports.length > 0) {
|
|
197
|
+
lines.push(" ports:");
|
|
198
|
+
for (const port of config.ports) {
|
|
199
|
+
lines.push(` - "${port}"`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
lines.push(" healthcheck:");
|
|
203
|
+
lines.push(` test: ${JSON.stringify(config.healthcheck.test)}`);
|
|
204
|
+
lines.push(` interval: ${config.healthcheck.interval}`);
|
|
205
|
+
lines.push(` timeout: ${config.healthcheck.timeout}`);
|
|
206
|
+
lines.push(` retries: ${config.healthcheck.retries}`);
|
|
207
|
+
return lines.join("\n");
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Check if project has build script
|
|
211
|
+
*/
|
|
212
|
+
export async function hasBuildScript(cwd) {
|
|
213
|
+
const pkgPath = join(cwd, "package.json");
|
|
214
|
+
if (!existsSync(pkgPath))
|
|
215
|
+
return false;
|
|
216
|
+
try {
|
|
217
|
+
const content = await readFile(pkgPath, "utf-8");
|
|
218
|
+
const pkg = JSON.parse(content);
|
|
219
|
+
return pkg.scripts?.build !== undefined;
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Check if project has test script
|
|
227
|
+
*/
|
|
228
|
+
export async function hasTestScript(cwd) {
|
|
229
|
+
const pkgPath = join(cwd, "package.json");
|
|
230
|
+
if (!existsSync(pkgPath))
|
|
231
|
+
return false;
|
|
232
|
+
try {
|
|
233
|
+
const content = await readFile(pkgPath, "utf-8");
|
|
234
|
+
const pkg = JSON.parse(content);
|
|
235
|
+
return pkg.scripts?.test !== undefined;
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=template-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-generator.js","sourceRoot":"","sources":["../../../src/engine/sandbox/template-generator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED