@forge-glance/sdk 0.2.0 → 0.2.2
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/GitHubProvider.js +6 -2
- package/dist/GitLabProvider.d.ts +1 -1
- package/dist/GitLabProvider.js +9 -1
- package/dist/index.js +15 -3
- package/dist/providers.js +15 -3
- package/dist/types.d.ts +8 -0
- package/package.json +1 -1
- package/src/GitHubProvider.ts +13 -4
- package/src/GitLabProvider.ts +13 -1
- package/src/types.ts +11 -0
package/dist/GitHubProvider.js
CHANGED
|
@@ -507,7 +507,7 @@ class GitHubProvider {
|
|
|
507
507
|
changesRequested++;
|
|
508
508
|
}
|
|
509
509
|
}
|
|
510
|
-
const approvalsLeft = changesRequested;
|
|
510
|
+
const approvalsLeft = changesRequested > 0 ? 1 : 0;
|
|
511
511
|
const diffStats = pr.additions !== undefined ? {
|
|
512
512
|
additions: pr.additions,
|
|
513
513
|
deletions: pr.deletions ?? 0,
|
|
@@ -540,7 +540,11 @@ class GitHubProvider {
|
|
|
540
540
|
approved: approvedBy.length > 0 && changesRequested === 0,
|
|
541
541
|
approvedBy,
|
|
542
542
|
diffStats,
|
|
543
|
-
detailedMergeStatus: null
|
|
543
|
+
detailedMergeStatus: pr.mergeable_state ?? null,
|
|
544
|
+
autoMergeEnabled: pr.auto_merge != null,
|
|
545
|
+
autoMergeStrategy: pr.auto_merge?.merge_method ?? null,
|
|
546
|
+
mergeUser: pr.auto_merge ? toUserRef(pr.auto_merge.enabled_by) : null,
|
|
547
|
+
mergeAfter: null
|
|
544
548
|
};
|
|
545
549
|
}
|
|
546
550
|
}
|
package/dist/GitLabProvider.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { type ForgeLogger } from './logger.ts';
|
|
|
7
7
|
* e.g. "gitlab:42" → 42
|
|
8
8
|
*/
|
|
9
9
|
export declare function parseGitLabRepoId(repositoryId: string): number;
|
|
10
|
-
export declare const MR_DASHBOARD_FRAGMENT = "\n fragment MRDashboardFields on MergeRequest {\n id iid projectId title description state draft\n sourceBranch targetBranch webUrl\n diffHeadSha\n updatedAt createdAt\n conflicts\n detailedMergeStatus\n approved\n diffStatsSummary { additions deletions fileCount }\n author { id username name avatarUrl }\n assignees(first: 20) { nodes { id username name avatarUrl } }\n reviewers(first: 20) { nodes { id username name avatarUrl } }\n approvedBy(first: 20) { nodes { id username name avatarUrl } }\n approvalsLeft\n resolvableDiscussionsCount\n resolvedDiscussionsCount\n headPipeline {\n id iid status\n createdAt\n path\n stages(first: 20) { nodes {\n name\n jobs(first: 50) { nodes {\n id name status\n allowFailure\n webPath\n stage { name }\n }}\n }}\n }\n }\n";
|
|
10
|
+
export declare const MR_DASHBOARD_FRAGMENT = "\n fragment MRDashboardFields on MergeRequest {\n id iid projectId title description state draft\n sourceBranch targetBranch webUrl\n diffHeadSha\n updatedAt createdAt\n conflicts\n detailedMergeStatus\n approved\n diffStatsSummary { additions deletions fileCount }\n author { id username name avatarUrl }\n assignees(first: 20) { nodes { id username name avatarUrl } }\n reviewers(first: 20) { nodes { id username name avatarUrl } }\n approvedBy(first: 20) { nodes { id username name avatarUrl } }\n approvalsLeft\n resolvableDiscussionsCount\n resolvedDiscussionsCount\n autoMergeEnabled\n autoMergeStrategy\n mergeUser { id username name avatarUrl }\n mergeAfter\n headPipeline {\n id iid status\n createdAt\n path\n stages(first: 20) { nodes {\n name\n jobs(first: 50) { nodes {\n id name status\n allowFailure\n webPath\n stage { name }\n }}\n }}\n }\n }\n";
|
|
11
11
|
export declare class GitLabProvider implements GitProvider {
|
|
12
12
|
readonly providerName: "gitlab";
|
|
13
13
|
readonly baseURL: string;
|
package/dist/GitLabProvider.js
CHANGED
|
@@ -92,6 +92,10 @@ var MR_DASHBOARD_FRAGMENT = `
|
|
|
92
92
|
approvalsLeft
|
|
93
93
|
resolvableDiscussionsCount
|
|
94
94
|
resolvedDiscussionsCount
|
|
95
|
+
autoMergeEnabled
|
|
96
|
+
autoMergeStrategy
|
|
97
|
+
mergeUser { id username name avatarUrl }
|
|
98
|
+
mergeAfter
|
|
95
99
|
headPipeline {
|
|
96
100
|
id iid status
|
|
97
101
|
createdAt
|
|
@@ -212,7 +216,11 @@ function toMR(gql, role, baseURL) {
|
|
|
212
216
|
approved: gql.approved ?? false,
|
|
213
217
|
approvedBy: gql.approvedBy.nodes.map(toUserRef),
|
|
214
218
|
diffStats,
|
|
215
|
-
detailedMergeStatus: gql.detailedMergeStatus ?? null
|
|
219
|
+
detailedMergeStatus: gql.detailedMergeStatus ?? null,
|
|
220
|
+
autoMergeEnabled: gql.autoMergeEnabled ?? false,
|
|
221
|
+
autoMergeStrategy: gql.autoMergeStrategy ?? null,
|
|
222
|
+
mergeUser: gql.mergeUser ? toUserRef(gql.mergeUser) : null,
|
|
223
|
+
mergeAfter: gql.mergeAfter ?? null
|
|
216
224
|
};
|
|
217
225
|
}
|
|
218
226
|
var MR_DETAIL_QUERY = `
|
package/dist/index.js
CHANGED
|
@@ -101,6 +101,10 @@ var MR_DASHBOARD_FRAGMENT = `
|
|
|
101
101
|
approvalsLeft
|
|
102
102
|
resolvableDiscussionsCount
|
|
103
103
|
resolvedDiscussionsCount
|
|
104
|
+
autoMergeEnabled
|
|
105
|
+
autoMergeStrategy
|
|
106
|
+
mergeUser { id username name avatarUrl }
|
|
107
|
+
mergeAfter
|
|
104
108
|
headPipeline {
|
|
105
109
|
id iid status
|
|
106
110
|
createdAt
|
|
@@ -221,7 +225,11 @@ function toMR(gql, role, baseURL) {
|
|
|
221
225
|
approved: gql.approved ?? false,
|
|
222
226
|
approvedBy: gql.approvedBy.nodes.map(toUserRef),
|
|
223
227
|
diffStats,
|
|
224
|
-
detailedMergeStatus: gql.detailedMergeStatus ?? null
|
|
228
|
+
detailedMergeStatus: gql.detailedMergeStatus ?? null,
|
|
229
|
+
autoMergeEnabled: gql.autoMergeEnabled ?? false,
|
|
230
|
+
autoMergeStrategy: gql.autoMergeStrategy ?? null,
|
|
231
|
+
mergeUser: gql.mergeUser ? toUserRef(gql.mergeUser) : null,
|
|
232
|
+
mergeAfter: gql.mergeAfter ?? null
|
|
225
233
|
};
|
|
226
234
|
}
|
|
227
235
|
var MR_DETAIL_QUERY = `
|
|
@@ -1147,7 +1155,7 @@ class GitHubProvider {
|
|
|
1147
1155
|
changesRequested++;
|
|
1148
1156
|
}
|
|
1149
1157
|
}
|
|
1150
|
-
const approvalsLeft = changesRequested;
|
|
1158
|
+
const approvalsLeft = changesRequested > 0 ? 1 : 0;
|
|
1151
1159
|
const diffStats = pr.additions !== undefined ? {
|
|
1152
1160
|
additions: pr.additions,
|
|
1153
1161
|
deletions: pr.deletions ?? 0,
|
|
@@ -1180,7 +1188,11 @@ class GitHubProvider {
|
|
|
1180
1188
|
approved: approvedBy.length > 0 && changesRequested === 0,
|
|
1181
1189
|
approvedBy,
|
|
1182
1190
|
diffStats,
|
|
1183
|
-
detailedMergeStatus: null
|
|
1191
|
+
detailedMergeStatus: pr.mergeable_state ?? null,
|
|
1192
|
+
autoMergeEnabled: pr.auto_merge != null,
|
|
1193
|
+
autoMergeStrategy: pr.auto_merge?.merge_method ?? null,
|
|
1194
|
+
mergeUser: pr.auto_merge ? toUserRef2(pr.auto_merge.enabled_by) : null,
|
|
1195
|
+
mergeAfter: null
|
|
1184
1196
|
};
|
|
1185
1197
|
}
|
|
1186
1198
|
}
|
package/dist/providers.js
CHANGED
|
@@ -92,6 +92,10 @@ var MR_DASHBOARD_FRAGMENT = `
|
|
|
92
92
|
approvalsLeft
|
|
93
93
|
resolvableDiscussionsCount
|
|
94
94
|
resolvedDiscussionsCount
|
|
95
|
+
autoMergeEnabled
|
|
96
|
+
autoMergeStrategy
|
|
97
|
+
mergeUser { id username name avatarUrl }
|
|
98
|
+
mergeAfter
|
|
95
99
|
headPipeline {
|
|
96
100
|
id iid status
|
|
97
101
|
createdAt
|
|
@@ -212,7 +216,11 @@ function toMR(gql, role, baseURL) {
|
|
|
212
216
|
approved: gql.approved ?? false,
|
|
213
217
|
approvedBy: gql.approvedBy.nodes.map(toUserRef),
|
|
214
218
|
diffStats,
|
|
215
|
-
detailedMergeStatus: gql.detailedMergeStatus ?? null
|
|
219
|
+
detailedMergeStatus: gql.detailedMergeStatus ?? null,
|
|
220
|
+
autoMergeEnabled: gql.autoMergeEnabled ?? false,
|
|
221
|
+
autoMergeStrategy: gql.autoMergeStrategy ?? null,
|
|
222
|
+
mergeUser: gql.mergeUser ? toUserRef(gql.mergeUser) : null,
|
|
223
|
+
mergeAfter: gql.mergeAfter ?? null
|
|
216
224
|
};
|
|
217
225
|
}
|
|
218
226
|
var MR_DETAIL_QUERY = `
|
|
@@ -1138,7 +1146,7 @@ class GitHubProvider {
|
|
|
1138
1146
|
changesRequested++;
|
|
1139
1147
|
}
|
|
1140
1148
|
}
|
|
1141
|
-
const approvalsLeft = changesRequested;
|
|
1149
|
+
const approvalsLeft = changesRequested > 0 ? 1 : 0;
|
|
1142
1150
|
const diffStats = pr.additions !== undefined ? {
|
|
1143
1151
|
additions: pr.additions,
|
|
1144
1152
|
deletions: pr.deletions ?? 0,
|
|
@@ -1171,7 +1179,11 @@ class GitHubProvider {
|
|
|
1171
1179
|
approved: approvedBy.length > 0 && changesRequested === 0,
|
|
1172
1180
|
approvedBy,
|
|
1173
1181
|
diffStats,
|
|
1174
|
-
detailedMergeStatus: null
|
|
1182
|
+
detailedMergeStatus: pr.mergeable_state ?? null,
|
|
1183
|
+
autoMergeEnabled: pr.auto_merge != null,
|
|
1184
|
+
autoMergeStrategy: pr.auto_merge?.merge_method ?? null,
|
|
1185
|
+
mergeUser: pr.auto_merge ? toUserRef2(pr.auto_merge.enabled_by) : null,
|
|
1186
|
+
mergeAfter: null
|
|
1175
1187
|
};
|
|
1176
1188
|
}
|
|
1177
1189
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -75,6 +75,14 @@ export interface PullRequest {
|
|
|
75
75
|
* "not_approved", "discussions_not_resolved". Null for non-GitLab providers.
|
|
76
76
|
*/
|
|
77
77
|
detailedMergeStatus: string | null;
|
|
78
|
+
/** Whether auto-merge (merge when pipeline succeeds) is currently enabled. */
|
|
79
|
+
autoMergeEnabled: boolean;
|
|
80
|
+
/** The merge strategy that will be used when auto-merge fires, e.g. "merge", "squash", "rebase_merge". */
|
|
81
|
+
autoMergeStrategy: string | null;
|
|
82
|
+
/** The user who merged or enabled auto-merge. */
|
|
83
|
+
mergeUser: UserRef | null;
|
|
84
|
+
/** ISO timestamp after which the MR is eligible to merge (scheduled merge). */
|
|
85
|
+
mergeAfter: string | null;
|
|
78
86
|
}
|
|
79
87
|
/** Input for creating a new merge request / pull request. */
|
|
80
88
|
export interface CreatePullRequestInput {
|
package/package.json
CHANGED
package/src/GitHubProvider.ts
CHANGED
|
@@ -80,6 +80,10 @@ interface GHPullRequest {
|
|
|
80
80
|
changed_files?: number;
|
|
81
81
|
mergeable?: boolean | null;
|
|
82
82
|
mergeable_state?: string; // "dirty" | "clean" | "unstable" | "blocked" | ...
|
|
83
|
+
auto_merge?: {
|
|
84
|
+
enabled_by: GHUser;
|
|
85
|
+
merge_method: string; // "merge" | "squash" | "rebase"
|
|
86
|
+
} | null;
|
|
83
87
|
}
|
|
84
88
|
|
|
85
89
|
interface GHReview {
|
|
@@ -972,9 +976,10 @@ export class GitHubProvider implements GitProvider {
|
|
|
972
976
|
}
|
|
973
977
|
}
|
|
974
978
|
|
|
975
|
-
// GitHub doesn't
|
|
976
|
-
//
|
|
977
|
-
|
|
979
|
+
// GitHub doesn't expose required approval count via REST without the
|
|
980
|
+
// branch protection API. We use changesRequested as a blocking signal:
|
|
981
|
+
// 0 = not blocked by reviews, 1 = at least one CHANGES_REQUESTED review.
|
|
982
|
+
const approvalsLeft = changesRequested > 0 ? 1 : 0;
|
|
978
983
|
|
|
979
984
|
const diffStats: DiffStats | null =
|
|
980
985
|
pr.additions !== undefined
|
|
@@ -1015,7 +1020,11 @@ export class GitHubProvider implements GitProvider {
|
|
|
1015
1020
|
approved: approvedBy.length > 0 && changesRequested === 0,
|
|
1016
1021
|
approvedBy,
|
|
1017
1022
|
diffStats,
|
|
1018
|
-
detailedMergeStatus: null //
|
|
1023
|
+
detailedMergeStatus: pr.mergeable_state ?? null, // "clean"|"dirty"|"blocked"|"unstable"|"behind"|"draft"
|
|
1024
|
+
autoMergeEnabled: pr.auto_merge != null,
|
|
1025
|
+
autoMergeStrategy: pr.auto_merge?.merge_method ?? null,
|
|
1026
|
+
mergeUser: pr.auto_merge ? toUserRef(pr.auto_merge.enabled_by) : null,
|
|
1027
|
+
mergeAfter: null // GitHub doesn't have scheduled merge
|
|
1019
1028
|
};
|
|
1020
1029
|
}
|
|
1021
1030
|
}
|
package/src/GitLabProvider.ts
CHANGED
|
@@ -50,6 +50,10 @@ export const MR_DASHBOARD_FRAGMENT = `
|
|
|
50
50
|
approvalsLeft
|
|
51
51
|
resolvableDiscussionsCount
|
|
52
52
|
resolvedDiscussionsCount
|
|
53
|
+
autoMergeEnabled
|
|
54
|
+
autoMergeStrategy
|
|
55
|
+
mergeUser { id username name avatarUrl }
|
|
56
|
+
mergeAfter
|
|
53
57
|
headPipeline {
|
|
54
58
|
id iid status
|
|
55
59
|
createdAt
|
|
@@ -164,6 +168,10 @@ interface GQLMR {
|
|
|
164
168
|
approvalsLeft: number | null;
|
|
165
169
|
resolvableDiscussionsCount: number | null;
|
|
166
170
|
resolvedDiscussionsCount: number | null;
|
|
171
|
+
autoMergeEnabled: boolean;
|
|
172
|
+
autoMergeStrategy: string | null;
|
|
173
|
+
mergeUser: GQLUser | null;
|
|
174
|
+
mergeAfter: string | null;
|
|
167
175
|
headPipeline: GQLPipeline | null;
|
|
168
176
|
}
|
|
169
177
|
|
|
@@ -276,7 +284,11 @@ function toMR(gql: GQLMR, role: string, baseURL: string): PullRequest {
|
|
|
276
284
|
approved: gql.approved ?? false,
|
|
277
285
|
approvedBy: gql.approvedBy.nodes.map(toUserRef),
|
|
278
286
|
diffStats,
|
|
279
|
-
detailedMergeStatus: gql.detailedMergeStatus ?? null
|
|
287
|
+
detailedMergeStatus: gql.detailedMergeStatus ?? null,
|
|
288
|
+
autoMergeEnabled: gql.autoMergeEnabled ?? false,
|
|
289
|
+
autoMergeStrategy: gql.autoMergeStrategy ?? null,
|
|
290
|
+
mergeUser: gql.mergeUser ? toUserRef(gql.mergeUser) : null,
|
|
291
|
+
mergeAfter: gql.mergeAfter ?? null
|
|
280
292
|
};
|
|
281
293
|
}
|
|
282
294
|
|
package/src/types.ts
CHANGED
|
@@ -82,6 +82,17 @@ export interface PullRequest {
|
|
|
82
82
|
* "not_approved", "discussions_not_resolved". Null for non-GitLab providers.
|
|
83
83
|
*/
|
|
84
84
|
detailedMergeStatus: string | null;
|
|
85
|
+
|
|
86
|
+
// ── Auto-merge status ────────────────────────────────────────────────
|
|
87
|
+
|
|
88
|
+
/** Whether auto-merge (merge when pipeline succeeds) is currently enabled. */
|
|
89
|
+
autoMergeEnabled: boolean;
|
|
90
|
+
/** The merge strategy that will be used when auto-merge fires, e.g. "merge", "squash", "rebase_merge". */
|
|
91
|
+
autoMergeStrategy: string | null;
|
|
92
|
+
/** The user who merged or enabled auto-merge. */
|
|
93
|
+
mergeUser: UserRef | null;
|
|
94
|
+
/** ISO timestamp after which the MR is eligible to merge (scheduled merge). */
|
|
95
|
+
mergeAfter: string | null;
|
|
85
96
|
}
|
|
86
97
|
|
|
87
98
|
// ── MR/PR mutation inputs ─────────────────────────────────────────────────────
|