Skip to content

Commit 96b6000

Browse files
committed
docs: update documentation to support TEA Product Release
Signed-off-by: Pavel Shukhman <[email protected]>
1 parent 4503de1 commit 96b6000

File tree

6 files changed

+159
-58
lines changed

6 files changed

+159
-58
lines changed

README.md

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,12 @@ The working group has produced a list of use cases and requirements for the prot
5454

5555
## Data model
5656

57-
- [TEA Product](tea-product/tea-product): This is the starting point. A "product" is something for sale or distributed as an Open Source project. The [Transparency Exchange Identifier, TEI](/discovery/readme.md) points to a single product. A product can have multiple TEIs.
58-
- [TEA Component](tea-component/tea-component.md): A Component is a versioned part of the product. In many cases, the product has a single component,
59-
and in other cases a product consists of multiple components.
60-
- TEA Components has a list of "releases" for each component.
61-
- [TEA Collection](tea-collection/tea-collection.md): The collection is a list of artifacts for a specific release. The collection can be
62-
dynamic or static, depending on the implemenation. TEA collections are versioned to indicate a change for a specific release,
63-
like an update of a VEX file or a correction of an SBOM.
64-
- [TEA Artifacts](tea-artifact/tea-artifact.md): The artifact is a file associated with the collection. One artifact can be part of many collections,
65-
for multiple components.
57+
- [TEA Product Release](tea-product/tea-product-release.md): The primary entry point. The [Transparency Exchange Identifier, TEI](/discovery/readme.md) resolves to a specific Product Release. A Product Release may optionally belong to a [TEA Product](tea-product/tea-product.md).
58+
- [TEA Product](tea-product/tea-product.md): An optional higher-level object that groups a set of Product Releases for a product line or family. Products can be discovered and browsed; releases are accessed via `/product/{uuid}/releases`.
59+
- [TEA Component](tea-component/tea-component.md): Represents a component lineage. A Component is a collection of Component Releases (accessible via `/component/{uuid}/releases`).
60+
- [TEA Release](/tea-component/tea-release.md: A Component Release object. Each Component Release may have its own TEA Collection.
61+
- [TEA Collection](tea-collection/tea-collection.md): A versioned list of artifacts for a specific Release (Component Release) or Product Release. Collections are versioned to indicate changes, e.g., an updated VEX or corrected SBOM.
62+
- [TEA Artifacts](tea-artifact/tea-artifact.md): Files associated with a Collection. A single Artifact can appear in multiple Collections.
6663

6764
## artifacts available of the API
6865

tea-collection/tea-collection.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ A TEA Component Release object has the following parts:
1515
- __preRelease__: A flag indicating pre-release (or beta) status.
1616
May be disabled after the creation of the release object, but can't be enabled after creation of an object.
1717
- __identifiers__: List of identifiers for the component
18-
- __idType__: Type of identifier, e.g. `tei`, `purl`, `cpe`
18+
- __idType__: Type of identifier, e.g. `TEI`, `PURL`, `CPE`
1919
- __idValue__: Identifier value
2020

2121
### Examples
@@ -29,7 +29,7 @@ A TEA Component Release object of the binary distribution of Apache Tomcat 11.0.
2929
"releaseDate": "2025-04-01T15:43:00Z",
3030
"identifiers": [
3131
{
32-
"idType": "purl",
32+
"idType": "PURL",
3333
"idValue": "pkg:maven/org.apache.tomcat/[email protected]"
3434
}
3535
]
@@ -45,7 +45,7 @@ Different versions of Apache Tomcat should have separate TEA Component Release o
4545
"releaseDate": "2025-04-01T18:20:00Z",
4646
"identifiers": [
4747
{
48-
"idType": "purl",
48+
"idType": "PURL",
4949
"idValue": "pkg:maven/org.apache.tomcat/[email protected]"
5050
}
5151
]
@@ -63,7 +63,7 @@ and does not require users to know the version naming scheme adopted by the proj
6363
"preRelease": true,
6464
"identifiers": [
6565
{
66-
"idType": "purl",
66+
"idType": "PURL",
6767
"idValue": "pkg:maven/org.apache.tomcat/[email protected]"
6868
}
6969
]
@@ -129,12 +129,12 @@ The TEA Artifact object has the following parts:
129129
- __name__: Artifact name.
130130
- __type__: Type of artifact.
131131
See [TEA Artifact types](#tea-artifact-types) for a list.
132-
- __formats__: List of objects with the same content, but in different formats.
132+
- __formats__: List of objects with the same content, but in different formats.
133133
The order of the list has no significance.
134-
- __mime_type__: The MIME type of the document
134+
- __mimeType__: The MIME type of the document
135135
- __description__: A free text describing the artifact
136136
- __url__: Direct download URL for the artifact
137-
- __signature_url__: Direct download URL for an external signature of the artifact
137+
- __signatureUrl__: Direct download URL for an external signature of the artifact
138138
- __checksums__: List of checksums for the artifact
139139
- __algType__: Checksum algorithm
140140
See [CycloneDX checksum algorithms](https://cyclonedx.org/docs/1.6/json/#components_items_hashes_items_alg) for a list of supported values.
@@ -184,13 +184,13 @@ producing different alerts than other changes of a collection.
184184
{
185185
"uuid": "1cb47b95-8bf8-3bad-a5a4-0d54d86e10ce",
186186
"name": "Build SBOM",
187-
"type": "bom",
187+
"type": "BOM",
188188
"formats": [
189189
{
190-
"mime_type": "application/vnd.cyclonedx+xml",
190+
"mimeType": "application/vnd.cyclonedx+xml",
191191
"description": "CycloneDX SBOM (XML)",
192192
"url": "https://repo.maven.apache.org/maven2/org/apache/logging/log4j/log4j-core/2.24.3/log4j-core-2.24.3-cyclonedx.xml",
193-
"signature_url": "https://repo.maven.apache.org/maven2/org/apache/logging/log4j/log4j-core/2.24.3/log4j-core-2.24.3-cyclonedx.xml.asc",
193+
"signatureUrl": "https://repo.maven.apache.org/maven2/org/apache/logging/log4j/log4j-core/2.24.3/log4j-core-2.24.3-cyclonedx.xml.asc",
194194
"checksums": [
195195
{
196196
"algType": "MD5",
@@ -207,10 +207,10 @@ producing different alerts than other changes of a collection.
207207
{
208208
"uuid": "dfa35519-9734-4259-bba1-3e825cf4be06",
209209
"name": "Vulnerability Disclosure Report",
210-
"type": "vulnerability-assertion",
210+
"type": "VULNERABILITIES",
211211
"formats": [
212212
{
213-
"mime_type": "application/vnd.cyclonedx+xml",
213+
"mimeType": "application/vnd.cyclonedx+xml",
214214
"description": "CycloneDX VDR (XML)",
215215
"url": "https://logging.apache.org/cyclonedx/vdr.xml",
216216
"checksums": [

tea-component/tea-component.md

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
11
# The TEA Component API
22

3-
The TEA Component object is the object that indicates a product component. The product may
4-
be constructed with one or multiple Tea Components, each with their own set of
5-
related artefacts.
3+
The TEA Component represents a component lineage. A product release may
4+
be constructed with one or multiple TEA Components, each with their own set of
5+
releases and related artifacts.
66

7-
For each TEA COMPONENT there is a TEA COMPONENT INDEX, which is a list of all versions
8-
for that component.
7+
Each TEA Component has a list of Component Releases (see `/component/{uuid}/releases`),
8+
which enumerates all known versions for that component.
99

1010
The API should be very agnostic as to how a "version" is indicated - semver, vers,
1111
name, hash or anything else.
1212

13-
## Major and minor versions
13+
## Versions and TEIs
1414

15-
Each component is for a sub-version or minor version (using semver definitions). A new
16-
major version counts as a new product with a separate product object (TPO). Each
17-
product object has one or multiple TEI URNs.
15+
Each product object has one or multiple TEI URNs.
1816

1917
For the API to be able to present a list of versions in a cronological order,
2018
a timestamp for a release is required.
@@ -42,7 +40,7 @@ Some examples of Maven artifacts as TEA Components:
4240
"name": "Apache Log4j API",
4341
"identifiers": [
4442
{
45-
"idType": "purl",
43+
"idType": "PURL",
4644
"idValue": "pkg:maven/org.apache.logging.log4j/log4j-api"
4745
}
4846
]
@@ -55,11 +53,11 @@ Some examples of Maven artifacts as TEA Components:
5553
"name": "Apache Log4j Core",
5654
"identifiers": [
5755
{
58-
"idType": "cpe",
56+
"idType": "CPE",
5957
"idValue": "cpe:2.3:a:apache:log4j"
6058
},
6159
{
62-
"idType": "purl",
60+
"idType": "PURL",
6361
"idValue": "pkg:maven/org.apache.logging.log4j/log4j-core"
6462
}
6563
]

tea-component/tea-release.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# TEA Component Release
2+
3+
## Overview
4+
5+
A TEA Component Release represents a specific version of a TEA Component lineage. It is the concrete, versioned entity which has collections of security-related artifacts (SBOM, VDR/VEX, attestations, etc.).
6+
7+
Key attributes:
8+
- uuid: Unique identifier of the component release
9+
- component: UUID of the TEA Component this release belongs to
10+
- version: Human-readable version string
11+
- createdDate: Timestamp when the release was created in TEA
12+
- releaseDate: Upstream release timestamp
13+
- preRelease: Indicates pre-release/beta status
14+
- identifiers: Array of identifiers (idType: CPE/TEI/PURL; idValue: string)
15+
16+
Collections for a release contain artifacts relevant to that specific release.
17+
18+
## JSON examples
19+
20+
The following examples are reused from the OpenAPI schema (`components/schemas/release.examples`), ensuring exact field names and casing.
21+
22+
```json
23+
{
24+
"uuid": "605d0ecb-1057-40e4-9abf-c400b10f0345",
25+
"version": "11.0.6",
26+
"createdDate": "2025-04-01T15:43:00Z",
27+
"releaseDate": "2025-04-01T15:43:00Z",
28+
"identifiers": [
29+
{
30+
"idType": "PURL",
31+
"idValue": "pkg:maven/org.apache.tomcat/[email protected]"
32+
}
33+
]
34+
}
35+
```
36+
37+
```json
38+
{
39+
"uuid": "da89e38e-95e7-44ca-aa7d-f3b6b34c7fab",
40+
"version": "10.1.40",
41+
"createdDate": "2025-04-01T18:20:00Z",
42+
"releaseDate": "2025-04-01T18:20:00Z",
43+
"identifiers": [
44+
{
45+
"idType": "PURL",
46+
"idValue": "pkg:maven/org.apache.tomcat/[email protected]"
47+
}
48+
]
49+
}
50+
```
51+
52+
```json
53+
{
54+
"uuid": "95f481df-f760-47f4-b2f2-f8b76d858450",
55+
"version": "11.0.0-M26",
56+
"createdDate": "2024-09-13T17:49:00Z",
57+
"preRelease": true,
58+
"identifiers": [
59+
{
60+
"idType": "PURL",
61+
"idValue": "pkg:maven/org.apache.tomcat/[email protected]"
62+
}
63+
]
64+
}
65+
```
66+
67+
Notes:
68+
- Use uppercase idType values exactly as defined by the schema enum: CPE, TEI, PURL.

tea-product/tea-product-release.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# TEA Product Release
2+
3+
## Overview
4+
5+
A TEA Product Release represents a specific versioned release of a TEA Product. It is the primary resolvable entity via TEI and the entry point for discovery of included components and related collections of security artifacts.
6+
7+
Key attributes:
8+
- uuid: Unique identifier of the product release
9+
- product: UUID of the TEA Product this release belongs to
10+
- version: Human-readable version string of the product release
11+
- createdDate: Timestamp when the product release was created in TEA
12+
- releaseDate: Upstream product release timestamp
13+
- preRelease: Indicates pre-release/beta status
14+
- identifiers: Array of identifiers (idType: CPE/TEI/PURL; idValue: string)
15+
- components: Array of component references included in this product release
16+
- uuid: UUID of the TEA Component
17+
- release: Optional UUID of a specific component release to pin an exact version
18+
19+
Collections for a product release contain artifacts relevant to that product release.
20+
21+
## JSON examples
22+
23+
The following example is reused from the OpenAPI schema (`components/schemas/productRelease.examples`), ensuring exact field names and casing.
24+
25+
```json
26+
{
27+
"uuid": "123e4567-e89b-12d3-a456-426614174000",
28+
"version": "2.24.3",
29+
"createdDate": "2025-04-01T15:43:00Z",
30+
"releaseDate": "2025-04-01T15:43:00Z",
31+
"identifiers": [
32+
{
33+
"idType": "TEI",
34+
"idValue": "tei:vendor:[email protected]"
35+
}
36+
],
37+
"components": [
38+
{
39+
"uuid": "3910e0fd-aff4-48d6-b75f-8bf6b84687f0"
40+
},
41+
{
42+
"uuid": "b844c9bd-55d6-478c-af59-954a932b6ad3",
43+
"release": "da89e38e-95e7-44ca-aa7d-f3b6b34c7fab"
44+
}
45+
]
46+
}
47+
```
48+
49+
Notes:
50+
- Property `product` exists in the schema and links a product release to its parent product; it may not be present in all examples.
51+
- Use uppercase idType values exactly as defined by the schema enum: CPE, TEI, PURL.

tea-product/tea-product.md

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
# The TEA product API
22

3-
After TEA discovery, a user has a URL to the TEA product API where
4-
the TEI is used to query for data. The TEI marks the product sold,
5-
which can be a single unit or multiple units in a bundle.
3+
After TEA discovery, the [Transparency Exchange Identifier (TEI)](/discovery/readme.md) resolves to a specific TEA Product Release, which represents a concrete, versioned offering. A TEA Product is an optional higher-level object that groups multiple Product Releases for a product line or family and can be browsed via `/product/{uuid}/releases`.
64

7-
- For a single product, the output will be metadata about the
8-
product and a TEA COMPONENT object.
9-
- For a composed product consisting of a bundle, the response
5+
- A product release may consist of a single component, the output will be metadata about the
6+
product and the TEA COMPONENT object.
7+
- For a composed product release consisting of a bundle of components or component releases, the response
108
will be multiple TEA COMPONENT objects.
119

1210
In addition, all known TEIs for the product will be returned,
@@ -20,9 +18,8 @@ which products and versions are supported for a specific user.
2018

2119
## Composite products
2220

23-
If a product consists of a set of products, each with a different
24-
version number and update scheme, a TEA "bundle" will be the starting
25-
point of discovery. The TEA product will list all included components
21+
A TEA Product Release will be the starting
22+
point of discovery. The TEA product release will list all included components
2623
with the UUID of the TEA component. The reference list may also include
2724
a UUID of a specific release of a component in the case where a product
2825
always includes a single release of the component.
@@ -60,37 +57,27 @@ An example of a product consisting of an OSS project and all its Maven artifacts
6057
"name": "Apache Log4j 2",
6158
"identifiers": [
6259
{
63-
"idType": "cpe",
60+
"idType": "CPE",
6461
"idValue": "cpe:2.3:a:apache:log4j"
6562
},
6663
{
67-
"idType": "purl",
64+
"idType": "PURL",
6865
"idValue": "pkg:maven/org.apache.logging.log4j/log4j-api"
6966
},
7067
{
71-
"idType": "purl",
68+
"idType": "PURL",
7269
"idValue": "pkg:maven/org.apache.logging.log4j/log4j-core"
7370
},
7471
{
75-
"idType": "purl",
72+
"idType": "PURL",
7673
"idValue": "pkg:maven/org.apache.logging.log4j/log4j-layout-template-json"
7774
}
78-
],
79-
"components": [
80-
{
81-
"uuid": "3910e0fd-aff4-48d6-b75f-8bf6b84687f0",
82-
"release": "c1f2f9c4-d86e-4007-b61c-a53dc36f3e72"
83-
},
84-
{
85-
"uuid": "b844c9bd-55d6-478c-af59-954a932b6ad3"
86-
},
87-
{
88-
"uuid": "d6d3f754-d4f4-4672-b096-b994b064ca2d"
89-
}
9075
]
9176
}
9277
```
9378

79+
Releases for this Product can be browsed via the API endpoint `/product/{uuid}/releases`.
80+
9481
### API usage
9582

9683
The user will find this API end point using TEA discovery.

0 commit comments

Comments
 (0)