cabloy 5.1.77 → 5.1.78
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 +7 -0
- package/package.json +1 -1
- package/scripts/release.ts +324 -18
- package/zova/packages-utils/zova-jsx/package.json +2 -2
- package/zova/packages-zova/zova/package.json +3 -3
- package/zova/packages-zova/zova-core/package.json +1 -1
- package/zova/pnpm-lock.yaml +21 -20
- package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/package.json +2 -2
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
package/scripts/release.ts
CHANGED
|
@@ -1,39 +1,100 @@
|
|
|
1
1
|
import minimist from 'minimist';
|
|
2
2
|
import { execSync } from 'node:child_process';
|
|
3
|
-
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
4
4
|
import { dirname, resolve } from 'node:path';
|
|
5
5
|
import { fileURLToPath } from 'node:url';
|
|
6
6
|
|
|
7
7
|
// --- Constants ---
|
|
8
8
|
const TAG_PREFIX = 'cabloy@';
|
|
9
9
|
const GITHUB_REPO = 'cabloy/cabloy';
|
|
10
|
-
const PACKAGE_JSON_PATH = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
|
|
11
|
-
const CHANGELOG_PATH = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'CHANGELOG.md');
|
|
12
10
|
const COMMIT_CAP = 200;
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
const RELEASE_SCRIPT_PATH = fileURLToPath(import.meta.url);
|
|
12
|
+
const ROOT_DIR = resolve(dirname(RELEASE_SCRIPT_PATH), '..');
|
|
13
|
+
const VONA_DIR = resolve(ROOT_DIR, 'vona');
|
|
14
|
+
const VONA_WORKSPACE_PATH = resolve(VONA_DIR, 'pnpm-workspace.yaml');
|
|
15
|
+
const VONA_PATCHES_DIR = resolve(VONA_DIR, 'patches');
|
|
16
|
+
const ZOVA_CORE_PACKAGE_JSON_PATH = resolve(
|
|
17
|
+
ROOT_DIR,
|
|
18
|
+
'zova',
|
|
19
|
+
'packages-zova',
|
|
20
|
+
'zova-core',
|
|
21
|
+
'package.json',
|
|
22
|
+
);
|
|
23
|
+
const PACKAGE_JSON_PATH = resolve(ROOT_DIR, 'package.json');
|
|
24
|
+
const CHANGELOG_PATH = resolve(ROOT_DIR, 'CHANGELOG.md');
|
|
25
|
+
|
|
26
|
+
interface ExecOptions {
|
|
27
|
+
cwd?: string;
|
|
28
|
+
env?: NodeJS.ProcessEnv;
|
|
29
|
+
}
|
|
15
30
|
|
|
16
31
|
// --- Utility functions ---
|
|
17
|
-
function exec(cmd: string, dryRun?: boolean): string {
|
|
32
|
+
function exec(cmd: string, dryRun?: boolean, options?: ExecOptions): string {
|
|
18
33
|
if (dryRun) {
|
|
19
34
|
// eslint-disable-next-line
|
|
20
35
|
console.log(` [dry-run] ${cmd}`);
|
|
21
36
|
return '';
|
|
22
37
|
}
|
|
23
|
-
return execSync(cmd, {
|
|
38
|
+
return execSync(cmd, {
|
|
39
|
+
cwd: options?.cwd || ROOT_DIR,
|
|
40
|
+
env: options?.env ? { ...process.env, ...options.env } : process.env,
|
|
41
|
+
encoding: 'utf-8',
|
|
42
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
43
|
+
}).trim();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function execInherited(cmd: string, dryRun?: boolean, options?: ExecOptions): void {
|
|
47
|
+
if (dryRun) {
|
|
48
|
+
// eslint-disable-next-line
|
|
49
|
+
console.log(` [dry-run] ${cmd}`);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
execSync(cmd, {
|
|
53
|
+
cwd: options?.cwd || ROOT_DIR,
|
|
54
|
+
env: options?.env ? { ...process.env, ...options.env } : process.env,
|
|
55
|
+
encoding: 'utf-8',
|
|
56
|
+
stdio: 'inherit',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function readJson(filePath: string): Record<string, any> {
|
|
61
|
+
return JSON.parse(readFileSync(filePath, 'utf-8'));
|
|
24
62
|
}
|
|
25
63
|
|
|
26
64
|
function readPackageJson(): Record<string, any> {
|
|
27
|
-
return
|
|
65
|
+
return readJson(PACKAGE_JSON_PATH);
|
|
28
66
|
}
|
|
29
67
|
|
|
30
68
|
function writePackageJson(pkg: Record<string, any>): void {
|
|
31
69
|
writeFileSync(PACKAGE_JSON_PATH, `${JSON.stringify(pkg, null, 2)}\n`);
|
|
32
70
|
}
|
|
33
71
|
|
|
72
|
+
function isValidVersion(version: string): boolean {
|
|
73
|
+
return /^\d+\.\d+\.\d+$/.test(version);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function parseVersion(version: string): [number, number, number] {
|
|
77
|
+
if (!isValidVersion(version)) {
|
|
78
|
+
throw new Error(`Invalid version: ${version}`);
|
|
79
|
+
}
|
|
80
|
+
const [major, minor, patch] = version.split('.').map(item => Number.parseInt(item, 10));
|
|
81
|
+
return [major, minor, patch];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function compareVersions(left: string, right: string): number {
|
|
85
|
+
const leftParts = parseVersion(left);
|
|
86
|
+
const rightParts = parseVersion(right);
|
|
87
|
+
for (let i = 0; i < leftParts.length; i++) {
|
|
88
|
+
if (leftParts[i] > rightParts[i]) return 1;
|
|
89
|
+
if (leftParts[i] < rightParts[i]) return -1;
|
|
90
|
+
}
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
|
|
34
94
|
function getLastTag(): string | null {
|
|
35
95
|
try {
|
|
36
96
|
const result = execSync(`git tag -l '${TAG_PREFIX}*' --sort=-v:refname`, {
|
|
97
|
+
cwd: ROOT_DIR,
|
|
37
98
|
encoding: 'utf-8',
|
|
38
99
|
}).trim();
|
|
39
100
|
const tags = result.split('\n').filter(Boolean);
|
|
@@ -51,7 +112,7 @@ interface CommitInfo {
|
|
|
51
112
|
function getCommitsSinceTag(tag: string | null): CommitInfo[] {
|
|
52
113
|
const range = tag ? `${tag}..HEAD` : 'HEAD';
|
|
53
114
|
const logCmd = `git log ${range} --pretty=format:"%h|||%s" --no-merges -${COMMIT_CAP}`;
|
|
54
|
-
const result = execSync(logCmd, { encoding: 'utf-8' }).trim();
|
|
115
|
+
const result = execSync(logCmd, { cwd: ROOT_DIR, encoding: 'utf-8' }).trim();
|
|
55
116
|
if (!result) return [];
|
|
56
117
|
return result.split('\n').map(line => {
|
|
57
118
|
const [hash, subject] = line.split('|||');
|
|
@@ -79,9 +140,107 @@ function getToday(): string {
|
|
|
79
140
|
return new Date().toISOString().split('T')[0];
|
|
80
141
|
}
|
|
81
142
|
|
|
143
|
+
function getPatchFilePath(version: string): string {
|
|
144
|
+
return resolve(VONA_PATCHES_DIR, `zova-core@${version}.patch`);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function readCurrentPatchedZovaCoreVersion(): string | null {
|
|
148
|
+
const content = readFileSync(VONA_WORKSPACE_PATH, 'utf-8');
|
|
149
|
+
const match = content.match(/^\s*zova-core@(\d+\.\d+\.\d+):\s+patches\/zova-core@\1\.patch\s*$/m);
|
|
150
|
+
return match?.[1] || null;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function readLocalZovaCoreVersion(): string {
|
|
154
|
+
const pkg = readJson(ZOVA_CORE_PACKAGE_JSON_PATH);
|
|
155
|
+
const version = pkg.version?.trim();
|
|
156
|
+
if (!version || !isValidVersion(version)) {
|
|
157
|
+
throw new Error(`Invalid zova-core version in ${ZOVA_CORE_PACKAGE_JSON_PATH}`);
|
|
158
|
+
}
|
|
159
|
+
return version;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function normalizeVonaPatchedDependency(version: string): void {
|
|
163
|
+
const patchLine = ` zova-core@${version}: patches/zova-core@${version}.patch`;
|
|
164
|
+
const lines = readFileSync(VONA_WORKSPACE_PATH, 'utf-8').split('\n');
|
|
165
|
+
const patchedDependenciesIndex = lines.findIndex(line => line.trim() === 'patchedDependencies:');
|
|
166
|
+
if (patchedDependenciesIndex === -1) {
|
|
167
|
+
throw new Error(`Missing patchedDependencies block in ${VONA_WORKSPACE_PATH}`);
|
|
168
|
+
}
|
|
169
|
+
let blockEndIndex = patchedDependenciesIndex + 1;
|
|
170
|
+
while (blockEndIndex < lines.length) {
|
|
171
|
+
const line = lines[blockEndIndex];
|
|
172
|
+
if (line && !/^\s/.test(line)) break;
|
|
173
|
+
blockEndIndex++;
|
|
174
|
+
}
|
|
175
|
+
const preservedBlockLines = lines
|
|
176
|
+
.slice(patchedDependenciesIndex + 1, blockEndIndex)
|
|
177
|
+
.filter(
|
|
178
|
+
line =>
|
|
179
|
+
!/^\s*zova-core@\d+\.\d+\.\d+:\s+patches\/zova-core@\d+\.\d+\.\d+\.patch\s*$/.test(line),
|
|
180
|
+
);
|
|
181
|
+
const newLines = [
|
|
182
|
+
...lines.slice(0, patchedDependenciesIndex + 1),
|
|
183
|
+
patchLine,
|
|
184
|
+
...preservedBlockLines,
|
|
185
|
+
...lines.slice(blockEndIndex),
|
|
186
|
+
];
|
|
187
|
+
writeFileSync(VONA_WORKSPACE_PATH, `${newLines.join('\n').replace(/\n+$/, '\n')}\n`);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function replaceOrThrow(
|
|
191
|
+
content: string,
|
|
192
|
+
search: RegExp,
|
|
193
|
+
replacement: string,
|
|
194
|
+
description: string,
|
|
195
|
+
): string {
|
|
196
|
+
const matches = content.match(search);
|
|
197
|
+
if (!matches || matches.length !== 1) {
|
|
198
|
+
throw new Error(
|
|
199
|
+
`Unable to locate ${description} exactly once while regenerating the zova-core patch`,
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
return content.replace(search, replacement);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function applyKnownZovaCorePatchEdits(editDir: string): void {
|
|
206
|
+
const errorGlobalPath = resolve(editDir, 'dist', 'bean', 'resource', 'error', 'errorGlobal.d.ts');
|
|
207
|
+
const envPath = resolve(editDir, 'dist', 'types', 'utils', 'env.d.ts');
|
|
208
|
+
const modulePath = resolve(editDir, 'dist', 'types', 'interface', 'module.d.ts');
|
|
209
|
+
|
|
210
|
+
for (const filePath of [errorGlobalPath, envPath, modulePath]) {
|
|
211
|
+
if (!existsSync(filePath)) {
|
|
212
|
+
throw new Error(`Expected patch target file is missing: ${filePath}`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const errorGlobalContent = readFileSync(errorGlobalPath, 'utf-8');
|
|
217
|
+
if (!errorGlobalContent.includes('declare global')) {
|
|
218
|
+
throw new Error(`Expected global Error augmentation in ${errorGlobalPath}`);
|
|
219
|
+
}
|
|
220
|
+
writeFileSync(errorGlobalPath, 'export {};\n');
|
|
221
|
+
|
|
222
|
+
const envContent = readFileSync(envPath, 'utf-8');
|
|
223
|
+
const envNext = replaceOrThrow(
|
|
224
|
+
envContent,
|
|
225
|
+
/declare global \{\n {4}namespace NodeJS \{\n interface ProcessEnv \{[\s\S]*?\n \}\n \}\n\}\n?/,
|
|
226
|
+
'',
|
|
227
|
+
'the NodeJS.ProcessEnv augmentation',
|
|
228
|
+
);
|
|
229
|
+
writeFileSync(envPath, envNext);
|
|
230
|
+
|
|
231
|
+
const moduleContent = readFileSync(modulePath, 'utf-8');
|
|
232
|
+
const moduleNext = replaceOrThrow(
|
|
233
|
+
moduleContent,
|
|
234
|
+
/declare module '@cabloy\/module-info' \{\n {4}interface IModule \{[\s\S]*?\n \}\n\}\n?/,
|
|
235
|
+
'',
|
|
236
|
+
'the @cabloy/module-info augmentation',
|
|
237
|
+
);
|
|
238
|
+
writeFileSync(modulePath, moduleNext);
|
|
239
|
+
}
|
|
240
|
+
|
|
82
241
|
// --- Pre-step: Commit pending changes ---
|
|
83
242
|
function commitPendingChanges(dryRun?: boolean): void {
|
|
84
|
-
const status = execSync('git status --porcelain', { encoding: 'utf-8' }).trim();
|
|
243
|
+
const status = execSync('git status --porcelain', { cwd: ROOT_DIR, encoding: 'utf-8' }).trim();
|
|
85
244
|
if (!status) return;
|
|
86
245
|
// eslint-disable-next-line
|
|
87
246
|
console.log('\n📁 Committing pending changes...');
|
|
@@ -94,12 +253,144 @@ function commitPendingChanges(dryRun?: boolean): void {
|
|
|
94
253
|
function subProjectRelease(bumpType: 'patch' | 'minor' | 'major', dryRun?: boolean): void {
|
|
95
254
|
// eslint-disable-next-line
|
|
96
255
|
console.log(`\n🔧 Running vona/zova release (${bumpType})...`);
|
|
256
|
+
execInherited(`lerna publish ${bumpType} --yes`, dryRun);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// --- Compensation step: Refresh the zova-core patch ---
|
|
260
|
+
function regenerateVonaZovaCorePatch(
|
|
261
|
+
currentPatchedVersion: string,
|
|
262
|
+
targetVersion: string,
|
|
263
|
+
dryRun?: boolean,
|
|
264
|
+
): void {
|
|
265
|
+
const editDir = resolve(
|
|
266
|
+
VONA_DIR,
|
|
267
|
+
'node_modules',
|
|
268
|
+
'.release-compensation',
|
|
269
|
+
`zova-core-${targetVersion}`,
|
|
270
|
+
);
|
|
271
|
+
const oldPatchFilePath = getPatchFilePath(currentPatchedVersion);
|
|
272
|
+
const newPatchFilePath = getPatchFilePath(targetVersion);
|
|
273
|
+
|
|
274
|
+
// eslint-disable-next-line
|
|
275
|
+
console.log(`\n🩹 Regenerating the Vona zova-core patch for ${targetVersion}...`);
|
|
276
|
+
|
|
97
277
|
if (dryRun) {
|
|
278
|
+
exec(
|
|
279
|
+
`pnpm --dir "${VONA_DIR}" patch zova-core@${targetVersion} --edit-dir "${editDir}" --ignore-existing`,
|
|
280
|
+
true,
|
|
281
|
+
);
|
|
282
|
+
// eslint-disable-next-line
|
|
283
|
+
console.log(' [dry-run] Apply the known zova-core declaration-file patch edits');
|
|
284
|
+
exec(`pnpm --dir "${VONA_DIR}" patch-commit "${editDir}"`, true);
|
|
98
285
|
// eslint-disable-next-line
|
|
99
|
-
console.log(` [dry-run]
|
|
286
|
+
console.log(` [dry-run] Normalize ${VONA_WORKSPACE_PATH}`);
|
|
287
|
+
// eslint-disable-next-line
|
|
288
|
+
console.log(` [dry-run] Remove ${oldPatchFilePath} if it still exists`);
|
|
100
289
|
return;
|
|
101
290
|
}
|
|
102
|
-
|
|
291
|
+
|
|
292
|
+
rmSync(editDir, { recursive: true, force: true });
|
|
293
|
+
mkdirSync(dirname(editDir), { recursive: true });
|
|
294
|
+
|
|
295
|
+
try {
|
|
296
|
+
execInherited(
|
|
297
|
+
`pnpm --dir "${VONA_DIR}" patch zova-core@${targetVersion} --edit-dir "${editDir}" --ignore-existing`,
|
|
298
|
+
);
|
|
299
|
+
applyKnownZovaCorePatchEdits(editDir);
|
|
300
|
+
execInherited(`pnpm --dir "${VONA_DIR}" patch-commit "${editDir}"`);
|
|
301
|
+
|
|
302
|
+
normalizeVonaPatchedDependency(targetVersion);
|
|
303
|
+
|
|
304
|
+
if (!existsSync(newPatchFilePath)) {
|
|
305
|
+
throw new Error(`Expected regenerated patch file is missing: ${newPatchFilePath}`);
|
|
306
|
+
}
|
|
307
|
+
if (currentPatchedVersion !== targetVersion && existsSync(oldPatchFilePath)) {
|
|
308
|
+
rmSync(oldPatchFilePath);
|
|
309
|
+
}
|
|
310
|
+
} finally {
|
|
311
|
+
rmSync(editDir, { recursive: true, force: true });
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
function refreshVonaLockfile(dryRun?: boolean): void {
|
|
316
|
+
// eslint-disable-next-line
|
|
317
|
+
console.log('\n📦 Refreshing the Vona lockfile...');
|
|
318
|
+
execInherited(`pnpm --dir "${VONA_DIR}" install`, dryRun);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
function verifyCompensationPatch(dryRun?: boolean): void {
|
|
322
|
+
// eslint-disable-next-line
|
|
323
|
+
console.log('\n✅ Verifying the refreshed zova-core patch...');
|
|
324
|
+
execInherited('pnpm exec tsc -p tsconfig.json --noEmit', dryRun, { cwd: VONA_DIR });
|
|
325
|
+
execInherited('npm run tsc', dryRun);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
function commitCompensationChanges(targetVersion: string, dryRun?: boolean): void {
|
|
329
|
+
// eslint-disable-next-line
|
|
330
|
+
console.log('\n📁 Committing compensation changes...');
|
|
331
|
+
exec('git add vona/pnpm-workspace.yaml vona/pnpm-lock.yaml vona/patches', dryRun);
|
|
332
|
+
if (!dryRun) {
|
|
333
|
+
const staged = execSync(
|
|
334
|
+
'git diff --cached --name-only -- vona/pnpm-workspace.yaml vona/pnpm-lock.yaml vona/patches',
|
|
335
|
+
{ cwd: ROOT_DIR, encoding: 'utf-8' },
|
|
336
|
+
).trim();
|
|
337
|
+
if (!staged) {
|
|
338
|
+
throw new Error('No compensation changes were staged for commit');
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
exec(`git commit -m "chore: refresh vona zova-core patch for v${targetVersion}"`, dryRun);
|
|
342
|
+
exec('git push', dryRun);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
function rerunPatchReleaseAfterCompensation(noAi?: boolean, dryRun?: boolean): void {
|
|
346
|
+
const noAiFlag = noAi ? ' --no-ai' : '';
|
|
347
|
+
// eslint-disable-next-line
|
|
348
|
+
console.log('\n🚀 Running the compensation patch release...');
|
|
349
|
+
execInherited(`node "${RELEASE_SCRIPT_PATH}" patch --skip-compensation${noAiFlag}`, dryRun);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
async function postReleaseCompensation(options: ReleaseOptions): Promise<void> {
|
|
353
|
+
if (
|
|
354
|
+
options.dryRun ||
|
|
355
|
+
options.changelogOnly ||
|
|
356
|
+
options.publishOnly ||
|
|
357
|
+
options.releaseOnly ||
|
|
358
|
+
options.skipCompensation
|
|
359
|
+
) {
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// eslint-disable-next-line
|
|
364
|
+
console.log('\n🔍 Checking whether zova-core compensation is needed...');
|
|
365
|
+
|
|
366
|
+
const currentPatchedVersion = readCurrentPatchedZovaCoreVersion();
|
|
367
|
+
if (!currentPatchedVersion) {
|
|
368
|
+
throw new Error(`Missing zova-core patchedDependencies entry in ${VONA_WORKSPACE_PATH}`);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
const localZovaCoreVersion = readLocalZovaCoreVersion();
|
|
372
|
+
// eslint-disable-next-line
|
|
373
|
+
console.log(`Current Vona zova-core patch target: ${currentPatchedVersion}`);
|
|
374
|
+
// eslint-disable-next-line
|
|
375
|
+
console.log(`Local zova-core version: ${localZovaCoreVersion}`);
|
|
376
|
+
|
|
377
|
+
if (compareVersions(localZovaCoreVersion, currentPatchedVersion) <= 0) {
|
|
378
|
+
// eslint-disable-next-line
|
|
379
|
+
console.log('zova-core patch already matches the local version. Skipping compensation.');
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
if (compareVersions(localZovaCoreVersion, currentPatchedVersion) <= 0) {
|
|
384
|
+
// eslint-disable-next-line
|
|
385
|
+
console.log('No newer local zova-core version needs patch compensation. Skipping.');
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
regenerateVonaZovaCorePatch(currentPatchedVersion, localZovaCoreVersion, options.dryRun);
|
|
390
|
+
refreshVonaLockfile(options.dryRun);
|
|
391
|
+
verifyCompensationPatch(options.dryRun);
|
|
392
|
+
commitCompensationChanges(localZovaCoreVersion, options.dryRun);
|
|
393
|
+
rerunPatchReleaseAfterCompensation(options.noAi, options.dryRun);
|
|
103
394
|
}
|
|
104
395
|
|
|
105
396
|
// --- Step 1: Version Bump ---
|
|
@@ -115,6 +406,7 @@ async function versionBump(
|
|
|
115
406
|
if (lastTag) {
|
|
116
407
|
const diffCmd = `git -c diff.renameLimit=10000 diff --name-only ${lastTag}..HEAD`;
|
|
117
408
|
const changedFiles = execSync(diffCmd, {
|
|
409
|
+
cwd: ROOT_DIR,
|
|
118
410
|
encoding: 'utf-8',
|
|
119
411
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
120
412
|
}).trim();
|
|
@@ -211,7 +503,10 @@ async function generateChangelog(version: string, dryRun?: boolean, noAi?: boole
|
|
|
211
503
|
// After version bump, the current tag (e.g. cabloy@5.1.4) points to HEAD,
|
|
212
504
|
// so we need the tag BEFORE that to get the commit range
|
|
213
505
|
const currentTag = `${TAG_PREFIX}${version}`;
|
|
214
|
-
const allTags = execSync(`git tag -l '${TAG_PREFIX}*' --sort=-v:refname`, {
|
|
506
|
+
const allTags = execSync(`git tag -l '${TAG_PREFIX}*' --sort=-v:refname`, {
|
|
507
|
+
cwd: ROOT_DIR,
|
|
508
|
+
encoding: 'utf-8',
|
|
509
|
+
})
|
|
215
510
|
.trim()
|
|
216
511
|
.split('\n')
|
|
217
512
|
.filter(Boolean);
|
|
@@ -279,7 +574,7 @@ async function npmPublish(dryRun?: boolean): Promise<void> {
|
|
|
279
574
|
return;
|
|
280
575
|
}
|
|
281
576
|
|
|
282
|
-
execSync('npm publish', { encoding: 'utf-8', stdio: 'inherit' });
|
|
577
|
+
execSync('npm publish', { cwd: ROOT_DIR, encoding: 'utf-8', stdio: 'inherit' });
|
|
283
578
|
}
|
|
284
579
|
|
|
285
580
|
// --- Step 4: GitHub Release ---
|
|
@@ -313,19 +608,20 @@ async function githubRelease(version: string, dryRun?: boolean): Promise<void> {
|
|
|
313
608
|
}
|
|
314
609
|
|
|
315
610
|
// Use gh CLI with a temp file for notes to avoid shell escaping issues
|
|
316
|
-
const tmpFile = resolve(
|
|
611
|
+
const tmpFile = resolve(ROOT_DIR, '.release-notes.tmp.md');
|
|
317
612
|
writeFileSync(tmpFile, notes);
|
|
318
613
|
try {
|
|
319
614
|
execSync(
|
|
320
615
|
`gh release create ${tag} --repo ${GITHUB_REPO} --title "v${version}" --notes-file "${tmpFile}"`,
|
|
321
616
|
{
|
|
617
|
+
cwd: ROOT_DIR,
|
|
322
618
|
encoding: 'utf-8',
|
|
323
619
|
stdio: 'inherit',
|
|
324
620
|
},
|
|
325
621
|
);
|
|
326
622
|
} finally {
|
|
327
623
|
if (existsSync(tmpFile)) {
|
|
328
|
-
execSync(`rm -f "${tmpFile}"
|
|
624
|
+
execSync(`rm -f "${tmpFile}"`, { cwd: ROOT_DIR });
|
|
329
625
|
}
|
|
330
626
|
}
|
|
331
627
|
}
|
|
@@ -340,6 +636,7 @@ interface ReleaseOptions {
|
|
|
340
636
|
skipChangelog?: boolean;
|
|
341
637
|
skipPublish?: boolean;
|
|
342
638
|
skipRelease?: boolean;
|
|
639
|
+
skipCompensation?: boolean;
|
|
343
640
|
noAi?: boolean;
|
|
344
641
|
}
|
|
345
642
|
|
|
@@ -349,14 +646,18 @@ async function release(options: ReleaseOptions): Promise<void> {
|
|
|
349
646
|
|
|
350
647
|
// Pre-flight checks
|
|
351
648
|
try {
|
|
352
|
-
execSync('git rev-parse --is-inside-work-tree', {
|
|
649
|
+
execSync('git rev-parse --is-inside-work-tree', {
|
|
650
|
+
cwd: ROOT_DIR,
|
|
651
|
+
encoding: 'utf-8',
|
|
652
|
+
stdio: 'pipe',
|
|
653
|
+
});
|
|
353
654
|
} catch {
|
|
354
655
|
// eslint-disable-next-line
|
|
355
656
|
console.error('Error: Not in a git repository');
|
|
356
657
|
process.exit(1);
|
|
357
658
|
}
|
|
358
659
|
|
|
359
|
-
const status = execSync('git status --porcelain', { encoding: 'utf-8' }).trim();
|
|
660
|
+
const status = execSync('git status --porcelain', { cwd: ROOT_DIR, encoding: 'utf-8' }).trim();
|
|
360
661
|
if (status && !options.dryRun) {
|
|
361
662
|
// eslint-disable-next-line
|
|
362
663
|
console.error('Error: Working tree is not clean. Commit or stash your changes first.');
|
|
@@ -395,6 +696,8 @@ async function release(options: ReleaseOptions): Promise<void> {
|
|
|
395
696
|
await githubRelease(version, options.dryRun);
|
|
396
697
|
}
|
|
397
698
|
|
|
699
|
+
await postReleaseCompensation(options);
|
|
700
|
+
|
|
398
701
|
// eslint-disable-next-line
|
|
399
702
|
console.log('\n✅ Release complete!');
|
|
400
703
|
}
|
|
@@ -409,6 +712,7 @@ const args = minimist(process.argv.slice(2), {
|
|
|
409
712
|
'skip-changelog',
|
|
410
713
|
'skip-publish',
|
|
411
714
|
'skip-release',
|
|
715
|
+
'skip-compensation',
|
|
412
716
|
'no-ai',
|
|
413
717
|
],
|
|
414
718
|
default: {
|
|
@@ -419,6 +723,7 @@ const args = minimist(process.argv.slice(2), {
|
|
|
419
723
|
'skip-changelog': false,
|
|
420
724
|
'skip-publish': false,
|
|
421
725
|
'skip-release': false,
|
|
726
|
+
'skip-compensation': false,
|
|
422
727
|
'no-ai': false,
|
|
423
728
|
},
|
|
424
729
|
});
|
|
@@ -439,6 +744,7 @@ release({
|
|
|
439
744
|
skipChangelog: args['skip-changelog'],
|
|
440
745
|
skipPublish: args['skip-publish'],
|
|
441
746
|
skipRelease: args['skip-release'],
|
|
747
|
+
skipCompensation: args['skip-compensation'],
|
|
442
748
|
noAi: args['no-ai'],
|
|
443
749
|
}).catch(err => {
|
|
444
750
|
// eslint-disable-next-line
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-jsx",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.69",
|
|
4
4
|
"gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
|
|
5
5
|
"description": "Zova JSX",
|
|
6
6
|
"keywords": [
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"@cabloy/word-utils": "^2.1.14",
|
|
51
51
|
"typestyle": "^2.4.0",
|
|
52
52
|
"vue": "^3.5.38",
|
|
53
|
-
"zova-core": "^5.1.
|
|
53
|
+
"zova-core": "^5.1.64"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"clean-package": "^2.2.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.121",
|
|
4
4
|
"gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
|
|
5
5
|
"description": "A vue3 framework with ioc",
|
|
6
6
|
"keywords": [
|
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
"postpack": "clean-package restore"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"zova-core": "^5.1.
|
|
49
|
-
"zova-suite-a-zova": "^5.1.
|
|
48
|
+
"zova-core": "^5.1.64",
|
|
49
|
+
"zova-suite-a-zova": "^5.1.120"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"clean-package": "^2.2.0",
|
package/zova/pnpm-lock.yaml
CHANGED
|
@@ -309,7 +309,7 @@ importers:
|
|
|
309
309
|
devDependencies:
|
|
310
310
|
'@cabloy/cli':
|
|
311
311
|
specifier: ^3.1.27
|
|
312
|
-
version: 3.1.27(vue@3.5.38(typescript@5.9.3))
|
|
312
|
+
version: 3.1.27(supports-color@10.2.2)(vue@3.5.38(typescript@5.9.3))
|
|
313
313
|
'@cabloy/lint':
|
|
314
314
|
specifier: ^5.1.27
|
|
315
315
|
version: 5.1.30(@typescript-eslint/eslint-plugin@8.62.0(@typescript-eslint/parser@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/rule-tester@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.62.0(typescript@5.9.3))(@typescript-eslint/utils@8.62.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0))(oxfmt@0.45.0)(oxlint@1.71.0)(supports-color@10.2.2)(typescript@5.9.3)(vue-eslint-parser@10.4.1(eslint@10.5.0(jiti@2.7.0)))
|
|
@@ -384,7 +384,7 @@ importers:
|
|
|
384
384
|
dependencies:
|
|
385
385
|
'@cabloy/cli':
|
|
386
386
|
specifier: ^3.1.27
|
|
387
|
-
version: 3.1.27(vue@3.5.38(typescript@5.9.3))
|
|
387
|
+
version: 3.1.27(supports-color@10.2.2)(vue@3.5.38(typescript@5.9.3))
|
|
388
388
|
'@cabloy/process-helper':
|
|
389
389
|
specifier: ^3.1.8
|
|
390
390
|
version: 3.1.8
|
|
@@ -418,7 +418,7 @@ importers:
|
|
|
418
418
|
version: 7.29.7(@babel/core@7.29.7)
|
|
419
419
|
'@cabloy/cli':
|
|
420
420
|
specifier: ^3.1.27
|
|
421
|
-
version: 3.1.27(vue@3.5.38(typescript@5.9.3))
|
|
421
|
+
version: 3.1.27(supports-color@10.2.2)(vue@3.5.38(typescript@5.9.3))
|
|
422
422
|
'@cabloy/extend':
|
|
423
423
|
specifier: ^3.2.8
|
|
424
424
|
version: 3.2.8
|
|
@@ -672,7 +672,7 @@ importers:
|
|
|
672
672
|
specifier: ^3.5.38
|
|
673
673
|
version: 3.5.38(typescript@5.9.3)
|
|
674
674
|
zova-core:
|
|
675
|
-
specifier: ^5.1.
|
|
675
|
+
specifier: ^5.1.62
|
|
676
676
|
version: link:../../packages-zova/zova-core
|
|
677
677
|
devDependencies:
|
|
678
678
|
clean-package:
|
|
@@ -813,10 +813,10 @@ importers:
|
|
|
813
813
|
packages-zova/zova:
|
|
814
814
|
dependencies:
|
|
815
815
|
zova-core:
|
|
816
|
-
specifier: ^5.1.
|
|
816
|
+
specifier: ^5.1.62
|
|
817
817
|
version: link:../zova-core
|
|
818
818
|
zova-suite-a-zova:
|
|
819
|
-
specifier: ^5.1.
|
|
819
|
+
specifier: ^5.1.119
|
|
820
820
|
version: link:../../src/suite-vendor/a-zova
|
|
821
821
|
devDependencies:
|
|
822
822
|
clean-package:
|
|
@@ -871,8 +871,8 @@ importers:
|
|
|
871
871
|
specifier: ^2.1.14
|
|
872
872
|
version: link:../../packages-utils/word-utils
|
|
873
873
|
'@cabloy/zod-errors-custom':
|
|
874
|
-
specifier: ^2.1.
|
|
875
|
-
version: 2.1.
|
|
874
|
+
specifier: ^2.1.10
|
|
875
|
+
version: 2.1.10
|
|
876
876
|
'@cabloy/zod-openapi':
|
|
877
877
|
specifier: ^1.1.9
|
|
878
878
|
version: 1.1.9
|
|
@@ -998,10 +998,10 @@ importers:
|
|
|
998
998
|
specifier: ^5.1.37
|
|
999
999
|
version: link:modules/a-table
|
|
1000
1000
|
zova-module-a-zod:
|
|
1001
|
-
specifier: ^5.1.
|
|
1001
|
+
specifier: ^5.1.35
|
|
1002
1002
|
version: link:modules/a-zod
|
|
1003
1003
|
zova-module-a-zova:
|
|
1004
|
-
specifier: ^5.1.
|
|
1004
|
+
specifier: ^5.1.83
|
|
1005
1005
|
version: link:modules/a-zova
|
|
1006
1006
|
|
|
1007
1007
|
src/suite-vendor/a-zova/modules/a-api:
|
|
@@ -1291,8 +1291,8 @@ importers:
|
|
|
1291
1291
|
src/suite-vendor/a-zova/modules/a-zod:
|
|
1292
1292
|
dependencies:
|
|
1293
1293
|
'@cabloy/zod-errors-custom':
|
|
1294
|
-
specifier: ^2.1.
|
|
1295
|
-
version: 2.1.
|
|
1294
|
+
specifier: ^2.1.10
|
|
1295
|
+
version: 2.1.10
|
|
1296
1296
|
'@cabloy/zod-openapi':
|
|
1297
1297
|
specifier: ^1.1.9
|
|
1298
1298
|
version: 1.1.9
|
|
@@ -1340,12 +1340,12 @@ importers:
|
|
|
1340
1340
|
specifier: ^3.7.2
|
|
1341
1341
|
version: 3.7.2
|
|
1342
1342
|
zova-jsx:
|
|
1343
|
-
specifier: ^1.1.
|
|
1343
|
+
specifier: ^1.1.68
|
|
1344
1344
|
version: link:../../../../../packages-utils/zova-jsx
|
|
1345
1345
|
devDependencies:
|
|
1346
1346
|
'@cabloy/cli':
|
|
1347
1347
|
specifier: ^3.1.27
|
|
1348
|
-
version: 3.1.27(vue@3.5.38(typescript@5.9.3))
|
|
1348
|
+
version: 3.1.27(supports-color@10.2.2)(vue@3.5.38(typescript@5.9.3))
|
|
1349
1349
|
'@types/luxon':
|
|
1350
1350
|
specifier: ^3.7.1
|
|
1351
1351
|
version: 3.7.2
|
|
@@ -2086,8 +2086,8 @@ packages:
|
|
|
2086
2086
|
peerDependencies:
|
|
2087
2087
|
vue: 3.5.13
|
|
2088
2088
|
|
|
2089
|
-
'@cabloy/zod-errors-custom@2.1.
|
|
2090
|
-
resolution: {integrity: sha512-
|
|
2089
|
+
'@cabloy/zod-errors-custom@2.1.10':
|
|
2090
|
+
resolution: {integrity: sha512-MEyJClI621uGezvBN0RjyvFv63hW6jbalT0TZ4F9FagR3aQRE/qDYyl/o8DlD18My3l2OsoiWnLHsJfJPD99tg==}
|
|
2091
2091
|
|
|
2092
2092
|
'@cabloy/zod-openapi@1.1.9':
|
|
2093
2093
|
resolution: {integrity: sha512-rAZz0/OeQ2WjNGJlj8RuvI5n106VSUQQ1JrFncRPY6mme98RQThMOVPObx299yBA5QQRCR6nkl0tGMHG3q6uVg==}
|
|
@@ -8189,7 +8189,7 @@ snapshots:
|
|
|
8189
8189
|
|
|
8190
8190
|
'@bufbuild/protobuf@2.12.1': {}
|
|
8191
8191
|
|
|
8192
|
-
'@cabloy/cli@3.1.27(vue@3.5.38(typescript@5.9.3))':
|
|
8192
|
+
'@cabloy/cli@3.1.27(supports-color@10.2.2)(vue@3.5.38(typescript@5.9.3))':
|
|
8193
8193
|
dependencies:
|
|
8194
8194
|
'@babel/parser': 7.29.7
|
|
8195
8195
|
'@cabloy/module-glob': 5.3.16
|
|
@@ -8198,7 +8198,7 @@ snapshots:
|
|
|
8198
8198
|
'@cabloy/utils': 2.1.25
|
|
8199
8199
|
'@cabloy/word-utils': link:packages-utils/word-utils
|
|
8200
8200
|
'@npmcli/config': 10.11.0
|
|
8201
|
-
'@zhennann/common-bin': 4.0.1
|
|
8201
|
+
'@zhennann/common-bin': 4.0.1(supports-color@10.2.2)
|
|
8202
8202
|
'@zhennann/ejs': 3.0.1
|
|
8203
8203
|
boxen: 4.2.0
|
|
8204
8204
|
chalk: 3.0.0
|
|
@@ -8451,9 +8451,10 @@ snapshots:
|
|
|
8451
8451
|
'@vue/shared': 3.5.13
|
|
8452
8452
|
vue: 3.5.38(typescript@5.9.3)
|
|
8453
8453
|
|
|
8454
|
-
'@cabloy/zod-errors-custom@2.1.
|
|
8454
|
+
'@cabloy/zod-errors-custom@2.1.10':
|
|
8455
8455
|
dependencies:
|
|
8456
8456
|
'@cabloy/word-utils': link:packages-utils/word-utils
|
|
8457
|
+
zod: '@cabloy/zod@4.3.8'
|
|
8457
8458
|
|
|
8458
8459
|
'@cabloy/zod-openapi@1.1.9':
|
|
8459
8460
|
dependencies:
|
|
@@ -10218,7 +10219,7 @@ snapshots:
|
|
|
10218
10219
|
|
|
10219
10220
|
'@vue/shared@3.5.13': {}
|
|
10220
10221
|
|
|
10221
|
-
'@zhennann/common-bin@4.0.1':
|
|
10222
|
+
'@zhennann/common-bin@4.0.1(supports-color@10.2.2)':
|
|
10222
10223
|
dependencies:
|
|
10223
10224
|
chalk: 4.1.2
|
|
10224
10225
|
change-case: 4.1.2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-module-a-zova",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.84",
|
|
4
4
|
"gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
|
|
5
5
|
"description": "zova",
|
|
6
6
|
"keywords": [
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"@cabloy/word-utils": "^2.1.14",
|
|
44
44
|
"defu": "^6.1.7",
|
|
45
45
|
"luxon": "^3.7.2",
|
|
46
|
-
"zova-jsx": "^1.1.
|
|
46
|
+
"zova-jsx": "^1.1.69"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@cabloy/cli": "^3.1.27",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-suite-a-zova",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.120",
|
|
4
4
|
"gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
|
|
5
5
|
"description": "zova",
|
|
6
6
|
"license": "MIT",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"zova-module-a-style": "^5.1.32",
|
|
33
33
|
"zova-module-a-table": "^5.1.37",
|
|
34
34
|
"zova-module-a-zod": "^5.1.35",
|
|
35
|
-
"zova-module-a-zova": "^5.1.
|
|
35
|
+
"zova-module-a-zova": "^5.1.84"
|
|
36
36
|
},
|
|
37
37
|
"title": "a-zova"
|
|
38
38
|
}
|