merge-steward 0.32.2 → 0.32.3

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.
@@ -126,6 +126,9 @@ async function verifyMergedEntriesPostPush(ctx) {
126
126
  postMergeCheckedAt: now,
127
127
  }, "post-merge verification");
128
128
  }
129
+ const post = ctx.store.getEntry(entry.id);
130
+ if (post)
131
+ await syncQueueStateLabels(ctx, post);
129
132
  }
130
133
  }
131
134
  // phase implementations live in dedicated modules now
@@ -35,7 +35,8 @@ export declare class MergeStewardQueueCommands {
35
35
  tryAdmit(prNumber: number, branch: string, headSha: string): Promise<boolean>;
36
36
  dequeueByPR(prNumber: number): void;
37
37
  updateHeadByPR(prNumber: number, headSha: string): void;
38
- acknowledgeExternalMerge(prNumber: number): void;
38
+ acknowledgeExternalMerge(prNumber: number): Promise<void>;
39
+ private clearQueueStateLabels;
39
40
  private invalidateDownstreamOf;
40
41
  private findAffectedEntriesAfterPriorityChange;
41
42
  private requeueAffectedEntries;
@@ -250,7 +250,7 @@ export class MergeStewardQueueCommands {
250
250
  this.logger.info({ prNumber, entryId: entry.id, headSha }, "PR head updated via webhook");
251
251
  }
252
252
  }
253
- acknowledgeExternalMerge(prNumber) {
253
+ async acknowledgeExternalMerge(prNumber) {
254
254
  const entry = this.store.getEntryByPR(this.config.repoId, prNumber);
255
255
  if (entry) {
256
256
  this.store.transition(entry.id, "merged", {
@@ -260,9 +260,32 @@ export class MergeStewardQueueCommands {
260
260
  postMergeCheckedAt: new Date().toISOString(),
261
261
  });
262
262
  this.invalidateDownstreamOf(entry);
263
+ await this.clearQueueStateLabels(prNumber);
263
264
  this.logger.info({ prNumber, entryId: entry.id }, "External merge acknowledged");
264
265
  }
265
266
  }
267
+ async clearQueueStateLabels(prNumber) {
268
+ const managed = [this.config.queueTestingLabel, this.config.queueMergingLabel].filter(Boolean);
269
+ if (managed.length === 0)
270
+ return;
271
+ let current;
272
+ try {
273
+ current = await this.github.listLabels(prNumber);
274
+ }
275
+ catch (error) {
276
+ this.logger.debug({ prNumber, err: error }, "Could not read queue state labels after external merge");
277
+ return;
278
+ }
279
+ const remove = managed.filter((label) => current.includes(label));
280
+ if (remove.length === 0)
281
+ return;
282
+ try {
283
+ await this.github.setLabels(prNumber, { remove });
284
+ }
285
+ catch (error) {
286
+ this.logger.warn({ prNumber, labels: remove, err: error }, "Could not clear queue state labels after external merge");
287
+ }
288
+ }
266
289
  invalidateDownstreamOf(removedEntry) {
267
290
  const allActive = this.store.listActive(this.config.repoId);
268
291
  const targets = selectDownstream(allActive, removedEntry.id);
package/dist/service.d.ts CHANGED
@@ -39,7 +39,7 @@ export declare class MergeStewardService {
39
39
  dequeueByPR(prNumber: number): void;
40
40
  updateHeadByPR(prNumber: number, headSha: string): void;
41
41
  updatePriorityByPR(prNumber: number, priority: number): boolean;
42
- acknowledgeExternalMerge(prNumber: number): void;
42
+ acknowledgeExternalMerge(prNumber: number): Promise<void>;
43
43
  getStatus(): QueueEntry[];
44
44
  getIncident(incidentId: string): IncidentRecord | undefined;
45
45
  listIncidents(entryId: string): IncidentRecord[];
package/dist/service.js CHANGED
@@ -76,8 +76,8 @@ export class MergeStewardService {
76
76
  updatePriorityByPR(prNumber, priority) {
77
77
  return this.queueCommands.updatePriorityByPR(prNumber, priority);
78
78
  }
79
- acknowledgeExternalMerge(prNumber) {
80
- this.queueCommands.acknowledgeExternalMerge(prNumber);
79
+ async acknowledgeExternalMerge(prNumber) {
80
+ await this.queueCommands.acknowledgeExternalMerge(prNumber);
81
81
  }
82
82
  getStatus() {
83
83
  return this.watchQueries.getStatus();
@@ -128,7 +128,7 @@ export async function processWebhookEvent(event, service, config, logger) {
128
128
  break;
129
129
  }
130
130
  case "pr_merged": {
131
- service.acknowledgeExternalMerge(event.prNumber);
131
+ await service.acknowledgeExternalMerge(event.prNumber);
132
132
  break;
133
133
  }
134
134
  case "pr_closed": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "merge-steward",
3
- "version": "0.32.2",
3
+ "version": "0.32.3",
4
4
  "description": "Serial merge queue for GitHub — rebase, CI-gate, and merge PRs one at a time",
5
5
  "type": "module",
6
6
  "repository": {