Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP added image-index methods #2

Merged
merged 61 commits into from
Apr 2, 2024
Merged
Show file tree
Hide file tree
Changes from 52 commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
b31a1ee
WIP added image-index methods
WYGIN Dec 8, 2023
186495b
fWIP fix lint and run format
WYGIN Dec 15, 2023
0c5a954
removed ,gitpod.yml file
WYGIN Dec 15, 2023
bd7af69
WIP removed ImageIndexHandler
WYGIN Dec 15, 2023
85fd5dc
WIP fix some missing logic
WYGIN Dec 15, 2023
f6f80f1
WIP added registry and insecure fields to IndexAddOptions
WYGIN Jan 10, 2024
20568f7
WIP added empty test cases
WYGIN Jan 11, 2024
51446eb
WIP added tests but failing
WYGIN Jan 13, 2024
334b72a
WIP removed oci layout test files
WYGIN Jan 13, 2024
4e79960
WIP removed cnb dir from local
WYGIN Jan 13, 2024
3b842ab
WIP refactor code to improve readability
WYGIN Jan 19, 2024
bd05301
WIP added fake index with empty test cases
WYGIN Jan 20, 2024
39a6fa3
WIP added few tests for fake index
WYGIN Jan 20, 2024
45d6b75
WIP fixed fake index tests
WYGIN Jan 20, 2024
e8c303a
WIP defined errors at one place
WYGIN Jan 20, 2024
00a8a80
WIP trying to fix error when saving index
WYGIN Jan 20, 2024
01db00c
WIP fix: imgutil#Save() and annotations bugs
WYGIN Jan 21, 2024
592a65c
WIP fix: all bugs fixed except image hash change when adding image to…
WYGIN Jan 21, 2024
9ec2c8c
WIP added tests for all indexes
WYGIN Jan 22, 2024
324a62a
WIP made index.NewIndex to return imgutil.ImageIndex instead of imgut…
WYGIN Jan 22, 2024
95b0df4
WIP improved test coverage
WYGIN Jan 26, 2024
3ca7018
WIP improved test coverage by adding #Save
WYGIN Jan 27, 2024
fe02008
WIP fix failing tests for #Add
WYGIN Jan 28, 2024
ab15c33
WIP fix all bugs except mutated configFile and Manifest of image when…
WYGIN Jan 29, 2024
fd3d91c
WIP fix bug except #Save urls
WYGIN Jan 30, 2024
13c3f65
WIP fix all bugs except #Save URLs
WYGIN Jan 31, 2024
d01eaf4
WIP fix: SetURLs for #Save
WYGIN Feb 5, 2024
e158f8d
WIP bug fixes
WYGIN Feb 6, 2024
8d76f28
WIP added goroutines to improve performance
WYGIN Feb 8, 2024
cdd16f8
WIP minor bug fixes
WYGIN Feb 9, 2024
921a22f
WIP added manifestOnly handler
WYGIN Feb 12, 2024
9edc6be
WIP minor changes to ImageIndex#Push
WYGIN Feb 12, 2024
e7cfa9c
WIP fix: use latest index when pushing index
WYGIN Feb 12, 2024
c98cea9
WIP added TaggableIndex to push IndexManifest only
WYGIN Feb 12, 2024
fad6445
WIP fix: added decribable methods to TaggableIndex
WYGIN Feb 12, 2024
0b018df
WIP added documentation, fix: IndexHandler#Push iissue
WYGIN Feb 13, 2024
1d563fd
WIP added tests for index.NewIndex
WYGIN Feb 13, 2024
da80ffb
Merge branch 'dev-image-index' into image-index
WYGIN Feb 14, 2024
d071ec2
WIP formatted code after Merge upstream branch
WYGIN Feb 14, 2024
2f20186
WIP: fix bugs
WYGIN Feb 19, 2024
d57cc75
fix: tests making 'pack manifest' fail
WYGIN Feb 29, 2024
5f5ff95
fix: return error when setters called on unknown digest of fake index
WYGIN Feb 29, 2024
658b7ff
refactor: improved error messages
WYGIN Feb 29, 2024
363020d
fix: bug causing local images to fail annotate
WYGIN Mar 1, 2024
2b39c6a
fix: manifest handler not saved annotated images
WYGIN Mar 1, 2024
052db76
refactor: removed IndexHandler
WYGIN Mar 2, 2024
96558aa
refactor: remove dead code
WYGIN Mar 2, 2024
38da26f
refactor: improve ManifestHandler#Save readability
WYGIN Mar 2, 2024
2dad2cc
refactor: nit all methods except #Add
WYGIN Mar 2, 2024
0bf93b7
refactor: nit nil pointer handling
WYGIN Mar 2, 2024
3a656df
refactor: ManifestHandler tests
WYGIN Mar 2, 2024
1c3b05e
feat: added #Features #OSFeatures #URLs #Annotations methods to imgut…
WYGIN Mar 4, 2024
abfcabf
refactor: remove IndexHandler
WYGIN Mar 4, 2024
439fac9
fix: removed duplicate stringSlices for features, osFeatures, urls
WYGIN Mar 14, 2024
6e77fba
refactor: change imgutil.Platform to v1.Platform
WYGIN Mar 15, 2024
49941ee
refactor: local imaages added to index should implement EdditableImage
WYGIN Mar 15, 2024
3acfd71
fix: add local images return index not found error
WYGIN Mar 25, 2024
b5aab10
WIP: added tests for imgutil#MutateManifest
WYGIN Mar 28, 2024
5a8a519
WIP: added tests
SaikiranIndia Mar 30, 2024
3eb4bc6
fix: test
SaikiranIndia Mar 30, 2024
c709d08
WIP: refactor: improve code readability
SaikiranIndia Mar 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
162 changes: 137 additions & 25 deletions cnb_image.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,13 @@ type CNBImageCore struct {
// required
v1.Image // the working image
// optional
createdAt time.Time
preferredMediaTypes MediaTypes
preserveHistory bool
previousImage v1.Image
createdAt time.Time
preferredMediaTypes MediaTypes
preserveHistory bool
previousImage v1.Image
os, arch, variant, osVersion string
features, osFeatures, urls []string
annotations map[string]string
WYGIN marked this conversation as resolved.
Show resolved Hide resolved
}

var _ v1.Image = &CNBImageCore{}
Expand All @@ -34,7 +37,11 @@ var _ v1.Image = &CNBImageCore{}

// TBD Deprecated: Architecture
func (i *CNBImageCore) Architecture() (string, error) {
configFile, err := getConfigFile(i.Image)
if i.arch != "" {
return i.arch, nil
}

configFile, err := GetConfigFile(i.Image)
if err != nil {
return "", err
}
Expand All @@ -43,7 +50,7 @@ func (i *CNBImageCore) Architecture() (string, error) {

// TBD Deprecated: CreatedAt
func (i *CNBImageCore) CreatedAt() (time.Time, error) {
configFile, err := getConfigFile(i.Image)
configFile, err := GetConfigFile(i.Image)
if err != nil {
return time.Time{}, err
}
Expand All @@ -52,15 +59,15 @@ func (i *CNBImageCore) CreatedAt() (time.Time, error) {

// TBD Deprecated: Entrypoint
func (i *CNBImageCore) Entrypoint() ([]string, error) {
configFile, err := getConfigFile(i.Image)
configFile, err := GetConfigFile(i.Image)
if err != nil {
return nil, err
}
return configFile.Config.Entrypoint, nil
}

func (i *CNBImageCore) Env(key string) (string, error) {
configFile, err := getConfigFile(i.Image)
configFile, err := GetConfigFile(i.Image)
if err != nil {
return "", err
}
Expand All @@ -74,7 +81,7 @@ func (i *CNBImageCore) Env(key string) (string, error) {
}

func (i *CNBImageCore) GetAnnotateRefName() (string, error) {
manifest, err := getManifest(i.Image)
manifest, err := GetManifest(i.Image)
if err != nil {
return "", err
}
Expand All @@ -95,7 +102,7 @@ func (i *CNBImageCore) GetLayer(diffID string) (io.ReadCloser, error) {

// TBD Deprecated: History
func (i *CNBImageCore) History() ([]v1.History, error) {
configFile, err := getConfigFile(i.Image)
configFile, err := GetConfigFile(i.Image)
if err != nil {
return nil, err
}
Expand All @@ -104,7 +111,7 @@ func (i *CNBImageCore) History() ([]v1.History, error) {

// TBD Deprecated: Label
func (i *CNBImageCore) Label(key string) (string, error) {
configFile, err := getConfigFile(i.Image)
configFile, err := GetConfigFile(i.Image)
if err != nil {
return "", err
}
Expand All @@ -113,7 +120,7 @@ func (i *CNBImageCore) Label(key string) (string, error) {

// TBD Deprecated: Labels
func (i *CNBImageCore) Labels() (map[string]string, error) {
configFile, err := getConfigFile(i.Image)
configFile, err := GetConfigFile(i.Image)
if err != nil {
return nil, err
}
Expand All @@ -127,7 +134,11 @@ func (i *CNBImageCore) ManifestSize() (int64, error) {

// TBD Deprecated: OS
func (i *CNBImageCore) OS() (string, error) {
configFile, err := getConfigFile(i.Image)
if i.os != "" {
return i.os, nil
}

configFile, err := GetConfigFile(i.Image)
if err != nil {
return "", err
}
Expand All @@ -136,13 +147,78 @@ func (i *CNBImageCore) OS() (string, error) {

// TBD Deprecated: OSVersion
func (i *CNBImageCore) OSVersion() (string, error) {
configFile, err := getConfigFile(i.Image)
if i.osVersion != "" {
return i.osVersion, nil
}

configFile, err := GetConfigFile(i.Image)
if err != nil {
return "", err
}
return configFile.OSVersion, nil
}

func (i *CNBImageCore) OSFeatures() ([]string, error) {
if len(i.osFeatures) != 0 {
return i.osFeatures, nil
}

configFile, err := GetConfigFile(i.Image)
if err != nil {
return nil, err
}
return configFile.OSFeatures, nil
}

func (i *CNBImageCore) Features() ([]string, error) {
if len(i.features) != 0 {
return i.features, nil
}

mfest, err := GetManifest(i.Image)
if err != nil {
return nil, err
}

p := mfest.Config.Platform
if p == nil || len(p.Features) < 1 {
return nil, ErrFeaturesUndefined(i.preferredMediaTypes.ManifestType(), "")
}
return p.Features, nil
}

func (i *CNBImageCore) URLs() ([]string, error) {
if len(i.urls) != 0 {
return i.urls, nil
}

mfest, err := GetManifest(i.Image)
if err != nil {
return nil, err
}

if len(mfest.Config.URLs) < 1 {
return nil, ErrURLsUndefined(i.preferredMediaTypes.ManifestType(), "")
}
return mfest.Config.URLs, nil
}

func (i *CNBImageCore) Annotations() (map[string]string, error) {
if len(i.annotations) != 0 {
return i.annotations, nil
}

mfest, err := GetManifest(i.Image)
if err != nil {
return nil, err
}

if len(mfest.Annotations) < 1 {
return nil, ErrAnnotationsUndefined(i.preferredMediaTypes.ManifestType(), "")
}
return mfest.Annotations, nil
}

func (i *CNBImageCore) TopLayer() (string, error) {
layers, err := i.Image.Layers()
if err != nil {
Expand Down Expand Up @@ -171,7 +247,11 @@ func (i *CNBImageCore) Valid() bool {

// TBD Deprecated: Variant
func (i *CNBImageCore) Variant() (string, error) {
configFile, err := getConfigFile(i.Image)
if i.variant != "" {
return i.variant, nil
}

configFile, err := GetConfigFile(i.Image)
if err != nil {
return "", err
}
Expand All @@ -180,15 +260,15 @@ func (i *CNBImageCore) Variant() (string, error) {

// TBD Deprecated: WorkingDir
func (i *CNBImageCore) WorkingDir() (string, error) {
configFile, err := getConfigFile(i.Image)
configFile, err := GetConfigFile(i.Image)
if err != nil {
return "", err
}
return configFile.Config.WorkingDir, nil
}

func (i *CNBImageCore) AnnotateRefName(refName string) error {
manifest, err := getManifest(i.Image)
manifest, err := GetManifest(i.Image)
if err != nil {
return err
}
Expand All @@ -207,6 +287,7 @@ func (i *CNBImageCore) AnnotateRefName(refName string) error {

// TBD Deprecated: SetArchitecture
func (i *CNBImageCore) SetArchitecture(architecture string) error {
i.arch = architecture
return i.MutateConfigFile(func(c *v1.ConfigFile) {
c.Architecture = architecture
})
Expand Down Expand Up @@ -266,20 +347,51 @@ func (i *CNBImageCore) SetLabel(key, val string) error {
}

func (i *CNBImageCore) SetOS(osVal string) error {
i.os = osVal
return i.MutateConfigFile(func(c *v1.ConfigFile) {
c.OS = osVal
})
}

// TBD Deprecated: SetOSVersion
func (i *CNBImageCore) SetOSVersion(osVersion string) error {
i.osVersion = osVersion
return i.MutateConfigFile(func(c *v1.ConfigFile) {
c.OSVersion = osVersion
})
}

func (i *CNBImageCore) SetOSFeatures(osFeatures []string) error {
i.osFeatures = append(i.osFeatures, osFeatures...)
return i.MutateConfigFile(func(c *v1.ConfigFile) {
c.OSFeatures = osFeatures
})
}

func (i *CNBImageCore) SetFeatures(features []string) (err error) {
i.features = append(i.features, features...)
return nil
}

func (i *CNBImageCore) SetURLs(urls []string) (err error) {
i.urls = append(i.urls, urls...)
return nil
}

func (i *CNBImageCore) SetAnnotations(annotations map[string]string) error {
if len(i.annotations) == 0 {
i.annotations = make(map[string]string)
}

for k, v := range annotations {
i.annotations[k] = v
}
return nil
}

// TBD Deprecated: SetVariant
func (i *CNBImageCore) SetVariant(variant string) error {
i.variant = variant
return i.MutateConfigFile(func(c *v1.ConfigFile) {
c.Variant = variant
})
Expand Down Expand Up @@ -341,7 +453,7 @@ func (i *CNBImageCore) Rebase(baseTopLayerDiffID string, withNewBase Image) erro
}

// ensure new config matches provided image
newBaseConfigFile, err := getConfigFile(newBase)
newBaseConfigFile, err := GetConfigFile(newBase)
if err != nil {
return err
}
Expand Down Expand Up @@ -407,7 +519,7 @@ func getLayerIndex(forDiffID string, fromImage v1.Image) (int, error) {
if err != nil {
return -1, fmt.Errorf("failed to get layer hash: %w", err)
}
configFile, err := getConfigFile(fromImage)
configFile, err := GetConfigFile(fromImage)
if err != nil {
return -1, fmt.Errorf("failed to get config file: %w", err)
}
Expand All @@ -420,7 +532,7 @@ func getLayerIndex(forDiffID string, fromImage v1.Image) (int, error) {
}

func getHistory(forIndex int, fromImage v1.Image) (v1.History, error) {
configFile, err := getConfigFile(fromImage)
configFile, err := GetConfigFile(fromImage)
if err != nil {
return v1.History{}, err
}
Expand Down Expand Up @@ -459,7 +571,7 @@ func (i *CNBImageCore) ReuseLayerWithHistory(diffID string, history v1.History)

func (i *CNBImageCore) MutateConfigFile(withFunc func(c *v1.ConfigFile)) error {
// FIXME: put MutateConfigFile on the interface when `remote` and `layout` packages also support it.
configFile, err := getConfigFile(i.Image)
configFile, err := GetConfigFile(i.Image)
if err != nil {
return err
}
Expand Down Expand Up @@ -496,24 +608,24 @@ func (i *CNBImageCore) SetCreatedAtAndHistory() error {
return err
}

func getConfigFile(image v1.Image) (*v1.ConfigFile, error) {
func GetConfigFile(image v1.Image) (*v1.ConfigFile, error) {
WYGIN marked this conversation as resolved.
Show resolved Hide resolved
configFile, err := image.ConfigFile()
if err != nil {
return nil, err
}
if configFile == nil {
return nil, errors.New("missing config file")
return nil, ErrConfigFileUndefined
}
return configFile, nil
}

func getManifest(image v1.Image) (*v1.Manifest, error) {
func GetManifest(image v1.Image) (*v1.Manifest, error) {
WYGIN marked this conversation as resolved.
Show resolved Hide resolved
manifest, err := image.Manifest()
if err != nil {
return nil, err
}
if manifest == nil {
return nil, errors.New("missing manifest")
return nil, ErrManifestUndefined
}
return manifest, nil
}
Loading