Skip to content
This repository was archived by the owner on Jun 3, 2025. It is now read-only.

Commit 6a918a6

Browse files
committed
add createdBy for more context
1 parent 1bc1ba2 commit 6a918a6

1 file changed

Lines changed: 48 additions & 5 deletions

File tree

integration/integration_test.go

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -963,12 +963,12 @@ func layerDiff(t *testing.T, image1, image2 string) {
963963
t.Helper()
964964
layers1, err := getImageLayers(image1)
965965
if err != nil {
966-
t.Fatalf("Couldn't get details from image reference for (%s): %s", image1, err)
966+
t.Fatalf("Couldn't get layers from image reference for (%s): %s", image1, err)
967967
}
968968

969969
layers2, err := getImageLayers(image2)
970970
if err != nil {
971-
t.Fatalf("Couldn't get details from image reference for (%s): %s", image2, err)
971+
t.Fatalf("Couldn't get layers from image reference for (%s): %s", image2, err)
972972
}
973973

974974
for idx := range min(len(layers1), len(layers2)) {
@@ -983,12 +983,29 @@ func layerDiff(t *testing.T, image1, image2 string) {
983983
}
984984

985985
if l1d != l2d {
986-
t.Errorf("Image Layers #%d differ %s != %s", idx, l1d, l2d)
986+
command, err := resolveCreatedBy(image1, idx)
987+
if err != nil {
988+
t.Errorf("Image Layers #%d differ", idx)
989+
} else {
990+
t.Errorf("Image Layers #%d differ: %s", idx, command)
991+
}
987992
}
988993
}
989994

990-
if len(layers1) != len(layers2) {
991-
t.Errorf("Image Layer count differs %d != %d", len(layers1), len(layers2))
995+
if len(layers1) > len(layers2) {
996+
command, err := resolveCreatedBy(image1, len(layers2))
997+
if err != nil {
998+
t.Errorf("Image Layer count differs %d != %d", len(layers1), len(layers2))
999+
} else {
1000+
t.Errorf("Image Layer count differs %d != %d: %s", len(layers1), len(layers2), command)
1001+
}
1002+
} else if len(layers1) < len(layers2) {
1003+
command, err := resolveCreatedBy(image2, len(layers1))
1004+
if err != nil {
1005+
t.Errorf("Image Layer count differs %d != %d", len(layers1), len(layers2))
1006+
} else {
1007+
t.Errorf("Image Layer count differs %d != %d: %s", len(layers1), len(layers2), command)
1008+
}
9921009
}
9931010
}
9941011

@@ -1010,6 +1027,32 @@ func checkLayers(t *testing.T, image1, image2 string, offset int) {
10101027
}
10111028
}
10121029

1030+
func resolveCreatedBy(image string, layerIndex int) (string, error) {
1031+
ref, err := name.ParseReference(image, name.WeakValidation)
1032+
if err != nil {
1033+
return "", fmt.Errorf("Couldn't parse referance to image %s: %w", image, err)
1034+
}
1035+
imgRef, err := daemon.Image(ref)
1036+
if err != nil {
1037+
return "", fmt.Errorf("Couldn't get reference to image %s from daemon: %w", image, err)
1038+
}
1039+
cfg, err := imgRef.ConfigFile()
1040+
if err != nil {
1041+
return "", fmt.Errorf("Couldn't get Config for image %s: %w", image, err)
1042+
}
1043+
idx := 0
1044+
for _, history := range cfg.History {
1045+
if history.EmptyLayer {
1046+
continue
1047+
}
1048+
if idx == layerIndex {
1049+
return history.CreatedBy, nil
1050+
}
1051+
idx++
1052+
}
1053+
return "", fmt.Errorf("LayerIndex %d not found in History of length %d", layerIndex, len(cfg.History))
1054+
}
1055+
10131056
func getImageLayers(image string) ([]v1.Layer, error) {
10141057
ref, err := name.ParseReference(image, name.WeakValidation)
10151058
if err != nil {

0 commit comments

Comments
 (0)