@proletariat/cli 0.3.94 → 0.3.95
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/dist/commands/agent/cleanup.d.ts +3 -4
- package/dist/commands/agent/cleanup.js +5 -4
- package/dist/commands/agent/cleanup.js.map +1 -1
- package/dist/commands/agent/gc.d.ts +3 -4
- package/dist/commands/agent/gc.js +5 -4
- package/dist/commands/agent/gc.js.map +1 -1
- package/dist/commands/agent/index.d.ts +3 -4
- package/dist/commands/agent/index.js +5 -4
- package/dist/commands/agent/index.js.map +1 -1
- package/dist/commands/agent/list.d.ts +3 -4
- package/dist/commands/agent/list.js +5 -4
- package/dist/commands/agent/list.js.map +1 -1
- package/dist/commands/agent/remove.d.ts +3 -4
- package/dist/commands/agent/remove.js +5 -4
- package/dist/commands/agent/remove.js.map +1 -1
- package/dist/commands/agent/staff/index.d.ts +3 -4
- package/dist/commands/agent/staff/index.js +5 -4
- package/dist/commands/agent/staff/index.js.map +1 -1
- package/dist/commands/agent/staff/remove.d.ts +3 -4
- package/dist/commands/agent/staff/remove.js +5 -4
- package/dist/commands/agent/staff/remove.js.map +1 -1
- package/dist/commands/agent/status.d.ts +3 -4
- package/dist/commands/agent/status.js +5 -4
- package/dist/commands/agent/status.js.map +1 -1
- package/dist/commands/agent/visit.d.ts +3 -4
- package/dist/commands/agent/visit.js +5 -4
- package/dist/commands/agent/visit.js.map +1 -1
- package/dist/commands/branch/create.js +1 -12
- package/dist/commands/branch/create.js.map +1 -1
- package/dist/commands/branch/list.d.ts +3 -4
- package/dist/commands/branch/list.js +5 -4
- package/dist/commands/branch/list.js.map +1 -1
- package/dist/commands/branch/validate.d.ts +3 -4
- package/dist/commands/branch/validate.js +6 -5
- package/dist/commands/branch/validate.js.map +1 -1
- package/dist/commands/branch/where.d.ts +3 -4
- package/dist/commands/branch/where.js +5 -4
- package/dist/commands/branch/where.js.map +1 -1
- package/dist/commands/commit.js +1 -1
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/db/backup.d.ts +16 -0
- package/dist/commands/db/backup.js +125 -0
- package/dist/commands/db/backup.js.map +1 -0
- package/dist/commands/db/repair.js +8 -11
- package/dist/commands/db/repair.js.map +1 -1
- package/dist/commands/execution/config.d.ts +3 -4
- package/dist/commands/execution/config.js +5 -4
- package/dist/commands/execution/config.js.map +1 -1
- package/dist/commands/execution/index.d.ts +3 -4
- package/dist/commands/execution/index.js +5 -4
- package/dist/commands/execution/index.js.map +1 -1
- package/dist/commands/execution/list.d.ts +3 -4
- package/dist/commands/execution/list.js +5 -4
- package/dist/commands/execution/list.js.map +1 -1
- package/dist/commands/execution/logs.d.ts +3 -4
- package/dist/commands/execution/logs.js +5 -4
- package/dist/commands/execution/logs.js.map +1 -1
- package/dist/commands/execution/stop.d.ts +3 -4
- package/dist/commands/execution/stop.js +5 -4
- package/dist/commands/execution/stop.js.map +1 -1
- package/dist/commands/execution/view.d.ts +3 -4
- package/dist/commands/execution/view.js +5 -4
- package/dist/commands/execution/view.js.map +1 -1
- package/dist/commands/hook/export.d.ts +3 -4
- package/dist/commands/hook/export.js +5 -4
- package/dist/commands/hook/export.js.map +1 -1
- package/dist/commands/hook/fire.d.ts +3 -4
- package/dist/commands/hook/fire.js +5 -4
- package/dist/commands/hook/fire.js.map +1 -1
- package/dist/commands/hook/list.d.ts +3 -4
- package/dist/commands/hook/list.js +5 -4
- package/dist/commands/hook/list.js.map +1 -1
- package/dist/commands/hook/preset.d.ts +3 -4
- package/dist/commands/hook/preset.js +5 -4
- package/dist/commands/hook/preset.js.map +1 -1
- package/dist/commands/orchestrate/index.d.ts +3 -4
- package/dist/commands/orchestrate/index.js +5 -4
- package/dist/commands/orchestrate/index.js.map +1 -1
- package/dist/commands/orchestrator/index.d.ts +3 -4
- package/dist/commands/orchestrator/index.js +5 -4
- package/dist/commands/orchestrator/index.js.map +1 -1
- package/dist/commands/pr/checks.d.ts +3 -4
- package/dist/commands/pr/checks.js +5 -4
- package/dist/commands/pr/checks.js.map +1 -1
- package/dist/commands/repo/add.d.ts +3 -4
- package/dist/commands/repo/add.js +5 -4
- package/dist/commands/repo/add.js.map +1 -1
- package/dist/commands/repo/create.d.ts +3 -4
- package/dist/commands/repo/create.js +5 -4
- package/dist/commands/repo/create.js.map +1 -1
- package/dist/commands/repo/fix-remotes.d.ts +3 -4
- package/dist/commands/repo/fix-remotes.js +5 -4
- package/dist/commands/repo/fix-remotes.js.map +1 -1
- package/dist/commands/repo/index.d.ts +3 -4
- package/dist/commands/repo/index.js +5 -4
- package/dist/commands/repo/index.js.map +1 -1
- package/dist/commands/repo/list.d.ts +3 -4
- package/dist/commands/repo/list.js +5 -4
- package/dist/commands/repo/list.js.map +1 -1
- package/dist/commands/session/cleanup.d.ts +3 -4
- package/dist/commands/session/cleanup.js +5 -4
- package/dist/commands/session/cleanup.js.map +1 -1
- package/dist/commands/session/create.d.ts +3 -4
- package/dist/commands/session/create.js +5 -4
- package/dist/commands/session/create.js.map +1 -1
- package/dist/commands/session/exec.d.ts +3 -4
- package/dist/commands/session/exec.js +5 -4
- package/dist/commands/session/exec.js.map +1 -1
- package/dist/commands/session/health.js +18 -0
- package/dist/commands/session/health.js.map +1 -1
- package/dist/commands/session/index.d.ts +3 -4
- package/dist/commands/session/index.js +9 -4
- package/dist/commands/session/index.js.map +1 -1
- package/dist/commands/session/inspect.d.ts +3 -4
- package/dist/commands/session/inspect.js +5 -4
- package/dist/commands/session/inspect.js.map +1 -1
- package/dist/commands/session/list.d.ts +3 -4
- package/dist/commands/session/list.js +19 -5
- package/dist/commands/session/list.js.map +1 -1
- package/dist/commands/session/prune.d.ts +3 -4
- package/dist/commands/session/prune.js +5 -4
- package/dist/commands/session/prune.js.map +1 -1
- package/dist/commands/session/report.d.ts +25 -5
- package/dist/commands/session/report.js +201 -5
- package/dist/commands/session/report.js.map +1 -1
- package/dist/commands/session/restart.d.ts +3 -4
- package/dist/commands/session/restart.js +5 -4
- package/dist/commands/session/restart.js.map +1 -1
- package/dist/commands/session/watch.d.ts +17 -0
- package/dist/commands/session/watch.js +139 -0
- package/dist/commands/session/watch.js.map +1 -0
- package/dist/commands/ticket/index.d.ts +3 -4
- package/dist/commands/ticket/index.js +5 -4
- package/dist/commands/ticket/index.js.map +1 -1
- package/dist/commands/web.d.ts +20 -0
- package/dist/commands/web.js +82 -0
- package/dist/commands/web.js.map +1 -0
- package/dist/commands/work/hooks/add.d.ts +3 -4
- package/dist/commands/work/hooks/add.js +5 -4
- package/dist/commands/work/hooks/add.js.map +1 -1
- package/dist/commands/work/hooks/list.d.ts +3 -4
- package/dist/commands/work/hooks/list.js +5 -4
- package/dist/commands/work/hooks/list.js.map +1 -1
- package/dist/commands/work/hooks/toggle.d.ts +3 -4
- package/dist/commands/work/hooks/toggle.js +5 -4
- package/dist/commands/work/hooks/toggle.js.map +1 -1
- package/dist/commands/work/peek.d.ts +3 -4
- package/dist/commands/work/peek.js +5 -4
- package/dist/commands/work/peek.js.map +1 -1
- package/dist/commands/work/propose.d.ts +23 -0
- package/dist/commands/work/propose.js +57 -0
- package/dist/commands/work/propose.js.map +1 -0
- package/dist/commands/work/ready.js +2 -2
- package/dist/commands/work/ready.js.map +1 -1
- package/dist/commands/work/rebase.d.ts +1 -1
- package/dist/commands/work/rebase.js +52 -49
- package/dist/commands/work/rebase.js.map +1 -1
- package/dist/commands/work/ship.d.ts +6 -0
- package/dist/commands/work/ship.js +217 -48
- package/dist/commands/work/ship.js.map +1 -1
- package/dist/commands/work/start.js +3 -6
- package/dist/commands/work/start.js.map +1 -1
- package/dist/commands/work/stop.d.ts +3 -4
- package/dist/commands/work/stop.js +5 -4
- package/dist/commands/work/stop.js.map +1 -1
- package/dist/hooks/init.js +11 -1
- package/dist/hooks/init.js.map +1 -1
- package/dist/lib/branch/index.d.ts +6 -5
- package/dist/lib/branch/index.js +8 -13
- package/dist/lib/branch/index.js.map +1 -1
- package/dist/lib/dashboard/html.d.ts +2 -1
- package/dist/lib/dashboard/html.js +150 -522
- package/dist/lib/dashboard/html.js.map +1 -1
- package/dist/lib/database/db-safety.d.ts +48 -9
- package/dist/lib/database/db-safety.js +308 -43
- package/dist/lib/database/db-safety.js.map +1 -1
- package/dist/lib/database/index.d.ts +1 -1
- package/dist/lib/database/index.js +1 -1
- package/dist/lib/database/index.js.map +1 -1
- package/dist/lib/database/workspace.js +3 -1
- package/dist/lib/database/workspace.js.map +1 -1
- package/dist/lib/execution/runners/docker.js +8 -0
- package/dist/lib/execution/runners/docker.js.map +1 -1
- package/dist/lib/execution/runners/prompt-builder.js +9 -6
- package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
- package/dist/lib/execution/spawner.js +2 -4
- package/dist/lib/execution/spawner.js.map +1 -1
- package/dist/lib/execution/storage.d.ts +29 -1
- package/dist/lib/execution/storage.js +77 -0
- package/dist/lib/execution/storage.js.map +1 -1
- package/dist/lib/execution/types.d.ts +17 -6
- package/dist/lib/execution/types.js +10 -7
- package/dist/lib/execution/types.js.map +1 -1
- package/dist/lib/machine-config.d.ts +8 -0
- package/dist/lib/machine-config.js +37 -0
- package/dist/lib/machine-config.js.map +1 -1
- package/dist/lib/orchestrate/poller.d.ts +1 -1
- package/dist/lib/orchestrate/poller.js +1 -1
- package/dist/lib/pmo/storage/base.js +5 -3
- package/dist/lib/pmo/storage/base.js.map +1 -1
- package/dist/lib/providers/index.d.ts +1 -0
- package/dist/lib/providers/index.js +1 -0
- package/dist/lib/providers/index.js.map +1 -1
- package/dist/lib/providers/resolver.js +16 -0
- package/dist/lib/providers/resolver.js.map +1 -1
- package/dist/lib/providers/trello-provider.d.ts +28 -0
- package/dist/lib/providers/trello-provider.js +381 -0
- package/dist/lib/providers/trello-provider.js.map +1 -0
- package/dist/lib/session/heartbeat.d.ts +45 -0
- package/dist/lib/session/heartbeat.js +150 -0
- package/dist/lib/session/heartbeat.js.map +1 -0
- package/dist/lib/session/index.d.ts +7 -0
- package/dist/lib/session/index.js +8 -0
- package/dist/lib/session/index.js.map +1 -0
- package/dist/lib/session/watcher.d.ts +79 -0
- package/dist/lib/session/watcher.js +142 -0
- package/dist/lib/session/watcher.js.map +1 -0
- package/dist/lib/shipping/auto-merge.d.ts +57 -0
- package/dist/lib/shipping/auto-merge.js +311 -0
- package/dist/lib/shipping/auto-merge.js.map +1 -0
- package/dist/lib/shipping/github.d.ts +68 -0
- package/dist/lib/shipping/github.js +217 -0
- package/dist/lib/shipping/github.js.map +1 -0
- package/dist/lib/shipping/index.d.ts +13 -0
- package/dist/lib/shipping/index.js +11 -0
- package/dist/lib/shipping/index.js.map +1 -0
- package/dist/lib/shipping/rebase.d.ts +35 -0
- package/dist/lib/shipping/rebase.js +107 -0
- package/dist/lib/shipping/rebase.js.map +1 -0
- package/dist/lib/shipping/types.d.ts +181 -0
- package/dist/lib/shipping/types.js +9 -0
- package/dist/lib/shipping/types.js.map +1 -0
- package/dist/lib/trello/client.d.ts +1 -0
- package/dist/lib/trello/client.js +6 -0
- package/dist/lib/trello/client.js.map +1 -1
- package/oclif.manifest.json +908 -1009
- package/package.json +8 -8
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Git Provider & Auto-Merge Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements the GitProvider interface for sibling rebase (PRLT-1143)
|
|
5
|
+
* and the AutoMergeProvider interface for auto-merge (PRLT-1144),
|
|
6
|
+
* both using the GitHub API via `gh` CLI.
|
|
7
|
+
*/
|
|
8
|
+
import { execSync, spawnSync } from 'node:child_process';
|
|
9
|
+
import { listOpenPRs, getMergeableState, getGitHubRepo, rebasePRBranch, getPRByNumber, } from '../pr/index.js';
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// GitHubProvider — Sibling Rebase (PRLT-1143)
|
|
12
|
+
// =============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* GitHub implementation of GitProvider.
|
|
15
|
+
*
|
|
16
|
+
* Uses the `gh api` CLI for API-based operations where possible,
|
|
17
|
+
* falling back to local git operations when the API is unavailable.
|
|
18
|
+
*/
|
|
19
|
+
export class GitHubProvider {
|
|
20
|
+
name = 'github';
|
|
21
|
+
listOpenPRs(cwd) {
|
|
22
|
+
return listOpenPRs(cwd);
|
|
23
|
+
}
|
|
24
|
+
getMergeableState(prNumber, cwd) {
|
|
25
|
+
return getMergeableState(prNumber, cwd);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Update a PR branch using GitHub's update-branch API.
|
|
29
|
+
*
|
|
30
|
+
* Uses: PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch
|
|
31
|
+
*
|
|
32
|
+
* This merges the base branch into the PR branch server-side,
|
|
33
|
+
* without requiring a local checkout or force-push.
|
|
34
|
+
*
|
|
35
|
+
* Falls back to local git rebase if the API call fails with a
|
|
36
|
+
* non-conflict error (e.g., permissions, network issues).
|
|
37
|
+
*/
|
|
38
|
+
updatePRBranch(prNumber, cwd) {
|
|
39
|
+
const repo = getGitHubRepo(cwd);
|
|
40
|
+
if (!repo) {
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
prNumber,
|
|
44
|
+
headBranch: '',
|
|
45
|
+
error: 'Could not determine GitHub repository from git remote',
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Get PR info for the head branch name
|
|
49
|
+
let headBranch = '';
|
|
50
|
+
let baseBranch = '';
|
|
51
|
+
try {
|
|
52
|
+
const prJson = execSync(`gh pr view ${prNumber} --json headRefName,baseRefName`, { cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
53
|
+
const prData = JSON.parse(prJson);
|
|
54
|
+
headBranch = prData.headRefName;
|
|
55
|
+
baseBranch = prData.baseRefName;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
prNumber,
|
|
61
|
+
headBranch: '',
|
|
62
|
+
error: `Could not fetch PR #${prNumber} details`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// Try API-based update-branch first
|
|
66
|
+
try {
|
|
67
|
+
execSync(`gh api repos/${repo}/pulls/${prNumber}/update-branch -X PUT -f expected_head_sha="$(gh pr view ${prNumber} --json headRefOid -q .headRefOid)"`, { cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
68
|
+
return {
|
|
69
|
+
success: true,
|
|
70
|
+
prNumber,
|
|
71
|
+
headBranch,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
catch (apiError) {
|
|
75
|
+
const errorMsg = apiError instanceof Error ? apiError.message : String(apiError);
|
|
76
|
+
// Check if the error indicates merge conflicts
|
|
77
|
+
if (errorMsg.includes('merge conflict') || errorMsg.includes('Merge conflict')) {
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
prNumber,
|
|
81
|
+
headBranch,
|
|
82
|
+
error: 'Merge conflicts detected — manual resolution required',
|
|
83
|
+
hasConflicts: true,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// API failed for non-conflict reason — fall back to local git rebase
|
|
87
|
+
const fallbackResult = rebasePRBranch(headBranch, baseBranch, cwd);
|
|
88
|
+
if (fallbackResult.success) {
|
|
89
|
+
return {
|
|
90
|
+
success: true,
|
|
91
|
+
prNumber,
|
|
92
|
+
headBranch,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// Check if fallback failure was due to conflicts
|
|
96
|
+
const fallbackError = fallbackResult.error || '';
|
|
97
|
+
const isConflict = fallbackError.includes('CONFLICT') ||
|
|
98
|
+
fallbackError.includes('conflict') ||
|
|
99
|
+
fallbackError.includes('could not apply');
|
|
100
|
+
return {
|
|
101
|
+
success: false,
|
|
102
|
+
prNumber,
|
|
103
|
+
headBranch,
|
|
104
|
+
error: fallbackResult.error || 'Rebase failed',
|
|
105
|
+
hasConflicts: isConflict,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Add a label to a GitHub PR.
|
|
111
|
+
*/
|
|
112
|
+
addLabel(prNumber, label, cwd) {
|
|
113
|
+
try {
|
|
114
|
+
execSync(`gh pr edit ${prNumber} --add-label "${label}"`, {
|
|
115
|
+
cwd,
|
|
116
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
117
|
+
});
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Add a comment to a GitHub PR.
|
|
126
|
+
*/
|
|
127
|
+
addComment(prNumber, body, cwd) {
|
|
128
|
+
try {
|
|
129
|
+
execSync(`gh pr comment ${prNumber} --body "${body.replace(/"/g, '\\"')}"`, {
|
|
130
|
+
cwd,
|
|
131
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
132
|
+
});
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// =============================================================================
|
|
141
|
+
// GitHubAutoMergeProvider — Auto-Merge (PRLT-1144)
|
|
142
|
+
// =============================================================================
|
|
143
|
+
/**
|
|
144
|
+
* GitHub implementation of AutoMergeProvider.
|
|
145
|
+
*
|
|
146
|
+
* Uses GitHub's native auto-merge feature when available, which
|
|
147
|
+
* automatically merges a PR once all required status checks pass.
|
|
148
|
+
*/
|
|
149
|
+
export class GitHubAutoMergeProvider {
|
|
150
|
+
name = 'github';
|
|
151
|
+
/**
|
|
152
|
+
* Enable GitHub's native auto-merge on a PR.
|
|
153
|
+
*
|
|
154
|
+
* Uses `gh pr merge --auto` which sets the PR to auto-merge once
|
|
155
|
+
* all required status checks pass and branch protections are satisfied.
|
|
156
|
+
*
|
|
157
|
+
* Requires: auto-merge must be enabled in the repository settings.
|
|
158
|
+
*/
|
|
159
|
+
enableAutoMerge(prNumber, method, cwd) {
|
|
160
|
+
const args = ['pr', 'merge', String(prNumber), '--auto', `--${method}`];
|
|
161
|
+
const result = spawnSync('gh', args, {
|
|
162
|
+
cwd,
|
|
163
|
+
encoding: 'utf-8',
|
|
164
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
165
|
+
});
|
|
166
|
+
if (result.status !== 0) {
|
|
167
|
+
const stderr = result.stderr?.trim() || '';
|
|
168
|
+
// Check if auto-merge is already enabled
|
|
169
|
+
if (stderr.includes('already set to auto-merge') || stderr.includes('auto-merge is already enabled')) {
|
|
170
|
+
return {
|
|
171
|
+
success: true,
|
|
172
|
+
prNumber,
|
|
173
|
+
alreadyEnabled: true,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
success: false,
|
|
178
|
+
prNumber,
|
|
179
|
+
error: stderr || 'Failed to enable auto-merge',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return { success: true, prNumber };
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Disable GitHub's native auto-merge on a PR.
|
|
186
|
+
*
|
|
187
|
+
* Uses `gh pr merge --disable-auto` to cancel auto-merge.
|
|
188
|
+
*/
|
|
189
|
+
disableAutoMerge(prNumber, cwd) {
|
|
190
|
+
const result = spawnSync('gh', ['pr', 'merge', String(prNumber), '--disable-auto'], {
|
|
191
|
+
cwd,
|
|
192
|
+
encoding: 'utf-8',
|
|
193
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
194
|
+
});
|
|
195
|
+
if (result.status !== 0) {
|
|
196
|
+
const stderr = result.stderr?.trim() || '';
|
|
197
|
+
// Not an error if auto-merge wasn't enabled
|
|
198
|
+
if (stderr.includes('not set to auto-merge') || stderr.includes('auto-merge is not enabled')) {
|
|
199
|
+
return { success: true, prNumber };
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
success: false,
|
|
203
|
+
prNumber,
|
|
204
|
+
error: stderr || 'Failed to disable auto-merge',
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
return { success: true, prNumber };
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Check if a PR has been merged.
|
|
211
|
+
*/
|
|
212
|
+
isPRMerged(prNumber, cwd) {
|
|
213
|
+
const prInfo = getPRByNumber(prNumber, cwd);
|
|
214
|
+
return prInfo?.state === 'MERGED';
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/lib/shipping/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shipping Module — Public API
|
|
3
|
+
*
|
|
4
|
+
* Provider-agnostic shipping operations: sibling PR rebase,
|
|
5
|
+
* conflict labeling, git provider abstraction, and auto-merge orchestration.
|
|
6
|
+
*/
|
|
7
|
+
export type { GitProvider, GitProviderName, UpdateBranchResult, SiblingRebaseResult, RebaseSiblingOptions, } from './types.js';
|
|
8
|
+
export { GitHubProvider } from './github.js';
|
|
9
|
+
export { rebaseSiblingPRs, detectGitProvider } from './rebase.js';
|
|
10
|
+
export type { AutoMergeResult, AutoMergeProvider, WhenGreenOptions, WhenGreenResult, } from './types.js';
|
|
11
|
+
export { GitHubAutoMergeProvider } from './github.js';
|
|
12
|
+
export { watchAndShip } from './auto-merge.js';
|
|
13
|
+
export type { WatchAndShipDeps } from './auto-merge.js';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shipping Module — Public API
|
|
3
|
+
*
|
|
4
|
+
* Provider-agnostic shipping operations: sibling PR rebase,
|
|
5
|
+
* conflict labeling, git provider abstraction, and auto-merge orchestration.
|
|
6
|
+
*/
|
|
7
|
+
export { GitHubProvider } from './github.js';
|
|
8
|
+
export { rebaseSiblingPRs, detectGitProvider } from './rebase.js';
|
|
9
|
+
export { GitHubAutoMergeProvider } from './github.js';
|
|
10
|
+
export { watchAndShip } from './auto-merge.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/shipping/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAUjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sibling PR Rebase — Provider-Agnostic
|
|
3
|
+
*
|
|
4
|
+
* After a PR merges, the base branch advances. Other open PRs may become
|
|
5
|
+
* stale or conflicting. This module rebases sibling PRs using the git
|
|
6
|
+
* provider's API (e.g., GitHub's update-branch endpoint), falling back
|
|
7
|
+
* to local git rebase when the API is unavailable.
|
|
8
|
+
*
|
|
9
|
+
* On conflict, optionally labels the PR and adds a comment so the
|
|
10
|
+
* author knows manual resolution is needed.
|
|
11
|
+
*/
|
|
12
|
+
import type { GitProvider, RebaseSiblingOptions, SiblingRebaseResult } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Detect the git provider for the current repository.
|
|
15
|
+
*
|
|
16
|
+
* Currently supports GitHub. Returns null if the provider cannot be detected.
|
|
17
|
+
* GitLab support can be added here by checking the remote URL.
|
|
18
|
+
*/
|
|
19
|
+
export declare function detectGitProvider(cwd?: string): GitProvider | null;
|
|
20
|
+
/**
|
|
21
|
+
* Rebase all open sibling PRs after a merge.
|
|
22
|
+
*
|
|
23
|
+
* This is the main entry point for post-merge sibling rebase.
|
|
24
|
+
* It uses the git provider's API to update branches, which is cleaner
|
|
25
|
+
* than local git rebase + force-push because:
|
|
26
|
+
* - No local checkout needed
|
|
27
|
+
* - Works in CI/CD without full git history
|
|
28
|
+
* - Uses the provider's merge infrastructure
|
|
29
|
+
* - Avoids force-push permission issues
|
|
30
|
+
*
|
|
31
|
+
* @param options - Configuration for the rebase operation
|
|
32
|
+
* @param provider - Git provider to use (auto-detected if not provided)
|
|
33
|
+
* @returns Results of the rebase operation for each PR
|
|
34
|
+
*/
|
|
35
|
+
export declare function rebaseSiblingPRs(options: RebaseSiblingOptions, provider?: GitProvider | null): SiblingRebaseResult;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sibling PR Rebase — Provider-Agnostic
|
|
3
|
+
*
|
|
4
|
+
* After a PR merges, the base branch advances. Other open PRs may become
|
|
5
|
+
* stale or conflicting. This module rebases sibling PRs using the git
|
|
6
|
+
* provider's API (e.g., GitHub's update-branch endpoint), falling back
|
|
7
|
+
* to local git rebase when the API is unavailable.
|
|
8
|
+
*
|
|
9
|
+
* On conflict, optionally labels the PR and adds a comment so the
|
|
10
|
+
* author knows manual resolution is needed.
|
|
11
|
+
*/
|
|
12
|
+
import { GitHubProvider } from './github.js';
|
|
13
|
+
const CONFLICT_LABEL = 'rebase-conflict';
|
|
14
|
+
const CONFLICT_COMMENT = 'This PR has merge conflicts with the base branch after a recent merge. ' +
|
|
15
|
+
'Please rebase or merge the base branch to resolve conflicts.';
|
|
16
|
+
/**
|
|
17
|
+
* Detect the git provider for the current repository.
|
|
18
|
+
*
|
|
19
|
+
* Currently supports GitHub. Returns null if the provider cannot be detected.
|
|
20
|
+
* GitLab support can be added here by checking the remote URL.
|
|
21
|
+
*/
|
|
22
|
+
export function detectGitProvider(cwd) {
|
|
23
|
+
// For now, default to GitHub since it's the only implemented provider.
|
|
24
|
+
// When GitLab/Bitbucket providers are added, detect from the remote URL:
|
|
25
|
+
// git remote get-url origin → github.com = GitHub, gitlab.com = GitLab, etc.
|
|
26
|
+
return new GitHubProvider();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Rebase all open sibling PRs after a merge.
|
|
30
|
+
*
|
|
31
|
+
* This is the main entry point for post-merge sibling rebase.
|
|
32
|
+
* It uses the git provider's API to update branches, which is cleaner
|
|
33
|
+
* than local git rebase + force-push because:
|
|
34
|
+
* - No local checkout needed
|
|
35
|
+
* - Works in CI/CD without full git history
|
|
36
|
+
* - Uses the provider's merge infrastructure
|
|
37
|
+
* - Avoids force-push permission issues
|
|
38
|
+
*
|
|
39
|
+
* @param options - Configuration for the rebase operation
|
|
40
|
+
* @param provider - Git provider to use (auto-detected if not provided)
|
|
41
|
+
* @returns Results of the rebase operation for each PR
|
|
42
|
+
*/
|
|
43
|
+
export function rebaseSiblingPRs(options, provider) {
|
|
44
|
+
const gitProvider = provider ?? detectGitProvider(options.cwd);
|
|
45
|
+
if (!gitProvider) {
|
|
46
|
+
return {
|
|
47
|
+
succeeded: [],
|
|
48
|
+
failed: [],
|
|
49
|
+
skipped: [],
|
|
50
|
+
totalChecked: 0,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const { excludePRNumber, cwd, onProgress, labelConflicts = true, commentOnConflicts = true, rebaseAll = false, } = options;
|
|
54
|
+
const openPRs = gitProvider.listOpenPRs(cwd);
|
|
55
|
+
const result = {
|
|
56
|
+
succeeded: [],
|
|
57
|
+
failed: [],
|
|
58
|
+
skipped: [],
|
|
59
|
+
totalChecked: 0,
|
|
60
|
+
};
|
|
61
|
+
for (const pr of openPRs) {
|
|
62
|
+
// Skip the PR that was just merged
|
|
63
|
+
if (pr.number === excludePRNumber)
|
|
64
|
+
continue;
|
|
65
|
+
result.totalChecked++;
|
|
66
|
+
// Check mergeable state unless rebaseAll is set
|
|
67
|
+
if (!rebaseAll) {
|
|
68
|
+
const state = gitProvider.getMergeableState(pr.number, cwd);
|
|
69
|
+
if (state === 'MERGEABLE') {
|
|
70
|
+
result.skipped.push({
|
|
71
|
+
success: true,
|
|
72
|
+
prNumber: pr.number,
|
|
73
|
+
headBranch: pr.headBranch,
|
|
74
|
+
});
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// Skip UNKNOWN state PRs — we can't determine if they need rebase
|
|
78
|
+
if (state === 'UNKNOWN') {
|
|
79
|
+
result.skipped.push({
|
|
80
|
+
success: true,
|
|
81
|
+
prNumber: pr.number,
|
|
82
|
+
headBranch: pr.headBranch,
|
|
83
|
+
});
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
onProgress?.(`Updating PR #${pr.number} (${pr.headBranch})...`);
|
|
88
|
+
const updateResult = gitProvider.updatePRBranch(pr.number, cwd);
|
|
89
|
+
if (updateResult.success) {
|
|
90
|
+
result.succeeded.push(updateResult);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
result.failed.push(updateResult);
|
|
94
|
+
// Label and comment on conflict failures
|
|
95
|
+
if (updateResult.hasConflicts) {
|
|
96
|
+
if (labelConflicts) {
|
|
97
|
+
gitProvider.addLabel(pr.number, CONFLICT_LABEL, cwd);
|
|
98
|
+
}
|
|
99
|
+
if (commentOnConflicts) {
|
|
100
|
+
gitProvider.addComment(pr.number, CONFLICT_COMMENT, cwd);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=rebase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rebase.js","sourceRoot":"","sources":["../../../src/lib/shipping/rebase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,cAAc,GAAG,iBAAiB,CAAA;AACxC,MAAM,gBAAgB,GACpB,yEAAyE;IACzE,8DAA8D,CAAA;AAEhE;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,uEAAuE;IACvE,yEAAyE;IACzE,+EAA+E;IAC/E,OAAO,IAAI,cAAc,EAAE,CAAA;AAC7B,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAA6B,EAC7B,QAA6B;IAE7B,MAAM,WAAW,GAAG,QAAQ,IAAI,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC9D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,CAAC;SAChB,CAAA;IACH,CAAC;IAED,MAAM,EACJ,eAAe,EACf,GAAG,EACH,UAAU,EACV,cAAc,GAAG,IAAI,EACrB,kBAAkB,GAAG,IAAI,EACzB,SAAS,GAAG,KAAK,GAClB,GAAG,OAAO,CAAA;IAEX,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAC5C,MAAM,MAAM,GAAwB;QAClC,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,CAAC;KAChB,CAAA;IAED,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACzB,mCAAmC;QACnC,IAAI,EAAE,CAAC,MAAM,KAAK,eAAe;YAAE,SAAQ;QAE3C,MAAM,CAAC,YAAY,EAAE,CAAA;QAErB,gDAAgD;QAChD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;YAC3D,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;gBAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;oBAClB,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE,EAAE,CAAC,MAAM;oBACnB,UAAU,EAAE,EAAE,CAAC,UAAU;iBAC1B,CAAC,CAAA;gBACF,SAAQ;YACV,CAAC;YAED,kEAAkE;YAClE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;oBAClB,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE,EAAE,CAAC,MAAM;oBACnB,UAAU,EAAE,EAAE,CAAC,UAAU;iBAC1B,CAAC,CAAA;gBACF,SAAQ;YACV,CAAC;QACH,CAAC;QAED,UAAU,EAAE,CAAC,gBAAgB,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,UAAU,MAAM,CAAC,CAAA;QAE/D,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAE/D,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAEhC,yCAAyC;YACzC,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;gBAC9B,IAAI,cAAc,EAAE,CAAC;oBACnB,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,CAAA;gBACtD,CAAC;gBAED,IAAI,kBAAkB,EAAE,CAAC;oBACvB,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAA;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shipping Types — Git Provider Interface & Auto-Merge
|
|
3
|
+
*
|
|
4
|
+
* Provider-agnostic interface for git hosting operations needed by the
|
|
5
|
+
* shipping/rebase pipeline and auto-merge orchestration. Implementations
|
|
6
|
+
* exist for GitHub (via gh CLI) and can be added for GitLab, Bitbucket, etc.
|
|
7
|
+
*/
|
|
8
|
+
import type { PRInfo, MergeableState } from '../pr/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* Supported git hosting provider names.
|
|
11
|
+
*/
|
|
12
|
+
export type GitProviderName = 'github' | 'gitlab';
|
|
13
|
+
/**
|
|
14
|
+
* Result of attempting to update (rebase) a PR branch via the provider API.
|
|
15
|
+
*/
|
|
16
|
+
export interface UpdateBranchResult {
|
|
17
|
+
success: boolean;
|
|
18
|
+
/** PR number that was updated */
|
|
19
|
+
prNumber: number;
|
|
20
|
+
/** Head branch name */
|
|
21
|
+
headBranch: string;
|
|
22
|
+
/** Error message if the update failed */
|
|
23
|
+
error?: string;
|
|
24
|
+
/** Whether the failure was due to merge conflicts */
|
|
25
|
+
hasConflicts?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Result of the full sibling rebase operation across all PRs.
|
|
29
|
+
*/
|
|
30
|
+
export interface SiblingRebaseResult {
|
|
31
|
+
/** PRs that were successfully rebased */
|
|
32
|
+
succeeded: UpdateBranchResult[];
|
|
33
|
+
/** PRs that failed to rebase (conflicts or other errors) */
|
|
34
|
+
failed: UpdateBranchResult[];
|
|
35
|
+
/** PRs that were skipped (already up to date) */
|
|
36
|
+
skipped: UpdateBranchResult[];
|
|
37
|
+
/** Total open PRs checked */
|
|
38
|
+
totalChecked: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Options for the rebaseSiblingPRs operation.
|
|
42
|
+
*/
|
|
43
|
+
export interface RebaseSiblingOptions {
|
|
44
|
+
/** PR number to exclude (the one that was just merged) */
|
|
45
|
+
excludePRNumber: number | null;
|
|
46
|
+
/** Working directory for git operations */
|
|
47
|
+
cwd?: string;
|
|
48
|
+
/** Callback for progress messages */
|
|
49
|
+
onProgress?: (msg: string) => void;
|
|
50
|
+
/** Whether to add a 'rebase-conflict' label on conflict failures */
|
|
51
|
+
labelConflicts?: boolean;
|
|
52
|
+
/** Whether to add a comment on conflict failures */
|
|
53
|
+
commentOnConflicts?: boolean;
|
|
54
|
+
/** Whether to attempt all PRs or just conflicting ones */
|
|
55
|
+
rebaseAll?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Provider-agnostic interface for git hosting operations.
|
|
59
|
+
*
|
|
60
|
+
* Each provider (GitHub, GitLab, etc.) implements this interface to enable
|
|
61
|
+
* API-based branch updates instead of local git rebase + force-push.
|
|
62
|
+
*
|
|
63
|
+
* API-based updates are preferred because:
|
|
64
|
+
* - They don't require a local checkout
|
|
65
|
+
* - They work in CI/CD environments without full git history
|
|
66
|
+
* - They use the hosting provider's merge infrastructure
|
|
67
|
+
* - They avoid force-push permission issues
|
|
68
|
+
*/
|
|
69
|
+
export interface GitProvider {
|
|
70
|
+
/** Which provider this is */
|
|
71
|
+
readonly name: GitProviderName;
|
|
72
|
+
/**
|
|
73
|
+
* List all open PRs/MRs in the repository.
|
|
74
|
+
*/
|
|
75
|
+
listOpenPRs(cwd?: string): PRInfo[];
|
|
76
|
+
/**
|
|
77
|
+
* Get the mergeable state of a PR/MR.
|
|
78
|
+
*/
|
|
79
|
+
getMergeableState(prNumber: number, cwd?: string): MergeableState;
|
|
80
|
+
/**
|
|
81
|
+
* Update a PR branch to include the latest changes from its base branch.
|
|
82
|
+
*
|
|
83
|
+
* GitHub: PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch
|
|
84
|
+
* GitLab: PUT /projects/{id}/merge_requests/{merge_request_iid}/rebase
|
|
85
|
+
*
|
|
86
|
+
* This is the API-based alternative to local git rebase + force-push.
|
|
87
|
+
* Falls back to local git rebase if the API call fails.
|
|
88
|
+
*/
|
|
89
|
+
updatePRBranch(prNumber: number, cwd?: string): UpdateBranchResult;
|
|
90
|
+
/**
|
|
91
|
+
* Add a label to a PR/MR.
|
|
92
|
+
*/
|
|
93
|
+
addLabel(prNumber: number, label: string, cwd?: string): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Add a comment to a PR/MR.
|
|
96
|
+
*/
|
|
97
|
+
addComment(prNumber: number, body: string, cwd?: string): boolean;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Result of enabling or disabling auto-merge on a PR.
|
|
101
|
+
*/
|
|
102
|
+
export interface AutoMergeResult {
|
|
103
|
+
success: boolean;
|
|
104
|
+
prNumber: number;
|
|
105
|
+
error?: string;
|
|
106
|
+
/** Whether auto-merge was already enabled when we tried to enable it */
|
|
107
|
+
alreadyEnabled?: boolean;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Configuration for the when-green watch loop.
|
|
111
|
+
*/
|
|
112
|
+
export interface WhenGreenOptions {
|
|
113
|
+
/** PR number to watch */
|
|
114
|
+
prNumber: number;
|
|
115
|
+
/** Merge method (squash, merge, rebase) */
|
|
116
|
+
method: 'merge' | 'squash' | 'rebase';
|
|
117
|
+
/** Delete branch after merging */
|
|
118
|
+
deleteBranch: boolean;
|
|
119
|
+
/** Use admin privileges to bypass branch protections */
|
|
120
|
+
admin: boolean;
|
|
121
|
+
/** Fail on conflicts instead of auto-rebasing */
|
|
122
|
+
noRebase: boolean;
|
|
123
|
+
/** Working directory for git operations */
|
|
124
|
+
cwd?: string;
|
|
125
|
+
/** Head branch name */
|
|
126
|
+
headBranch: string;
|
|
127
|
+
/** Base branch name */
|
|
128
|
+
baseBranch: string;
|
|
129
|
+
/** Callback for progress messages */
|
|
130
|
+
onProgress?: (msg: string) => void;
|
|
131
|
+
/** Callback for warning messages */
|
|
132
|
+
onWarning?: (msg: string) => void;
|
|
133
|
+
/** Maximum time to wait in milliseconds (default: 60 minutes) */
|
|
134
|
+
timeoutMs?: number;
|
|
135
|
+
/** Poll interval in milliseconds (default: 30 seconds) */
|
|
136
|
+
pollIntervalMs?: number;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Result of the when-green watch loop.
|
|
140
|
+
*/
|
|
141
|
+
export interface WhenGreenResult {
|
|
142
|
+
/** Whether the PR was successfully merged */
|
|
143
|
+
merged: boolean;
|
|
144
|
+
/** Whether native auto-merge was enabled as a safety net */
|
|
145
|
+
autoMergeEnabled: boolean;
|
|
146
|
+
/** Number of poll cycles completed */
|
|
147
|
+
pollCycles: number;
|
|
148
|
+
/** Whether a rebase was performed during the watch */
|
|
149
|
+
rebasePerformed: boolean;
|
|
150
|
+
/** Error message if the operation failed */
|
|
151
|
+
error?: string;
|
|
152
|
+
/** Error code for JSON output */
|
|
153
|
+
errorCode?: string;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Provider-agnostic interface for auto-merge operations.
|
|
157
|
+
*
|
|
158
|
+
* Each provider (GitHub, GitLab, etc.) implements these methods to enable
|
|
159
|
+
* native auto-merge functionality.
|
|
160
|
+
*/
|
|
161
|
+
export interface AutoMergeProvider {
|
|
162
|
+
/** Which provider this is */
|
|
163
|
+
readonly name: 'github' | 'gitlab';
|
|
164
|
+
/**
|
|
165
|
+
* Enable native auto-merge on a PR.
|
|
166
|
+
*
|
|
167
|
+
* GitHub: `gh pr merge --auto --squash`
|
|
168
|
+
* GitLab: merge when pipeline succeeds API
|
|
169
|
+
*/
|
|
170
|
+
enableAutoMerge(prNumber: number, method: 'merge' | 'squash' | 'rebase', cwd?: string): AutoMergeResult;
|
|
171
|
+
/**
|
|
172
|
+
* Disable native auto-merge on a PR.
|
|
173
|
+
*
|
|
174
|
+
* GitHub: `gh pr merge --disable-auto`
|
|
175
|
+
*/
|
|
176
|
+
disableAutoMerge(prNumber: number, cwd?: string): AutoMergeResult;
|
|
177
|
+
/**
|
|
178
|
+
* Check if a PR has been merged (by auto-merge or manually).
|
|
179
|
+
*/
|
|
180
|
+
isPRMerged(prNumber: number, cwd?: string): boolean;
|
|
181
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shipping Types — Git Provider Interface & Auto-Merge
|
|
3
|
+
*
|
|
4
|
+
* Provider-agnostic interface for git hosting operations needed by the
|
|
5
|
+
* shipping/rebase pipeline and auto-merge orchestration. Implementations
|
|
6
|
+
* exist for GitHub (via gh CLI) and can be added for GitLab, Bitbucket, etc.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/shipping/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -20,4 +20,5 @@ export declare class TrelloClient {
|
|
|
20
20
|
getBoards(): Promise<TrelloBoard[]>;
|
|
21
21
|
createCard(input: TrelloCardUpsertInput): Promise<TrelloCard>;
|
|
22
22
|
updateCard(cardId: string, input: TrelloCardUpsertInput): Promise<TrelloCard>;
|
|
23
|
+
addComment(cardId: string, text: string): Promise<void>;
|
|
23
24
|
}
|
|
@@ -110,5 +110,11 @@ export class TrelloClient {
|
|
|
110
110
|
body: input,
|
|
111
111
|
});
|
|
112
112
|
}
|
|
113
|
+
async addComment(cardId, text) {
|
|
114
|
+
await this.request(`/cards/${cardId}/actions/comments`, {
|
|
115
|
+
method: 'POST',
|
|
116
|
+
body: { text },
|
|
117
|
+
});
|
|
118
|
+
}
|
|
113
119
|
}
|
|
114
120
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/trello/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/trello/client.ts"],"names":[],"mappings":"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"}
|