@manojkmfsi/monodog 1.2.2 → 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 || (body ? /^BREAKING[\s-]CHANGE:/m.test(body) : false);
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 ? Object.values(request.versionMap).join(',') : undefined,
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, { status: 'validating', updatedAt: new Date() });
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, { status: 'failed', updatedAt: new Date() });
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, { status: 'ready', updatedAt: new Date() });
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' ? await secure_token_service_1.secureTokenService.getToken('github', 'env') : undefined;
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, { status: 'publishing', updatedAt: new Date() });
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: result.version,
121
- newVersion: result.version,
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
- const packagePath = packagePaths[packageName];
227
- // Would generate changelog using changelogGenerator
228
- console.info(` Generated changelog for ${packageName}`);
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
- catch (error) {
231
- console.warn(`Failed to generate changelog for ${packageName}:`, error);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manojkmfsi/monodog",
3
- "version": "1.2.2",
3
+ "version": "1.2.4",
4
4
  "description": "App for monodog monorepo",
5
5
  "license": "MIT",
6
6
  "author": "Mindfiredigital",
Binary file