hungry-ghost-hive 0.47.2 → 0.47.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.
- package/dist/cli/commands/auth.js +4 -4
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/auth.test.js +42 -0
- package/dist/cli/commands/auth.test.js.map +1 -1
- package/dist/cli/commands/pr.d.ts.map +1 -1
- package/dist/cli/commands/pr.js +0 -22
- package/dist/cli/commands/pr.js.map +1 -1
- package/dist/cli/commands/pr.test.js +28 -0
- package/dist/cli/commands/pr.test.js.map +1 -1
- package/dist/cli/wizard/init-wizard.js +17 -2
- package/dist/cli/wizard/init-wizard.js.map +1 -1
- package/dist/cli/wizard/init-wizard.test.js +10 -4
- package/dist/cli/wizard/init-wizard.test.js.map +1 -1
- package/dist/config/schema.d.ts +19 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +4 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/context-files/index.test.js +1 -1
- package/dist/context-files/index.test.js.map +1 -1
- package/dist/test-validation.test.d.ts +2 -0
- package/dist/test-validation.test.d.ts.map +1 -0
- package/dist/test-validation.test.js +20 -0
- package/dist/test-validation.test.js.map +1 -0
- package/dist/utils/auto-merge.d.ts +8 -0
- package/dist/utils/auto-merge.d.ts.map +1 -1
- package/dist/utils/auto-merge.js +138 -0
- package/dist/utils/auto-merge.js.map +1 -1
- package/dist/utils/auto-merge.test.js +145 -1
- package/dist/utils/auto-merge.test.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/commands/auth.test.ts +51 -0
- package/src/cli/commands/auth.ts +4 -4
- package/src/cli/commands/pr.test.ts +48 -0
- package/src/cli/commands/pr.ts +0 -30
- package/src/cli/wizard/init-wizard.test.ts +10 -4
- package/src/cli/wizard/init-wizard.ts +17 -2
- package/src/config/schema.ts +4 -0
- package/src/context-files/index.test.ts +1 -1
- package/src/test-validation.test.ts +24 -0
- package/src/utils/auto-merge.test.ts +213 -1
- package/src/utils/auto-merge.ts +179 -0
|
@@ -16,7 +16,7 @@ vi.mock('../connectors/project-management/operations.js', () => ({
|
|
|
16
16
|
syncStatusForStory: vi.fn(),
|
|
17
17
|
}));
|
|
18
18
|
import { loadConfig } from '../config/loader.js';
|
|
19
|
-
import { autoMergeApprovedPRs } from './auto-merge.js';
|
|
19
|
+
import { autoMergeApprovedPRs, checkPreexistingCIFailures } from './auto-merge.js';
|
|
20
20
|
const mockLoadConfig = vi.mocked(loadConfig);
|
|
21
21
|
describe('auto-merge functionality', () => {
|
|
22
22
|
let db;
|
|
@@ -304,6 +304,150 @@ describe('auto-merge functionality', () => {
|
|
|
304
304
|
expect(result).toBe(0);
|
|
305
305
|
expect(getPullRequestById(db, pr.id)?.status).toBe('approved');
|
|
306
306
|
});
|
|
307
|
+
it('should bypass BLOCKED status when all CI failures are pre-existing on base branch', async () => {
|
|
308
|
+
const pr = createPullRequest(db, {
|
|
309
|
+
storyId,
|
|
310
|
+
teamId,
|
|
311
|
+
branchName: 'feature/preexisting-ci',
|
|
312
|
+
githubPrNumber: 555,
|
|
313
|
+
});
|
|
314
|
+
updatePullRequest(db, pr.id, { status: 'approved' });
|
|
315
|
+
mockLoadConfig.mockReturnValue({
|
|
316
|
+
integrations: {
|
|
317
|
+
autonomy: { level: 'full', allow_preexisting_ci_failures: true },
|
|
318
|
+
source_control: { provider: 'github' },
|
|
319
|
+
project_management: { provider: 'none' },
|
|
320
|
+
},
|
|
321
|
+
});
|
|
322
|
+
const mockExecSync = vi.fn();
|
|
323
|
+
// 1. gh pr view → BLOCKED but MERGEABLE
|
|
324
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify({ state: 'OPEN', mergeable: 'MERGEABLE', mergeStateStatus: 'BLOCKED' }));
|
|
325
|
+
// 2. gh pr checks → one failing check
|
|
326
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify([
|
|
327
|
+
{ name: 'build', state: 'SUCCESS' },
|
|
328
|
+
{ name: 'lint', state: 'FAIL' },
|
|
329
|
+
]));
|
|
330
|
+
// 3. gh pr view baseRefName
|
|
331
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify({ baseRefName: 'main' }));
|
|
332
|
+
// 4. gh api base branch check-runs → same check failing
|
|
333
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify([
|
|
334
|
+
{ name: 'build', conclusion: 'success' },
|
|
335
|
+
{ name: 'lint', conclusion: 'failure' },
|
|
336
|
+
]));
|
|
337
|
+
// 5. gh pr merge --admin → success
|
|
338
|
+
mockExecSync.mockReturnValueOnce(undefined);
|
|
339
|
+
vi.doMock('child_process', () => ({ execSync: mockExecSync }));
|
|
340
|
+
const dbClient = { db, save: vi.fn(), close: vi.fn(), runMigrations: vi.fn() };
|
|
341
|
+
const result = await autoMergeApprovedPRs('/mock/root', dbClient);
|
|
342
|
+
expect(result).toBe(1);
|
|
343
|
+
expect(getPullRequestById(db, pr.id)?.status).toBe('merged');
|
|
344
|
+
});
|
|
345
|
+
it('should not bypass BLOCKED status when PR has new CI failures not on base branch', async () => {
|
|
346
|
+
const pr = createPullRequest(db, {
|
|
347
|
+
storyId,
|
|
348
|
+
teamId,
|
|
349
|
+
branchName: 'feature/new-ci-failure',
|
|
350
|
+
githubPrNumber: 556,
|
|
351
|
+
});
|
|
352
|
+
updatePullRequest(db, pr.id, { status: 'approved' });
|
|
353
|
+
mockLoadConfig.mockReturnValue({
|
|
354
|
+
integrations: {
|
|
355
|
+
autonomy: { level: 'full', allow_preexisting_ci_failures: true },
|
|
356
|
+
source_control: { provider: 'github' },
|
|
357
|
+
project_management: { provider: 'none' },
|
|
358
|
+
},
|
|
359
|
+
});
|
|
360
|
+
const mockExecSync = vi.fn();
|
|
361
|
+
// 1. gh pr view → BLOCKED but MERGEABLE
|
|
362
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify({ state: 'OPEN', mergeable: 'MERGEABLE', mergeStateStatus: 'BLOCKED' }));
|
|
363
|
+
// 2. gh pr checks → two failing checks
|
|
364
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify([
|
|
365
|
+
{ name: 'build', state: 'FAIL' },
|
|
366
|
+
{ name: 'lint', state: 'FAIL' },
|
|
367
|
+
]));
|
|
368
|
+
// 3. gh pr view baseRefName
|
|
369
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify({ baseRefName: 'main' }));
|
|
370
|
+
// 4. gh api base branch check-runs → only lint fails on base
|
|
371
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify([
|
|
372
|
+
{ name: 'build', conclusion: 'success' },
|
|
373
|
+
{ name: 'lint', conclusion: 'failure' },
|
|
374
|
+
]));
|
|
375
|
+
vi.doMock('child_process', () => ({ execSync: mockExecSync }));
|
|
376
|
+
const dbClient = { db, save: vi.fn(), close: vi.fn(), runMigrations: vi.fn() };
|
|
377
|
+
const result = await autoMergeApprovedPRs('/mock/root', dbClient);
|
|
378
|
+
// Should not merge — 'build' is a new failure
|
|
379
|
+
expect(result).toBe(0);
|
|
380
|
+
// PR should be reset to approved (ci_blocked outcome)
|
|
381
|
+
expect(getPullRequestById(db, pr.id)?.status).toBe('approved');
|
|
382
|
+
});
|
|
383
|
+
it('should skip BLOCKED PR when allow_preexisting_ci_failures is false', async () => {
|
|
384
|
+
const pr = createPullRequest(db, {
|
|
385
|
+
storyId,
|
|
386
|
+
teamId,
|
|
387
|
+
branchName: 'feature/ci-blocked-no-bypass',
|
|
388
|
+
githubPrNumber: 557,
|
|
389
|
+
});
|
|
390
|
+
updatePullRequest(db, pr.id, { status: 'approved' });
|
|
391
|
+
mockLoadConfig.mockReturnValue({
|
|
392
|
+
integrations: {
|
|
393
|
+
autonomy: { level: 'full', allow_preexisting_ci_failures: false },
|
|
394
|
+
source_control: { provider: 'github' },
|
|
395
|
+
project_management: { provider: 'none' },
|
|
396
|
+
},
|
|
397
|
+
});
|
|
398
|
+
const mockExecSync = vi.fn();
|
|
399
|
+
// gh pr view → BLOCKED but MERGEABLE
|
|
400
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify({ state: 'OPEN', mergeable: 'MERGEABLE', mergeStateStatus: 'BLOCKED' }));
|
|
401
|
+
vi.doMock('child_process', () => ({ execSync: mockExecSync }));
|
|
402
|
+
const dbClient = { db, save: vi.fn(), close: vi.fn(), runMigrations: vi.fn() };
|
|
403
|
+
const result = await autoMergeApprovedPRs('/mock/root', dbClient);
|
|
404
|
+
expect(result).toBe(0);
|
|
405
|
+
expect(getPullRequestById(db, pr.id)?.status).toBe('approved');
|
|
406
|
+
});
|
|
407
|
+
});
|
|
408
|
+
describe('checkPreexistingCIFailures', () => {
|
|
409
|
+
it('should return bypassed=true when all PR failures exist on base branch', () => {
|
|
410
|
+
const mockExecSync = vi.fn();
|
|
411
|
+
// gh pr checks
|
|
412
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify([
|
|
413
|
+
{ name: 'build', state: 'SUCCESS' },
|
|
414
|
+
{ name: 'lint', state: 'FAIL' },
|
|
415
|
+
{ name: 'test', state: 'FAIL' },
|
|
416
|
+
]));
|
|
417
|
+
// gh pr view baseRefName
|
|
418
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify({ baseRefName: 'main' }));
|
|
419
|
+
// gh api check-runs
|
|
420
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify([
|
|
421
|
+
{ name: 'build', conclusion: 'success' },
|
|
422
|
+
{ name: 'lint', conclusion: 'failure' },
|
|
423
|
+
{ name: 'test', conclusion: 'failure' },
|
|
424
|
+
]));
|
|
425
|
+
const result = checkPreexistingCIFailures(123, '/repo', '', 'owner/repo', mockExecSync);
|
|
426
|
+
expect(result.bypassed).toBe(true);
|
|
427
|
+
expect(result.bypassedChecks).toEqual(expect.arrayContaining(['lint', 'test']));
|
|
428
|
+
});
|
|
429
|
+
it('should return bypassed=false when PR has unique failures', () => {
|
|
430
|
+
const mockExecSync = vi.fn();
|
|
431
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify([{ name: 'build', state: 'FAIL' }]));
|
|
432
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify({ baseRefName: 'main' }));
|
|
433
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify([{ name: 'build', conclusion: 'success' }]));
|
|
434
|
+
const result = checkPreexistingCIFailures(123, '/repo', '', 'owner/repo', mockExecSync);
|
|
435
|
+
expect(result.bypassed).toBe(false);
|
|
436
|
+
});
|
|
437
|
+
it('should return bypassed=false when no PR checks are failing', () => {
|
|
438
|
+
const mockExecSync = vi.fn();
|
|
439
|
+
mockExecSync.mockReturnValueOnce(JSON.stringify([{ name: 'build', state: 'SUCCESS' }]));
|
|
440
|
+
const result = checkPreexistingCIFailures(123, '/repo', '', 'owner/repo', mockExecSync);
|
|
441
|
+
expect(result.bypassed).toBe(false);
|
|
442
|
+
expect(result.bypassedChecks).toEqual([]);
|
|
443
|
+
});
|
|
444
|
+
it('should return bypassed=false when execSync throws', () => {
|
|
445
|
+
const mockExecSync = vi.fn().mockImplementation(() => {
|
|
446
|
+
throw new Error('gh not found');
|
|
447
|
+
});
|
|
448
|
+
const result = checkPreexistingCIFailures(123, '/repo', '', 'owner/repo', mockExecSync);
|
|
449
|
+
expect(result.bypassed).toBe(false);
|
|
450
|
+
});
|
|
307
451
|
});
|
|
308
452
|
});
|
|
309
453
|
//# sourceMappingURL=auto-merge.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-merge.test.js","sourceRoot":"","sources":["../../src/utils/auto-merge.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auto-merge.test.js","sourceRoot":"","sources":["../../src/utils/auto-merge.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -20,6 +20,24 @@ vi.mock('../../auth/token-store.js', () => ({
|
|
|
20
20
|
})),
|
|
21
21
|
}));
|
|
22
22
|
|
|
23
|
+
vi.mock('../../auth/env-store.js', async () => {
|
|
24
|
+
const actual =
|
|
25
|
+
await vi.importActual<typeof import('../../auth/env-store.js')>('../../auth/env-store.js');
|
|
26
|
+
return {
|
|
27
|
+
...actual,
|
|
28
|
+
loadEnvIntoProcess: vi.fn(),
|
|
29
|
+
writeEnvEntries: vi.fn(),
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
vi.mock('@inquirer/prompts', () => ({
|
|
34
|
+
input: vi.fn().mockResolvedValue('mock-value'),
|
|
35
|
+
}));
|
|
36
|
+
|
|
37
|
+
vi.mock('../../utils/open-browser.js', () => ({
|
|
38
|
+
openBrowser: vi.fn().mockResolvedValue(undefined),
|
|
39
|
+
}));
|
|
40
|
+
|
|
23
41
|
let mockHiveRoot: string | null = null;
|
|
24
42
|
|
|
25
43
|
vi.mock('../../utils/with-hive-context.js', () => ({
|
|
@@ -98,6 +116,39 @@ describe('auth command', () => {
|
|
|
98
116
|
}
|
|
99
117
|
}
|
|
100
118
|
});
|
|
119
|
+
|
|
120
|
+
it('should construct TokenStore with root/.hive/.env (not root/.hive/.hive/.env)', async () => {
|
|
121
|
+
const { startJiraOAuthFlow, storeJiraTokens } = await import('../../auth/jira-oauth.js');
|
|
122
|
+
const { TokenStore } = await import('../../auth/token-store.js');
|
|
123
|
+
|
|
124
|
+
vi.mocked(startJiraOAuthFlow).mockResolvedValue({
|
|
125
|
+
accessToken: 'access',
|
|
126
|
+
refreshToken: 'refresh',
|
|
127
|
+
cloudId: 'cloud-id',
|
|
128
|
+
siteUrl: 'https://example.atlassian.net',
|
|
129
|
+
expiresIn: 3600,
|
|
130
|
+
});
|
|
131
|
+
vi.mocked(storeJiraTokens).mockResolvedValue(undefined);
|
|
132
|
+
|
|
133
|
+
process.env.JIRA_OAUTH_CLIENT_ID = 'test-client-id';
|
|
134
|
+
process.env.JIRA_OAUTH_CLIENT_SECRET = 'test-client-secret';
|
|
135
|
+
|
|
136
|
+
const jiraCmd = authCommand.commands.find(cmd => cmd.name() === 'jira');
|
|
137
|
+
expect(jiraCmd).toBeDefined();
|
|
138
|
+
|
|
139
|
+
try {
|
|
140
|
+
await jiraCmd!.parseAsync([], { from: 'user' });
|
|
141
|
+
} catch {
|
|
142
|
+
// command may exit; we only care about the TokenStore constructor call
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const TokenStoreMock = vi.mocked(TokenStore);
|
|
146
|
+
expect(TokenStoreMock).toHaveBeenCalled();
|
|
147
|
+
const envPathArg = TokenStoreMock.mock.calls[0][0] as string;
|
|
148
|
+
// Must end with .hive/.env, never .hive/.hive/.env
|
|
149
|
+
expect(envPathArg).toMatch(/\.hive[/\\]\.env$/);
|
|
150
|
+
expect(envPathArg).not.toMatch(/\.hive[/\\]\.hive/);
|
|
151
|
+
});
|
|
101
152
|
});
|
|
102
153
|
|
|
103
154
|
describe('auth command structure', () => {
|
package/src/cli/commands/auth.ts
CHANGED
|
@@ -129,7 +129,7 @@ authCommand
|
|
|
129
129
|
.description('Re-run GitHub OAuth Device Flow to update authentication token')
|
|
130
130
|
.action(async () => {
|
|
131
131
|
try {
|
|
132
|
-
const {
|
|
132
|
+
const { root } = withHiveRoot(ctx => ctx);
|
|
133
133
|
const clientId = process.env.GITHUB_OAUTH_CLIENT_ID;
|
|
134
134
|
if (!clientId) {
|
|
135
135
|
console.error(chalk.red('Error: GITHUB_OAUTH_CLIENT_ID environment variable is not set.'));
|
|
@@ -142,7 +142,7 @@ authCommand
|
|
|
142
142
|
|
|
143
143
|
const result = await runGitHubDeviceFlow({
|
|
144
144
|
clientId,
|
|
145
|
-
rootDir:
|
|
145
|
+
rootDir: root,
|
|
146
146
|
});
|
|
147
147
|
|
|
148
148
|
console.log();
|
|
@@ -166,7 +166,7 @@ authCommand
|
|
|
166
166
|
.description('Re-run Jira OAuth 2.0 (3LO) to update authentication tokens')
|
|
167
167
|
.action(async () => {
|
|
168
168
|
try {
|
|
169
|
-
const { root
|
|
169
|
+
const { root } = withHiveRoot(ctx => ctx);
|
|
170
170
|
|
|
171
171
|
// Load stored credentials from .hive/.env, then check env vars, then prompt
|
|
172
172
|
loadEnvIntoProcess(root);
|
|
@@ -198,7 +198,7 @@ authCommand
|
|
|
198
198
|
});
|
|
199
199
|
|
|
200
200
|
// Store tokens using TokenStore
|
|
201
|
-
const envPath = getEnvFilePath(
|
|
201
|
+
const envPath = getEnvFilePath(root);
|
|
202
202
|
const tokenStore = new TokenStore(envPath);
|
|
203
203
|
await tokenStore.loadFromEnv(envPath);
|
|
204
204
|
await storeJiraTokens(tokenStore, result);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Licensed under the Hungry Ghost Hive License. See LICENSE.
|
|
2
2
|
|
|
3
3
|
import type { Command } from 'commander';
|
|
4
|
+
import { execa } from 'execa';
|
|
4
5
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
5
6
|
import {
|
|
6
7
|
getOpenPullRequestsByStory,
|
|
@@ -10,6 +11,10 @@ import {
|
|
|
10
11
|
import { autoMergeApprovedPRs } from '../../utils/auto-merge.js';
|
|
11
12
|
|
|
12
13
|
// Mock dependencies
|
|
14
|
+
vi.mock('execa', () => ({
|
|
15
|
+
execa: vi.fn(),
|
|
16
|
+
}));
|
|
17
|
+
|
|
13
18
|
vi.mock('../../cluster/runtime.js', () => ({
|
|
14
19
|
fetchLocalClusterStatus: vi.fn(),
|
|
15
20
|
}));
|
|
@@ -261,6 +266,49 @@ describe('pr command', () => {
|
|
|
261
266
|
expect(getOpenPullRequestsByStory).toHaveBeenCalledWith(expect.anything(), 'STORY-TEST-1');
|
|
262
267
|
});
|
|
263
268
|
|
|
269
|
+
it('should not close GitHub PR when auto-closing duplicate internal PR records', async () => {
|
|
270
|
+
vi.mocked(getOpenPullRequestsByStory).mockReturnValue([
|
|
271
|
+
{
|
|
272
|
+
id: 'old-pr-1',
|
|
273
|
+
story_id: 'TEST-1',
|
|
274
|
+
team_id: 'team-1',
|
|
275
|
+
branch_name: 'feature/old-branch',
|
|
276
|
+
github_pr_number: 42,
|
|
277
|
+
github_pr_url: 'https://github.com/test/repo/pull/42',
|
|
278
|
+
submitted_by: null,
|
|
279
|
+
reviewed_by: null,
|
|
280
|
+
status: 'queued',
|
|
281
|
+
review_notes: null,
|
|
282
|
+
created_at: '2026-01-01T00:00:00.000Z',
|
|
283
|
+
updated_at: '2026-01-01T00:00:00.000Z',
|
|
284
|
+
reviewed_at: null,
|
|
285
|
+
},
|
|
286
|
+
]);
|
|
287
|
+
|
|
288
|
+
await run(
|
|
289
|
+
'submit',
|
|
290
|
+
'--branch',
|
|
291
|
+
'feature/new-branch',
|
|
292
|
+
'--story',
|
|
293
|
+
'TEST-1',
|
|
294
|
+
'--pr-number',
|
|
295
|
+
'99'
|
|
296
|
+
);
|
|
297
|
+
|
|
298
|
+
// Internal DB record should be closed
|
|
299
|
+
expect(updatePullRequest).toHaveBeenCalledWith(
|
|
300
|
+
expect.anything(),
|
|
301
|
+
'old-pr-1',
|
|
302
|
+
expect.objectContaining({ status: 'closed' })
|
|
303
|
+
);
|
|
304
|
+
// GitHub PR must NOT be closed via gh CLI
|
|
305
|
+
expect(execa).not.toHaveBeenCalledWith(
|
|
306
|
+
'gh',
|
|
307
|
+
expect.arrayContaining(['pr', 'close']),
|
|
308
|
+
expect.anything()
|
|
309
|
+
);
|
|
310
|
+
});
|
|
311
|
+
|
|
264
312
|
it('should skip auto-close when resubmitting same github PR number', async () => {
|
|
265
313
|
vi.mocked(getOpenPullRequestsByStory).mockReturnValue([
|
|
266
314
|
{
|
package/src/cli/commands/pr.ts
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import chalk from 'chalk';
|
|
4
4
|
import { Command } from 'commander';
|
|
5
|
-
import { execa } from 'execa';
|
|
6
5
|
import { join } from 'path';
|
|
7
6
|
import { fetchLocalClusterStatus } from '../../cluster/runtime.js';
|
|
8
7
|
import { loadConfig } from '../../config/loader.js';
|
|
@@ -77,35 +76,6 @@ prCommand
|
|
|
77
76
|
message: `Auto-closed duplicate PR ${existingPR.id}`,
|
|
78
77
|
metadata: { pr_id: existingPR.id, reason: 'duplicate' },
|
|
79
78
|
});
|
|
80
|
-
|
|
81
|
-
// Close the PR on GitHub if it has a PR number
|
|
82
|
-
if (existingPR.github_pr_number) {
|
|
83
|
-
try {
|
|
84
|
-
// Determine repo directory for gh CLI
|
|
85
|
-
let repoCwd = root;
|
|
86
|
-
if (teamId) {
|
|
87
|
-
const team = getTeamById(db.db, teamId);
|
|
88
|
-
if (team?.repo_path) {
|
|
89
|
-
repoCwd = join(root, team.repo_path);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
await execa('gh', ['pr', 'close', String(existingPR.github_pr_number)], {
|
|
93
|
-
cwd: repoCwd,
|
|
94
|
-
});
|
|
95
|
-
console.log(
|
|
96
|
-
chalk.gray(
|
|
97
|
-
` Closed stale GitHub PR #${existingPR.github_pr_number} for ${storyId}`
|
|
98
|
-
)
|
|
99
|
-
);
|
|
100
|
-
} catch (error) {
|
|
101
|
-
// Non-fatal - PR might already be closed or gh CLI not authenticated
|
|
102
|
-
console.log(
|
|
103
|
-
chalk.yellow(
|
|
104
|
-
` Warning: Could not close GitHub PR #${existingPR.github_pr_number}: ${error instanceof Error ? error.message : String(error)}`
|
|
105
|
-
)
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
79
|
}
|
|
110
80
|
|
|
111
81
|
// Update story status
|
|
@@ -59,7 +59,7 @@ describe('Init Wizard', () => {
|
|
|
59
59
|
integrations: {
|
|
60
60
|
source_control: { provider: 'github' },
|
|
61
61
|
project_management: { provider: 'none' },
|
|
62
|
-
autonomy: { level: 'full' },
|
|
62
|
+
autonomy: { level: 'full', allow_preexisting_ci_failures: true },
|
|
63
63
|
},
|
|
64
64
|
agent_runtime: 'claude',
|
|
65
65
|
});
|
|
@@ -96,7 +96,10 @@ describe('Init Wizard', () => {
|
|
|
96
96
|
|
|
97
97
|
expect(result.integrations.source_control).toEqual({ provider: 'github' });
|
|
98
98
|
expect(result.integrations.project_management.provider).toBe('jira');
|
|
99
|
-
expect(result.integrations.autonomy).toEqual({
|
|
99
|
+
expect(result.integrations.autonomy).toEqual({
|
|
100
|
+
level: 'partial',
|
|
101
|
+
allow_preexisting_ci_failures: true,
|
|
102
|
+
});
|
|
100
103
|
expect(result.agent_runtime).toBe('claude');
|
|
101
104
|
});
|
|
102
105
|
|
|
@@ -149,7 +152,7 @@ describe('Init Wizard', () => {
|
|
|
149
152
|
integrations: {
|
|
150
153
|
source_control: { provider: 'github' },
|
|
151
154
|
project_management: { provider: 'none' },
|
|
152
|
-
autonomy: { level: 'full' },
|
|
155
|
+
autonomy: { level: 'full', allow_preexisting_ci_failures: true },
|
|
153
156
|
},
|
|
154
157
|
agent_runtime: 'claude',
|
|
155
158
|
});
|
|
@@ -218,7 +221,10 @@ describe('Init Wizard', () => {
|
|
|
218
221
|
|
|
219
222
|
expect(result.integrations.source_control).toEqual({ provider: 'github' });
|
|
220
223
|
expect(result.integrations.project_management.provider).toBe('jira');
|
|
221
|
-
expect(result.integrations.autonomy).toEqual({
|
|
224
|
+
expect(result.integrations.autonomy).toEqual({
|
|
225
|
+
level: 'partial',
|
|
226
|
+
allow_preexisting_ci_failures: true,
|
|
227
|
+
});
|
|
222
228
|
expect(result.agent_runtime).toBe('codex');
|
|
223
229
|
});
|
|
224
230
|
|
|
@@ -291,7 +291,7 @@ async function buildResult(
|
|
|
291
291
|
const integrations: IntegrationsConfig = {
|
|
292
292
|
source_control: { provider: sourceControl },
|
|
293
293
|
project_management: { provider: projectManagement },
|
|
294
|
-
autonomy: { level: autonomy },
|
|
294
|
+
autonomy: { level: autonomy, allow_preexisting_ci_failures: true },
|
|
295
295
|
};
|
|
296
296
|
|
|
297
297
|
// If Jira is selected, run OAuth and setup wizard
|
|
@@ -305,7 +305,22 @@ async function buildResult(
|
|
|
305
305
|
console.log(chalk.gray(' 1. Go to https://developer.atlassian.com/console/myapps/'));
|
|
306
306
|
console.log(chalk.gray(' 2. Create a new app with OAuth 2.0 (3LO)'));
|
|
307
307
|
console.log(chalk.gray(' 3. Add callback URL: http://127.0.0.1:9876/callback'));
|
|
308
|
-
console.log(chalk.gray(' 4. Enable
|
|
308
|
+
console.log(chalk.gray(' 4. Enable the following scopes:'));
|
|
309
|
+
console.log(chalk.gray(''));
|
|
310
|
+
console.log(chalk.gray(' Jira API'));
|
|
311
|
+
console.log(chalk.gray(' read:jira-work'));
|
|
312
|
+
console.log(chalk.gray(' write:jira-work'));
|
|
313
|
+
console.log(chalk.gray(' read:jira-user'));
|
|
314
|
+
console.log(chalk.gray(''));
|
|
315
|
+
console.log(chalk.gray(' Jira Software API'));
|
|
316
|
+
console.log(chalk.gray(' read:board-scope:jira-software'));
|
|
317
|
+
console.log(chalk.gray(' write:board-scope:jira-software'));
|
|
318
|
+
console.log(chalk.gray(' read:sprint:jira-software'));
|
|
319
|
+
console.log(chalk.gray(' write:sprint:jira-software'));
|
|
320
|
+
console.log(chalk.gray(''));
|
|
321
|
+
console.log(chalk.gray(' Confluence API'));
|
|
322
|
+
console.log(chalk.gray(' read:confluence-content.all'));
|
|
323
|
+
console.log(chalk.gray(''));
|
|
309
324
|
console.log();
|
|
310
325
|
|
|
311
326
|
// Get OAuth credentials from environment or prompt user
|
package/src/config/schema.ts
CHANGED
|
@@ -140,6 +140,8 @@ const ProjectManagementConfigSchema = z.object({
|
|
|
140
140
|
const AutonomyConfigSchema = z.object({
|
|
141
141
|
// Agent autonomy level
|
|
142
142
|
level: z.enum(['full', 'partial']).default('full'),
|
|
143
|
+
// When true, PRs whose only CI failures also fail on the base branch are still merged
|
|
144
|
+
allow_preexisting_ci_failures: z.boolean().default(true),
|
|
143
145
|
});
|
|
144
146
|
|
|
145
147
|
// Integrations configuration
|
|
@@ -405,6 +407,8 @@ integrations:
|
|
|
405
407
|
# Agent autonomy level (full, partial)
|
|
406
408
|
autonomy:
|
|
407
409
|
level: full
|
|
410
|
+
# Merge PRs whose CI failures also exist on the base branch
|
|
411
|
+
allow_preexisting_ci_failures: true
|
|
408
412
|
|
|
409
413
|
# Model assignments per agent tier
|
|
410
414
|
models:
|
|
@@ -193,7 +193,7 @@ describe('context-files module', () => {
|
|
|
193
193
|
integrations: {
|
|
194
194
|
source_control: { provider: 'github' },
|
|
195
195
|
project_management: { provider: 'none' },
|
|
196
|
-
autonomy: { level: 'full' },
|
|
196
|
+
autonomy: { level: 'full', allow_preexisting_ci_failures: true },
|
|
197
197
|
},
|
|
198
198
|
github: { base_branch: 'main', pr_template: '' },
|
|
199
199
|
qa: {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Licensed under the Hungry Ghost Hive License. See LICENSE.
|
|
2
|
+
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
|
|
5
|
+
describe('test infrastructure validation', () => {
|
|
6
|
+
it('should run a basic assertion', () => {
|
|
7
|
+
expect(1 + 1).toBe(2);
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it('should handle string assertions', () => {
|
|
11
|
+
expect('hungry-ghost-hive').toContain('hive');
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('should handle async tests', async () => {
|
|
15
|
+
const result = await Promise.resolve(42);
|
|
16
|
+
expect(result).toBe(42);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('should handle array and object matchers', () => {
|
|
20
|
+
const items = ['senior', 'intermediate', 'junior', 'qa'];
|
|
21
|
+
expect(items).toHaveLength(4);
|
|
22
|
+
expect(items).toContain('junior');
|
|
23
|
+
});
|
|
24
|
+
});
|