From 7930e4f38a34fd0d7be9a69d6852307d2b2de9c6 Mon Sep 17 00:00:00 2001 From: Wenkai Yin Date: Sun, 2 Feb 2020 09:13:51 +0800 Subject: [PATCH] Add child artifact digest in reference model As we only provide the API to get artifact information via project name, repository name and digest, the digest of child artifact must be returned Signed-off-by: Wenkai Yin --- api/v2.0/swagger.yaml | 3 +++ src/api/artifact/model.go | 5 +++-- src/pkg/artifact/manager.go | 5 +++++ src/pkg/artifact/manager_test.go | 3 +++ src/pkg/artifact/model.go | 7 ++++--- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/api/v2.0/swagger.yaml b/api/v2.0/swagger.yaml index ae608dcd3..eb7fb2466 100644 --- a/api/v2.0/swagger.yaml +++ b/api/v2.0/swagger.yaml @@ -467,6 +467,9 @@ definitions: type: integer format: int64 description: The child ID of the reference + child_digest: + type: string + description: The digest of the child artifact platform: $ref: '#/definitions/Platform' Platform: diff --git a/src/api/artifact/model.go b/src/api/artifact/model.go index 71b84e667..d97edd93b 100644 --- a/src/api/artifact/model.go +++ b/src/api/artifact/model.go @@ -47,8 +47,9 @@ func (a *Artifact) ToSwagger() *models.Artifact { } for _, reference := range a.References { ref := &models.Reference{ - ChildID: reference.ChildID, - ParentID: reference.ParentID, + ChildID: reference.ChildID, + ChildDigest: reference.ChildDigest, + ParentID: reference.ParentID, } if reference.Platform != nil { ref.Platform = &models.Platform{ diff --git a/src/pkg/artifact/manager.go b/src/pkg/artifact/manager.go index 13788aa82..005d566ef 100644 --- a/src/pkg/artifact/manager.go +++ b/src/pkg/artifact/manager.go @@ -127,6 +127,11 @@ func (m *manager) assemble(ctx context.Context, art *dao.Artifact) (*Artifact, e for _, ref := range refs { reference := &Reference{} reference.From(ref) + art, err := m.dao.Get(ctx, reference.ChildID) + if err != nil { + return nil, err + } + reference.ChildDigest = art.Digest artifact.References = append(artifact.References, reference) } return artifact, nil diff --git a/src/pkg/artifact/manager_test.go b/src/pkg/artifact/manager_test.go index d0ac5f9e2..960acebe9 100644 --- a/src/pkg/artifact/manager_test.go +++ b/src/pkg/artifact/manager_test.go @@ -105,6 +105,9 @@ func (m *managerTestSuite) TestAssemble() { ChildID: 3, }, }, nil) + m.dao.On("Get").Return(&dao.Artifact{ + Digest: "digest", + }, nil) artifact, err := m.mgr.assemble(nil, art) m.Require().Nil(err) m.dao.AssertExpectations(m.T()) diff --git a/src/pkg/artifact/model.go b/src/pkg/artifact/model.go index 65679b37b..13343b0cf 100644 --- a/src/pkg/artifact/model.go +++ b/src/pkg/artifact/model.go @@ -101,9 +101,10 @@ func (a *Artifact) To() *dao.Artifact { // Reference records the child artifact referenced by parent artifact type Reference struct { - ParentID int64 - ChildID int64 - Platform *v1.Platform + ParentID int64 + ChildID int64 + ChildDigest string // As we only provide the API based on digest rather than ID, the digest of child artifact is needed + Platform *v1.Platform } // From converts the data level reference to business level