@urateam/core 0.1.42 → 0.1.43
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/__tests__/bitbucket-webhook.test.d.ts +13 -0
- package/dist/__tests__/bitbucket-webhook.test.d.ts.map +1 -0
- package/dist/__tests__/bitbucket-webhook.test.js +379 -0
- package/dist/__tests__/bitbucket-webhook.test.js.map +1 -0
- package/dist/__tests__/bitbucket.test.d.ts +15 -0
- package/dist/__tests__/bitbucket.test.d.ts.map +1 -0
- package/dist/__tests__/bitbucket.test.js +237 -0
- package/dist/__tests__/bitbucket.test.js.map +1 -0
- package/dist/__tests__/gitlab-webhook.test.d.ts +13 -0
- package/dist/__tests__/gitlab-webhook.test.d.ts.map +1 -0
- package/dist/__tests__/gitlab-webhook.test.js +388 -0
- package/dist/__tests__/gitlab-webhook.test.js.map +1 -0
- package/dist/__tests__/runner-multi-vcs.test.d.ts +19 -0
- package/dist/__tests__/runner-multi-vcs.test.d.ts.map +1 -0
- package/dist/__tests__/runner-multi-vcs.test.js +346 -0
- package/dist/__tests__/runner-multi-vcs.test.js.map +1 -0
- package/dist/__tests__/triage-v2-prediction.test.d.ts +2 -0
- package/dist/__tests__/triage-v2-prediction.test.d.ts.map +1 -0
- package/dist/__tests__/triage-v2-prediction.test.js +70 -0
- package/dist/__tests__/triage-v2-prediction.test.js.map +1 -0
- package/dist/__tests__/triage-v2-prompt.test.d.ts +2 -0
- package/dist/__tests__/triage-v2-prompt.test.d.ts.map +1 -0
- package/dist/__tests__/triage-v2-prompt.test.js +127 -0
- package/dist/__tests__/triage-v2-prompt.test.js.map +1 -0
- package/dist/__tests__/triage-v2-render.test.d.ts +2 -0
- package/dist/__tests__/triage-v2-render.test.d.ts.map +1 -0
- package/dist/__tests__/triage-v2-render.test.js +200 -0
- package/dist/__tests__/triage-v2-render.test.js.map +1 -0
- package/dist/__tests__/triage-v2-schema.test.d.ts +2 -0
- package/dist/__tests__/triage-v2-schema.test.d.ts.map +1 -0
- package/dist/__tests__/triage-v2-schema.test.js +115 -0
- package/dist/__tests__/triage-v2-schema.test.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/pipeline/feedback-pipeline.d.ts +2 -0
- package/dist/pipeline/feedback-pipeline.d.ts.map +1 -1
- package/dist/pipeline/feedback-pipeline.js +4 -1
- package/dist/pipeline/feedback-pipeline.js.map +1 -1
- package/dist/pipeline/runner.d.ts +11 -0
- package/dist/pipeline/runner.d.ts.map +1 -1
- package/dist/pipeline/runner.js +314 -114
- package/dist/pipeline/runner.js.map +1 -1
- package/dist/pm/actions/triage-prompt.d.ts +42 -0
- package/dist/pm/actions/triage-prompt.d.ts.map +1 -0
- package/dist/pm/actions/triage-prompt.js +192 -0
- package/dist/pm/actions/triage-prompt.js.map +1 -0
- package/dist/pm/actions/triage-render.d.ts +39 -0
- package/dist/pm/actions/triage-render.d.ts.map +1 -0
- package/dist/pm/actions/triage-render.js +158 -0
- package/dist/pm/actions/triage-render.js.map +1 -0
- package/dist/pm/actions/triage.d.ts +2 -1
- package/dist/pm/actions/triage.d.ts.map +1 -1
- package/dist/pm/actions/triage.js +44 -58
- package/dist/pm/actions/triage.js.map +1 -1
- package/dist/pm/triage-prediction-quality.d.ts +26 -0
- package/dist/pm/triage-prediction-quality.d.ts.map +1 -0
- package/dist/pm/triage-prediction-quality.js +41 -0
- package/dist/pm/triage-prediction-quality.js.map +1 -0
- package/dist/pm/types.d.ts +60 -0
- package/dist/pm/types.d.ts.map +1 -1
- package/dist/pm/types.js +119 -0
- package/dist/pm/types.js.map +1 -1
- package/dist/repo/bitbucket.d.ts +136 -0
- package/dist/repo/bitbucket.d.ts.map +1 -0
- package/dist/repo/bitbucket.js +237 -0
- package/dist/repo/bitbucket.js.map +1 -0
- package/dist/repo/gitlab.d.ts +11 -0
- package/dist/repo/gitlab.d.ts.map +1 -1
- package/dist/repo/gitlab.js +37 -0
- package/dist/repo/gitlab.js.map +1 -1
- package/dist/repo/index.d.ts +3 -1
- package/dist/repo/index.d.ts.map +1 -1
- package/dist/repo/index.js +2 -1
- package/dist/repo/index.js.map +1 -1
- package/dist/server.d.ts +14 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +32 -0
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/dist/webhook/bitbucket-handler.d.ts +65 -0
- package/dist/webhook/bitbucket-handler.d.ts.map +1 -0
- package/dist/webhook/bitbucket-handler.js +153 -0
- package/dist/webhook/bitbucket-handler.js.map +1 -0
- package/dist/webhook/gitlab-handler.d.ts +66 -0
- package/dist/webhook/gitlab-handler.d.ts.map +1 -0
- package/dist/webhook/gitlab-handler.js +159 -0
- package/dist/webhook/gitlab-handler.js.map +1 -0
- package/dist/webhook/index.d.ts +3 -0
- package/dist/webhook/index.d.ts.map +1 -1
- package/dist/webhook/index.js +3 -0
- package/dist/webhook/index.js.map +1 -1
- package/dist/webhook/shared-handlers.d.ts +110 -0
- package/dist/webhook/shared-handlers.d.ts.map +1 -0
- package/dist/webhook/shared-handlers.js +251 -0
- package/dist/webhook/shared-handlers.js.map +1 -0
- package/package.json +1 -1
package/dist/pm/types.js
CHANGED
|
@@ -38,4 +38,123 @@ export const PmAgentConfigSchema = z.object({
|
|
|
38
38
|
})
|
|
39
39
|
.optional(),
|
|
40
40
|
});
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
// Tier 6b — TriageV2 extensions: zod schema + tolerant parser.
|
|
43
|
+
//
|
|
44
|
+
// The schema is `.optional()` per FR-003 so a partial Haiku response still
|
|
45
|
+
// produces a valid v1-shaped TriageResult. `parseTriageV2Extensions()` is a
|
|
46
|
+
// pre-zod filter that truncates excess list entries and drops malformed
|
|
47
|
+
// inner shapes, then runs zod for type-safety on what remains. This shape
|
|
48
|
+
// is the contract between the triage Haiku call and downstream consumers
|
|
49
|
+
// (see specs/001-triage-v2/contracts/triage-result.schema.md).
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
/** Per-field caps from data-model.md. Tunable in one place. */
|
|
52
|
+
const TRIAGE_V2_CAPS = {
|
|
53
|
+
assumptions: 10,
|
|
54
|
+
examples: 3,
|
|
55
|
+
affectedFiles: 20,
|
|
56
|
+
riskAssessmentAreas: 5,
|
|
57
|
+
};
|
|
58
|
+
export const TriageV2ExtensionsSchema = z
|
|
59
|
+
.object({
|
|
60
|
+
assumptions: z.array(z.string().min(1)).max(TRIAGE_V2_CAPS.assumptions).optional(),
|
|
61
|
+
examples: z
|
|
62
|
+
.array(z.object({
|
|
63
|
+
scenario: z.string().min(1),
|
|
64
|
+
expected: z.string().min(1),
|
|
65
|
+
}))
|
|
66
|
+
.max(TRIAGE_V2_CAPS.examples)
|
|
67
|
+
.optional(),
|
|
68
|
+
affectedFiles: z.array(z.string().min(1)).max(TRIAGE_V2_CAPS.affectedFiles).optional(),
|
|
69
|
+
testStrategy: z
|
|
70
|
+
.object({
|
|
71
|
+
unit: z.string().min(1).optional(),
|
|
72
|
+
integration: z.string().min(1).optional(),
|
|
73
|
+
})
|
|
74
|
+
.optional(),
|
|
75
|
+
riskAssessment: z
|
|
76
|
+
.object({
|
|
77
|
+
severity: z.enum(["low", "medium", "high"]),
|
|
78
|
+
areas: z.array(z.string().min(1)).max(TRIAGE_V2_CAPS.riskAssessmentAreas),
|
|
79
|
+
})
|
|
80
|
+
.optional(),
|
|
81
|
+
})
|
|
82
|
+
.strict();
|
|
83
|
+
/**
|
|
84
|
+
* Tolerant pre-zod normaliser. Filters non-string elements from string
|
|
85
|
+
* arrays, drops examples missing `scenario` or `expected`, truncates list
|
|
86
|
+
* fields to their caps, and trims whitespace. Returns only the v2 fields
|
|
87
|
+
* present in `raw`; absent fields are absent from the result (not set to
|
|
88
|
+
* empty arrays).
|
|
89
|
+
*
|
|
90
|
+
* Drops the entire `riskAssessment` block when the severity enum fails so
|
|
91
|
+
* the caller falls back to the v1 shape rather than partially-populated
|
|
92
|
+
* v2.
|
|
93
|
+
*/
|
|
94
|
+
export function parseTriageV2Extensions(raw) {
|
|
95
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
96
|
+
return {};
|
|
97
|
+
}
|
|
98
|
+
const r = raw;
|
|
99
|
+
const out = {};
|
|
100
|
+
// string-array fields with truncate + filter + trim.
|
|
101
|
+
const collectStringArray = (field, cap) => {
|
|
102
|
+
const value = r[field];
|
|
103
|
+
if (!Array.isArray(value))
|
|
104
|
+
return undefined;
|
|
105
|
+
const cleaned = value
|
|
106
|
+
.filter((v) => typeof v === "string")
|
|
107
|
+
.map((s) => s.trim())
|
|
108
|
+
.filter((s) => s.length > 0);
|
|
109
|
+
return cleaned.length === 0 ? undefined : cleaned.slice(0, cap);
|
|
110
|
+
};
|
|
111
|
+
const assumptions = collectStringArray("assumptions", TRIAGE_V2_CAPS.assumptions);
|
|
112
|
+
if (assumptions)
|
|
113
|
+
out.assumptions = assumptions;
|
|
114
|
+
const affectedFiles = collectStringArray("affectedFiles", TRIAGE_V2_CAPS.affectedFiles);
|
|
115
|
+
if (affectedFiles)
|
|
116
|
+
out.affectedFiles = affectedFiles;
|
|
117
|
+
// examples — drop entries missing either field.
|
|
118
|
+
if (Array.isArray(r.examples)) {
|
|
119
|
+
const cleaned = r.examples
|
|
120
|
+
.filter((e) => typeof e === "object" &&
|
|
121
|
+
e !== null &&
|
|
122
|
+
typeof e.scenario === "string" &&
|
|
123
|
+
typeof e.expected === "string" &&
|
|
124
|
+
(e.scenario.trim().length > 0) &&
|
|
125
|
+
(e.expected.trim().length > 0))
|
|
126
|
+
.map((e) => ({ scenario: e.scenario.trim(), expected: e.expected.trim() }));
|
|
127
|
+
if (cleaned.length > 0) {
|
|
128
|
+
out.examples = cleaned.slice(0, TRIAGE_V2_CAPS.examples);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// testStrategy — keep whichever sub-fields are present and string-typed.
|
|
132
|
+
if (typeof r.testStrategy === "object" && r.testStrategy !== null && !Array.isArray(r.testStrategy)) {
|
|
133
|
+
const ts = r.testStrategy;
|
|
134
|
+
const out2 = {};
|
|
135
|
+
if (typeof ts.unit === "string" && ts.unit.trim().length > 0)
|
|
136
|
+
out2.unit = ts.unit.trim();
|
|
137
|
+
if (typeof ts.integration === "string" && ts.integration.trim().length > 0) {
|
|
138
|
+
out2.integration = ts.integration.trim();
|
|
139
|
+
}
|
|
140
|
+
if (Object.keys(out2).length > 0)
|
|
141
|
+
out.testStrategy = out2;
|
|
142
|
+
}
|
|
143
|
+
// riskAssessment — strict severity enum check; drop block on miss.
|
|
144
|
+
if (typeof r.riskAssessment === "object" && r.riskAssessment !== null && !Array.isArray(r.riskAssessment)) {
|
|
145
|
+
const ra = r.riskAssessment;
|
|
146
|
+
if (ra.severity === "low" || ra.severity === "medium" || ra.severity === "high") {
|
|
147
|
+
const rawAreas = Array.isArray(ra.areas) ? ra.areas : [];
|
|
148
|
+
const cleanedAreas = rawAreas
|
|
149
|
+
.filter((v) => typeof v === "string")
|
|
150
|
+
.map((s) => s.trim())
|
|
151
|
+
.filter((s) => s.length > 0)
|
|
152
|
+
.slice(0, TRIAGE_V2_CAPS.riskAssessmentAreas);
|
|
153
|
+
out.riskAssessment = { severity: ra.severity, areas: cleanedAreas };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Final zod safety net — should always succeed at this point.
|
|
157
|
+
const parsed = TriageV2ExtensionsSchema.safeParse(out);
|
|
158
|
+
return parsed.success ? parsed.data : {};
|
|
159
|
+
}
|
|
41
160
|
//# sourceMappingURL=types.js.map
|
package/dist/pm/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pm/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC7C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,gGAAgG;IAChG,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7C,2FAA2F;IAC3F,qBAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACrE,8EAA8E;IAC9E,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD;;;;OAIG;IACH,8BAA8B,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC1D;;;;OAIG;IACH,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,kIAAkI;QAClI,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAC/C,6FAA6F;QAC7F,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC5E,4FAA4F;QAC5F,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC5E,kFAAkF;QAClF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KAC3C,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pm/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bitbucket Cloud repo provider.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Clone via OAuth access token (embed credentials in the remote URL).
|
|
6
|
+
* - Pull request creation via the Bitbucket REST API v2.
|
|
7
|
+
* - PR comment posting and merging.
|
|
8
|
+
*
|
|
9
|
+
* ## Environment / Authentication
|
|
10
|
+
*
|
|
11
|
+
* Bitbucket Cloud supports two auth methods:
|
|
12
|
+
* 1. **OAuth access token** — set `accessToken` in `BitbucketConfig`.
|
|
13
|
+
* Clone URL becomes `https://x-token-auth:<token>@bitbucket.org/workspace/repo.git`.
|
|
14
|
+
* 2. **App Password** — set `appUsername` + `appPassword` in `BitbucketConfig`.
|
|
15
|
+
* Clone URL becomes `https://<username>:<app_password>@bitbucket.org/workspace/repo.git`.
|
|
16
|
+
*
|
|
17
|
+
* At least one of the two auth methods must be provided for API calls.
|
|
18
|
+
* The `workspace` and `repoSlug` fields identify the repository.
|
|
19
|
+
*
|
|
20
|
+
* ## API Reference
|
|
21
|
+
* All API calls target `https://api.bitbucket.org/2.0/repositories/{workspace}/{repo_slug}`.
|
|
22
|
+
* See https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/pullrequests
|
|
23
|
+
*/
|
|
24
|
+
export interface BitbucketConfig {
|
|
25
|
+
/**
|
|
26
|
+
* OAuth 2.0 access token. When provided, used as Bearer token for API calls
|
|
27
|
+
* and embedded as `x-token-auth:<token>` user in clone URLs.
|
|
28
|
+
* Mutually exclusive with appUsername+appPassword (accessToken takes priority).
|
|
29
|
+
*/
|
|
30
|
+
accessToken?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Bitbucket username for App Password authentication.
|
|
33
|
+
* Required when accessToken is not provided.
|
|
34
|
+
*/
|
|
35
|
+
appUsername?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Bitbucket App Password for authentication.
|
|
38
|
+
* Required when accessToken is not provided.
|
|
39
|
+
*/
|
|
40
|
+
appPassword?: string;
|
|
41
|
+
/**
|
|
42
|
+
* Bitbucket Cloud API base URL. Defaults to "https://api.bitbucket.org/2.0".
|
|
43
|
+
* Override for Bitbucket Data Center (self-hosted) instances.
|
|
44
|
+
*/
|
|
45
|
+
apiBaseUrl?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface CreateBitbucketPROptions {
|
|
48
|
+
/** Bitbucket workspace slug, e.g. "myworkspace". */
|
|
49
|
+
workspace: string;
|
|
50
|
+
/** Repository slug, e.g. "myrepo". */
|
|
51
|
+
repoSlug: string;
|
|
52
|
+
/** Source branch to merge from. */
|
|
53
|
+
sourceBranch: string;
|
|
54
|
+
/** Target branch to merge into. */
|
|
55
|
+
targetBranch: string;
|
|
56
|
+
title: string;
|
|
57
|
+
description: string;
|
|
58
|
+
/** Whether to create as draft (Bitbucket calls them "draft" PRs since 2022). */
|
|
59
|
+
draft?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Inject Bitbucket credentials into an HTTPS clone URL so that
|
|
63
|
+
* `git clone` / `git push` works without interactive prompts.
|
|
64
|
+
*
|
|
65
|
+
* Input: https://bitbucket.org/myworkspace/myrepo.git
|
|
66
|
+
* Output (OAuth): https://x-token-auth:<token>@bitbucket.org/myworkspace/myrepo.git
|
|
67
|
+
* Output (App Password): https://username:<app_password>@bitbucket.org/myworkspace/myrepo.git
|
|
68
|
+
*
|
|
69
|
+
* If the URL already contains credentials this is a no-op.
|
|
70
|
+
*
|
|
71
|
+
* @requires BITBUCKET_ACCESS_TOKEN or BITBUCKET_APP_USERNAME + BITBUCKET_APP_PASSWORD env vars
|
|
72
|
+
* (or provide them directly via `config`).
|
|
73
|
+
*/
|
|
74
|
+
export declare function buildBitbucketAuthenticatedUrl(repoUrl: string, config: BitbucketConfig): string;
|
|
75
|
+
/**
|
|
76
|
+
* Parse a Bitbucket repo URL into workspace and repoSlug.
|
|
77
|
+
* Handles formats like:
|
|
78
|
+
* - https://bitbucket.org/workspace/repo
|
|
79
|
+
* - https://bitbucket.org/workspace/repo.git
|
|
80
|
+
* - https://bitbucket.org/workspace/my.repo (slug containing dots)
|
|
81
|
+
* - git@bitbucket.org:workspace/repo.git
|
|
82
|
+
*
|
|
83
|
+
* The slug capture group accepts dots so repos like `my.repo` parse correctly;
|
|
84
|
+
* a trailing `.git` (if present) is stripped from the captured slug.
|
|
85
|
+
*/
|
|
86
|
+
export declare function parseBitbucketUrl(url: string): {
|
|
87
|
+
workspace: string;
|
|
88
|
+
repoSlug: string;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Clone a Bitbucket repository to the given directory using the provided
|
|
92
|
+
* BitbucketConfig credentials. Credentials are injected via
|
|
93
|
+
* `buildBitbucketAuthenticatedUrl()`; the result is delegated to the generic
|
|
94
|
+
* `cloneRepo()` helper from `repo/git.ts`.
|
|
95
|
+
*
|
|
96
|
+
* @param config - Bitbucket auth config (OAuth access token or App Password).
|
|
97
|
+
* @param repoUrl - Public Bitbucket repo URL (credentials will be injected).
|
|
98
|
+
* @param destDir - Local directory to clone into.
|
|
99
|
+
*/
|
|
100
|
+
export declare function cloneBitbucketRepo(config: BitbucketConfig, repoUrl: string, destDir: string): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Push a branch to a Bitbucket remote.
|
|
103
|
+
*
|
|
104
|
+
* Note: the actual `git push` reuses the remote configured on the worktree
|
|
105
|
+
* (which already carries the auth credentials from `cloneBitbucketRepo`).
|
|
106
|
+
* The `config` and `repoUrl` parameters are accepted for symmetry with the
|
|
107
|
+
* gitlab surface — they let callers stay provider-agnostic at the type level
|
|
108
|
+
* even though they aren't required for the underlying push operation.
|
|
109
|
+
*
|
|
110
|
+
* @param config - Bitbucket auth config (unused at runtime; see note above).
|
|
111
|
+
* @param repoUrl - Public Bitbucket repo URL (unused at runtime; see note above).
|
|
112
|
+
* @param worktreePath - Local worktree directory to push from.
|
|
113
|
+
* @param branch - Branch name to push.
|
|
114
|
+
*/
|
|
115
|
+
export declare function pushBitbucketCode(config: BitbucketConfig, repoUrl: string, worktreePath: string, branch: string): Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* Create a pull request via the Bitbucket REST API v2.
|
|
118
|
+
*
|
|
119
|
+
* @requires BITBUCKET_ACCESS_TOKEN or (BITBUCKET_APP_USERNAME + BITBUCKET_APP_PASSWORD)
|
|
120
|
+
* Returns the PR web URL on success.
|
|
121
|
+
*/
|
|
122
|
+
export declare function createBitbucketPR(config: BitbucketConfig, options: CreateBitbucketPROptions): Promise<string>;
|
|
123
|
+
/**
|
|
124
|
+
* Add a comment to an existing Bitbucket pull request.
|
|
125
|
+
*
|
|
126
|
+
* @requires BITBUCKET_ACCESS_TOKEN or (BITBUCKET_APP_USERNAME + BITBUCKET_APP_PASSWORD)
|
|
127
|
+
*/
|
|
128
|
+
export declare function addBitbucketPRComment(config: BitbucketConfig, workspace: string, repoSlug: string, prId: number, body: string): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Merge a Bitbucket pull request via the REST API.
|
|
131
|
+
*
|
|
132
|
+
* @requires BITBUCKET_ACCESS_TOKEN or (BITBUCKET_APP_USERNAME + BITBUCKET_APP_PASSWORD)
|
|
133
|
+
* Returns true on success, false when the merge failed.
|
|
134
|
+
*/
|
|
135
|
+
export declare function mergeBitbucketPR(config: BitbucketConfig, workspace: string, repoSlug: string, prId: number, mergeStrategy?: "merge_commit" | "squash" | "fast_forward"): Promise<boolean>;
|
|
136
|
+
//# sourceMappingURL=bitbucket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitbucket.d.ts","sourceRoot":"","sources":["../../src/repo/bitbucket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAiCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,eAAe,GACtB,MAAM,CAkBR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,GACV;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAiBzC;AAQD;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,MAAM,CAAC,CAkCjB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,aAAa,GAAE,cAAc,GAAG,QAAQ,GAAG,cAAyB,GACnE,OAAO,CAAC,OAAO,CAAC,CAgClB"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bitbucket Cloud repo provider.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Clone via OAuth access token (embed credentials in the remote URL).
|
|
6
|
+
* - Pull request creation via the Bitbucket REST API v2.
|
|
7
|
+
* - PR comment posting and merging.
|
|
8
|
+
*
|
|
9
|
+
* ## Environment / Authentication
|
|
10
|
+
*
|
|
11
|
+
* Bitbucket Cloud supports two auth methods:
|
|
12
|
+
* 1. **OAuth access token** — set `accessToken` in `BitbucketConfig`.
|
|
13
|
+
* Clone URL becomes `https://x-token-auth:<token>@bitbucket.org/workspace/repo.git`.
|
|
14
|
+
* 2. **App Password** — set `appUsername` + `appPassword` in `BitbucketConfig`.
|
|
15
|
+
* Clone URL becomes `https://<username>:<app_password>@bitbucket.org/workspace/repo.git`.
|
|
16
|
+
*
|
|
17
|
+
* At least one of the two auth methods must be provided for API calls.
|
|
18
|
+
* The `workspace` and `repoSlug` fields identify the repository.
|
|
19
|
+
*
|
|
20
|
+
* ## API Reference
|
|
21
|
+
* All API calls target `https://api.bitbucket.org/2.0/repositories/{workspace}/{repo_slug}`.
|
|
22
|
+
* See https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/pullrequests
|
|
23
|
+
*/
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Internal helpers
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
/**
|
|
28
|
+
* Build Authorization header value from config.
|
|
29
|
+
* Returns a Bearer token string (OAuth) or Basic auth string (App Password).
|
|
30
|
+
*/
|
|
31
|
+
function buildAuthHeader(config) {
|
|
32
|
+
if (config.accessToken) {
|
|
33
|
+
return `Bearer ${config.accessToken}`;
|
|
34
|
+
}
|
|
35
|
+
if (config.appUsername && config.appPassword) {
|
|
36
|
+
const encoded = Buffer.from(`${config.appUsername}:${config.appPassword}`).toString("base64");
|
|
37
|
+
return `Basic ${encoded}`;
|
|
38
|
+
}
|
|
39
|
+
throw new Error("BitbucketConfig requires either accessToken or appUsername+appPassword");
|
|
40
|
+
}
|
|
41
|
+
function getApiBase(config) {
|
|
42
|
+
return config.apiBaseUrl ?? "https://api.bitbucket.org/2.0";
|
|
43
|
+
}
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// Public API
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
/**
|
|
48
|
+
* Inject Bitbucket credentials into an HTTPS clone URL so that
|
|
49
|
+
* `git clone` / `git push` works without interactive prompts.
|
|
50
|
+
*
|
|
51
|
+
* Input: https://bitbucket.org/myworkspace/myrepo.git
|
|
52
|
+
* Output (OAuth): https://x-token-auth:<token>@bitbucket.org/myworkspace/myrepo.git
|
|
53
|
+
* Output (App Password): https://username:<app_password>@bitbucket.org/myworkspace/myrepo.git
|
|
54
|
+
*
|
|
55
|
+
* If the URL already contains credentials this is a no-op.
|
|
56
|
+
*
|
|
57
|
+
* @requires BITBUCKET_ACCESS_TOKEN or BITBUCKET_APP_USERNAME + BITBUCKET_APP_PASSWORD env vars
|
|
58
|
+
* (or provide them directly via `config`).
|
|
59
|
+
*/
|
|
60
|
+
export function buildBitbucketAuthenticatedUrl(repoUrl, config) {
|
|
61
|
+
const parsed = new URL(repoUrl);
|
|
62
|
+
if (parsed.username) {
|
|
63
|
+
// Already has credentials — don't overwrite.
|
|
64
|
+
return repoUrl;
|
|
65
|
+
}
|
|
66
|
+
if (config.accessToken) {
|
|
67
|
+
parsed.username = "x-token-auth";
|
|
68
|
+
parsed.password = config.accessToken;
|
|
69
|
+
}
|
|
70
|
+
else if (config.appUsername && config.appPassword) {
|
|
71
|
+
parsed.username = config.appUsername;
|
|
72
|
+
parsed.password = config.appPassword;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
throw new Error("BitbucketConfig requires either accessToken or appUsername+appPassword");
|
|
76
|
+
}
|
|
77
|
+
return parsed.toString();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Parse a Bitbucket repo URL into workspace and repoSlug.
|
|
81
|
+
* Handles formats like:
|
|
82
|
+
* - https://bitbucket.org/workspace/repo
|
|
83
|
+
* - https://bitbucket.org/workspace/repo.git
|
|
84
|
+
* - https://bitbucket.org/workspace/my.repo (slug containing dots)
|
|
85
|
+
* - git@bitbucket.org:workspace/repo.git
|
|
86
|
+
*
|
|
87
|
+
* The slug capture group accepts dots so repos like `my.repo` parse correctly;
|
|
88
|
+
* a trailing `.git` (if present) is stripped from the captured slug.
|
|
89
|
+
*/
|
|
90
|
+
export function parseBitbucketUrl(url) {
|
|
91
|
+
// Slug pattern: any chars except `/`, terminated by `/`, `?`, `#`, or end-of-string.
|
|
92
|
+
// We capture trailing `.git` if present and strip it below so dot-containing
|
|
93
|
+
// slugs (e.g. `my.repo`) round-trip correctly.
|
|
94
|
+
const stripGit = (s) => (s.endsWith(".git") ? s.slice(0, -4) : s);
|
|
95
|
+
// SSH format: git@bitbucket.org:workspace/repo.git
|
|
96
|
+
const sshMatch = url.match(/git@bitbucket\.org:([^/]+)\/([^/?#]+?)(?:\.git)?(?:[/?#]|$)/);
|
|
97
|
+
if (sshMatch) {
|
|
98
|
+
return { workspace: sshMatch[1], repoSlug: stripGit(sshMatch[2]) };
|
|
99
|
+
}
|
|
100
|
+
// HTTPS format: https://bitbucket.org/workspace/repo[.git]
|
|
101
|
+
const httpMatch = url.match(/bitbucket\.org\/([^/]+)\/([^/?#]+?)(?:\.git)?(?:[/?#]|$)/);
|
|
102
|
+
if (httpMatch) {
|
|
103
|
+
return { workspace: httpMatch[1], repoSlug: stripGit(httpMatch[2]) };
|
|
104
|
+
}
|
|
105
|
+
throw new Error(`Unable to parse Bitbucket repo URL: ${url}`);
|
|
106
|
+
}
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
// Thin wrappers around the generic git helpers, mirroring repo/gitlab.ts's
|
|
109
|
+
// public surface (clone + push). Provided so callers can stay provider-aware
|
|
110
|
+
// without reaching into both `repo/git.ts` and `repo/bitbucket.ts`.
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
/**
|
|
113
|
+
* Clone a Bitbucket repository to the given directory using the provided
|
|
114
|
+
* BitbucketConfig credentials. Credentials are injected via
|
|
115
|
+
* `buildBitbucketAuthenticatedUrl()`; the result is delegated to the generic
|
|
116
|
+
* `cloneRepo()` helper from `repo/git.ts`.
|
|
117
|
+
*
|
|
118
|
+
* @param config - Bitbucket auth config (OAuth access token or App Password).
|
|
119
|
+
* @param repoUrl - Public Bitbucket repo URL (credentials will be injected).
|
|
120
|
+
* @param destDir - Local directory to clone into.
|
|
121
|
+
*/
|
|
122
|
+
export async function cloneBitbucketRepo(config, repoUrl, destDir) {
|
|
123
|
+
const { cloneRepo } = await import("./git.js");
|
|
124
|
+
const authedUrl = buildBitbucketAuthenticatedUrl(repoUrl, config);
|
|
125
|
+
await cloneRepo(authedUrl, destDir);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Push a branch to a Bitbucket remote.
|
|
129
|
+
*
|
|
130
|
+
* Note: the actual `git push` reuses the remote configured on the worktree
|
|
131
|
+
* (which already carries the auth credentials from `cloneBitbucketRepo`).
|
|
132
|
+
* The `config` and `repoUrl` parameters are accepted for symmetry with the
|
|
133
|
+
* gitlab surface — they let callers stay provider-agnostic at the type level
|
|
134
|
+
* even though they aren't required for the underlying push operation.
|
|
135
|
+
*
|
|
136
|
+
* @param config - Bitbucket auth config (unused at runtime; see note above).
|
|
137
|
+
* @param repoUrl - Public Bitbucket repo URL (unused at runtime; see note above).
|
|
138
|
+
* @param worktreePath - Local worktree directory to push from.
|
|
139
|
+
* @param branch - Branch name to push.
|
|
140
|
+
*/
|
|
141
|
+
export async function pushBitbucketCode(config, repoUrl, worktreePath, branch) {
|
|
142
|
+
// Reference the parameters so unused-vars lint stays quiet without
|
|
143
|
+
// breaking the documented signature.
|
|
144
|
+
void config;
|
|
145
|
+
void repoUrl;
|
|
146
|
+
const { pushBranch } = await import("./git.js");
|
|
147
|
+
await pushBranch(worktreePath, branch);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Create a pull request via the Bitbucket REST API v2.
|
|
151
|
+
*
|
|
152
|
+
* @requires BITBUCKET_ACCESS_TOKEN or (BITBUCKET_APP_USERNAME + BITBUCKET_APP_PASSWORD)
|
|
153
|
+
* Returns the PR web URL on success.
|
|
154
|
+
*/
|
|
155
|
+
export async function createBitbucketPR(config, options) {
|
|
156
|
+
const { workspace, repoSlug, sourceBranch, targetBranch, title, description, draft } = options;
|
|
157
|
+
const apiBase = getApiBase(config);
|
|
158
|
+
const apiUrl = `${apiBase}/repositories/${encodeURIComponent(workspace)}/${encodeURIComponent(repoSlug)}/pullrequests`;
|
|
159
|
+
const body = {
|
|
160
|
+
title,
|
|
161
|
+
description,
|
|
162
|
+
source: { branch: { name: sourceBranch } },
|
|
163
|
+
destination: { branch: { name: targetBranch } },
|
|
164
|
+
close_source_branch: true,
|
|
165
|
+
};
|
|
166
|
+
if (draft) {
|
|
167
|
+
body.draft = true;
|
|
168
|
+
}
|
|
169
|
+
const response = await fetch(apiUrl, {
|
|
170
|
+
method: "POST",
|
|
171
|
+
headers: {
|
|
172
|
+
"Content-Type": "application/json",
|
|
173
|
+
Authorization: buildAuthHeader(config),
|
|
174
|
+
},
|
|
175
|
+
body: JSON.stringify(body),
|
|
176
|
+
});
|
|
177
|
+
if (!response.ok) {
|
|
178
|
+
const text = await response.text().catch(() => "<no body>");
|
|
179
|
+
throw new Error(`Bitbucket API error ${response.status} creating PR: ${text}`);
|
|
180
|
+
}
|
|
181
|
+
const data = (await response.json());
|
|
182
|
+
return data.links.html.href;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Add a comment to an existing Bitbucket pull request.
|
|
186
|
+
*
|
|
187
|
+
* @requires BITBUCKET_ACCESS_TOKEN or (BITBUCKET_APP_USERNAME + BITBUCKET_APP_PASSWORD)
|
|
188
|
+
*/
|
|
189
|
+
export async function addBitbucketPRComment(config, workspace, repoSlug, prId, body) {
|
|
190
|
+
const apiBase = getApiBase(config);
|
|
191
|
+
const apiUrl = `${apiBase}/repositories/${encodeURIComponent(workspace)}/${encodeURIComponent(repoSlug)}/pullrequests/${prId}/comments`;
|
|
192
|
+
const response = await fetch(apiUrl, {
|
|
193
|
+
method: "POST",
|
|
194
|
+
headers: {
|
|
195
|
+
"Content-Type": "application/json",
|
|
196
|
+
Authorization: buildAuthHeader(config),
|
|
197
|
+
},
|
|
198
|
+
body: JSON.stringify({ content: { raw: body } }),
|
|
199
|
+
});
|
|
200
|
+
if (!response.ok) {
|
|
201
|
+
const text = await response.text().catch(() => "<no body>");
|
|
202
|
+
throw new Error(`Bitbucket API error ${response.status} adding PR comment: ${text}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Merge a Bitbucket pull request via the REST API.
|
|
207
|
+
*
|
|
208
|
+
* @requires BITBUCKET_ACCESS_TOKEN or (BITBUCKET_APP_USERNAME + BITBUCKET_APP_PASSWORD)
|
|
209
|
+
* Returns true on success, false when the merge failed.
|
|
210
|
+
*/
|
|
211
|
+
export async function mergeBitbucketPR(config, workspace, repoSlug, prId, mergeStrategy = "squash") {
|
|
212
|
+
const apiBase = getApiBase(config);
|
|
213
|
+
const apiUrl = `${apiBase}/repositories/${encodeURIComponent(workspace)}/${encodeURIComponent(repoSlug)}/pullrequests/${prId}/merge`;
|
|
214
|
+
try {
|
|
215
|
+
const response = await fetch(apiUrl, {
|
|
216
|
+
method: "POST",
|
|
217
|
+
headers: {
|
|
218
|
+
"Content-Type": "application/json",
|
|
219
|
+
Authorization: buildAuthHeader(config),
|
|
220
|
+
},
|
|
221
|
+
body: JSON.stringify({ merge_strategy: mergeStrategy }),
|
|
222
|
+
});
|
|
223
|
+
if (!response.ok) {
|
|
224
|
+
const text = await response.text().catch(() => "<no body>");
|
|
225
|
+
const { createLogger } = await import("../logger.js");
|
|
226
|
+
createLogger({ module: "repo/bitbucket" }).error({ status: response.status, body: text }, "Bitbucket merge API error");
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
const { createLogger } = await import("../logger.js");
|
|
233
|
+
createLogger({ module: "repo/bitbucket" }).error({ err }, "Bitbucket merge request failed");
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=bitbucket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitbucket.js","sourceRoot":"","sources":["../../src/repo/bitbucket.ts"],"names":[],"mappings":"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"}
|
package/dist/repo/gitlab.d.ts
CHANGED
|
@@ -44,6 +44,17 @@ export declare function buildAuthenticatedUrl(repoUrl: string, config: GitLabCon
|
|
|
44
44
|
* Returns the MR web URL on success.
|
|
45
45
|
*/
|
|
46
46
|
export declare function createMR(config: GitLabConfig, options: CreateMROptions): Promise<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Trigger merge when all CI pipelines succeed (`merge_when_pipeline_succeeds`).
|
|
49
|
+
*
|
|
50
|
+
* Equivalent to clicking "Merge when pipeline succeeds" in the GitLab UI.
|
|
51
|
+
* Returns true when the API accepted the request, false on failure.
|
|
52
|
+
*
|
|
53
|
+
* @param config - GitLab authentication config (token + optional host).
|
|
54
|
+
* @param projectPath - GitLab namespace+project path, e.g. "myorg/myrepo".
|
|
55
|
+
* @param mrIid - The merge request IID (internal ID shown in the URL, e.g. 42).
|
|
56
|
+
*/
|
|
57
|
+
export declare function mergeMRWhenPipelineSucceeds(config: GitLabConfig, projectPath: string, mrIid: number): Promise<boolean>;
|
|
47
58
|
/**
|
|
48
59
|
* Add a comment (note) to an existing merge request.
|
|
49
60
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../src/repo/gitlab.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,YAAY;IAC3B,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,SAAS,SAAW,GACnB,MAAM,CASR;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAyDjB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
|
1
|
+
{"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../src/repo/gitlab.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,YAAY;IAC3B,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,SAAS,SAAW,GACnB,MAAM,CASR;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAyDjB;AAED;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC,CAiClB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
package/dist/repo/gitlab.js
CHANGED
|
@@ -75,6 +75,43 @@ export async function createMR(config, options) {
|
|
|
75
75
|
const data = (await response.json());
|
|
76
76
|
return data.web_url;
|
|
77
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Trigger merge when all CI pipelines succeed (`merge_when_pipeline_succeeds`).
|
|
80
|
+
*
|
|
81
|
+
* Equivalent to clicking "Merge when pipeline succeeds" in the GitLab UI.
|
|
82
|
+
* Returns true when the API accepted the request, false on failure.
|
|
83
|
+
*
|
|
84
|
+
* @param config - GitLab authentication config (token + optional host).
|
|
85
|
+
* @param projectPath - GitLab namespace+project path, e.g. "myorg/myrepo".
|
|
86
|
+
* @param mrIid - The merge request IID (internal ID shown in the URL, e.g. 42).
|
|
87
|
+
*/
|
|
88
|
+
export async function mergeMRWhenPipelineSucceeds(config, projectPath, mrIid) {
|
|
89
|
+
const host = config.host ?? "https://gitlab.com";
|
|
90
|
+
const encodedPath = encodeURIComponent(projectPath);
|
|
91
|
+
const apiUrl = `${host}/api/v4/projects/${encodedPath}/merge_requests/${mrIid}/merge`;
|
|
92
|
+
try {
|
|
93
|
+
const response = await fetch(apiUrl, {
|
|
94
|
+
method: "PUT",
|
|
95
|
+
headers: {
|
|
96
|
+
"Content-Type": "application/json",
|
|
97
|
+
"PRIVATE-TOKEN": config.token,
|
|
98
|
+
},
|
|
99
|
+
body: JSON.stringify({ merge_when_pipeline_succeeds: true }),
|
|
100
|
+
});
|
|
101
|
+
if (!response.ok) {
|
|
102
|
+
const text = await response.text().catch(() => "<no body>");
|
|
103
|
+
const { createLogger } = await import("../logger.js");
|
|
104
|
+
createLogger({ module: "repo/gitlab" }).error({ status: response.status, body: text, mrIid }, "GitLab merge_when_pipeline_succeeds API error");
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
const { createLogger } = await import("../logger.js");
|
|
111
|
+
createLogger({ module: "repo/gitlab" }).error({ err, mrIid }, "GitLab mergeMRWhenPipelineSucceeds request failed");
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
78
115
|
/**
|
|
79
116
|
* Add a comment (note) to an existing merge request.
|
|
80
117
|
*/
|
package/dist/repo/gitlab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/repo/gitlab.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/repo/gitlab.ts"],"names":[],"mappings":"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"}
|
package/dist/repo/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export { gitExec, gitExecSafe, gitExecRaw, cloneRepo, fetchLatest, createWorktree, createWorktreeFromRemote, deleteWorktree, pushBranch, pushBranchForce, autoCommitChanges, rebaseBranch, abortRebase, createPRViaCli, mergePRViaCli, getDiffLineCount, checkDuplicateBranch, branchName, getCurrentBranch, verifyBranchMatch, installPrePushHook, cleanupWorktrees, } from "./git.js";
|
|
2
2
|
export { createGitHubClient, createPR, addPRComment, } from "./github.js";
|
|
3
3
|
export type { GitHubConfig, CreatePROptions } from "./github.js";
|
|
4
|
-
export { buildAuthenticatedUrl, createMR, addMRComment, } from "./gitlab.js";
|
|
4
|
+
export { buildAuthenticatedUrl, createMR, addMRComment, mergeMRWhenPipelineSucceeds, } from "./gitlab.js";
|
|
5
5
|
export type { GitLabConfig, CreateMROptions } from "./gitlab.js";
|
|
6
|
+
export { buildBitbucketAuthenticatedUrl, createBitbucketPR, addBitbucketPRComment, mergeBitbucketPR, parseBitbucketUrl, cloneBitbucketRepo, pushBitbucketCode, } from "./bitbucket.js";
|
|
7
|
+
export type { BitbucketConfig, CreateBitbucketPROptions } from "./bitbucket.js";
|
|
6
8
|
export { resolveRepo, parseRepoUrl, parseGitLabUrl } from "./config.js";
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/repo/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,YAAY,EACZ,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EACL,8BAA8B,EAC9B,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|