Skip to content

Commit

Permalink
Merge pull request #74 from concourse/image-args-fix
Browse files Browse the repository at this point in the history
Fix image args that are uppercase
  • Loading branch information
taylorsilva authored Oct 29, 2021
2 parents fc2ecc7 + 22a1715 commit 4bf5360
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 6 deletions.
19 changes: 13 additions & 6 deletions registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,19 @@ import (
"io"
"net"
"net/http"
"strings"

v1 "github.com/google/go-containerregistry/pkg/v1"
"github.com/google/go-containerregistry/pkg/v1/tarball"
"github.com/julienschmidt/httprouter"
"github.com/sirupsen/logrus"
)

type LocalRegistry map[string]v1.Image
type ImageArg struct {
Image v1.Image
ArgName string
}
type LocalRegistry map[string]ImageArg

func LoadRegistry(imagePaths map[string]string) (LocalRegistry, error) {
images := LocalRegistry{}
Expand All @@ -22,7 +27,7 @@ func LoadRegistry(imagePaths map[string]string) (LocalRegistry, error) {
return nil, fmt.Errorf("image from path: %w", err)
}

images[name] = image
images[strings.ToLower(name)] = ImageArg{Image: image, ArgName: name}
}

return images, nil
Expand Down Expand Up @@ -57,8 +62,8 @@ func ServeRegistry(reg LocalRegistry) (string, error) {

func (registry LocalRegistry) BuildArgs(port string) []string {
var buildArgs []string
for name := range registry {
buildArgs = append(buildArgs, fmt.Sprintf("%s=localhost:%s/%s", name, port, name))
for name, image := range registry {
buildArgs = append(buildArgs, fmt.Sprintf("%s=localhost:%s/%s", image.ArgName, port, name))
}

return buildArgs
Expand All @@ -72,11 +77,12 @@ func (registry LocalRegistry) GetManifest(w http.ResponseWriter, r *http.Request
"accept": r.Header["Accept"],
}).Debugf("get manifest for %s at %s", name, ref)

image, found := registry[name]
img, found := registry[name]
if !found {
w.WriteHeader(http.StatusNotFound)
return
}
image := img.Image

mt, err := image.MediaType()
if err != nil {
Expand Down Expand Up @@ -122,11 +128,12 @@ func (registry LocalRegistry) GetBlob(w http.ResponseWriter, r *http.Request, p
"accept": r.Header["Accept"],
}).Debugf("get blob %s", dig)

image, found := registry[name]
img, found := registry[name]
if !found {
w.WriteHeader(http.StatusNotFound)
return
}
image := img.Image

hash, err := v1.NewHash(dig)
if err != nil {
Expand Down
37 changes: 37 additions & 0 deletions task_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,43 @@ func (s *TaskSuite) TestImageArgs() {
}
}

func (s *TaskSuite) TestImageArgsWithUppercaseName() {
imagesDir, err := ioutil.TempDir("", "preload-images")
s.NoError(err)

defer os.RemoveAll(imagesDir)

image, err := random.Image(1024, 2)
s.NoError(err)
imagePath := filepath.Join(imagesDir, "first.tar")
err = tarball.WriteToFile(imagePath, nil, image)
s.NoError(err)

s.req.Config.ContextDir = "testdata/image-args"
s.req.Config.DockerfilePath = "testdata/image-args/Dockerfile.uppercase"
s.req.Config.ImageArgs = []string{
"FIRST_IMAGE=" + imagePath,
}
s.req.Config.UnpackRootfs = true

_, err = s.build()
s.NoError(err)

meta, err := s.imageMetadata("image")
s.NoError(err)

rootfsContent, err := ioutil.ReadFile(s.imagePath("rootfs", "Dockerfile.second"))
s.NoError(err)

expectedContent, err := ioutil.ReadFile("testdata/image-args/Dockerfile.uppercase")
s.NoError(err)

s.Equal(rootfsContent, expectedContent)

s.Equal(meta.User, "banana")
s.Equal(meta.Env, []string{"PATH=/darkness", "BA=nana"})
}

func (s *TaskSuite) TestImageArgsUnpack() {
imagesDir, err := ioutil.TempDir("", "preload-images")
s.NoError(err)
Expand Down
7 changes: 7 additions & 0 deletions testdata/image-args/Dockerfile.uppercase
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
ARG FIRST_IMAGE

FROM ${FIRST_IMAGE}
USER banana
ENV PATH=/darkness
ENV BA=nana
COPY Dockerfile.uppercase /Dockerfile.second

0 comments on commit 4bf5360

Please sign in to comment.