Skip to content

Commit cb8e84e

Browse files
authored
Merge pull request #3311 from joejstuart/EC-1829
feat(EC-1829): include annotations in OCI referrers response
2 parents 3743934 + 55d4fbf commit cb8e84e

3 files changed

Lines changed: 30 additions & 1 deletion

File tree

docs/modules/ROOT/pages/ec_oci_image_referrers.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ Discover artifacts attached to an image via OCI Referrers API.
1212

1313
== Return
1414

15-
`referrers` (`array<object<artifactType: string, digest: string, mediaType: string, ref: string, size: number>>`): list of referrer descriptors discovered via OCI Referrers API
15+
`referrers` (`array<object<annotations: object[string: string], artifactType: string, digest: string, mediaType: string, ref: string, size: number>>`): list of referrer descriptors discovered via OCI Referrers API

internal/rego/oci/oci.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,13 +446,15 @@ func registerOCIImageTagRefs() {
446446
}
447447

448448
func registerOCIImageReferrers() {
449+
annotations := types.NewObject(nil, types.NewDynamicProperty(types.S, types.S))
449450
descriptor := types.NewObject(
450451
[]*types.StaticProperty{
451452
{Key: "mediaType", Value: types.S},
452453
{Key: "size", Value: types.N},
453454
{Key: "digest", Value: types.S},
454455
{Key: "artifactType", Value: types.S},
455456
{Key: "ref", Value: types.S},
457+
{Key: "annotations", Value: annotations},
456458
},
457459
nil,
458460
)
@@ -1511,6 +1513,7 @@ func ociImageReferrers(bctx rego.BuiltinContext, a *ast.Term) (*ast.Term, error)
15111513
ast.Item(ast.StringTerm("digest"), ast.StringTerm(descriptor.Digest.String())),
15121514
ast.Item(ast.StringTerm("artifactType"), ast.StringTerm(descriptor.ArtifactType)),
15131515
ast.Item(ast.StringTerm("ref"), ast.StringTerm(referrerRef)),
1516+
ast.Item(ast.StringTerm("annotations"), newAnnotationsTerm(descriptor.Annotations)),
15141517
)
15151518

15161519
referrerDescriptors = append(referrerDescriptors, descriptorTerm)

internal/rego/oci/oci_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1771,11 +1771,37 @@ func TestOCIImageReferrers(t *testing.T) {
17711771
require.NotNil(t, obj.Get(ast.StringTerm("mediaType")), "descriptor should have mediaType")
17721772
require.NotNil(t, obj.Get(ast.StringTerm("size")), "descriptor should have size")
17731773
require.NotNil(t, obj.Get(ast.StringTerm("artifactType")), "descriptor should have artifactType")
1774+
require.NotNil(t, obj.Get(ast.StringTerm("annotations")), "descriptor should have annotations")
17741775
}
17751776

17761777
// Verify the referrers match (order-independent)
17771778
require.ElementsMatch(t, c.want, gotRefs, "referrers mismatch")
17781779
}
17791780
})
17801781
}
1782+
1783+
// Verify annotations field is present as an object on every referrer descriptor
1784+
t.Run("annotations field is an object", func(t *testing.T) {
1785+
ClearCaches()
1786+
1787+
bctx := rego.BuiltinContext{Context: context.Background()}
1788+
got, err := ociImageReferrers(bctx, ast.StringTerm(digestRef))
1789+
require.NoError(t, err)
1790+
require.NotNil(t, got)
1791+
1792+
arr, ok := got.Value.(*ast.Array)
1793+
require.True(t, ok)
1794+
require.Greater(t, arr.Len(), 0)
1795+
1796+
for i := 0; i < arr.Len(); i++ {
1797+
obj, ok := arr.Elem(i).Value.(ast.Object)
1798+
require.True(t, ok)
1799+
1800+
annTerm := obj.Get(ast.StringTerm("annotations"))
1801+
require.NotNil(t, annTerm, "descriptor %d should have annotations field", i)
1802+
1803+
_, ok = annTerm.Value.(ast.Object)
1804+
require.True(t, ok, "descriptor %d annotations should be an object", i)
1805+
}
1806+
})
17811807
}

0 commit comments

Comments
 (0)