1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
|
// Copyright 2020 syzkaller project authors. All rights reserved.
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
package kcidb
// Kernel CI report data. To be submitted to/queried from the common report database.
//
// Objects in the data are identified and linked together using "id" and "*_id" string properties.
// Each value of these properties must start with a non-empty string identifying the CI system which
// submitted the object, followed by a colon ':' character. The rest of the string is generated by
// the origin CI system, and must identify that object uniquely among all objects of the same type,
// coming from that CI system.
//
// Any of the immediate properties (except "version") can be missing or be an empty list with each
// submission/query, but only complete data stored in the database should be considered valid.
//
// E.g. a test run referring to a non-existent build is allowed into/from the database,
// but would only appear in reports once both the build and its revision are present.
//
// No special meaning apart from "data is missing" is attached to any immediate or deeper properties being omitted,
// when they're not required, and no default values should be assumed for them.
// At the same time, no properties can be null.
//
// Extra free-form data can be stored under "misc" fields associated with various objects throughout the schema,
// if necessary. That data could later be used as the basis for defining new properties to house it.
type Kcidb struct {
Checkouts []*Checkout `json:"checkouts,omitempty"`
Builds []*Build `json:"builds,omitempty"`
Tests []*Test `json:"tests,omitempty"`
Issues []*Issue `json:"issues,omitempty"`
Incidents []*Incident `json:"incidents,omitempty"`
Version *Version `json:"version"`
}
// A build of a checkout.
type Build struct {
// The last time the build was updated in the database.
Timestamp string `json:"_timestamp,omitempty"`
// ID of the built source code checkout. The checkout must be valid for the build to be considered valid.
CheckoutID string `json:"checkout_id"`
// Build ID.
// Must start with a non-empty string identifying the CI system which submitted the build,
// followed by a colon ':' character. The rest of the string is generated by the origin CI system,
// and must identify the build uniquely among all builds, coming from that CI system.
ID string `json:"id"`
// The name of the CI system which submitted the build.
Origin string `json:"origin"`
// A human-readable comment regarding the build.
Comment string `json:"comment,omitempty"`
// The time the build was started.
StartTime string `json:"start_time,omitempty"`
// The number of seconds it took to complete the build.
Duration float64 `json:"duration,omitempty"`
// Target architecture of the build.
Architecture string `json:"architecture,omitempty"`
// Full shell command line used to make the build, including environment variables.
Command string `json:"command,omitempty"`
// Name and version of the compiler used to make the build.
Compiler string `json:"compiler,omitempty"`
// A list of build input files. E.g. configuration.
InputFiles []*Resource `json:"input_files,omitempty"`
// A list of build output files: images, packages, etc.
OutputFiles []*Resource `json:"output_files,omitempty"`
// A name describing the build configuration options.
ConfigName string `json:"config_name,omitempty"`
// The URL of the build configuration file.
ConfigURL string `json:"config_url,omitempty"`
// The URL of the plain-text build log file.
LogURL string `json:"log_url,omitempty"`
// A part of the build log most relevant to its outcome.
LogExcerpt string `json:"log_excerpt,omitempty"`
// Build status: FAIL, ERROR, MISS, PASS, DONE, or SKIP.
Status string `json:"status,omitempty"`
// Miscellaneous extra data about the build.
Misc *BuildMisc `json:"misc,omitempty"`
}
// Miscellaneous extra data about the build.
type BuildMisc struct {
OriginURL string `json:"origin_url,omitempty"`
ReportedBy string `json:"reported_by,omitempty"`
}
// The environment the test ran in. E.g. a host, a set of hosts, or a lab;
// amount of memory/storage/CPUs, for each host; process environment variables, etc.
type Environment struct {
// The values from the root-level 'compatible' property of the system's device tree.
Compatible []string `json:"compatible,omitempty"`
// Human-readable comment of the environment.
Comment string `json:"comment,omitempty"`
// Miscellaneous extra data about the environment.
Misc *EnvironmentMisc `json:"misc,omitempty"`
}
// Miscellaneous extra data about the environment.
type EnvironmentMisc struct {
}
// A checkout of the tested code.
//
// Represents a way the tested source code could be obtained. E.g. checking out a particular commit from a git repo,
// and applying a set of patches on top.
type Checkout struct {
// The last time the checkout was updated in the database.
Timestamp string `json:"_timestamp,omitempty"`
// Source code checkout ID.
// Must start with a non-empty string identifying the CI system which submitted the checkout,
// followed by a colon ':' character. The rest of the string is generated by the origin CI system,
// and must identify the checkout uniquely among all checkouts, coming from that CI system.
ID string `json:"id"`
// The name of the CI system which submitted the checkout.
Origin string `json:"origin"`
// The widely-recognized name of the sub-tree (fork) of the main code tree where the checked out
// base source code came from.
TreeName string `json:"tree_name,omitempty"`
// The URL of the Git repository which contains the base code of the checkout. The shortest possible https:// URL.
GitRepositoryURL string `json:"git_repository_url,omitempty"`
// The full commit hash of the checked out base source code.
GitCommitHash string `json:"git_commit_hash,omitempty"`
// A human-readable name of the commit containing the checked out base source code, as would be
// output by "git describe", at the checkout time.
GitCommitName string `json:"git_commit_name,omitempty"`
// The list of (annotated) tags, found in the repository, pointing directly at the checked out commit.
GitCommitTags []string `json:"git_commit_tags,omitempty"`
// The complete message of the commit being checked out, both the subject and the body.
GitCommitMessage string `json:"git_commit_message,omitempty"`
// The Git repository branch from which the commit with the base source code was checked out.
GitRepositoryBranch string `json:"git_repository_branch,omitempty"`
// Whether the checked out commit was at the tip of the specified branch at checkout time.
GitRepositoryBranchTip bool `json:"git_repository_branch_tip,omitempty"`
// List of patch files applied to the checked out base source code, in order of application.
PatchsetFiles []*Resource `json:"patchset_files,omitempty"`
// The patchset hash. Empty if no patches were applied.
PatchsetHash string `json:"patchset_hash,omitempty"`
// The value of the Message-ID header of the e-mail message introducing the checkout, if any.
MessageID string `json:"message_id,omitempty"`
// A human-readable comment regarding the checkout. E.g. the checked out release version.
Comment string `json:"comment,omitempty"`
// The time the checkout was started.
StartTime string `json:"start_time,omitempty"`
// The time the checkout origin finished all planned builds for it.
OriginBuildsFinishTime string `json:"origin_builds_finish_time,omitempty"`
// The time the checkout origin finished all planned tests for it.
OriginTestsFinishTime string `json:"origin_tests_finish_time,omitempty"`
// The URL of a plain-text log file of the checkout attempt. E.g. 'git am' output.
LogURL string `json:"log_url,omitempty"`
// A part of the checkout log most relevant to its outcome.
LogExcerpt string `json:"log_excerpt,omitempty"`
// True if the checkout succeeded, i.e. if the source code parts could be combined.
// False if not, e.g. if the patches failed to apply.
Valid bool `json:"valid,omitempty"`
// Miscellaneous extra data about the checkout.
Misc *CheckoutMisc `json:"misc,omitempty"`
}
// Miscellaneous extra data about the checkout.
type CheckoutMisc struct {
}
// A test run against a build.
//
// Could represent a result of execution of a test suite program, a result of one of the tests done by the test
// suite program, as well as a summary of a collection of test suite results.
//
// Each test run should normally have a dot-separated test "path" specified in the "path" property,
// which could identify a specific test within a test suite (e.g. "LTPlite.sem01"), a whole test suite
// (e.g. "LTPlite"), or the summary of all tests for a build ( - the empty string).
type Test struct {
// The last time the test was updated in the database.
Timestamp string `json:"_timestamp,omitempty"`
// ID of the tested build. The build must be valid for the test run to be considered valid.
BuildID string `json:"build_id"`
// ID of the test run.
// Must start with a non-empty string identifying the CI system which submitted the test run,
// followed by a colon ':' character. The rest of the string is generated by the origin CI system,
// and must identify the test run uniquely among all test runs, coming from that CI system.
ID string `json:"id"`
// The name of the CI system which submitted the test run.
Origin string `json:"origin"`
// The environment the test ran in. E.g. a host, a set of hosts, or a lab; amount of memory/storage/CPUs,
// for each host; process environment variables, etc.
Environment *Environment `json:"environment,omitempty"`
// Dot-separated path to the node in the test classification tree the executed test belongs to.
// E.g. "ltp.sem01". The empty string signifies the root of the tree, i.e. all tests for the build,
// executed by the origin CI system.
Path string `json:"path,omitempty"`
// A human-readable comment regarding the test run.
Comment string `json:"comment,omitempty"`
// The URL of the plain-text test output or log file. If multiple outputs exist, this should point to the
// highest-level overview of the test's operation. The rest should go into output_files.
LogURL string `json:"log_url,omitempty"`
// A part of the test log most relevant to the test outcome.
LogExcerpt string `json:"log_excerpt,omitempty"`
// The test status string: FAIL, ERROR, MISS, PASS, DONE, or SKIP.
Status string `json:"status,omitempty"`
// The numerical output produced by the test, if any.
Number *TestNumber `json:"number,omitempty"`
// The time the test run was started.
StartTime string `json:"start_time,omitempty"`
// The number of seconds it took to run the test.
Duration float64 `json:"duration,omitempty"`
// Test input files (rootfs, initramfs, etc.).
InputFiles []*Resource `json:"input_files,omitempty"`
// A list of test outputs: logs, dumps, etc. Except the file referenced by log_url.
OutputFiles []*Resource `json:"output_files,omitempty"`
// Miscellaneous extra data about the test run.
Misc *TestMisc `json:"misc,omitempty"`
}
// The numerical output produced by a test run.
type TestNumber struct {
// The floating-point output value.
Value float64 `json:"value"`
// The (compound) unit symbols the value is measured in.
Unit string `json:"unit,omitempty"`
// The type of prefix to add to the unit when displaying the value: "metric" or "binary".
Prefix string `json:"prefix,omitempty"`
}
// Miscellaneous extra data about the test.
type TestMisc struct {
OriginURL string `json:"origin_url,omitempty"`
ReportedBy string `json:"reported_by,omitempty"`
UserSpaceArch string `json:"user_space_arch,omitempty"`
CauseRevisionID string `json:"cause_revision_id,omitempty"`
}
// A named remote resource.
type Resource struct {
// Resource name. Must be usable as a local file name for the downloaded resource. Cannot be empty.
// Should not include directories.
Name string `json:"name"`
// Resource URL. Must point to the resource file directly, so it could be downloaded automatically.
URL string `json:"url"`
}
type Version struct {
// Major number of the schema version.
//
// Increases represent backward-incompatible changes. E.g. deleting or renaming a property,
// changing a property type, restricting values, making a property required, or adding a new required property.
Major int `json:"major"`
// Minor number of the schema version.
//
// Increases represent backward-compatible changes. E.g. relaxing value restrictions,
// making a property optional, or adding a new optional property.
Minor int `json:"minor,omitempty"`
}
// An issue found in reports.
type Issue struct {
// The last time the issue was updated in the database.
Timestamp string `json:"_timestamp,omitempty"`
// Issue ID.
// Must start with a non-empty string identifying the CI system which submitted the issue,
// followed by a colon ':' character. The rest of the string is generated by the origin CI system,
// and must identify the issue uniquely among all issues, coming from that CI system.
ID string `json:"id"`
// The modification version number of the issue. Only the highest-numbered version is used for triaging.
Version int `json:"version"`
// The name of the CI system which submitted the issue.
Origin string `json:"origin"`
// Dot-separated paths pointing to nodes in the categorization tree the issue belongs to.
Categories []string `json:"categories,omitempty"`
// The URL of a report describing the issue.
ReportURL string `json:"report_url,omitempty"`
// The subject of the report describing the issue.
ReportSubject string `json:"report_subject,omitempty"`
// Layers of the execution stack responsible for the issue. If all are false, the issue is considered invalid.
Culprit *IssueCulprit `json:"culprit,omitempty"`
// A human-readable comment regarding the issue. E.g. a brief description, or a report subject.
Comment string `json:"comment,omitempty"`
// Miscellaneous extra data about the issue.
Misc *IssueMisc `json:"misc,omitempty"`
}
// The layers responsible for an issue.
type IssueCulprit struct {
// The built/tested code.
Code bool `json:"code,omitempty"`
// The tool - the static analyzer, the build toolchain, the test, etc.
Tool bool `json:"tool,omitempty"`
// The harness - the system controlling the execution of the build/test.
Harness bool `json:"harness,omitempty"`
}
// Miscellaneous extra data about the issue.
type IssueMisc struct {
}
// An incident - an issue occurrence/absence.
type Incident struct {
// The last time the incident was updated in the database.
Timestamp string `json:"_timestamp,omitempty"`
// Incident ID.
// Must start with a non-empty string identifying the CI system which submitted the incident,
// followed by a colon ':' character. The rest of the string is generated by the origin CI system,
// and must identify the incident uniquely among all incidents, coming from that CI system.
ID string `json:"id"`
// The name of the CI system which submitted the incident.
Origin string `json:"origin"`
// The ID of the occurring/absent issue.
IssueID string `json:"issue_id"`
// The modification version number of the occurring/absent issue.
IssueVersion int `json:"issue_version"`
// The ID of the build object exhibiting/missing the issue.
BuildID string `json:"build_id,omitempty"`
// The ID of the test object exhibiting/missing the issue.
TestID string `json:"test_id,omitempty"`
// True if the issue occurred in the linked objects. False if it was absent.
Present bool `json:"present,omitempty"`
// A human-readable comment regarding the incident.
Comment string `json:"comment,omitempty"`
// Miscellaneous extra data about the incident.
Misc *IncidentMisc `json:"misc,omitempty"`
}
// Miscellaneous extra data about the incident.
type IncidentMisc struct {
}
|