@manojkmfsi/monodog 1.2.3 ā 1.2.4
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.
|
@@ -117,7 +117,8 @@ class ChangeTrackerService {
|
|
|
117
117
|
const [, type, scopeMatch, breakingIndicator, subject] = match;
|
|
118
118
|
const scope = scopeMatch ? scopeMatch.slice(1, -1) : undefined;
|
|
119
119
|
// Check for BREAKING CHANGE keyword in body
|
|
120
|
-
const isBreaking = !!breakingIndicator ||
|
|
120
|
+
const isBreaking = !!breakingIndicator ||
|
|
121
|
+
(body ? /^BREAKING[\s-]CHANGE:/m.test(body) : false);
|
|
121
122
|
return {
|
|
122
123
|
type: type,
|
|
123
124
|
scope,
|
|
@@ -125,7 +126,7 @@ class ChangeTrackerService {
|
|
|
125
126
|
};
|
|
126
127
|
}
|
|
127
128
|
/**
|
|
128
|
-
* Get commits since last tag
|
|
129
|
+
* Get commits since last tag (public for changelog generation)
|
|
129
130
|
*/
|
|
130
131
|
async getCommitsSinceTag(tagName, packagePath) {
|
|
131
132
|
try {
|
|
@@ -13,6 +13,7 @@ const publish_runners_1 = require("./publish-runners");
|
|
|
13
13
|
const change_tracker_service_1 = require("./change-tracker-service");
|
|
14
14
|
const release_readiness_service_1 = require("./release-readiness-service");
|
|
15
15
|
const secure_token_service_1 = require("./secure-token-service");
|
|
16
|
+
const changelog_generator_1 = require("./changelog-generator");
|
|
16
17
|
const fs_1 = __importDefault(require("fs"));
|
|
17
18
|
const path_1 = __importDefault(require("path"));
|
|
18
19
|
const publish_pipeline_service_1 = require("./publish-pipeline-service");
|
|
@@ -72,7 +73,9 @@ class PublishController {
|
|
|
72
73
|
triggeredAt: new Date(),
|
|
73
74
|
createdAt: new Date(),
|
|
74
75
|
updatedAt: new Date(),
|
|
75
|
-
releaseVersion: request.versionMap
|
|
76
|
+
releaseVersion: request.versionMap
|
|
77
|
+
? Object.values(request.versionMap).join(',')
|
|
78
|
+
: undefined,
|
|
76
79
|
releaseNotes: undefined, // Could be set if changelog is generated
|
|
77
80
|
conclusion: undefined,
|
|
78
81
|
completedAt: undefined,
|
|
@@ -90,35 +93,53 @@ class PublishController {
|
|
|
90
93
|
try {
|
|
91
94
|
status.startedAt = new Date().toISOString();
|
|
92
95
|
status.status = 'validating';
|
|
93
|
-
await publish_pipeline_service_1.publishPipelineService.updatePipeline(pipelineId, {
|
|
96
|
+
await publish_pipeline_service_1.publishPipelineService.updatePipeline(pipelineId, {
|
|
97
|
+
status: 'validating',
|
|
98
|
+
updatedAt: new Date(),
|
|
99
|
+
});
|
|
94
100
|
// 1. Get readiness
|
|
95
101
|
const prep = await this.preparePublish(request);
|
|
96
102
|
if (!prep.valid && !request.dryRun) {
|
|
97
|
-
await publish_pipeline_service_1.publishPipelineService.updatePipeline(pipelineId, {
|
|
103
|
+
await publish_pipeline_service_1.publishPipelineService.updatePipeline(pipelineId, {
|
|
104
|
+
status: 'failed',
|
|
105
|
+
updatedAt: new Date(),
|
|
106
|
+
});
|
|
98
107
|
throw new Error(`Packages not ready for publishing. Fix blockers and try again.`);
|
|
99
108
|
}
|
|
100
109
|
status.status = 'ready';
|
|
101
110
|
status.progress = 20;
|
|
102
|
-
await publish_pipeline_service_1.publishPipelineService.updatePipeline(pipelineId, {
|
|
111
|
+
await publish_pipeline_service_1.publishPipelineService.updatePipeline(pipelineId, {
|
|
112
|
+
status: 'ready',
|
|
113
|
+
updatedAt: new Date(),
|
|
114
|
+
});
|
|
103
115
|
// 2. Get credentials
|
|
104
116
|
const npmToken = await secure_token_service_1.secureTokenService.getToken('npm', 'env');
|
|
105
|
-
const githubToken = request.method !== 'node'
|
|
117
|
+
const githubToken = request.method !== 'node'
|
|
118
|
+
? await secure_token_service_1.secureTokenService.getToken('github', 'env')
|
|
119
|
+
: undefined;
|
|
106
120
|
// 3. Publish each package
|
|
107
121
|
status.status = 'publishing';
|
|
108
|
-
await publish_pipeline_service_1.publishPipelineService.updatePipeline(pipelineId, {
|
|
122
|
+
await publish_pipeline_service_1.publishPipelineService.updatePipeline(pipelineId, {
|
|
123
|
+
status: 'publishing',
|
|
124
|
+
updatedAt: new Date(),
|
|
125
|
+
});
|
|
109
126
|
const publisherCount = request.packageNames.length;
|
|
110
127
|
for (let i = 0; i < request.packageNames.length; i++) {
|
|
111
128
|
const packageName = request.packageNames[i];
|
|
112
129
|
const packagePath = request.packagePaths[packageName];
|
|
113
130
|
console.info(`\nš¦ Publishing ${i + 1}/${publisherCount}: ${packageName}`);
|
|
131
|
+
// Get pre-publish version
|
|
132
|
+
const prePublishVersion = this.getCurrentVersion(packageName, packagePath);
|
|
114
133
|
const result = await this.publishPackage(packageName, packagePath, request.versionMap?.[packageName], npmToken, githubToken, request);
|
|
134
|
+
// Get new version from package.json after publish (in case publish step bumps it)
|
|
135
|
+
const postPublishVersion = this.getCurrentVersion(packageName, packagePath);
|
|
115
136
|
status.results[packageName] = result;
|
|
116
137
|
status.progress = 20 + ((i + 1) / publisherCount) * 80;
|
|
117
138
|
// Store result in DB
|
|
118
139
|
await publish_pipeline_service_1.publishPipelineService.addPublishResult(pipelineId, {
|
|
119
140
|
packageName,
|
|
120
|
-
currentVersion:
|
|
121
|
-
newVersion:
|
|
141
|
+
currentVersion: prePublishVersion,
|
|
142
|
+
newVersion: postPublishVersion,
|
|
122
143
|
status: result.success ? 'completed' : 'failed',
|
|
123
144
|
result: result.success ? 'published' : 'error',
|
|
124
145
|
error: result.errors?.join('\n') || undefined,
|
|
@@ -218,19 +239,59 @@ class PublishController {
|
|
|
218
239
|
* Generate changelog entries for published packages
|
|
219
240
|
*/
|
|
220
241
|
async generateChangelogs(packageNames, packagePaths, results) {
|
|
242
|
+
// Collect changelog data for all successful packages, including commit history
|
|
243
|
+
const packages = [];
|
|
221
244
|
for (const packageName of packageNames) {
|
|
222
245
|
const result = results[packageName];
|
|
223
246
|
if (!result?.success)
|
|
224
247
|
continue;
|
|
248
|
+
const packagePath = packagePaths[packageName];
|
|
249
|
+
// Get previous version from package.json before publish (optional: could be stored earlier)
|
|
250
|
+
// For now, set to null to let changelog generator handle first release
|
|
251
|
+
let previousVersion = null;
|
|
252
|
+
try {
|
|
253
|
+
const pkgJsonPath = path_1.default.join(packagePath, 'package.json');
|
|
254
|
+
const content = fs_1.default.readFileSync(pkgJsonPath, 'utf8');
|
|
255
|
+
const pkgJson = JSON.parse(content);
|
|
256
|
+
previousVersion = pkgJson.version || null;
|
|
257
|
+
}
|
|
258
|
+
catch (e) {
|
|
259
|
+
// ignore error reading previous version
|
|
260
|
+
}
|
|
261
|
+
// Get commit history for this package since last tag
|
|
262
|
+
let commits = [];
|
|
225
263
|
try {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
264
|
+
// Use changeTrackerService to get commits since last tag
|
|
265
|
+
const lastTag = `${packageName}@${previousVersion || result.version}`;
|
|
266
|
+
commits = await change_tracker_service_1.changeTrackerService.getCommitsSinceTag(lastTag, packagePath);
|
|
267
|
+
}
|
|
268
|
+
catch (e) {
|
|
269
|
+
console.warn(`Could not get commits for ${packageName}:`, e);
|
|
229
270
|
}
|
|
230
|
-
|
|
231
|
-
|
|
271
|
+
packages.push({
|
|
272
|
+
name: packageName,
|
|
273
|
+
path: packagePath,
|
|
274
|
+
newVersion: result.version,
|
|
275
|
+
previousVersion,
|
|
276
|
+
commits,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
if (packages.length === 0)
|
|
280
|
+
return;
|
|
281
|
+
// Generate changelog entries for all packages
|
|
282
|
+
const entries = await changelog_generator_1.changelogGenerator.generateMultiple(packages);
|
|
283
|
+
// Write per-package changelogs
|
|
284
|
+
for (const pkg of packages) {
|
|
285
|
+
const entry = entries.get(pkg.name);
|
|
286
|
+
if (entry) {
|
|
287
|
+
await changelog_generator_1.changelogGenerator.appendToChangelog(pkg.path, entry, pkg.name);
|
|
288
|
+
console.info(` Updated CHANGELOG.md for ${pkg.name}`);
|
|
232
289
|
}
|
|
233
290
|
}
|
|
291
|
+
// Write monorepo changelog
|
|
292
|
+
const outputPath = path_1.default.join(process.cwd(), 'MONOREPO_CHANGELOG.md');
|
|
293
|
+
await changelog_generator_1.changelogGenerator.generateMonorepoChangelog(entries, outputPath);
|
|
294
|
+
console.info(` Monorepo changelog generated at ${outputPath}`);
|
|
234
295
|
}
|
|
235
296
|
/**
|
|
236
297
|
* Get pipeline status
|
package/package.json
CHANGED
package/prisma/schema/monodog.db
CHANGED
|
Binary file
|