forked from toolshed/abra
Compare commits
1
Commits
main
...
handle-digests
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5152571a70 |
@@ -98,7 +98,7 @@ func GetMainAppImage(recipe recipe.Recipe) (string, error) {
|
|||||||
}
|
}
|
||||||
for _, service := range config.Services {
|
for _, service := range config.Services {
|
||||||
if service.Name == "app" {
|
if service.Name == "app" {
|
||||||
img, err := reference.ParseNormalizedNamed(service.Image)
|
img, err := reference.ParseNormalizedNamed(formatter.RemoveSha(service.Image))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -322,7 +322,7 @@ func GetImageVersions(recipe recipePkg.Recipe) (map[string]string, error) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
img, err := reference.ParseNormalizedNamed(service.Image)
|
img, err := reference.ParseNormalizedNamed(formatter.RemoveSha(service.Image))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return services, err
|
return services, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ interface.`),
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, service := range config.Services {
|
for _, service := range config.Services {
|
||||||
img, err := reference.ParseNormalizedNamed(service.Image)
|
img, err := reference.ParseNormalizedNamed(formatter.RemoveSha(service.Image))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -158,7 +158,7 @@ func GetImagesForStack(cl *dockerClient.Client, app appPkg.App) (map[string]stri
|
|||||||
if service.Spec.TaskTemplate.ContainerSpec != nil {
|
if service.Spec.TaskTemplate.ContainerSpec != nil {
|
||||||
imageName := service.Spec.TaskTemplate.ContainerSpec.Image
|
imageName := service.Spec.TaskTemplate.ContainerSpec.Image
|
||||||
|
|
||||||
imageParsed, err := reference.ParseNormalizedNamed(imageName)
|
imageParsed, err := reference.ParseNormalizedNamed(formatter.RemoveSha(imageName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warn(err)
|
log.Warn(err)
|
||||||
continue
|
continue
|
||||||
@@ -281,7 +281,7 @@ func GatherImagesForDeploy(cl *dockerClient.Client, app appPkg.App, compose *com
|
|||||||
newImages := make(map[string]string)
|
newImages := make(map[string]string)
|
||||||
|
|
||||||
for _, service := range compose.Services {
|
for _, service := range compose.Services {
|
||||||
imageParsed, err := reference.ParseNormalizedNamed(service.Image)
|
imageParsed, err := reference.ParseNormalizedNamed(formatter.RemoveSha(service.Image))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warn(err)
|
log.Warn(err)
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ func SmallSHA(hash string) string {
|
|||||||
return hash[:8]
|
return hash[:8]
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveSha remove image sha from a string that are added in some docker outputs
|
// RemoveSha remove image sha (digest suffix) from a string that are added in some docker outputs
|
||||||
|
// e.g., "image:tag@sha256:..." -> "image:tag"
|
||||||
func RemoveSha(str string) string {
|
func RemoveSha(str string) string {
|
||||||
return strings.Split(str, "@")[0]
|
return strings.Split(str, "@")[0]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,13 @@ import (
|
|||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestRemoveSha(t *testing.T) {
|
||||||
|
assert.Equal(t, "ubuntu:latest", RemoveSha("ubuntu:latest@sha256:1234567890abcdef"))
|
||||||
|
assert.Equal(t, "ubuntu:latest", RemoveSha("ubuntu:latest"))
|
||||||
|
assert.Equal(t, "my-repo/my-image:v1", RemoveSha("my-repo/my-image:v1@sha256:abcdef1234567890"))
|
||||||
|
assert.Equal(t, "my-repo/my-image", RemoveSha("my-repo/my-image@sha256:abcdef1234567890"))
|
||||||
|
}
|
||||||
|
|
||||||
func TestBoldDirtyDefault(t *testing.T) {
|
func TestBoldDirtyDefault(t *testing.T) {
|
||||||
assert.Equal(t, "foo", BoldDirtyDefault("foo"))
|
assert.Equal(t, "foo", BoldDirtyDefault("foo"))
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-3
@@ -7,6 +7,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
|
"coopcloud.tech/abra/pkg/formatter"
|
||||||
"coopcloud.tech/abra/pkg/i18n"
|
"coopcloud.tech/abra/pkg/i18n"
|
||||||
"coopcloud.tech/abra/pkg/log"
|
"coopcloud.tech/abra/pkg/log"
|
||||||
"coopcloud.tech/abra/pkg/recipe"
|
"coopcloud.tech/abra/pkg/recipe"
|
||||||
@@ -321,7 +322,7 @@ func LintAllImagesTagged(recipe recipe.Recipe) (bool, error) {
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
for _, service := range config.Services {
|
for _, service := range config.Services {
|
||||||
img, err := reference.ParseNormalizedNamed(service.Image)
|
img, err := reference.ParseNormalizedNamed(formatter.RemoveSha(service.Image))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@@ -339,7 +340,7 @@ func LintNoUnstableTags(recipe recipe.Recipe) (bool, error) {
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
for _, service := range config.Services {
|
for _, service := range config.Services {
|
||||||
img, err := reference.ParseNormalizedNamed(service.Image)
|
img, err := reference.ParseNormalizedNamed(formatter.RemoveSha(service.Image))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@@ -366,7 +367,7 @@ func LintSemverLikeTags(recipe recipe.Recipe) (bool, error) {
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
for _, service := range config.Services {
|
for _, service := range config.Services {
|
||||||
img, err := reference.ParseNormalizedNamed(service.Image)
|
img, err := reference.ParseNormalizedNamed(formatter.RemoveSha(service.Image))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ func (r Recipe) UpdateTag(image, tag string) (bool, error) {
|
|||||||
continue // may be a compose.$optional.yml file
|
continue // may be a compose.$optional.yml file
|
||||||
}
|
}
|
||||||
|
|
||||||
img, _ := reference.ParseNormalizedNamed(service.Image)
|
img, _ := reference.ParseNormalizedNamed(formatter.RemoveSha(service.Image))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -426,7 +426,7 @@ func (r Recipe) GetRecipeVersions() (RecipeVersions, []string, error) {
|
|||||||
versionMeta := make(map[string]ServiceMeta)
|
versionMeta := make(map[string]ServiceMeta)
|
||||||
for _, service := range config.Services {
|
for _, service := range config.Services {
|
||||||
|
|
||||||
img, err := reference.ParseNormalizedNamed(service.Image)
|
img, err := reference.ParseNormalizedNamed(formatter.RemoveSha(service.Image))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debug(i18n.G("failed to parse image for %s in %s: %s", service.Name, tag, err))
|
log.Debug(i18n.G("failed to parse image for %s in %s: %s", service.Name, tag, err))
|
||||||
warnMsg = append(warnMsg, i18n.G("skipping tag %s: invalid image reference in service %s: %s", tag, service.Name, err))
|
warnMsg = append(warnMsg, i18n.G("skipping tag %s: invalid image reference in service %s: %s", tag, service.Name, err))
|
||||||
|
|||||||
Reference in New Issue
Block a user