@solidxai/solidctl 0.1.28-beta.2 → 0.1.28-beta.21
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/README.md +3 -0
- package/dist/commands/agent-helper.d.ts +2 -0
- package/dist/commands/agent-helper.js +197 -1
- package/dist/commands/agent-helper.js.map +1 -1
- package/dist/commands/agent.command.js +372 -31
- package/dist/commands/agent.command.js.map +1 -1
- package/dist/commands/mcp.command.js +2 -1
- package/dist/commands/mcp.command.js.map +1 -1
- package/dist/commands/release.command.js +372 -93
- package/dist/commands/release.command.js.map +1 -1
- package/dist/commands/start.command.js +73 -7
- package/dist/commands/start.command.js.map +1 -1
- package/dist/commands/upgrade.command.js +4 -1
- package/dist/commands/upgrade.command.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.registerReleaseCommand = registerReleaseCommand;
|
|
7
7
|
const child_process_1 = require("child_process");
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
9
10
|
const path_1 = __importDefault(require("path"));
|
|
10
11
|
const DEFAULT_CONFIG = {
|
|
11
12
|
mainBranch: 'main',
|
|
@@ -34,9 +35,78 @@ function loadConfig() {
|
|
|
34
35
|
}
|
|
35
36
|
return DEFAULT_CONFIG;
|
|
36
37
|
}
|
|
38
|
+
function readPackageJson(packageJsonPath = path_1.default.join(process.cwd(), 'package.json')) {
|
|
39
|
+
if (!fs_1.default.existsSync(packageJsonPath)) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
return JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf-8'));
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function readRequiredPackageJson(packageJsonPath) {
|
|
50
|
+
const packageJson = readPackageJson(packageJsonPath);
|
|
51
|
+
if (!packageJson) {
|
|
52
|
+
console.error(`❌ Could not read package.json at ${packageJsonPath}`);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
return packageJson;
|
|
56
|
+
}
|
|
57
|
+
function resolveReleaseProject() {
|
|
58
|
+
const cwdName = path_1.default.basename(process.cwd());
|
|
59
|
+
const packageJson = readPackageJson();
|
|
60
|
+
const packageName = packageJson?.name;
|
|
61
|
+
const solidApiPackageJsonPath = path_1.default.join(process.cwd(), 'solid-api', 'package.json');
|
|
62
|
+
const solidApiPackageName = readPackageJson(solidApiPackageJsonPath)?.name;
|
|
63
|
+
switch (cwdName) {
|
|
64
|
+
case 'solidctl':
|
|
65
|
+
if (packageName === '@solidxai/solidctl') {
|
|
66
|
+
console.log(`📦 Release project resolved: solidctl (${packageName})`);
|
|
67
|
+
return { type: 'solidctl', cwdName, packageName, versionSourcePath: path_1.default.join(process.cwd(), 'package.json') };
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
case 'solid-core-module':
|
|
71
|
+
if (packageName === '@solidxai/core') {
|
|
72
|
+
console.log(`📦 Release project resolved: solid-core-module (${packageName})`);
|
|
73
|
+
return { type: 'solid-core-module', cwdName, packageName, versionSourcePath: path_1.default.join(process.cwd(), 'package.json') };
|
|
74
|
+
}
|
|
75
|
+
break;
|
|
76
|
+
case 'solid-core-ui':
|
|
77
|
+
if (packageName === '@solidxai/core-ui') {
|
|
78
|
+
console.log(`📦 Release project resolved: solid-core-ui (${packageName})`);
|
|
79
|
+
return { type: 'solid-core-ui', cwdName, packageName, versionSourcePath: path_1.default.join(process.cwd(), 'package.json') };
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
case 'solid-library-management':
|
|
83
|
+
if (solidApiPackageName === '@library-management/solid-api') {
|
|
84
|
+
console.log(`📦 Release project resolved: solid-library-management (${solidApiPackageName})`);
|
|
85
|
+
return {
|
|
86
|
+
type: 'solid-library-management',
|
|
87
|
+
cwdName,
|
|
88
|
+
packageName: solidApiPackageName,
|
|
89
|
+
versionSourcePath: solidApiPackageJsonPath,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
console.error(`❌ Could not resolve release project from folder "${cwdName}" and package name "${packageName || solidApiPackageName || 'unknown'}".`);
|
|
95
|
+
console.error(' Supported release folders are solidctl, solid-core-module, solid-core-ui, and solid-library-management.');
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
37
98
|
function getCurrentBranch() {
|
|
38
99
|
return (0, child_process_1.execSync)('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8' }).trim();
|
|
39
100
|
}
|
|
101
|
+
function getRequiredBranch(preid, mainBranch, devBranch) {
|
|
102
|
+
if (preid === 'alpha') {
|
|
103
|
+
return 'predev';
|
|
104
|
+
}
|
|
105
|
+
if (preid) {
|
|
106
|
+
return devBranch;
|
|
107
|
+
}
|
|
108
|
+
return mainBranch;
|
|
109
|
+
}
|
|
40
110
|
function exec(cmd, dryRun) {
|
|
41
111
|
if (dryRun) {
|
|
42
112
|
console.log(`[dry-run] ${cmd}`);
|
|
@@ -45,6 +115,289 @@ function exec(cmd, dryRun) {
|
|
|
45
115
|
(0, child_process_1.execSync)(cmd, { stdio: 'inherit' });
|
|
46
116
|
return '';
|
|
47
117
|
}
|
|
118
|
+
function getReleaseOptions(options) {
|
|
119
|
+
const config = loadConfig();
|
|
120
|
+
return {
|
|
121
|
+
mainBranch: options.mainBranch || config.mainBranch,
|
|
122
|
+
devBranch: options.devBranch || config.devBranch,
|
|
123
|
+
reverseMerge: options.merge !== false && config.reverseMerge,
|
|
124
|
+
dryRun: options.dryRun || false,
|
|
125
|
+
force: options.force || false,
|
|
126
|
+
preid: options.preid,
|
|
127
|
+
isPrerelease: !!options.preid,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function validateReleaseBranch(preid, mainBranch, devBranch, force) {
|
|
131
|
+
const currentBranch = getCurrentBranch();
|
|
132
|
+
const requiredBranch = preid ? getRequiredBranch(preid, mainBranch, devBranch) : mainBranch;
|
|
133
|
+
if (currentBranch !== requiredBranch) {
|
|
134
|
+
if (force) {
|
|
135
|
+
console.log(`⚠️ Not on ${requiredBranch} branch (on ${currentBranch}), but --force flag set. Continuing...`);
|
|
136
|
+
return currentBranch;
|
|
137
|
+
}
|
|
138
|
+
if (preid === 'alpha') {
|
|
139
|
+
console.error(`❌ Must be on predev branch to publish alpha pre-releases. Currently on: ${currentBranch}`);
|
|
140
|
+
}
|
|
141
|
+
else if (preid) {
|
|
142
|
+
console.error(`❌ Must be on ${devBranch} branch to publish ${preid} pre-releases. Currently on: ${currentBranch}`);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
console.error(`❌ Must be on ${mainBranch} branch to publish stable releases. Currently on: ${currentBranch}`);
|
|
146
|
+
}
|
|
147
|
+
console.error(' Use --force to override this check.');
|
|
148
|
+
process.exit(1);
|
|
149
|
+
}
|
|
150
|
+
return currentBranch;
|
|
151
|
+
}
|
|
152
|
+
function getVersionCommand(versionType, preid) {
|
|
153
|
+
if (preid) {
|
|
154
|
+
if (versionType === 'patch' || versionType === 'prerelease') {
|
|
155
|
+
return `npm version prerelease --preid=${preid}`;
|
|
156
|
+
}
|
|
157
|
+
if (versionType === 'preminor' || versionType === 'minor') {
|
|
158
|
+
return `npm version preminor --preid=${preid}`;
|
|
159
|
+
}
|
|
160
|
+
if (versionType === 'premajor' || versionType === 'major') {
|
|
161
|
+
return `npm version premajor --preid=${preid}`;
|
|
162
|
+
}
|
|
163
|
+
return `npm version prerelease --preid=${preid}`;
|
|
164
|
+
}
|
|
165
|
+
return `npm version ${versionType}`;
|
|
166
|
+
}
|
|
167
|
+
function parseVersion(version) {
|
|
168
|
+
const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z-]+)\.(\d+))?$/);
|
|
169
|
+
if (!match) {
|
|
170
|
+
throw new Error(`Unsupported version format: ${version}`);
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
major: Number(match[1]),
|
|
174
|
+
minor: Number(match[2]),
|
|
175
|
+
patch: Number(match[3]),
|
|
176
|
+
prereleaseId: match[4],
|
|
177
|
+
prereleaseNumber: match[5] === undefined ? undefined : Number(match[5]),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function formatVersion(parsed) {
|
|
181
|
+
const base = `${parsed.major}.${parsed.minor}.${parsed.patch}`;
|
|
182
|
+
if (parsed.prereleaseId === undefined || parsed.prereleaseNumber === undefined) {
|
|
183
|
+
return base;
|
|
184
|
+
}
|
|
185
|
+
return `${base}-${parsed.prereleaseId}.${parsed.prereleaseNumber}`;
|
|
186
|
+
}
|
|
187
|
+
function planNextVersion(currentVersion, versionType, preid) {
|
|
188
|
+
const parsed = parseVersion(currentVersion);
|
|
189
|
+
if (!preid) {
|
|
190
|
+
if (versionType === 'minor') {
|
|
191
|
+
return formatVersion({ major: parsed.major, minor: parsed.minor + 1, patch: 0 });
|
|
192
|
+
}
|
|
193
|
+
if (versionType === 'major') {
|
|
194
|
+
return formatVersion({ major: parsed.major + 1, minor: 0, patch: 0 });
|
|
195
|
+
}
|
|
196
|
+
return formatVersion({ major: parsed.major, minor: parsed.minor, patch: parsed.patch + 1 });
|
|
197
|
+
}
|
|
198
|
+
if (versionType === 'minor' || versionType === 'preminor') {
|
|
199
|
+
return formatVersion({
|
|
200
|
+
major: parsed.major,
|
|
201
|
+
minor: parsed.minor + 1,
|
|
202
|
+
patch: 0,
|
|
203
|
+
prereleaseId: preid,
|
|
204
|
+
prereleaseNumber: 0,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
if (versionType === 'major' || versionType === 'premajor') {
|
|
208
|
+
return formatVersion({
|
|
209
|
+
major: parsed.major + 1,
|
|
210
|
+
minor: 0,
|
|
211
|
+
patch: 0,
|
|
212
|
+
prereleaseId: preid,
|
|
213
|
+
prereleaseNumber: 0,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
if (parsed.prereleaseId) {
|
|
217
|
+
return formatVersion({
|
|
218
|
+
major: parsed.major,
|
|
219
|
+
minor: parsed.minor,
|
|
220
|
+
patch: parsed.patch,
|
|
221
|
+
prereleaseId: preid,
|
|
222
|
+
prereleaseNumber: parsed.prereleaseId === preid ? (parsed.prereleaseNumber ?? 0) + 1 : 0,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
return formatVersion({
|
|
226
|
+
major: parsed.major,
|
|
227
|
+
minor: parsed.minor,
|
|
228
|
+
patch: parsed.patch + 1,
|
|
229
|
+
prereleaseId: preid,
|
|
230
|
+
prereleaseNumber: 0,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
function getMovingDockerTag(preid) {
|
|
234
|
+
if (preid) {
|
|
235
|
+
return preid;
|
|
236
|
+
}
|
|
237
|
+
return 'latest';
|
|
238
|
+
}
|
|
239
|
+
function copyDirectoryForDockerBuild(sourcePath, destinationPath) {
|
|
240
|
+
fs_1.default.cpSync(sourcePath, destinationPath, {
|
|
241
|
+
recursive: true,
|
|
242
|
+
filter: (currentPath) => {
|
|
243
|
+
const baseName = path_1.default.basename(currentPath);
|
|
244
|
+
return !['.git', 'node_modules', 'dist', 'coverage', '.DS_Store', 'logs', '.venv', '.pytest_cache'].includes(baseName);
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
function createSolidLibraryManagementDockerfile() {
|
|
249
|
+
return `FROM node:20-bookworm
|
|
250
|
+
|
|
251
|
+
ENV DEBIAN_FRONTEND=noninteractive
|
|
252
|
+
WORKDIR /workspace/solid-library-management
|
|
253
|
+
|
|
254
|
+
RUN apt-get update \\
|
|
255
|
+
&& apt-get install -y python3 python3-pip python3-venv supervisor \\
|
|
256
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
257
|
+
|
|
258
|
+
RUN npm install -g @angular-devkit/schematics-cli
|
|
259
|
+
|
|
260
|
+
COPY solid-library-management /workspace/solid-library-management
|
|
261
|
+
COPY agent /workspace/agent
|
|
262
|
+
|
|
263
|
+
RUN python3 -m venv /opt/agent-venv
|
|
264
|
+
RUN /bin/sh -lc ". /opt/agent-venv/bin/activate && cd /workspace/agent && pip install --no-cache-dir -e /workspace/agent/vendor/mini-swe-agent && pip install --no-cache-dir -e '.[full]'"
|
|
265
|
+
RUN cd /workspace/solid-library-management/solid-api && npm i
|
|
266
|
+
RUN cd /workspace/solid-library-management/solid-ui && npm i
|
|
267
|
+
RUN mkdir -p /opt/prebuilt/agent-ui-dist
|
|
268
|
+
RUN cd /workspace/agent/agent-ui && npm i --legacy-peer-deps && npm run build -- --outDir /opt/prebuilt/agent-ui-dist --emptyOutDir
|
|
269
|
+
`;
|
|
270
|
+
}
|
|
271
|
+
function runSharedReleaseFlow(versionType, options) {
|
|
272
|
+
const { mainBranch, devBranch, reverseMerge, dryRun, force, preid, isPrerelease } = getReleaseOptions(options);
|
|
273
|
+
try {
|
|
274
|
+
const currentBranch = validateReleaseBranch(preid, mainBranch, devBranch, force);
|
|
275
|
+
if (dryRun) {
|
|
276
|
+
console.log('🧪 Dry run mode - no changes will be made\n');
|
|
277
|
+
}
|
|
278
|
+
const versionCmd = getVersionCommand(versionType, preid);
|
|
279
|
+
if (isPrerelease) {
|
|
280
|
+
console.log(`🔄 Updating package version (pre-release: ${preid})...`);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
console.log(`🔄 Updating package version (${versionType})...`);
|
|
284
|
+
}
|
|
285
|
+
exec(versionCmd, dryRun);
|
|
286
|
+
console.log('📦 Pushing to git (with tags)...');
|
|
287
|
+
exec('git push --follow-tags', dryRun);
|
|
288
|
+
console.log('📦 Publishing package...');
|
|
289
|
+
if (isPrerelease) {
|
|
290
|
+
exec(`npm publish --tag ${preid}`, dryRun);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
exec('npm publish', dryRun);
|
|
294
|
+
}
|
|
295
|
+
console.log('✅ Published successfully!\n');
|
|
296
|
+
if (!isPrerelease && reverseMerge) {
|
|
297
|
+
console.log(`🔀 Merging ${mainBranch} into ${devBranch}...`);
|
|
298
|
+
exec(`git checkout ${devBranch}`, dryRun);
|
|
299
|
+
exec(`git pull origin ${devBranch}`, dryRun);
|
|
300
|
+
try {
|
|
301
|
+
exec(`git merge ${mainBranch} -m "chore: merge ${mainBranch} after publish"`, dryRun);
|
|
302
|
+
exec(`git push origin ${devBranch}`, dryRun);
|
|
303
|
+
console.log(`✅ Successfully merged ${mainBranch} into ${devBranch}\n`);
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
console.error('\n⚠️ Merge conflict detected. Please resolve manually.');
|
|
307
|
+
console.error(` You are now on the ${devBranch} branch.`);
|
|
308
|
+
process.exit(1);
|
|
309
|
+
}
|
|
310
|
+
exec(`git checkout ${mainBranch}`, dryRun);
|
|
311
|
+
console.log(`📍 Back on ${mainBranch} branch`);
|
|
312
|
+
}
|
|
313
|
+
else if (!isPrerelease && !reverseMerge) {
|
|
314
|
+
console.log('⏭️ Skipping reverse merge (--no-merge)');
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
console.log(`📍 Staying on ${currentBranch} branch`);
|
|
318
|
+
}
|
|
319
|
+
console.log('\n🎉 All done!');
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
console.error('❌ Error:', error instanceof Error ? error.message : error);
|
|
323
|
+
process.exit(1);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
function runSolidLibraryManagementReleaseFlow(versionType, options, project) {
|
|
327
|
+
const { mainBranch, devBranch, dryRun, force, preid, isPrerelease } = getReleaseOptions(options);
|
|
328
|
+
const solidApiPackageJsonPath = project.versionSourcePath || path_1.default.join(process.cwd(), 'solid-api', 'package.json');
|
|
329
|
+
const solidApiPackageJson = readRequiredPackageJson(solidApiPackageJsonPath);
|
|
330
|
+
const currentVersion = solidApiPackageJson.version;
|
|
331
|
+
const agentRepoPath = process.env.SOLIDX_AI_AGENT_PATH;
|
|
332
|
+
const imageRepository = 'solidxaiorg/solid-library-management-sandbox-base-image';
|
|
333
|
+
if (!currentVersion) {
|
|
334
|
+
console.error(`❌ solid-api package.json is missing a version at ${solidApiPackageJsonPath}`);
|
|
335
|
+
process.exit(1);
|
|
336
|
+
}
|
|
337
|
+
if (!agentRepoPath) {
|
|
338
|
+
console.error('❌ SOLIDX_AI_AGENT_PATH is not set. This release flow needs the local agent checkout.');
|
|
339
|
+
process.exit(1);
|
|
340
|
+
}
|
|
341
|
+
if (!fs_1.default.existsSync(agentRepoPath)) {
|
|
342
|
+
console.error(`❌ SOLIDX_AI_AGENT_PATH does not exist: ${agentRepoPath}`);
|
|
343
|
+
process.exit(1);
|
|
344
|
+
}
|
|
345
|
+
const currentBranch = validateReleaseBranch(preid, mainBranch, devBranch, force);
|
|
346
|
+
const plannedVersion = planNextVersion(currentVersion, versionType, preid);
|
|
347
|
+
const movingDockerTag = getMovingDockerTag(preid);
|
|
348
|
+
const versionCmd = getVersionCommand(versionType, preid);
|
|
349
|
+
const buildContextRoot = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'solid-library-management-release-'));
|
|
350
|
+
const dockerfilePath = path_1.default.join(buildContextRoot, 'Dockerfile');
|
|
351
|
+
const releaseProjectCopyPath = path_1.default.join(buildContextRoot, 'solid-library-management');
|
|
352
|
+
const agentCopyPath = path_1.default.join(buildContextRoot, 'agent');
|
|
353
|
+
const versionImageTag = `${imageRepository}:${plannedVersion}`;
|
|
354
|
+
const movingImageTag = `${imageRepository}:${movingDockerTag}`;
|
|
355
|
+
try {
|
|
356
|
+
console.log(`🐳 Preparing solid-library-management sandbox base image release (${plannedVersion})...`);
|
|
357
|
+
console.log(`📦 Docker image repository: ${imageRepository}`);
|
|
358
|
+
console.log(`📦 Docker base image: node:20-bookworm`);
|
|
359
|
+
console.log(`📦 Docker tags to publish: ${plannedVersion}, ${movingDockerTag}`);
|
|
360
|
+
console.log(`📦 Agent source path: ${agentRepoPath}`);
|
|
361
|
+
if (dryRun) {
|
|
362
|
+
console.log('🧪 Dry run mode - no changes will be made\n');
|
|
363
|
+
}
|
|
364
|
+
console.log(`🔄 Updating solid-api version (${isPrerelease ? `pre-release: ${preid}` : versionType})...`);
|
|
365
|
+
exec(`cd solid-api && ${versionCmd}`, dryRun);
|
|
366
|
+
if (!dryRun) {
|
|
367
|
+
const actualVersion = readRequiredPackageJson(solidApiPackageJsonPath).version;
|
|
368
|
+
if (!actualVersion) {
|
|
369
|
+
throw new Error('Failed to determine solid-api version after npm version.');
|
|
370
|
+
}
|
|
371
|
+
if (actualVersion !== plannedVersion) {
|
|
372
|
+
throw new Error(`Expected solid-api version ${plannedVersion}, but found ${actualVersion} after npm version.`);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
console.log('📦 Creating Docker build context...');
|
|
376
|
+
if (!dryRun) {
|
|
377
|
+
copyDirectoryForDockerBuild(process.cwd(), releaseProjectCopyPath);
|
|
378
|
+
copyDirectoryForDockerBuild(agentRepoPath, agentCopyPath);
|
|
379
|
+
fs_1.default.writeFileSync(dockerfilePath, createSolidLibraryManagementDockerfile(), 'utf-8');
|
|
380
|
+
}
|
|
381
|
+
console.log('🐳 Building sandbox base image...');
|
|
382
|
+
exec(`docker build --progress=plain -t ${versionImageTag} -t ${movingImageTag} ${buildContextRoot}`, dryRun);
|
|
383
|
+
console.log('📦 Pushing git commit and tags...');
|
|
384
|
+
exec('git push --follow-tags', dryRun);
|
|
385
|
+
console.log('📦 Publishing Docker image...');
|
|
386
|
+
exec(`docker push ${versionImageTag}`, dryRun);
|
|
387
|
+
exec(`docker push ${movingImageTag}`, dryRun);
|
|
388
|
+
console.log(`📍 Staying on ${currentBranch} branch`);
|
|
389
|
+
console.log('\n🎉 Docker image release completed!');
|
|
390
|
+
}
|
|
391
|
+
catch (error) {
|
|
392
|
+
console.error('❌ Error:', error instanceof Error ? error.message : error);
|
|
393
|
+
process.exit(1);
|
|
394
|
+
}
|
|
395
|
+
finally {
|
|
396
|
+
if (!dryRun) {
|
|
397
|
+
fs_1.default.rmSync(buildContextRoot, { recursive: true, force: true });
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
48
401
|
function registerReleaseCommand(program) {
|
|
49
402
|
program
|
|
50
403
|
.command('release [version-type]')
|
|
@@ -62,12 +415,12 @@ Examples:
|
|
|
62
415
|
$ solidctl release minor # minor: 0.0.12 → 0.1.0
|
|
63
416
|
$ solidctl release major # major: 0.0.12 → 1.0.0
|
|
64
417
|
|
|
65
|
-
Pre-releases
|
|
66
|
-
$ solidctl release --preid=alpha # 0.0.12 → 0.0.13-alpha.0
|
|
418
|
+
Pre-releases:
|
|
419
|
+
$ solidctl release --preid=alpha # from predev: 0.0.12 → 0.0.13-alpha.0
|
|
67
420
|
$ solidctl release --preid=alpha # 0.0.13-alpha.0 → 0.0.13-alpha.1
|
|
68
|
-
$ solidctl release minor --preid=alpha # 0.0.12 → 0.1.0-alpha.0
|
|
69
|
-
$ solidctl release --preid=beta # 0.0.13-alpha.1 → 0.0.13-beta.0
|
|
70
|
-
$ solidctl release --preid=rc # 0.0.13-beta.1 → 0.0.13-rc.0
|
|
421
|
+
$ solidctl release minor --preid=alpha # from predev: 0.0.12 → 0.1.0-alpha.0
|
|
422
|
+
$ solidctl release --preid=beta # from dev: 0.0.13-alpha.1 → 0.0.13-beta.0
|
|
423
|
+
$ solidctl release --preid=rc # from dev: 0.0.13-beta.1 → 0.0.13-rc.0
|
|
71
424
|
|
|
72
425
|
Options:
|
|
73
426
|
$ solidctl release --dry-run # Preview without making changes
|
|
@@ -87,94 +440,20 @@ Configuration:
|
|
|
87
440
|
}
|
|
88
441
|
`)
|
|
89
442
|
.action((versionType = 'patch', options) => {
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
if (isPrerelease) {
|
|
107
|
-
console.error(`❌ Must be on ${devBranch} branch to publish pre-releases. Currently on: ${currentBranch}`);
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
console.error(`❌ Must be on ${mainBranch} branch to publish stable releases. Currently on: ${currentBranch}`);
|
|
111
|
-
}
|
|
112
|
-
console.error(` Use --force to override this check.`);
|
|
113
|
-
process.exit(1);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if (dryRun) {
|
|
117
|
-
console.log('🧪 Dry run mode - no changes will be made\n');
|
|
118
|
-
}
|
|
119
|
-
let versionCmd;
|
|
120
|
-
if (isPrerelease) {
|
|
121
|
-
if (versionType === 'patch' || versionType === 'prerelease') {
|
|
122
|
-
versionCmd = `npm version prerelease --preid=${preid}`;
|
|
123
|
-
}
|
|
124
|
-
else if (versionType === 'preminor' || versionType === 'minor') {
|
|
125
|
-
versionCmd = `npm version preminor --preid=${preid}`;
|
|
126
|
-
}
|
|
127
|
-
else if (versionType === 'premajor' || versionType === 'major') {
|
|
128
|
-
versionCmd = `npm version premajor --preid=${preid}`;
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
versionCmd = `npm version prerelease --preid=${preid}`;
|
|
132
|
-
}
|
|
133
|
-
console.log(`🔄 Updating package version (pre-release: ${preid})...`);
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
versionCmd = `npm version ${versionType}`;
|
|
137
|
-
console.log(`🔄 Updating package version (${versionType})...`);
|
|
138
|
-
}
|
|
139
|
-
exec(versionCmd, dryRun);
|
|
140
|
-
console.log('📦 Pushing to git (with tags)...');
|
|
141
|
-
exec('git push --follow-tags', dryRun);
|
|
142
|
-
console.log('📦 Publishing package...');
|
|
143
|
-
if (isPrerelease) {
|
|
144
|
-
exec(`npm publish --tag ${preid}`, dryRun);
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
exec('npm publish', dryRun);
|
|
148
|
-
}
|
|
149
|
-
console.log('✅ Published successfully!\n');
|
|
150
|
-
if (!isPrerelease && reverseMerge) {
|
|
151
|
-
console.log(`🔀 Merging ${mainBranch} into ${devBranch}...`);
|
|
152
|
-
exec(`git checkout ${devBranch}`, dryRun);
|
|
153
|
-
exec(`git pull origin ${devBranch}`, dryRun);
|
|
154
|
-
try {
|
|
155
|
-
exec(`git merge ${mainBranch} -m "chore: merge ${mainBranch} after publish"`, dryRun);
|
|
156
|
-
exec(`git push origin ${devBranch}`, dryRun);
|
|
157
|
-
console.log(`✅ Successfully merged ${mainBranch} into ${devBranch}\n`);
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
console.error(`\n⚠️ Merge conflict detected. Please resolve manually.`);
|
|
161
|
-
console.error(` You are now on the ${devBranch} branch.`);
|
|
162
|
-
process.exit(1);
|
|
163
|
-
}
|
|
164
|
-
exec(`git checkout ${mainBranch}`, dryRun);
|
|
165
|
-
console.log(`📍 Back on ${mainBranch} branch`);
|
|
166
|
-
}
|
|
167
|
-
else if (!isPrerelease && !reverseMerge) {
|
|
168
|
-
console.log(`⏭️ Skipping reverse merge (--no-merge)`);
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
console.log(`📍 Staying on ${currentBranch} branch`);
|
|
172
|
-
}
|
|
173
|
-
console.log('\n🎉 All done!');
|
|
174
|
-
}
|
|
175
|
-
catch (error) {
|
|
176
|
-
console.error('❌ Error:', error instanceof Error ? error.message : error);
|
|
177
|
-
process.exit(1);
|
|
443
|
+
const project = resolveReleaseProject();
|
|
444
|
+
switch (project.type) {
|
|
445
|
+
case 'solidctl':
|
|
446
|
+
runSharedReleaseFlow(versionType, options);
|
|
447
|
+
break;
|
|
448
|
+
case 'solid-core-module':
|
|
449
|
+
runSharedReleaseFlow(versionType, options);
|
|
450
|
+
break;
|
|
451
|
+
case 'solid-core-ui':
|
|
452
|
+
runSharedReleaseFlow(versionType, options);
|
|
453
|
+
break;
|
|
454
|
+
case 'solid-library-management':
|
|
455
|
+
runSolidLibraryManagementReleaseFlow(versionType, options, project);
|
|
456
|
+
break;
|
|
178
457
|
}
|
|
179
458
|
});
|
|
180
459
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release.command.js","sourceRoot":"","sources":["../../src/commands/release.command.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"release.command.js","sourceRoot":"","sources":["../../src/commands/release.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.registerStartCommand = registerStartCommand;
|
|
7
7
|
const child_process_1 = require("child_process");
|
|
8
8
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
10
|
const path_1 = __importDefault(require("path"));
|
|
10
11
|
const readline_1 = __importDefault(require("readline"));
|
|
11
12
|
const helper_1 = require("../helper");
|
|
12
13
|
class StartSupervisor {
|
|
13
14
|
projectRoot;
|
|
15
|
+
apiPort;
|
|
16
|
+
uiPort;
|
|
14
17
|
serviceConfigs;
|
|
15
18
|
serviceStates;
|
|
16
19
|
isInteractive;
|
|
@@ -22,6 +25,8 @@ class StartSupervisor {
|
|
|
22
25
|
this.projectRoot = projectRoot;
|
|
23
26
|
this.isInteractive = Boolean(process.stdout.isTTY && process.stdin.isTTY && !options.plain);
|
|
24
27
|
this.npmCommand = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
28
|
+
this.apiPort = this.resolveApiPort();
|
|
29
|
+
this.uiPort = this.resolveUiPort();
|
|
25
30
|
this.serviceConfigs = {
|
|
26
31
|
api: {
|
|
27
32
|
cwd: path_1.default.join(projectRoot, 'solid-api'),
|
|
@@ -146,13 +151,9 @@ class StartSupervisor {
|
|
|
146
151
|
return;
|
|
147
152
|
}
|
|
148
153
|
const footer = [
|
|
149
|
-
chalk_1.default.bold('Controls')
|
|
150
|
-
'
|
|
151
|
-
'
|
|
152
|
-
'r restart both',
|
|
153
|
-
'a restart API',
|
|
154
|
-
'u restart UI',
|
|
155
|
-
`project:${path_1.default.basename(this.projectRoot)}`,
|
|
154
|
+
`${chalk_1.default.bold('Controls')}: q quit & c clear`,
|
|
155
|
+
`${chalk_1.default.bold('Services')}: API (a restart, d open docs, :${this.apiPort}) UI (u restart, o open, :${this.uiPort})`,
|
|
156
|
+
`${chalk_1.default.bold('Project')}: ${path_1.default.basename(this.projectRoot)}`,
|
|
156
157
|
].join(chalk_1.default.dim(' | '));
|
|
157
158
|
const terminalWidth = process.stdout.columns || 80;
|
|
158
159
|
const renderedFooter = chalk_1.default.inverse(` ${footer} `);
|
|
@@ -251,6 +252,12 @@ class StartSupervisor {
|
|
|
251
252
|
console.clear();
|
|
252
253
|
this.renderFooter();
|
|
253
254
|
break;
|
|
255
|
+
case 'd':
|
|
256
|
+
this.openUrlInBrowser(this.getApiDocsUrl(), 'API docs');
|
|
257
|
+
break;
|
|
258
|
+
case 'o':
|
|
259
|
+
this.openUrlInBrowser(this.getUiUrl(), 'UI');
|
|
260
|
+
break;
|
|
254
261
|
case 'q':
|
|
255
262
|
this.shutdown(0);
|
|
256
263
|
break;
|
|
@@ -327,6 +334,65 @@ class StartSupervisor {
|
|
|
327
334
|
}
|
|
328
335
|
process.stdout.write('\n');
|
|
329
336
|
}
|
|
337
|
+
resolveApiPort() {
|
|
338
|
+
const envPath = path_1.default.join(this.serviceConfigs?.api?.cwd ?? path_1.default.join(this.projectRoot, 'solid-api'), '.env');
|
|
339
|
+
return this.readEnvValue(envPath, 'PORT') ?? '3000';
|
|
340
|
+
}
|
|
341
|
+
resolveUiPort() {
|
|
342
|
+
const packageJsonPath = path_1.default.join(this.serviceConfigs?.ui?.cwd ?? path_1.default.join(this.projectRoot, 'solid-ui'), 'package.json');
|
|
343
|
+
try {
|
|
344
|
+
const packageJson = fs_extra_1.default.readJsonSync(packageJsonPath);
|
|
345
|
+
const devScript = packageJson.scripts?.dev ?? '';
|
|
346
|
+
const portMatch = /(?:^|\s)--port\s+(\d{1,5})(?:\s|$)/.exec(devScript);
|
|
347
|
+
if (portMatch) {
|
|
348
|
+
return portMatch[1];
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
catch {
|
|
352
|
+
}
|
|
353
|
+
return '5173';
|
|
354
|
+
}
|
|
355
|
+
readEnvValue(filePath, key) {
|
|
356
|
+
try {
|
|
357
|
+
if (!fs_extra_1.default.existsSync(filePath)) {
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
360
|
+
const content = fs_extra_1.default.readFileSync(filePath, 'utf8');
|
|
361
|
+
const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
362
|
+
const match = content.match(new RegExp(`^\\s*${escapedKey}\\s*=\\s*(.+?)\\s*$`, 'm'));
|
|
363
|
+
return match?.[1]?.replace(/^['"]|['"]$/g, '') ?? null;
|
|
364
|
+
}
|
|
365
|
+
catch {
|
|
366
|
+
return null;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
getApiDocsUrl() {
|
|
370
|
+
return `http://localhost:${this.apiPort}/docs`;
|
|
371
|
+
}
|
|
372
|
+
getUiUrl() {
|
|
373
|
+
return `http://localhost:${this.uiPort}`;
|
|
374
|
+
}
|
|
375
|
+
openUrlInBrowser(url, label) {
|
|
376
|
+
const openCommand = process.platform === 'darwin'
|
|
377
|
+
? 'open'
|
|
378
|
+
: process.platform === 'win32'
|
|
379
|
+
? 'cmd'
|
|
380
|
+
: 'xdg-open';
|
|
381
|
+
const openArgs = process.platform === 'darwin'
|
|
382
|
+
? [url]
|
|
383
|
+
: process.platform === 'win32'
|
|
384
|
+
? ['/c', 'start', '', url]
|
|
385
|
+
: [url];
|
|
386
|
+
const child = (0, child_process_1.spawn)(openCommand, openArgs, {
|
|
387
|
+
detached: true,
|
|
388
|
+
stdio: 'ignore',
|
|
389
|
+
});
|
|
390
|
+
child.on('error', (error) => {
|
|
391
|
+
this.printStatus(`Failed to open ${label}: ${error.message}`);
|
|
392
|
+
});
|
|
393
|
+
child.unref();
|
|
394
|
+
this.printStatus(`Opening ${label} at ${url}`);
|
|
395
|
+
}
|
|
330
396
|
}
|
|
331
397
|
function registerStartCommand(program) {
|
|
332
398
|
program
|