mirror of
https://github.com/goharbor/harbor.git
synced 2025-02-19 21:32:24 +01:00
Merge pull request #12897 from reasonerjt/icon-refactor
Fill in the icon of known artifacts in artifact controller
This commit is contained in:
commit
bad704d38b
@ -142,16 +142,3 @@ ALTER TABLE schema_migrations DROP COLUMN IF EXISTS data_version;
|
|||||||
|
|
||||||
ALTER TABLE artifact ADD COLUMN IF NOT EXISTS icon varchar(255);
|
ALTER TABLE artifact ADD COLUMN IF NOT EXISTS icon varchar(255);
|
||||||
|
|
||||||
UPDATE artifact
|
|
||||||
SET icon=(
|
|
||||||
CASE
|
|
||||||
WHEN type='IMAGE' THEN
|
|
||||||
'sha256:0048162a053eef4d4ce3fe7518615bef084403614f8bca43b40ae2e762e11e06'
|
|
||||||
WHEN type='CHART' THEN
|
|
||||||
'sha256:61cf3a178ff0f75bf08a25d96b75cf7355dc197749a9f128ed3ef34b0df05518'
|
|
||||||
WHEN type='CNAB' THEN
|
|
||||||
'sha256:089bdda265c14d8686111402c8ad629e8177a1ceb7dcd0f7f39b6480f623b3bd'
|
|
||||||
ELSE
|
|
||||||
'sha256:da834479c923584f4cbcdecc0dac61f32bef1d51e8aae598cf16bd154efab49f'
|
|
||||||
END);
|
|
||||||
|
|
||||||
|
@ -22,12 +22,10 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
// registry image resolvers
|
"github.com/goharbor/harbor/src/controller/artifact/processor/chart"
|
||||||
_ "github.com/goharbor/harbor/src/controller/artifact/processor/image"
|
"github.com/goharbor/harbor/src/controller/artifact/processor/cnab"
|
||||||
// register chart resolver
|
"github.com/goharbor/harbor/src/controller/artifact/processor/image"
|
||||||
_ "github.com/goharbor/harbor/src/controller/artifact/processor/chart"
|
"github.com/goharbor/harbor/src/lib/icon"
|
||||||
// register CNAB resolver
|
|
||||||
_ "github.com/goharbor/harbor/src/controller/artifact/processor/cnab"
|
|
||||||
|
|
||||||
"github.com/goharbor/harbor/src/controller/artifact/processor"
|
"github.com/goharbor/harbor/src/controller/artifact/processor"
|
||||||
"github.com/goharbor/harbor/src/controller/event/metadata"
|
"github.com/goharbor/harbor/src/controller/event/metadata"
|
||||||
@ -64,6 +62,13 @@ var (
|
|||||||
|
|
||||||
// ErrSkip error to skip walk the children of the artifact
|
// ErrSkip error to skip walk the children of the artifact
|
||||||
ErrSkip = stderrors.New("skip")
|
ErrSkip = stderrors.New("skip")
|
||||||
|
|
||||||
|
// icon digests for each known type
|
||||||
|
defaultIcons = map[string]string{
|
||||||
|
image.ArtifactTypeImage: icon.DigestOfIconImage,
|
||||||
|
chart.ArtifactTypeChart: icon.DigestOfIconChart,
|
||||||
|
cnab.ArtifactTypeCNAB: icon.DigestOfIconCNAB,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
// Controller defines the operations related with artifacts and tags
|
// Controller defines the operations related with artifacts and tags
|
||||||
@ -565,6 +570,9 @@ func (c *controller) assembleArtifact(ctx context.Context, art *artifact.Artifac
|
|||||||
// populate addition links
|
// populate addition links
|
||||||
c.populateAdditionLinks(ctx, artifact)
|
c.populateAdditionLinks(ctx, artifact)
|
||||||
|
|
||||||
|
// populate icon for the known artifact types
|
||||||
|
c.populateIcon(artifact)
|
||||||
|
|
||||||
if option == nil {
|
if option == nil {
|
||||||
return artifact
|
return artifact
|
||||||
}
|
}
|
||||||
@ -577,6 +585,16 @@ func (c *controller) assembleArtifact(ctx context.Context, art *artifact.Artifac
|
|||||||
return artifact
|
return artifact
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *controller) populateIcon(art *Artifact) {
|
||||||
|
if len(art.Icon) == 0 {
|
||||||
|
if i, ok := defaultIcons[art.Type]; ok {
|
||||||
|
art.Icon = i
|
||||||
|
} else {
|
||||||
|
art.Icon = icon.DigestOfIconDefault
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *controller) populateTags(ctx context.Context, art *Artifact, option *tag.Option) {
|
func (c *controller) populateTags(ctx context.Context, art *Artifact, option *tag.Option) {
|
||||||
tags, err := c.tagCtl.List(ctx, &q.Query{
|
tags, err := c.tagCtl.List(ctx, &q.Query{
|
||||||
Keywords: map[string]interface{}{
|
Keywords: map[string]interface{}{
|
||||||
|
@ -20,9 +20,13 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/goharbor/harbor/src/common/models"
|
"github.com/goharbor/harbor/src/common/models"
|
||||||
|
"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/image"
|
||||||
"github.com/goharbor/harbor/src/controller/tag"
|
"github.com/goharbor/harbor/src/controller/tag"
|
||||||
"github.com/goharbor/harbor/src/lib"
|
"github.com/goharbor/harbor/src/lib"
|
||||||
"github.com/goharbor/harbor/src/lib/errors"
|
"github.com/goharbor/harbor/src/lib/errors"
|
||||||
|
"github.com/goharbor/harbor/src/lib/icon"
|
||||||
"github.com/goharbor/harbor/src/lib/orm"
|
"github.com/goharbor/harbor/src/lib/orm"
|
||||||
"github.com/goharbor/harbor/src/lib/q"
|
"github.com/goharbor/harbor/src/lib/q"
|
||||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||||
@ -124,11 +128,68 @@ func (c *controllerTestSuite) TestAssembleArtifact() {
|
|||||||
artifact := c.ctl.assembleArtifact(ctx, art, option)
|
artifact := c.ctl.assembleArtifact(ctx, art, option)
|
||||||
c.Require().NotNil(artifact)
|
c.Require().NotNil(artifact)
|
||||||
c.Equal(art.ID, artifact.ID)
|
c.Equal(art.ID, artifact.ID)
|
||||||
|
c.Equal(icon.DigestOfIconDefault, artifact.Icon)
|
||||||
c.Contains(artifact.Tags, tg)
|
c.Contains(artifact.Tags, tg)
|
||||||
c.Contains(artifact.Labels, lb)
|
c.Contains(artifact.Labels, lb)
|
||||||
// TODO check other fields of option
|
// TODO check other fields of option
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *controllerTestSuite) TestPopulateIcon() {
|
||||||
|
cases := []struct {
|
||||||
|
art *artifact.Artifact
|
||||||
|
ico string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
art: &artifact.Artifact{
|
||||||
|
ID: 1,
|
||||||
|
Digest: "sha256:123",
|
||||||
|
Type: image.ArtifactTypeImage,
|
||||||
|
},
|
||||||
|
ico: icon.DigestOfIconImage,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
art: &artifact.Artifact{
|
||||||
|
ID: 2,
|
||||||
|
Digest: "sha256:456",
|
||||||
|
Type: cnab.ArtifactTypeCNAB,
|
||||||
|
},
|
||||||
|
ico: icon.DigestOfIconCNAB,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
art: &artifact.Artifact{
|
||||||
|
ID: 3,
|
||||||
|
Digest: "sha256:1234",
|
||||||
|
Type: chart.ArtifactTypeChart,
|
||||||
|
},
|
||||||
|
ico: icon.DigestOfIconChart,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
art: &artifact.Artifact{
|
||||||
|
ID: 4,
|
||||||
|
Digest: "sha256:1234",
|
||||||
|
Type: "other",
|
||||||
|
},
|
||||||
|
ico: icon.DigestOfIconDefault,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
art: &artifact.Artifact{
|
||||||
|
ID: 5,
|
||||||
|
Digest: "sha256:2345",
|
||||||
|
Type: image.ArtifactTypeImage,
|
||||||
|
Icon: "sha256:abcd",
|
||||||
|
},
|
||||||
|
ico: "sha256:abcd",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, cs := range cases {
|
||||||
|
a := &Artifact{
|
||||||
|
Artifact: *cs.art,
|
||||||
|
}
|
||||||
|
c.ctl.populateIcon(a)
|
||||||
|
c.Equal(cs.ico, a.Icon)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *controllerTestSuite) TestEnsureArtifact() {
|
func (c *controllerTestSuite) TestEnsureArtifact() {
|
||||||
digest := "sha256:418fb88ec412e340cdbef913b8ca1bbe8f9e8dc705f9617414c1f2c8db980180"
|
digest := "sha256:418fb88ec412e340cdbef913b8ca1bbe8f9e8dc705f9617414c1f2c8db980180"
|
||||||
|
|
||||||
|
@ -21,7 +21,6 @@ import (
|
|||||||
|
|
||||||
ps "github.com/goharbor/harbor/src/controller/artifact/processor"
|
ps "github.com/goharbor/harbor/src/controller/artifact/processor"
|
||||||
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
||||||
"github.com/goharbor/harbor/src/controller/icon"
|
|
||||||
"github.com/goharbor/harbor/src/lib/errors"
|
"github.com/goharbor/harbor/src/lib/errors"
|
||||||
"github.com/goharbor/harbor/src/lib/log"
|
"github.com/goharbor/harbor/src/lib/log"
|
||||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||||
@ -62,7 +61,6 @@ func (p *processor) AbstractMetadata(ctx context.Context, artifact *artifact.Art
|
|||||||
if err := p.ManifestProcessor.AbstractMetadata(ctx, artifact, manifest); err != nil {
|
if err := p.ManifestProcessor.AbstractMetadata(ctx, artifact, manifest); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
artifact.Icon = icon.DigestOfIconChart
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,9 +16,12 @@ package chart
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"io/ioutil"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
"github.com/docker/distribution"
|
"github.com/docker/distribution"
|
||||||
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
||||||
"github.com/goharbor/harbor/src/controller/icon"
|
|
||||||
"github.com/goharbor/harbor/src/lib/errors"
|
"github.com/goharbor/harbor/src/lib/errors"
|
||||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||||
chartserver "github.com/goharbor/harbor/src/pkg/chart"
|
chartserver "github.com/goharbor/harbor/src/pkg/chart"
|
||||||
@ -28,9 +31,6 @@ import (
|
|||||||
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
helm_chart "helm.sh/helm/v3/pkg/chart"
|
helm_chart "helm.sh/helm/v3/pkg/chart"
|
||||||
"io/ioutil"
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -81,7 +81,6 @@ func (p *processorTestSuite) TestAbstractMetadata() {
|
|||||||
p.regCli.On("PullBlob", mock.Anything, mock.Anything).Return(0, ioutil.NopCloser(bytes.NewReader([]byte(chartYaml))), nil)
|
p.regCli.On("PullBlob", mock.Anything, mock.Anything).Return(0, ioutil.NopCloser(bytes.NewReader([]byte(chartYaml))), nil)
|
||||||
err := p.processor.AbstractMetadata(nil, artifact, []byte(chartManifest))
|
err := p.processor.AbstractMetadata(nil, artifact, []byte(chartManifest))
|
||||||
p.Require().Nil(err)
|
p.Require().Nil(err)
|
||||||
p.Equal(icon.DigestOfIconChart, artifact.Icon)
|
|
||||||
p.regCli.AssertExpectations(p.T())
|
p.regCli.AssertExpectations(p.T())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@ import (
|
|||||||
|
|
||||||
ps "github.com/goharbor/harbor/src/controller/artifact/processor"
|
ps "github.com/goharbor/harbor/src/controller/artifact/processor"
|
||||||
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
||||||
"github.com/goharbor/harbor/src/controller/icon"
|
|
||||||
"github.com/goharbor/harbor/src/lib/log"
|
"github.com/goharbor/harbor/src/lib/log"
|
||||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||||
)
|
)
|
||||||
@ -47,7 +46,6 @@ type processor struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *processor) AbstractMetadata(ctx context.Context, art *artifact.Artifact, manifest []byte) error {
|
func (p *processor) AbstractMetadata(ctx context.Context, art *artifact.Artifact, manifest []byte) error {
|
||||||
art.Icon = icon.DigestOfIconCNAB
|
|
||||||
cfgManiDgt := ""
|
cfgManiDgt := ""
|
||||||
// try to get the digest of the manifest that the config layer is referenced by
|
// try to get the digest of the manifest that the config layer is referenced by
|
||||||
for _, reference := range art.References {
|
for _, reference := range art.References {
|
||||||
|
@ -15,16 +15,16 @@
|
|||||||
package cnab
|
package cnab
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
"github.com/docker/distribution"
|
"github.com/docker/distribution"
|
||||||
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
||||||
"github.com/goharbor/harbor/src/controller/icon"
|
|
||||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||||
"github.com/goharbor/harbor/src/testing/pkg/registry"
|
"github.com/goharbor/harbor/src/testing/pkg/registry"
|
||||||
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
"io/ioutil"
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type processorTestSuite struct {
|
type processorTestSuite struct {
|
||||||
@ -99,7 +99,6 @@ func (p *processorTestSuite) TestAbstractMetadata() {
|
|||||||
p.Len(art.ExtraAttrs, 7)
|
p.Len(art.ExtraAttrs, 7)
|
||||||
p.Equal("0.1.1", art.ExtraAttrs["version"].(string))
|
p.Equal("0.1.1", art.ExtraAttrs["version"].(string))
|
||||||
p.Equal("helloworld", art.ExtraAttrs["name"].(string))
|
p.Equal("helloworld", art.ExtraAttrs["name"].(string))
|
||||||
p.Equal(icon.DigestOfIconCNAB, art.Icon)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *processorTestSuite) TestGetArtifactType() {
|
func (p *processorTestSuite) TestGetArtifactType() {
|
||||||
|
@ -21,7 +21,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/docker/distribution/manifest/schema2"
|
"github.com/docker/distribution/manifest/schema2"
|
||||||
"github.com/goharbor/harbor/src/controller/icon"
|
|
||||||
// annotation parsers will be registered
|
// annotation parsers will be registered
|
||||||
"github.com/goharbor/harbor/src/controller/artifact/annotation"
|
"github.com/goharbor/harbor/src/controller/artifact/annotation"
|
||||||
"github.com/goharbor/harbor/src/lib/errors"
|
"github.com/goharbor/harbor/src/lib/errors"
|
||||||
@ -122,9 +121,6 @@ func (d *defaultProcessor) AbstractMetadata(ctx context.Context, artifact *artif
|
|||||||
log.Errorf("the annotation parser parse annotation for artifact error: %v", err)
|
log.Errorf("the annotation parser parse annotation for artifact error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if artifact.Icon == "" {
|
|
||||||
artifact.Icon = icon.DigestOfIconDefault
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,14 +16,14 @@ package processor
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/goharbor/harbor/src/controller/icon"
|
|
||||||
"github.com/goharbor/harbor/src/pkg/distribution"
|
|
||||||
"github.com/goharbor/harbor/src/testing/mock"
|
|
||||||
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/goharbor/harbor/src/pkg/distribution"
|
||||||
|
"github.com/goharbor/harbor/src/testing/mock"
|
||||||
|
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
|
|
||||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||||
"github.com/goharbor/harbor/src/testing/pkg/parser"
|
"github.com/goharbor/harbor/src/testing/pkg/parser"
|
||||||
"github.com/goharbor/harbor/src/testing/pkg/registry"
|
"github.com/goharbor/harbor/src/testing/pkg/registry"
|
||||||
@ -184,7 +184,6 @@ func (d *defaultProcessorTestSuite) TestAbstractMetadata() {
|
|||||||
d.parser.On("Parse", context.TODO(), mock.AnythingOfType("*artifact.Artifact"), mock.AnythingOfType("[]byte")).Return(nil)
|
d.parser.On("Parse", context.TODO(), mock.AnythingOfType("*artifact.Artifact"), mock.AnythingOfType("[]byte")).Return(nil)
|
||||||
err = d.processor.AbstractMetadata(nil, art, content)
|
err = d.processor.AbstractMetadata(nil, art, content)
|
||||||
d.Require().Nil(err)
|
d.Require().Nil(err)
|
||||||
d.Equal(icon.DigestOfIconDefault, art.Icon)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDefaultProcessorTestSuite(t *testing.T) {
|
func TestDefaultProcessorTestSuite(t *testing.T) {
|
||||||
|
@ -20,7 +20,6 @@ import (
|
|||||||
"github.com/docker/distribution/manifest/manifestlist"
|
"github.com/docker/distribution/manifest/manifestlist"
|
||||||
"github.com/goharbor/harbor/src/controller/artifact/processor"
|
"github.com/goharbor/harbor/src/controller/artifact/processor"
|
||||||
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
||||||
"github.com/goharbor/harbor/src/controller/icon"
|
|
||||||
"github.com/goharbor/harbor/src/lib/log"
|
"github.com/goharbor/harbor/src/lib/log"
|
||||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||||
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
@ -48,7 +47,6 @@ func (i *indexProcessor) AbstractMetadata(ctx context.Context, artifact *artifac
|
|||||||
if err := i.IndexProcessor.AbstractMetadata(ctx, artifact, manifest); err != nil {
|
if err := i.IndexProcessor.AbstractMetadata(ctx, artifact, manifest); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
artifact.Icon = icon.DigestOfIconImage
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,6 @@ package image
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/goharbor/harbor/src/controller/icon"
|
|
||||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
)
|
)
|
||||||
@ -35,7 +34,6 @@ func (i *indexProcessTestSuite) TestAbstractMetadata() {
|
|||||||
artifact := &artifact.Artifact{}
|
artifact := &artifact.Artifact{}
|
||||||
err := i.processor.AbstractMetadata(nil, artifact, nil)
|
err := i.processor.AbstractMetadata(nil, artifact, nil)
|
||||||
i.Require().Nil(err)
|
i.Require().Nil(err)
|
||||||
i.Equal(icon.DigestOfIconImage, artifact.Icon)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *indexProcessTestSuite) TestGetArtifactType() {
|
func (i *indexProcessTestSuite) TestGetArtifactType() {
|
||||||
|
@ -17,9 +17,9 @@ package image
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
|
||||||
"github.com/docker/distribution/manifest/schema1"
|
"github.com/docker/distribution/manifest/schema1"
|
||||||
"github.com/goharbor/harbor/src/controller/artifact/processor"
|
"github.com/goharbor/harbor/src/controller/artifact/processor"
|
||||||
"github.com/goharbor/harbor/src/controller/icon"
|
|
||||||
"github.com/goharbor/harbor/src/lib/errors"
|
"github.com/goharbor/harbor/src/lib/errors"
|
||||||
"github.com/goharbor/harbor/src/lib/log"
|
"github.com/goharbor/harbor/src/lib/log"
|
||||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||||
@ -46,7 +46,6 @@ func (m *manifestV1Processor) AbstractMetadata(ctx context.Context, artifact *ar
|
|||||||
artifact.ExtraAttrs = map[string]interface{}{}
|
artifact.ExtraAttrs = map[string]interface{}{}
|
||||||
}
|
}
|
||||||
artifact.ExtraAttrs["architecture"] = mani.Architecture
|
artifact.ExtraAttrs["architecture"] = mani.Architecture
|
||||||
artifact.Icon = icon.DigestOfIconImage
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,6 @@ package image
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/goharbor/harbor/src/controller/icon"
|
|
||||||
"github.com/goharbor/harbor/src/lib/errors"
|
"github.com/goharbor/harbor/src/lib/errors"
|
||||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
@ -83,7 +82,6 @@ func (m *manifestV1ProcessorTestSuite) TestAbstractMetadata() {
|
|||||||
err := m.processor.AbstractMetadata(nil, artifact, []byte(manifest))
|
err := m.processor.AbstractMetadata(nil, artifact, []byte(manifest))
|
||||||
m.Require().Nil(err)
|
m.Require().Nil(err)
|
||||||
m.Assert().Equal("amd64", artifact.ExtraAttrs["architecture"].(string))
|
m.Assert().Equal("amd64", artifact.ExtraAttrs["architecture"].(string))
|
||||||
m.Equal(icon.DigestOfIconImage, artifact.Icon)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manifestV1ProcessorTestSuite) TestAbstractAddition() {
|
func (m *manifestV1ProcessorTestSuite) TestAbstractAddition() {
|
||||||
|
@ -21,7 +21,6 @@ import (
|
|||||||
"github.com/docker/distribution/manifest/schema2"
|
"github.com/docker/distribution/manifest/schema2"
|
||||||
"github.com/goharbor/harbor/src/controller/artifact/processor"
|
"github.com/goharbor/harbor/src/controller/artifact/processor"
|
||||||
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
||||||
"github.com/goharbor/harbor/src/controller/icon"
|
|
||||||
"github.com/goharbor/harbor/src/lib/errors"
|
"github.com/goharbor/harbor/src/lib/errors"
|
||||||
"github.com/goharbor/harbor/src/lib/log"
|
"github.com/goharbor/harbor/src/lib/log"
|
||||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||||
@ -57,7 +56,6 @@ func (m *manifestV2Processor) AbstractMetadata(ctx context.Context, artifact *ar
|
|||||||
if err := m.ManifestProcessor.AbstractMetadata(ctx, artifact, manifest); err != nil {
|
if err := m.ManifestProcessor.AbstractMetadata(ctx, artifact, manifest); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
artifact.Icon = icon.DigestOfIconImage
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,6 @@ import (
|
|||||||
"github.com/docker/distribution"
|
"github.com/docker/distribution"
|
||||||
"github.com/docker/distribution/manifest/schema2"
|
"github.com/docker/distribution/manifest/schema2"
|
||||||
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
"github.com/goharbor/harbor/src/controller/artifact/processor/base"
|
||||||
"github.com/goharbor/harbor/src/controller/icon"
|
|
||||||
"github.com/goharbor/harbor/src/lib/errors"
|
"github.com/goharbor/harbor/src/lib/errors"
|
||||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||||
"github.com/goharbor/harbor/src/testing/mock"
|
"github.com/goharbor/harbor/src/testing/mock"
|
||||||
@ -144,7 +143,6 @@ func (m *manifestV2ProcessorTestSuite) TestAbstractMetadata() {
|
|||||||
m.regCli.On("PullBlob", mock.Anything, mock.Anything).Return(0, ioutil.NopCloser(bytes.NewReader([]byte(config))), nil)
|
m.regCli.On("PullBlob", mock.Anything, mock.Anything).Return(0, ioutil.NopCloser(bytes.NewReader([]byte(config))), nil)
|
||||||
err := m.processor.AbstractMetadata(nil, artifact, []byte(manifest))
|
err := m.processor.AbstractMetadata(nil, artifact, []byte(manifest))
|
||||||
m.Require().Nil(err)
|
m.Require().Nil(err)
|
||||||
m.Equal(icon.DigestOfIconImage, artifact.Icon)
|
|
||||||
m.regCli.AssertExpectations(m.T())
|
m.regCli.AssertExpectations(m.T())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,26 +29,19 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/goharbor/harbor/src/lib/errors"
|
"github.com/goharbor/harbor/src/lib/errors"
|
||||||
|
"github.com/goharbor/harbor/src/lib/icon"
|
||||||
"github.com/goharbor/harbor/src/lib/q"
|
"github.com/goharbor/harbor/src/lib/q"
|
||||||
"github.com/goharbor/harbor/src/pkg/artifact"
|
"github.com/goharbor/harbor/src/pkg/artifact"
|
||||||
"github.com/goharbor/harbor/src/pkg/registry"
|
"github.com/goharbor/harbor/src/pkg/registry"
|
||||||
"github.com/nfnt/resize"
|
"github.com/nfnt/resize"
|
||||||
)
|
)
|
||||||
|
|
||||||
// const definitions
|
|
||||||
const (
|
|
||||||
DigestOfIconImage = "sha256:0048162a053eef4d4ce3fe7518615bef084403614f8bca43b40ae2e762e11e06"
|
|
||||||
DigestOfIconChart = "sha256:61cf3a178ff0f75bf08a25d96b75cf7355dc197749a9f128ed3ef34b0df05518"
|
|
||||||
DigestOfIconCNAB = "sha256:089bdda265c14d8686111402c8ad629e8177a1ceb7dcd0f7f39b6480f623b3bd"
|
|
||||||
DigestOfIconDefault = "sha256:da834479c923584f4cbcdecc0dac61f32bef1d51e8aae598cf16bd154efab49f"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
builtInIcons = map[string]string{
|
builtInIcons = map[string]string{
|
||||||
DigestOfIconImage: "./icons/image.png",
|
icon.DigestOfIconImage: "./icons/image.png",
|
||||||
DigestOfIconChart: "./icons/chart.png",
|
icon.DigestOfIconChart: "./icons/chart.png",
|
||||||
DigestOfIconCNAB: "./icons/cnab.png",
|
icon.DigestOfIconCNAB: "./icons/cnab.png",
|
||||||
DigestOfIconDefault: "./icons/default.png",
|
icon.DigestOfIconDefault: "./icons/default.png",
|
||||||
}
|
}
|
||||||
// Ctl is a global icon controller instance
|
// Ctl is a global icon controller instance
|
||||||
Ctl = NewController()
|
Ctl = NewController()
|
||||||
|
@ -30,7 +30,7 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
// base64 encoded png icon for testing
|
// base64 encoded png icon for testing
|
||||||
icon = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAb1BMVEUAAAAkJG0kJFuAgIeDg4MmJmIjI2MnIV4mIWKCgoKAgIQmImCCgoYnI2EkIWKAgIOBgYWBgYOAgoSAgoQnI2EmImAmI2IlImEmIWEmImEmImEmImGAgYQmImGAgYWAgYQmImGAgYQmImGAgYT////3jpbIAAAAInRSTlMABw4gISIkLi8zNDU7QkZGSWdodoSHmp2g1djg4OPj8fT1aPEwQAAAAAFiS0dEJLQG+ZkAAACMSURBVFjD7dfLDoIwEEbho6ioeENQvCP6/u/opiSQNMYBF6b+Zz35Nm0mLY+eIUBAC9jnhgoPMMVQEi4wv3nbApyurvgNsHh6ywDu9WAi4G+Aat0sAliuXMNPgLLjVf5tYDxxDToCtlMQICAQoNo0G2krCzABs4u3FOB4dsVhP/N6AcXO0EE/FgHfBV5wuoevcrdCfQAAAABJRU5ErkJggg=="
|
iconStr = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAb1BMVEUAAAAkJG0kJFuAgIeDg4MmJmIjI2MnIV4mIWKCgoKAgIQmImCCgoYnI2EkIWKAgIOBgYWBgYOAgoSAgoQnI2EmImAmI2IlImEmIWEmImEmImEmImGAgYQmImGAgYWAgYQmImGAgYQmImGAgYT////3jpbIAAAAInRSTlMABw4gISIkLi8zNDU7QkZGSWdodoSHmp2g1djg4OPj8fT1aPEwQAAAAAFiS0dEJLQG+ZkAAACMSURBVFjD7dfLDoIwEEbho6ioeENQvCP6/u/opiSQNMYBF6b+Zz35Nm0mLY+eIUBAC9jnhgoPMMVQEi4wv3nbApyurvgNsHh6ywDu9WAi4G+Aat0sAliuXMNPgLLjVf5tYDxxDToCtlMQICAQoNo0G2krCzABs4u3FOB4dsVhP/N6AcXO0EE/FgHfBV5wuoevcrdCfQAAAABJRU5ErkJggg=="
|
||||||
)
|
)
|
||||||
|
|
||||||
type controllerTestSuite struct {
|
type controllerTestSuite struct {
|
||||||
@ -66,7 +66,7 @@ func (c *controllerTestSuite) TestGet() {
|
|||||||
RepositoryName: "library/hello-world",
|
RepositoryName: "library/hello-world",
|
||||||
},
|
},
|
||||||
}, nil)
|
}, nil)
|
||||||
blob := ioutil.NopCloser(base64.NewDecoder(base64.StdEncoding, strings.NewReader(icon)))
|
blob := ioutil.NopCloser(base64.NewDecoder(base64.StdEncoding, strings.NewReader(iconStr)))
|
||||||
c.regCli.On("PullBlob", mock.Anything, mock.Anything).Return(0, blob, nil)
|
c.regCli.On("PullBlob", mock.Anything, mock.Anything).Return(0, blob, nil)
|
||||||
icon, err := c.controller.Get(nil, "sha256:364feec11702f7ee079ba81da723438373afb0921f3646e9e5015406ee150986")
|
icon, err := c.controller.Get(nil, "sha256:364feec11702f7ee079ba81da723438373afb0921f3646e9e5015406ee150986")
|
||||||
c.Require().Nil(err)
|
c.Require().Nil(err)
|
||||||
|
9
src/lib/icon/const.go
Normal file
9
src/lib/icon/const.go
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package icon
|
||||||
|
|
||||||
|
// const definitions
|
||||||
|
const (
|
||||||
|
DigestOfIconImage = "sha256:0048162a053eef4d4ce3fe7518615bef084403614f8bca43b40ae2e762e11e06"
|
||||||
|
DigestOfIconChart = "sha256:61cf3a178ff0f75bf08a25d96b75cf7355dc197749a9f128ed3ef34b0df05518"
|
||||||
|
DigestOfIconCNAB = "sha256:089bdda265c14d8686111402c8ad629e8177a1ceb7dcd0f7f39b6480f623b3bd"
|
||||||
|
DigestOfIconDefault = "sha256:da834479c923584f4cbcdecc0dac61f32bef1d51e8aae598cf16bd154efab49f"
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user