dev.knotless.getMergeStatus
Schema Diff
+39 -1
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 14 non-breaking changes.
Breaking Changes (1)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.getMergeStatus#note", src: "dev.knotless.getMergeStatus#note", tgt: "dev.knotless.getMergeStatus#note.text", kind: "prop", name: Some("text") }
Non-Breaking Changes (14)
- AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus#note" }
- AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus#note.text" }
- AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.codeOwnersWarnings" }
- AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.codeOwnersWarnings:items" }
- AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviews" }
- AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviewsMissing" }
- AddedVertex AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviewsMissing:items" }
- AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.codeOwnersWarnings", kind: "prop", name: Some("codeOwnersWarnings") }
- AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.reviews", kind: "prop", name: Some("reviews") }
- AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.reviewsMissing", kind: "prop", name: Some("reviewsMissing") }
- AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output.codeOwnersWarnings", tgt: "dev.knotless.getMergeStatus:output.codeOwnersWarnings:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output.codeOwnersWarnings:items", tgt: "dev.knotless.getMergeStatus#note", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output.reviewsMissing", tgt: "dev.knotless.getMergeStatus:output.reviewsMissing:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "dev.knotless.getMergeStatus:output.reviewsMissing:items", tgt: "dev.knotless.getMergeStatus#note", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "dev.knotless.getMergeStatus#note" }AddedVertex { vertex_id: "dev.knotless.getMergeStatus#note.text" }AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.codeOwnersWarnings" }AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.codeOwnersWarnings:items" }AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviews" }AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviewsMissing" }AddedVertex { vertex_id: "dev.knotless.getMergeStatus:output.reviewsMissing:items" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.getMergeStatus#note", src: "dev.knotless.getMergeStatus#note", tgt: "dev.knotless.getMergeStatus#note.text", kind: "prop", name: Some("text") }
- Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.codeOwnersWarnings", kind: "prop", name: Some("codeOwnersWarnings") }
- Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.reviews", kind: "prop", name: Some("reviews") }
- Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output", tgt: "dev.knotless.getMergeStatus:output.reviewsMissing", kind: "prop", name: Some("reviewsMissing") }
- Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output.codeOwnersWarnings", tgt: "dev.knotless.getMergeStatus:output.codeOwnersWarnings:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output.codeOwnersWarnings:items", tgt: "dev.knotless.getMergeStatus#note", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output.reviewsMissing", tgt: "dev.knotless.getMergeStatus:output.reviewsMissing:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "dev.knotless.getMergeStatus:output.reviewsMissing:items", tgt: "dev.knotless.getMergeStatus#note", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"conflict": {
5
5
"description": "A file that both sides changed so that they do not merge.",
6
6
"properties": {
7
7
"path": {
8
8
"description": "From the repository's root.",
9
9
"type": "string"
10
10
}
11
11
},
12
12
"required": [
13
13
"path"
14
14
],
15
15
"type": "object"
16
16
},
17
17
"main": {
18
18
"description": "Whether an open pull can merge now, decided as `knotless merge` decides it, without merging: whether its head merges with its target branch as it is now, and, in a repository that names runners, whether each workflow that runs on it passed there. And what the account asking may do to it: merge it, queue it, retarget it or run its checks again. Requires the session cookie the pages' login sets, or a service token from the caller's PDS, audience the appview's DID, for this method.",
19
19
"errors": [
20
20
{
21
21
"description": "No such repository.",
22
22
"name": "NotFound"
23
23
},
24
24
{
25
25
"description": "No one asked: log in to the pages first.",
26
26
"name": "AuthenticationRequired"
27
27
}
28
28
],
29
29
"output": {
30
30
"encoding": "application/json",
31
31
"schema": {
32
32
"properties": {
33
33
"base": {
34
34
"description": "The commit its target branch is at, in hex.",
35
35
"type": "string"
36
36
},
37
37
"checks": {
38
38
"description": "Where its checks stand at its head merged with its base: pending for those not run there; none when the repository names no runners, so a merge waits for none, or when it conflicts.",
39
39
"knownValues": [
40
40
"passed",
41
41
"failed",
42
42
"running",
43
43
"pending",
44
44
"none"
45
45
],
46
46
"type": "string"
47
47
},
48
+
"codeOwnersWarnings": {
49
+
"description": "The lines of the target branch's CODEOWNERS file that were skipped, and why: one naming a team, say.",
50
+
"items": {
51
+
"ref": "#note",
52
+
"type": "ref"
53
+
},
54
+
"type": "array"
55
+
},
48
56
"conflicts": {
49
57
"description": "The files that conflict.",
50
58
"items": {
51
59
"ref": "#conflict",
52
60
"type": "ref"
53
61
},
54
62
"type": "array"
55
63
},
56
64
"deletes": {
57
65
"description": "Its head branch, which merging deletes unless asked to keep it.",
58
66
"type": "string"
59
67
},
60
68
"head": {
61
69
"description": "The commit its head branch is at, in hex.",
62
70
"type": "string"
63
71
},
64
72
"may": {
65
73
"ref": "#permissions",
66
74
"type": "ref"
67
75
},
68
76
"method": {
69
77
"description": "How it would merge: a fast-forward when the base has not moved since its head branched off, else a merge commit; into a branch protected as linear, one squashed commit.",
70
78
"knownValues": [
71
79
"fastForward",
72
80
"merge",
73
81
"squash"
74
82
],
75
83
"type": "string"
76
84
},
77
85
"queueBlocked": {
78
86
"description": "Why the merge queue would not land it yet, when this server knows: undelegated when no runner the repository names may push, so its queue lands through this server's gateway, and the owner has not delegated writes to it.",
79
87
"knownValues": [
80
88
"undelegated"
81
89
],
82
90
"type": "string"
83
91
},
84
92
"queueOnly": {
85
93
"description": "Its target branch takes pulls only through the merge queue: queue it with dev.knotless.queuePull, as dev.knotless.mergePull refuses it. Absent is false.",
86
94
"type": "boolean"
87
95
},
88
96
"reason": {
89
97
"description": "Why it cannot merge now, in the words a merge would refuse it with.",
90
98
"type": "string"
91
99
},
100
+
"reviews": {
101
+
"description": "Where its reviews stand against what its target branch's rule asks of them (dev.knotless.repo#reviews): none when the rule asks nothing of them, or when it conflicts.",
102
+
"knownValues": [
103
+
"passed",
104
+
"blocked",
105
+
"none"
106
+
],
107
+
"type": "string"
108
+
},
109
+
"reviewsMissing": {
110
+
"description": "What its reviews lack, each as `knotless merge --check` lists it: `reviews 1 of 2`, `owners of web/: @alice or @bob`, `changes asked by @carol`.",
111
+
"items": {
112
+
"ref": "#note",
113
+
"type": "ref"
114
+
},
115
+
"type": "array"
116
+
},
92
117
"state": {
93
-
"description": "clean when it can merge now; conflicting when its head does not merge with its base; blocked when its checks have not all passed.",
118
+
"description": "clean when it can merge now; conflicting when its head does not merge with its base; blocked when its checks have not all passed, or it is not reviewed as its target branch's rule asks.",
94
119
"knownValues": [
95
120
"clean",
96
121
"conflicting",
97
122
"blocked"
98
123
],
99
124
"type": "string"
100
125
}
101
126
},
102
127
"required": [
103
128
"state",
104
129
"checks",
105
130
"method",
106
131
"base",
107
132
"head",
108
133
"may"
109
134
],
110
135
"type": "object"
111
136
}
112
137
},
113
138
"parameters": {
114
139
"properties": {
115
140
"pull": {
116
141
"description": "The dev.knotless.pull record.",
117
142
"format": "at-uri",
118
143
"type": "string"
119
144
},
120
145
"repo": {
121
146
"description": "The repository's dev.knotless.repo record, as dev.knotless.getRepo takes it.",
122
147
"format": "at-uri",
123
148
"type": "string"
124
149
}
125
150
},
126
151
"required": [
127
152
"repo",
128
153
"pull"
129
154
],
130
155
"type": "params"
131
156
},
132
157
"type": "query"
133
158
},
159
+
"note": {
160
+
"description": "A line of text about the pull's reviews.",
161
+
"properties": {
162
+
"text": {
163
+
"description": "In plain words.",
164
+
"type": "string"
165
+
}
166
+
},
167
+
"required": [
168
+
"text"
169
+
],
170
+
"type": "object"
171
+
},
134
172
"permissions": {
135
173
"description": "What the account asking may do to the pull.",
136
174
"properties": {
137
175
"base": {
138
176
"description": "Change its target branch: those who may close it.",
139
177
"type": "boolean"
140
178
},
141
179
"force": {
142
180
"description": "Merge it past its checks: the owner alone.",
143
181
"type": "boolean"
144
182
},
145
183
"head": {
146
184
"description": "Change its head branch: its author.",
147
185
"type": "boolean"
148
186
},
149
187
"merge": {
150
188
"description": "Merge it: the owner and collaborators.",
151
189
"type": "boolean"
152
190
},
153
191
"queue": {
154
192
"description": "Put it in the merge queue or take it out: those who may merge it, in a repository whose runners land a queue.",
155
193
"type": "boolean"
156
194
},
157
195
"rerun": {
158
196
"description": "Ask the runners to run its checks again: the owner, in a repository that names runners.",
159
197
"type": "boolean"
160
198
}
161
199
},
162
200
"required": [
163
201
"merge",
164
202
"force",
165
203
"queue",
166
204
"base",
167
205
"head",
168
206
"rerun"
169
207
],
170
208
"type": "object"
171
209
}
172
210
},
173
211
"description": "Whether an open pull can merge now, and what the account asking may do to it.",
174
212
"id": "dev.knotless.getMergeStatus",
175
213
"lexicon": 1
176
214
}