com.publicdomainrelay.temp.tangled.spindle.trigger
Schema Diff
+24 -17
Compatibility Analysis
Breaking Changes Detected
9 breaking changes, 7 non-breaking changes.
Breaking Changes (9)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", src: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.workflow", kind: "prop", name: Some("workflow") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.workflow", kind: "prop", name: Some("workflow") }
- RemovedVertex RemovedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.logsUrl" }
- RemovedVertex RemovedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.statusUrl" }
- RemovedVertex RemovedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.workflow" }
- RemovedEdge RemovedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.logsUrl", kind: "prop", name: Some("logsUrl") }
- RemovedEdge RemovedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.statusUrl", kind: "prop", name: Some("statusUrl") }
- KindChanged KindChanged { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", old_kind: "object", new_kind: "ref" }
- ConstraintAdded ConstraintAdded { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", sort: "ref", value: "#workflowResult" }
Non-Breaking Changes (7)
- AddedVertex AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult" }
- AddedVertex AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.logsUrl" }
- AddedVertex AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.statusUrl" }
- AddedVertex AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.workflow" }
- AddedEdge AddedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.logsUrl", kind: "prop", name: Some("logsUrl") }
- AddedEdge AddedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.statusUrl", kind: "prop", name: Some("statusUrl") }
- AddedEdge AddedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", kind: "ref", name: None }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.logsUrl" }RemovedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.statusUrl" }RemovedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.workflow" }
Added Elements
AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult" }AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.logsUrl" }AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.statusUrl" }AddedVertex { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.workflow" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", sort: "ref", value: "#workflowResult" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", src: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.workflow", kind: "prop", name: Some("workflow") }
- Breaking: RequiredEdgeRemoved { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.workflow", kind: "prop", name: Some("workflow") }
- Breaking: RemovedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.logsUrl", kind: "prop", name: Some("logsUrl") }
- Breaking: RemovedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items.statusUrl", kind: "prop", name: Some("statusUrl") }
- Breaking: KindChanged { vertex_id: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", old_kind: "object", new_kind: "ref" }
- Non-breaking: AddedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.logsUrl", kind: "prop", name: Some("logsUrl") }
- Non-breaking: AddedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult.statusUrl", kind: "prop", name: Some("statusUrl") }
- Non-breaking: AddedEdge { src: "com.publicdomainrelay.temp.tangled.spindle.trigger:output.workflows:items", tgt: "com.publicdomainrelay.temp.tangled.spindle.trigger#workflowResult", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "Manually trigger a pipeline run on a Tangled spindle. Intended to be called via PDS service proxying (the 'atproto-proxy' header, pointed at the spindle's did:web service entry), so the user's PDS mints and signs the inter-service auth token; the spindle verifies the token's issuer against their DID document and requires it to match the trigger's 'actor'. Mirrors the sh.tangled.pipeline fields a knot dispatches on a push/PR event.",
6
6
"errors": [
7
7
{
8
8
"description": "Malformed body or missing required fields.",
9
9
"name": "InvalidRequest"
10
10
},
11
11
{
12
12
"description": "Missing or invalid inter-service auth token.",
13
13
"name": "Unauthorized"
14
14
},
15
15
{
16
16
"description": "Token issuer does not match actor, or repo is not authorized for this spindle.",
17
17
"name": "Forbidden"
18
18
}
19
19
],
20
20
"input": {
21
21
"encoding": "application/json",
22
22
"schema": {
23
23
"properties": {
24
24
"actor": {
25
25
"description": "DID of the actor the run is attributed to. Must equal the issuer of the service-auth token.",
26
26
"format": "did",
27
27
"type": "string"
28
28
},
29
29
"inputs": {
30
30
"description": "Optional workflow_dispatch-style inputs, as a map of string keys to string values.",
31
31
"type": "unknown"
32
32
},
33
33
"knot": {
34
34
"description": "Knot hostname that hosts the repo, e.g. knot1.tangled.sh.",
35
35
"type": "string"
36
36
},
37
37
"pipelineRkey": {
38
38
"description": "Record key identifying this pipeline run; only needs to be unique per run.",
39
39
"type": "string"
40
40
},
41
41
"ref": {
42
42
"description": "Commit SHA to run at. The spindle fetches .github/workflows/*.yml at this exact commit, so it must be a real commit, not a branch name.",
43
43
"type": "string"
44
44
},
45
45
"repoDid": {
46
46
"description": "DID of the repo (the owner DID used for sh.tangled.repo.blob lookups).",
47
47
"format": "did",
48
48
"type": "string"
49
49
},
50
50
"repoName": {
51
51
"description": "Human-readable repo name, e.g. myrepo.",
52
52
"type": "string"
53
53
}
54
54
},
55
55
"required": [
56
56
"knot",
57
57
"pipelineRkey",
58
58
"actor",
59
59
"repoDid",
60
60
"repoName",
61
61
"ref"
62
62
],
63
63
"type": "object"
64
64
}
65
65
},
66
66
"output": {
67
67
"encoding": "application/json",
68
68
"schema": {
69
69
"properties": {
70
70
"knot": {
71
71
"type": "string"
72
72
},
73
73
"pipelineRkey": {
74
74
"type": "string"
75
75
},
76
76
"ref": {
77
77
"type": "string"
78
78
},
79
79
"submitted": {
80
80
"description": "True once the trigger was accepted and workflow submission started.",
81
81
"type": "boolean"
82
82
},
83
83
"workflows": {
84
84
"description": "The workflow stems that were submitted, with their log/status stream URLs.",
85
85
"items": {
86
-
"properties": {
87
-
"logsUrl": {
88
-
"format": "uri",
89
-
"type": "string"
90
-
},
91
-
"statusUrl": {
92
-
"format": "uri",
93
-
"type": "string"
94
-
},
95
-
"workflow": {
96
-
"type": "string"
97
-
}
98
-
},
99
-
"required": [
100
-
"workflow"
101
-
],
102
-
"type": "object"
86
+
"ref": "#workflowResult",
87
+
"type": "ref"
103
88
},
104
89
"type": "array"
105
90
}
106
91
},
107
92
"required": [
108
93
"submitted",
109
94
"knot",
110
95
"pipelineRkey",
111
96
"ref",
112
97
"workflows"
113
98
],
114
99
"type": "object"
115
100
}
116
101
},
117
102
"type": "procedure"
103
+
},
104
+
"workflowResult": {
105
+
"properties": {
106
+
"logsUrl": {
107
+
"description": "URL to the log stream for this workflow run.",
108
+
"format": "uri",
109
+
"type": "string"
110
+
},
111
+
"statusUrl": {
112
+
"description": "URL to the status stream for this workflow run.",
113
+
"format": "uri",
114
+
"type": "string"
115
+
},
116
+
"workflow": {
117
+
"description": "Workflow stem that was submitted.",
118
+
"type": "string"
119
+
}
120
+
},
121
+
"required": [
122
+
"workflow"
123
+
],
124
+
"type": "object"
118
125
}
119
126
},
120
127
"id": "com.publicdomainrelay.temp.tangled.spindle.trigger",
121
128
"lexicon": 1
122
129
}