From 01b4b23856ce1e1fb9a931c763ecaa040f366ef7 Mon Sep 17 00:00:00 2001 From: s3rj1k Date: Thu, 20 Feb 2025 22:34:39 +0100 Subject: [PATCH 1/2] Add `CNAI` processor Signed-off-by: s3rj1k --- api/v2.0/swagger.yaml | 2 +- src/controller/artifact/controller.go | 2 + .../artifact/processor/cnai/cnai.go | 422 ++++++++++++++++++ .../artifact/processor/cnai/cnai_test.go | 354 +++++++++++++++ 4 files changed, 779 insertions(+), 1 deletion(-) create mode 100644 src/controller/artifact/processor/cnai/cnai.go create mode 100644 src/controller/artifact/processor/cnai/cnai_test.go diff --git a/api/v2.0/swagger.yaml b/api/v2.0/swagger.yaml index 9c42f73e84a..24dc34f6321 100644 --- a/api/v2.0/swagger.yaml +++ b/api/v2.0/swagger.yaml @@ -1449,7 +1449,7 @@ paths: in: path description: The type of addition. type: string - enum: [build_history, values.yaml, readme.md, dependencies, sbom] + enum: [build_history, values.yaml, readme.md, license, files, dependencies, sbom] required: true responses: '200': diff --git a/src/controller/artifact/controller.go b/src/controller/artifact/controller.go index 943b9313f78..2dab995b556 100644 --- a/src/controller/artifact/controller.go +++ b/src/controller/artifact/controller.go @@ -28,6 +28,7 @@ import ( "github.com/goharbor/harbor/src/controller/artifact/processor" "github.com/goharbor/harbor/src/controller/artifact/processor/chart" "github.com/goharbor/harbor/src/controller/artifact/processor/cnab" + "github.com/goharbor/harbor/src/controller/artifact/processor/cnai" "github.com/goharbor/harbor/src/controller/artifact/processor/image" "github.com/goharbor/harbor/src/controller/artifact/processor/sbom" "github.com/goharbor/harbor/src/controller/artifact/processor/wasm" @@ -78,6 +79,7 @@ var ( cnab.ArtifactTypeCNAB: icon.DigestOfIconCNAB, wasm.ArtifactTypeWASM: icon.DigestOfIconWASM, sbom.ArtifactTypeSBOM: icon.DigestOfIconAccSBOM, + cnai.ArtifactTypeCNAI: icon.DigestOfIconImage, } ) diff --git a/src/controller/artifact/processor/cnai/cnai.go b/src/controller/artifact/processor/cnai/cnai.go new file mode 100644 index 00000000000..588d2d9bcbc --- /dev/null +++ b/src/controller/artifact/processor/cnai/cnai.go @@ -0,0 +1,422 @@ +// Copyright Project Harbor Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package cnai + +import ( + "archive/tar" + "bytes" + "context" + "encoding/json" + "io" + "path/filepath" + "strings" + + v1 "github.com/opencontainers/image-spec/specs-go/v1" + + ps "github.com/goharbor/harbor/src/controller/artifact/processor" + "github.com/goharbor/harbor/src/controller/artifact/processor/base" + "github.com/goharbor/harbor/src/lib/errors" + "github.com/goharbor/harbor/src/lib/log" + "github.com/goharbor/harbor/src/pkg/artifact" +) + +const ( + ArtifactTypeCNAI = "MODEL" + MediaType = "application/vnd.cnai.model.config.v1+json" + + FilepathAnnotation = "org.cnai.model.filepath" + + DocMediaType = "application/vnd.cnai.model.doc.v1.tar" + + AdditionTypeReadme = "README.MD" + AdditionTypeLicense = "LICENSE" + AdditionTypeFiles = "FILES" +) + +const ( + ReadmeFilename = AdditionTypeReadme + ReadmeShortFilename = "README" + LicenseFilename = "LICENSE.txt" + LicenseShortFilename = "LICENSE" +) + +// Processor handles CNAI model artifacts processing operations, extending the base ManifestProcessor +type Processor struct { + *base.ManifestProcessor +} + +// FileInfo represents metadata about a file or directory in the artifact file tree +type FileInfo struct { + Name string `json:"name"` + Type string `json:"type"` + Size int64 `json:"size,omitempty"` + Children []*FileInfo `json:"children,omitempty"` +} + +func init() { + pc := &Processor{} + + pc.ManifestProcessor = base.NewManifestProcessor() + if err := ps.Register(pc, MediaType); err != nil { + log.Errorf("failed to register processor for media type %s: %v", MediaType, err) + + return + } +} + +// isSupportedAddition checks if the specified addition type is supported for CNAI artifacts +func isSupportedAddition(addition string) error { + if addition == AdditionTypeReadme { + return nil + } + + if addition == AdditionTypeLicense { + return nil + } + + if addition == AdditionTypeFiles { + return nil + } + + return errors.New(nil).WithCode(errors.BadRequestCode). + WithMessagef("addition %s isn't supported for %s", addition, ArtifactTypeCNAI) +} + +// extractFileFromCompressedLayer extracts a specific file from compressed layer data by name +func extractFileFromCompressedLayer(b []byte, name string) ([]byte, error) { + r := bytes.NewReader(b) + tarReader := tar.NewReader(r) + + // iterate through all files in the tar archive + for { + // get the next header, which contains file metadata + header, err := tarReader.Next() + if err != nil { + if errors.Is(err, io.EOF) { + break + } + + return nil, err + } + + // skip entries that are not regular files (directories, symlinks, etc.) + if header.Typeflag != tar.TypeReg { + continue + } + + // check if current file matches (case-insensitive) the requested name + if strings.EqualFold(filepath.Base(header.Name), name) || + strings.EqualFold(header.Name, name) { + var buffer bytes.Buffer + if _, err := io.Copy(&buffer, tarReader); err != nil { + return nil, err + } + + return buffer.Bytes(), nil + } + } + + return nil, errors.New(nil).WithCode(errors.NotFoundCode). + WithMessagef("file %q not found in compressed layer", name) +} + +// extractLayerContent pulls a blob from the registry and extracts file content based on the filepath annotation +func extractLayerContent(p *Processor, repositoryName, layerDigest, filepathAnnotation string) ([]byte, error) { + // pull the blob from the registry using the repository name and layer digest + _, blob, err := p.RegCli.PullBlob(repositoryName, layerDigest) + if err != nil { + return nil, err + } + defer blob.Close() + + // read the entire blob content into memory + tarContent, err := io.ReadAll(blob) + if err != nil { + return nil, err + } + + // extract the specific file from the compressed layer using the filepath annotation + fileContent, err := extractFileFromCompressedLayer( + tarContent, filepathAnnotation, + ) + if err != nil { + return nil, err + } + + return fileContent, nil +} + +// isReadMeLayer checks if layer contains a ReadMe file +func isReadMeLayer(layer v1.Descriptor) bool { + if layer.MediaType != DocMediaType { + return false + } + + val, ok := layer.Annotations[FilepathAnnotation] + if !ok { + return false + } + + if strings.EqualFold(val, ReadmeShortFilename) { + return true + } + + if strings.EqualFold(val, ReadmeFilename) { + return true + } + + return false +} + +// isLicenseLayer checks if layer contains a License file +func isLicenseLayer(layer v1.Descriptor) bool { + if layer.MediaType != DocMediaType { + return false + } + + val, ok := layer.Annotations[FilepathAnnotation] + if !ok { + return false + } + + if strings.EqualFold(val, LicenseShortFilename) { + return true + } + + if strings.EqualFold(val, LicenseFilename) { + return true + } + + return false +} + +// processPath processes file path components to build a tree structure of FileInfo nodes +func processPath(parts []string, size int64, tree map[string]*FileInfo, rootEntries *[]*FileInfo) { + var ( + currentPath string // tracks the full path + parent *FileInfo // reference to the parent node + ) + + // isFile determines if the current component is a file (last part of the path) + isFile := func(i int, parts []string) bool { + return i == len(parts)-1 + } + + // buildPath constructs the full path by appending the current part + buildPath := func(currentPath, part string) string { + if currentPath != "" { + return currentPath + "/" + part + } + + return part + } + + // createNode instantiates a new FileInfo node with appropriate type and properties + createNode := func(part string, size int64, isFile bool) *FileInfo { + nodeType := "directory" + if isFile { + nodeType = "file" + } + + node := &FileInfo{ + Name: part, + Type: nodeType, + } + + if isFile { + node.Size = size + } else { + node.Children = []*FileInfo{} + } + + return node + } + + // existsInRoot checks if a node with the given name already exists at the root level + existsInRoot := func(rootEntries *[]*FileInfo, name string) bool { + for _, root := range *rootEntries { + if root.Name == name { + return true + } + } + + return false + } + + for i, part := range parts { + // build the full path for the current component + currentPath = buildPath(currentPath, part) + + // skip if we already processed this path + if node, exists := tree[currentPath]; exists { + parent = node + + continue + } + + // create new node based on whether it's a file or directory + node := createNode(part, size, isFile(i, parts)) + + // add to lookup map for future reference + tree[currentPath] = node + + // link to parent or add to root entries + if parent != nil { + parent.Children = append(parent.Children, node) + } else if !existsInRoot(rootEntries, node.Name) { + *rootEntries = append(*rootEntries, node) + } + + // current node becomes parent for next iteration + parent = node + } +} + +// buildFileTree constructs a hierarchical file tree structure from layer descriptors +func buildFileTree(layers []v1.Descriptor) (rootEntries []*FileInfo) { + // create a map to track all nodes in the tree by their path + tree := make(map[string]*FileInfo) + + // helper function to split a path into standardized components + splitPath := func(in string) []string { + var parts []string + + for _, part := range strings.Split(filepath.ToSlash(in), "/") { + if part != "" { + parts = append(parts, part) + } + } + + return parts + } + + // iterate through each layer to build the file tree + for _, layer := range layers { + // get the filepath annotation from the layer + val, ok := layer.Annotations[FilepathAnnotation] + if !ok || val == "" { + continue + } + + // process the path components to build the tree structure + processPath(splitPath(val), layer.Size, tree, &rootEntries) + } + + return rootEntries +} + +// extractContent retrieves content from a layer and returns it as an Addition with specified content type +func (p *Processor) extractContent(repoName, layerDigest, filepath, contentType string) (*ps.Addition, error) { + fileContent, err := extractLayerContent( + p, repoName, layerDigest, + filepath, + ) + if err != nil { + return nil, err + } + + return &ps.Addition{ + Content: fileContent, + ContentType: contentType, + }, nil +} + +// getManifest retrieves and parses the OCI manifest for the artifact +func (p *Processor) getManifest(repoName string, digest string) (*v1.Manifest, error) { + m, _, err := p.RegCli.PullManifest(repoName, digest) + if err != nil { + return nil, err + } + + _, payload, err := m.Payload() + if err != nil { + return nil, err + } + + manifest := &v1.Manifest{} + if err := json.Unmarshal(payload, manifest); err != nil { + return nil, err + } + + return manifest, nil +} + +// AbstractAddition extracts and returns the specified addition content for a CNAI artifact +func (p *Processor) AbstractAddition(_ context.Context, artifact *artifact.Artifact, addition string) (*ps.Addition, error) { + if err := isSupportedAddition(addition); err != nil { + return nil, err + } + + manifest, err := p.getManifest(artifact.RepositoryName, artifact.Digest) + if err != nil { + return nil, err + } + + // handle file tree addition + if addition == AdditionTypeFiles { + fileTree := buildFileTree(manifest.Layers) + + fileListContent, err := json.MarshalIndent(fileTree, "", " ") + if err != nil { + return nil, err + } + + return &ps.Addition{ + Content: fileListContent, + ContentType: "application/json; charset=utf-8", + }, nil + } + + // iterate through layers to find requested content (readme or license) + for _, layer := range manifest.Layers { + switch addition { + case AdditionTypeReadme: + if isReadMeLayer(layer) { + return p.extractContent( + artifact.RepositoryName, + layer.Digest.String(), + layer.Annotations[FilepathAnnotation], + "text/markdown; charset=utf-8", + ) + } + case AdditionTypeLicense: + if isLicenseLayer(layer) { + return p.extractContent( + artifact.RepositoryName, + layer.Digest.String(), + layer.Annotations[FilepathAnnotation], + "text/plain; charset=utf-8", + ) + } + } + } + + // requested addition wasn't found in any layer + return nil, nil +} + +// GetArtifactType returns the type of the CNAI artifact +func (p *Processor) GetArtifactType(_ context.Context, _ *artifact.Artifact) string { + return ArtifactTypeCNAI +} + +// ListAdditionTypes returns a list of all supported addition types for CNAI artifacts +func (p *Processor) ListAdditionTypes(_ context.Context, _ *artifact.Artifact) []string { + return []string{ + AdditionTypeReadme, + AdditionTypeLicense, + AdditionTypeFiles, + } +} diff --git a/src/controller/artifact/processor/cnai/cnai_test.go b/src/controller/artifact/processor/cnai/cnai_test.go new file mode 100644 index 00000000000..520e5fcc5b1 --- /dev/null +++ b/src/controller/artifact/processor/cnai/cnai_test.go @@ -0,0 +1,354 @@ +// Copyright Project Harbor Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package cnai + +import ( + "archive/tar" + "bytes" + "context" + "encoding/json" + "fmt" + "io" + "testing" + + "github.com/docker/distribution" + v1 "github.com/opencontainers/image-spec/specs-go/v1" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/suite" + + "github.com/goharbor/harbor/src/controller/artifact/processor/base" + "github.com/goharbor/harbor/src/pkg/artifact" + "github.com/goharbor/harbor/src/testing/pkg/registry" +) + +type CNAIProcessorTestSuite struct { + suite.Suite + processor *Processor + regCli *registry.Client +} + +func (suite *CNAIProcessorTestSuite) SetupSuite() { + suite.regCli = ®istry.Client{} + suite.processor = &Processor{ + &base.ManifestProcessor{ + RegCli: suite.regCli, + }, + } +} + +func (suite *CNAIProcessorTestSuite) TearDownSuite() {} + +func createTarWithFile(filename, content string) []byte { + var buf bytes.Buffer + tw := tar.NewWriter(&buf) + + hdr := &tar.Header{ + Name: filename, + Mode: 0o600, + Size: int64(len(content)), + } + + if err := tw.WriteHeader(hdr); err != nil { + panic(err) + } + + if _, err := tw.Write([]byte(content)); err != nil { + panic(err) + } + + if err := tw.Close(); err != nil { + panic(err) + } + + return buf.Bytes() +} + +func (suite *CNAIProcessorTestSuite) TestAbstractAdditionFiles() { + manifestContent := ` + { + "schemaVersion": 2, + "config": { + "mediaType": "application/vnd.cnai.model.config.v1+json", + "digest": "sha256:e91b9dfcbbb3b88bac94726f276b89de46e4460b55f6e6d6f876e666b150ec5b", + "size": 498 + }, + "layers": [ + { + "mediaType": "application/vnd.cnai.model.weight.v1.tar", + "size": 32654, + "digest": "sha256:abc", + "annotations": { + "org.cnai.model.filepath": "model/weights.bin" + } + }, + { + "mediaType": "application/vnd.cnai.model.doc.v1.tar", + "size": 1024, + "digest": "sha256:def", + "annotations": { + "org.cnai.model.filepath": "docs/example.py" + } + } + ] + }` + + manifest, _, err := distribution.UnmarshalManifest(v1.MediaTypeImageManifest, []byte(manifestContent)) + suite.Require().NoError(err) + suite.regCli.On("PullManifest", mock.Anything, mock.Anything).Return( + manifest, "sha256:e91b9dfcbbb3b88bac94726f276b89de46e4460b55f6e6d6f876e666b150ec5b", nil, + ).Once() + + addition, err := suite.processor.AbstractAddition(context.Background(), + &artifact.Artifact{RepositoryName: "repo", Digest: "digest"}, AdditionTypeFiles, + ) + suite.NoError(err) + suite.NotNil(addition) + suite.Equal("application/json; charset=utf-8", addition.ContentType) + + // parse the JSON output to verify the tree structure + var fileTree []*FileInfo + err = json.Unmarshal(addition.Content, &fileTree) + suite.NoError(err) + + // helper function to find a file in the tree + findFile := func(tree []*FileInfo, dir, file string) bool { + for _, node := range tree { + if node.Name == dir && node.Type == "directory" { + for _, child := range node.Children { + if child.Name == file && child.Type == "file" { + return true + } + } + } + } + + return false + } + + // verify the expected files exist in the correct directories + suite.True(findFile(fileTree, "model", "weights.bin")) + suite.True(findFile(fileTree, "docs", "example.py")) +} + +func (suite *CNAIProcessorTestSuite) TestAbstractAdditionReadme() { + testCases := []struct { + name string + manifestPath string + tarPath string + readmeContent string + }{ + { + name: "Readme with \".md\" extension", + manifestPath: "README.MD", + tarPath: "README.MD", + readmeContent: "# Test Model\nThis is a test model readme", + }, + { + name: "Readme without extension", + manifestPath: "README", + tarPath: "README", + readmeContent: "# Another Model\nThis is another test model readme", + }, + } + + for _, tc := range testCases { + suite.Run(tc.name, func() { + manifestContent := fmt.Sprintf(` + { + "schemaVersion": 2, + "config": { + "mediaType": "application/vnd.cnai.model.config.v1+json", + "digest": "sha256:e91b9dfcbbb3b88bac94726f276b89de46e4460b55f6e6d6f876e666b150ec5b", + "size": 498 + }, + "layers": [ + { + "mediaType": "application/vnd.cnai.model.doc.v1.tar", + "size": 1024, + "digest": "sha256:f91b9dfcbbb3b88bac94726f276b89de46e4460b55f6e6d6f876e666b150ec5b", + "annotations": { + "org.cnai.model.filepath": %q + } + } + ] + }`, tc.manifestPath) + + tarContent := createTarWithFile(tc.tarPath, tc.readmeContent) + reader := bytes.NewReader(tarContent) + blobReader := io.NopCloser(reader) + + manifest, _, err := distribution.UnmarshalManifest(v1.MediaTypeImageManifest, []byte(manifestContent)) + suite.Require().Nil(err) + + suite.regCli.On("PullManifest", mock.Anything, mock.Anything).Return(manifest, "", nil).Once() + suite.regCli.On("PullBlob", mock.Anything, + "sha256:f91b9dfcbbb3b88bac94726f276b89de46e4460b55f6e6d6f876e666b150ec5b").Return(int64(len(tarContent)), + blobReader, nil).Once() + + addition, err := suite.processor.AbstractAddition(context.Background(), + &artifact.Artifact{RepositoryName: "repo", Digest: "digest"}, AdditionTypeReadme, + ) + suite.NoError(err) + suite.NotNil(addition) + suite.Equal("text/markdown; charset=utf-8", addition.ContentType) + suite.Equal(tc.readmeContent, string(addition.Content)) + }) + } +} + +func (suite *CNAIProcessorTestSuite) TestAbstractAdditionLicense() { + testCases := []struct { + name string + manifestPath string + tarPath string + licenseContent string + }{ + { + name: "License with txt extension", + manifestPath: "LICENSE.txt", + tarPath: "LICENSE.txt", + licenseContent: "Apache License, Version 2.0\n\nCopyright Project Harbor Authors", + }, + { + name: "License without extension", + manifestPath: "LICENSE", + tarPath: "LICENSE", + licenseContent: "MIT License\n\nCopyright Project Harbor Authors", + }, + } + + for _, tc := range testCases { + suite.Run(tc.name, func() { + manifestContent := fmt.Sprintf(` + { + "schemaVersion": 2, + "config": { + "mediaType": "application/vnd.cnai.model.config.v1+json", + "digest": "sha256:e91b9dfcbbb3b88bac94726f276b89de46e4460b55f6e6d6f876e666b150ec5b", + "size": 498 + }, + "layers": [ + { + "mediaType": "application/vnd.cnai.model.doc.v1.tar", + "size": 1024, + "digest": "sha256:f91b9dfcbbb3b88bac94726f276b89de46e4460b55f6e6d6f876e666b150ec5b", + "annotations": { + "org.cnai.model.filepath": %q + } + } + ] + }`, tc.manifestPath) + + tarContent := createTarWithFile(tc.tarPath, tc.licenseContent) + reader := bytes.NewReader(tarContent) + blobReader := io.NopCloser(reader) + + manifest, _, err := distribution.UnmarshalManifest(v1.MediaTypeImageManifest, []byte(manifestContent)) + suite.Require().Nil(err) + + suite.regCli.On("PullManifest", mock.Anything, mock.Anything).Return(manifest, "", nil).Once() + suite.regCli.On("PullBlob", mock.Anything, + "sha256:f91b9dfcbbb3b88bac94726f276b89de46e4460b55f6e6d6f876e666b150ec5b").Return(int64(len(tarContent)), + blobReader, nil).Once() + + addition, err := suite.processor.AbstractAddition(context.Background(), + &artifact.Artifact{RepositoryName: "repo", Digest: "digest"}, AdditionTypeLicense, + ) + suite.NoError(err) + suite.NotNil(addition) + suite.Equal("text/plain; charset=utf-8", addition.ContentType) + suite.Equal(tc.licenseContent, string(addition.Content)) + }) + } +} + +func (suite *CNAIProcessorTestSuite) TestAbstractAdditionNotFound() { + manifestContent := `{ + "schemaVersion": 2, + "config": { + "mediaType": "application/vnd.cnai.model.config.v1+json", + "digest": "sha256:e91b9dfcbbb3b88bac94726f276b89de46e4460b55f6e6d6f876e666b150ec5b", + "size": 498 + }, + "layers": [ + { + "mediaType": "application/vnd.cnai.model.weight.v1.tar", + "size": 32654, + "digest": "sha256:abc", + "annotations": { + "org.cnai.model.filepath": "model/weights.bin" + } + } + ] + }` + + manifest, _, err := distribution.UnmarshalManifest(v1.MediaTypeImageManifest, []byte(manifestContent)) + suite.Require().NoError(err) + + // Mock PullManifest for both README and LICENSE calls + suite.regCli.On("PullManifest", mock.Anything, mock.Anything). + Return(manifest, "", nil).Times(2) + + // Test README not found + addition, err := suite.processor.AbstractAddition(context.Background(), + &artifact.Artifact{}, AdditionTypeReadme) + suite.NoError(err) + suite.Nil(addition) + + // Test LICENSE not found + addition, err = suite.processor.AbstractAddition(context.Background(), + &artifact.Artifact{}, AdditionTypeLicense) + suite.NoError(err) + suite.Nil(addition) +} + +func (suite *CNAIProcessorTestSuite) TestAbstractAdditionUnsupportedType() { + addition, err := suite.processor.AbstractAddition(context.Background(), + &artifact.Artifact{}, "UNSUPPORTED") + + suite.Error(err) + suite.Nil(addition) + suite.Contains(err.Error(), "addition UNSUPPORTED isn't supported") +} + +func (suite *CNAIProcessorTestSuite) TestAbstractAdditionManifestError() { + suite.regCli.On("PullManifest", mock.Anything, mock.Anything). + Return(nil, "", fmt.Errorf("manifest error")).Once() + + addition, err := suite.processor.AbstractAddition(context.Background(), + &artifact.Artifact{}, AdditionTypeReadme) + + suite.Error(err) + suite.Nil(addition) +} + +func (suite *CNAIProcessorTestSuite) TestGetArtifactType() { + artifactType := suite.processor.GetArtifactType(context.Background(), &artifact.Artifact{}) + suite.Equal(ArtifactTypeCNAI, artifactType) +} + +func (suite *CNAIProcessorTestSuite) TestListAdditionTypes() { + additions := suite.processor.ListAdditionTypes(context.Background(), &artifact.Artifact{}) + + suite.Equal([]string{ + AdditionTypeReadme, + AdditionTypeLicense, + AdditionTypeFiles, + }, additions) +} + +func TestCNAIProcessorTestSuite(t *testing.T) { + suite.Run(t, &CNAIProcessorTestSuite{}) +} From d1b0e57b41ea9ac7218963bcd1dbcf26d6c0a41b Mon Sep 17 00:00:00 2001 From: s3rj1k Date: Mon, 24 Feb 2025 11:07:43 +0100 Subject: [PATCH 2/2] Set proper Icon for `CNAI` processor Signed-off-by: s3rj1k --- icons/cnai.png | Bin 0 -> 99312 bytes src/controller/artifact/controller.go | 2 +- src/controller/icon/controller.go | 4 ++++ src/lib/icon/const.go | 1 + 4 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 icons/cnai.png diff --git a/icons/cnai.png b/icons/cnai.png new file mode 100644 index 0000000000000000000000000000000000000000..62bbf13f471c08e79daf6fdc08444b5312b04ac0 GIT binary patch literal 99312 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

9!ZhFK|qDUN@a^}ihMv9F^qWJo#uox>ZzRx^t zsC2yE$#YDek1?G%8Tc-Hs{w>D&%9M=V2LO7sy`3L*Nc;=qULEOAwY`lLzRT2d8D9u ze~Hw=aK+)?Lifx+v*&o2kBWu^-%vn`nH`v2Vbkc=?jti-J28*R=|eWME`G>8eUpbo zO`?L^OJCfENN;(a2tfUJVrRt?85SfYgIq8%JOQbU-t>vV&*$Udut`~jv$k%A|NY?K z7t*AYJKJ=B1>qZuuknQk@6nWV~+<1C+`Gfb0FbSoxi{ZDB78 z9HWwB@cp+g@Ao`(yzd_fNf8&k63%u0{JQT`a5M7POI^Sp(S#<1>(3|=`t!(@drul& z-CqhS=sWouQa=rRkEA8<6SpqUk!E)F%{2+yK(@+2T0!malp_H7qZc-cZ|qMvk5cfU z1}|868MEW^e9}S?YcU9mKgQN3AvFX$`JZYQy)_gOv#Wh$GRri&@A|VHXlQ0e$J_aa z!g)z9=W)zL3ZrJ1FrULqQ&h1Xere->+7D3YlyO{hTbK)Y%A9<>>I0s3ZN|HAX#vjLSNP3Pm%HhmU;Sf&j|Dq;t*_^bZih8+^68V=8fxGfgGJuB0TCt zKhWOZiDnab)07Hh7E}~91nISHLY1mNDc1}WYei1>+p%_I7tl>?EQU!E=x-^&5Y0So{kVrcs72T=Ff4i8;{)M$Rtv_c{t zTi*b)4CO-il&DHzRSx2EN#4-Zj0tF__EKVz;mNg1O^}_1EW~!yEp1o;VEOv2oo;n& zFT0M~((fXb07Xt?<t*~yD<&CE?v4fwSv`1zxG#*QW z*i&B+t9sjCdWOed*ufwWB})QHD=M<4-l)`g0I%27ln{Px%G#!GN%5gx~1 zCK_27gcI6#S$Y)ah;{ZEFkvob%=OYwd*p?!X4|R?(m|+xZo64O!3_A`^q8YXi!_<< zjhVUEf}8xYlZ?~^`LTWF5h|aneF@&`Lvq339d(j%?5txiBCr=n+vd;;qZPne6u|?k zpC)Zu!B!dEt1~3TvMlS1(v2|$rKpRRpd338ILs$hl2y5XQo9T?=d6(DUpYVYT|e+? za~M=EK!7++4hlvvi90BB<|=B^r!Lk>osfY|CRBiBXxR8Sfp?^bcQYKH`{8*8KB6%i zieR;uxX8c=rV3uH={xPD%i>4^Y=x#2+%|7~liEGYwJFAlbY5XL_n3rtn&QX%7^*PO zs+XH$>LdH9i)fd(BHlk$YH829J3$X-=O3K{fGz_a6>BbSHJ6WEO(;HoJS;1CRfJ-G zWFIZ0xrneb5?s~djN%x)vs}&ZNVWg5xO@s;-Qg0@H_y z&)`XRemVllBjD%C;#Y{19_j0Io9~H9?nozyOY(bD%!Mu;G>&@$(t0(R9tCvc88{{s z+qSnimseeP&F)<_=tTv9aYwHa+UWOaf)?#Y0|;j3`a!}(!Lu3c8Qvcdf^B$X-dh6^ ziwu6hoW7jNquxYnTj`VzYw|eM|Jla%bLK)O>D#X>Nwm?}UsqX?^tKliZIZ8mfPmFY ziV7+JO%}Zk`3ql;0t0BSAAVJfasqmPDfXs_a1Vzs3O<+pfd9Mh&Q)q1=WdeUKF+rK zP`4zf9;*lOjecPjO2c45nt{wNMs^45Ec&(!E4XPps@ui;;D4{UK!RZV2fe;dGlK3t)i&FtXMy}nMA#Z zAi7F~1tC=|RrU;sij zW}|RCu>BwRg%|h~l5mDJ1^ti}(?j;Xgq2oSko5G@?F?NM*P_(zrd$deEk8~5dZJyz zelmJ|`ugq2E%!8{EcZY!yA9YtJeWn9#O8|Xajq5qiscFXg4z79aZCU4WOjf0`@8db zKD4r&Agaa^@LeHz1}^^ZxV-ZZdTi7u$Z^g!90UY}+*wTB+1S9@gxko`NW@Kii zV`8LZy@&lvy! literal 0 HcmV?d00001 diff --git a/src/controller/artifact/controller.go b/src/controller/artifact/controller.go index 2dab995b556..0c93326151f 100644 --- a/src/controller/artifact/controller.go +++ b/src/controller/artifact/controller.go @@ -79,7 +79,7 @@ var ( cnab.ArtifactTypeCNAB: icon.DigestOfIconCNAB, wasm.ArtifactTypeWASM: icon.DigestOfIconWASM, sbom.ArtifactTypeSBOM: icon.DigestOfIconAccSBOM, - cnai.ArtifactTypeCNAI: icon.DigestOfIconImage, + cnai.ArtifactTypeCNAI: icon.DigestOfIconCNAI, } ) diff --git a/src/controller/icon/controller.go b/src/controller/icon/controller.go index f9787ce9090..3bab2641f13 100644 --- a/src/controller/icon/controller.go +++ b/src/controller/icon/controller.go @@ -77,6 +77,10 @@ var ( path: "./icons/default.png", resize: true, }, + icon.DigestOfIconCNAI: { + path: "./icons/cnai.png", + resize: true, + }, } // Ctl is a global icon controller instance Ctl = NewController() diff --git a/src/lib/icon/const.go b/src/lib/icon/const.go index 3529cf46e1a..ea041b62239 100644 --- a/src/lib/icon/const.go +++ b/src/lib/icon/const.go @@ -28,4 +28,5 @@ const ( DigestOfIconAccNotation = "sha256:3ac706e102bbe9362b400aa162df58135d35e66b9c3bee2165de92022d25fe34" DigestOfIconAccNydus = "sha256:dfcb6617cd9c144358dc1b305b87bbe34f0b619f1e329116e6aee2e41f2e34cf" DigestOfIconAccSBOM = "sha256:c19f80c357cd7e90d2a01b9ae3e2eb62ce447a2662bb590a19177d72d550bdae" + DigestOfIconCNAI = "sha256:9f51c0a8800e98c84952264755c956dba448f2d62112eff5c5a4ef88cd460d1e" )